From b000709b6525c4a55ed30e48f36625a027bbf82f Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Thu, 31 Aug 2023 15:36:28 +0530 Subject: [PATCH 01/71] feat: tauri setup completed and @firecamp/desktop app initialised --- packages/firecamp-desktop/.gitignore | 24 + .../firecamp-desktop/.vscode/extensions.json | 3 + packages/firecamp-desktop/README.md | 7 + packages/firecamp-desktop/index.html | 14 + packages/firecamp-desktop/package.json | 25 + packages/firecamp-desktop/public/tauri.svg | 6 + packages/firecamp-desktop/public/vite.svg | 1 + .../firecamp-desktop/src-tauri/.gitignore | 4 + .../firecamp-desktop/src-tauri/Cargo.toml | 23 + packages/firecamp-desktop/src-tauri/build.rs | 3 + .../src-tauri/icons/128x128.png | Bin 0 -> 3512 bytes .../src-tauri/icons/128x128@2x.png | Bin 0 -> 7012 bytes .../src-tauri/icons/32x32.png | Bin 0 -> 974 bytes .../src-tauri/icons/Square107x107Logo.png | Bin 0 -> 2863 bytes .../src-tauri/icons/Square142x142Logo.png | Bin 0 -> 3858 bytes .../src-tauri/icons/Square150x150Logo.png | Bin 0 -> 3966 bytes .../src-tauri/icons/Square284x284Logo.png | Bin 0 -> 7737 bytes .../src-tauri/icons/Square30x30Logo.png | Bin 0 -> 903 bytes .../src-tauri/icons/Square310x310Logo.png | Bin 0 -> 8591 bytes .../src-tauri/icons/Square44x44Logo.png | Bin 0 -> 1299 bytes .../src-tauri/icons/Square71x71Logo.png | Bin 0 -> 2011 bytes .../src-tauri/icons/Square89x89Logo.png | Bin 0 -> 2468 bytes .../src-tauri/icons/StoreLogo.png | Bin 0 -> 1523 bytes .../src-tauri/icons/icon.icns | Bin 0 -> 98451 bytes .../firecamp-desktop/src-tauri/icons/icon.ico | Bin 0 -> 86642 bytes .../firecamp-desktop/src-tauri/icons/icon.png | Bin 0 -> 14183 bytes ...-ice-2023-08-29T12:21:32.539513Z-24344.txt | 0 .../firecamp-desktop/src-tauri/src/main.rs | 15 + .../src-tauri/tauri.conf.json | 39 + packages/firecamp-desktop/src/App.css | 7 + packages/firecamp-desktop/src/App.tsx | 53 ++ .../firecamp-desktop/src/assets/react.svg | 1 + packages/firecamp-desktop/src/main.tsx | 10 + packages/firecamp-desktop/src/styles.css | 109 +++ packages/firecamp-desktop/tsconfig.json | 25 + packages/firecamp-desktop/tsconfig.node.json | 10 + packages/firecamp-desktop/vite.config.ts | 20 + pnpm-lock.yaml | 797 +++++++++++++++++- 38 files changed, 1156 insertions(+), 40 deletions(-) create mode 100644 packages/firecamp-desktop/.gitignore create mode 100644 packages/firecamp-desktop/.vscode/extensions.json create mode 100644 packages/firecamp-desktop/README.md create mode 100644 packages/firecamp-desktop/index.html create mode 100644 packages/firecamp-desktop/package.json create mode 100644 packages/firecamp-desktop/public/tauri.svg create mode 100644 packages/firecamp-desktop/public/vite.svg create mode 100644 packages/firecamp-desktop/src-tauri/.gitignore create mode 100644 packages/firecamp-desktop/src-tauri/Cargo.toml create mode 100644 packages/firecamp-desktop/src-tauri/build.rs create mode 100644 packages/firecamp-desktop/src-tauri/icons/128x128.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/128x128@2x.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/32x32.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/Square107x107Logo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/Square142x142Logo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/Square150x150Logo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/Square284x284Logo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/Square30x30Logo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/Square310x310Logo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/Square44x44Logo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/Square71x71Logo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/Square89x89Logo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/StoreLogo.png create mode 100644 packages/firecamp-desktop/src-tauri/icons/icon.icns create mode 100644 packages/firecamp-desktop/src-tauri/icons/icon.ico create mode 100644 packages/firecamp-desktop/src-tauri/icons/icon.png create mode 100644 packages/firecamp-desktop/src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt create mode 100644 packages/firecamp-desktop/src-tauri/src/main.rs create mode 100644 packages/firecamp-desktop/src-tauri/tauri.conf.json create mode 100644 packages/firecamp-desktop/src/App.css create mode 100644 packages/firecamp-desktop/src/App.tsx create mode 100644 packages/firecamp-desktop/src/assets/react.svg create mode 100644 packages/firecamp-desktop/src/main.tsx create mode 100644 packages/firecamp-desktop/src/styles.css create mode 100644 packages/firecamp-desktop/tsconfig.json create mode 100644 packages/firecamp-desktop/tsconfig.node.json create mode 100644 packages/firecamp-desktop/vite.config.ts diff --git a/packages/firecamp-desktop/.gitignore b/packages/firecamp-desktop/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/packages/firecamp-desktop/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/firecamp-desktop/.vscode/extensions.json b/packages/firecamp-desktop/.vscode/extensions.json new file mode 100644 index 000000000..24d7cc6de --- /dev/null +++ b/packages/firecamp-desktop/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] +} diff --git a/packages/firecamp-desktop/README.md b/packages/firecamp-desktop/README.md new file mode 100644 index 000000000..102e36689 --- /dev/null +++ b/packages/firecamp-desktop/README.md @@ -0,0 +1,7 @@ +# Tauri + React + Typescript + +This template should help get you started developing with Tauri, React and Typescript in Vite. + +## Recommended IDE Setup + +- [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) diff --git a/packages/firecamp-desktop/index.html b/packages/firecamp-desktop/index.html new file mode 100644 index 000000000..03abf55f9 --- /dev/null +++ b/packages/firecamp-desktop/index.html @@ -0,0 +1,14 @@ + + + + + + + Tauri + React + TS + + + +
+ + + diff --git a/packages/firecamp-desktop/package.json b/packages/firecamp-desktop/package.json new file mode 100644 index 000000000..41a8b277c --- /dev/null +++ b/packages/firecamp-desktop/package.json @@ -0,0 +1,25 @@ +{ + "name": "firecamp-desktop", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "tauri": "tauri" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "@tauri-apps/api": "^1.4.0" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react": "^4.0.3", + "typescript": "^5.0.2", + "vite": "^4.4.4", + "@tauri-apps/cli": "2.0.0-alpha.9" + } +} diff --git a/packages/firecamp-desktop/public/tauri.svg b/packages/firecamp-desktop/public/tauri.svg new file mode 100644 index 000000000..31b62c928 --- /dev/null +++ b/packages/firecamp-desktop/public/tauri.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/firecamp-desktop/public/vite.svg b/packages/firecamp-desktop/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/firecamp-desktop/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/firecamp-desktop/src-tauri/.gitignore b/packages/firecamp-desktop/src-tauri/.gitignore new file mode 100644 index 000000000..f4dfb82b2 --- /dev/null +++ b/packages/firecamp-desktop/src-tauri/.gitignore @@ -0,0 +1,4 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + diff --git a/packages/firecamp-desktop/src-tauri/Cargo.toml b/packages/firecamp-desktop/src-tauri/Cargo.toml new file mode 100644 index 000000000..82ed40e38 --- /dev/null +++ b/packages/firecamp-desktop/src-tauri/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "firecamp-desktop" +version = "0.0.0" +description = "A Tauri App" +authors = ["you"] +license = "" +repository = "" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[build-dependencies] +tauri-build = { version = "2.0.0-alpha.5", features = [] } + +[dependencies] +tauri = { version = "2.0.0-alpha.9", features = [] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" + +[features] +# this feature is used for production builds or when `devPath` points to the filesystem +# DO NOT REMOVE!! +custom-protocol = ["tauri/custom-protocol"] diff --git a/packages/firecamp-desktop/src-tauri/build.rs b/packages/firecamp-desktop/src-tauri/build.rs new file mode 100644 index 000000000..795b9b7c8 --- /dev/null +++ b/packages/firecamp-desktop/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/packages/firecamp-desktop/src-tauri/icons/128x128.png b/packages/firecamp-desktop/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..6be5e50e9b9ae84d9e2ee433f32ef446495eaf3b GIT binary patch literal 3512 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 literal 0 HcmV?d00001 diff --git a/packages/firecamp-desktop/src-tauri/icons/128x128@2x.png b/packages/firecamp-desktop/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e81becee571e96f76aa5667f9324c05e5e7a4479 GIT binary patch literal 7012 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 Sh@|Ye~|0>}wMPLT8jm@Y!H33Sz}5aFI6 zM9Lzqz|;A*0sGs=2A1uU!1nk2dGF7knQwr99SAFen)x(eCO;F8y2C~0FD1YxRTPcy zPWVxkUYmeuz}Tv?7&Fe-!UE{)ZW)Mb;H)^#eHDv$`dkZGguJz@^MA!ZNGAUqt{|0H zpZ7Ch9S`q5!>R%}>}62!+(T^evyO+ImSo2wpu)su4^3nw5(%)KD%gbSev^*HZZ&3( z#&c@Z0gH|}Ck)w6fh0&NBJ62ib%R}(3@$VFl*_#l2W$wQ-~4RmZZAt5O*^2Q5}Xr8Hy@c`#pM?kc?hFWxRXr*mUfUCXf4ka5DD~ zat6d85COB05l#(P9*cQZ3EC8fVdS~?&vN#rce(aF9@xp80O2{{FBvU+{X>Hoh;xI` z{$e^Nw1y*VbO8wv`8|-m?NwNaKGTGaF{P^JLB^DbOYWIbn%eT`*!^C1H36=O8Z-M> zkD~88ry`eSo`tEBN4>w7OWZwUzlh{WM1m8R6zepqGcGMaV7vWY9b?K4b6~|HVG)ec wi>I@ws#sZo7or4_*4M>7;p5{nr2pZ?Uu4>Krr0kU)&Kwi07*qoM6N<$f)&@lf&c&j literal 0 HcmV?d00001 diff --git a/packages/firecamp-desktop/src-tauri/icons/Square107x107Logo.png b/packages/firecamp-desktop/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca4f27198838968bd60ed7d371bfa23496b7fe5 GIT binary patch literal 2863 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 Y2S8W#vM)6=T>t<807*qoM6N<$f*y@n<^TWy literal 0 HcmV?d00001 diff --git a/packages/firecamp-desktop/src-tauri/icons/Square284x284Logo.png b/packages/firecamp-desktop/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c021d2ba76619c08969ab688db3b27f29257aa6f GIT binary patch literal 7737 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 literal 0 HcmV?d00001 diff --git a/packages/firecamp-desktop/src-tauri/icons/Square30x30Logo.png b/packages/firecamp-desktop/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..621970023096ed9f494ba18ace15421a45cd65fa GIT binary patch literal 903 zcmV;219<$2P)2 z+CUKPMqaqGiH;zb!R4$B-WXS^YzQr=@UH>k4?*L)&R=zYjBrZenKdc9|JlS$SO*RJ zKt8FSTDAdk1g_WPAO!p^V!AuL;Lm;uQyV;zKq)J3i(;q*;k+pD%f3eltU`PYdy9(k0&%` zuWAPcV6|-y?|?7O1W!KSK}pbk8#~!|FA@(VJkt^V@0lio{afoAeo*f&$W2s6${5!1eKvAGD2$GZwSB98L2ZVS- zKn8ENRkZ*sb!@QugOrQNK3(sy1v%J#m|rpB+h|Nkqa3FRT>74xSs{#&saU2Lf!_Iq zKmuKAESh`gs!fneGWn+nf}l?7jE$HW!Af&vE5=G!QU)U2v&HLIBGXKk4nQx{hsHjL zLPMAo5=*uInFbq7(aa`Y2VX5wCmaeqvECOFv)a>0t>ZaEb*cJccER=BB?KFZhV$c^ znL*l8x*UYZv4WK|j?~Jt6~~F%{pk~z5A*>^M`?r5m9@RJ_x|uEtX(6Vk@Y()MVto* z93wr)%3m%|#OZ~srm>zF(JvDuTq*@;d&^>_BJm5hOU`3FjG70L#Vzv9I?`<7$T@

jU?lMi@tgxr7CqX_r3uw^y4tVU3Pm0sw;|1WSUO%?=bG`*Kmz6u4{#ti;T7AWIBAEh!(Y zz>O01&#X?Ds@L)Sb{CkG#Yz4$3o d@96)?#cz^xWoA}>B$xmI002ovPDHLkV1l3&k#zt7 literal 0 HcmV?d00001 diff --git a/packages/firecamp-desktop/src-tauri/icons/Square310x310Logo.png b/packages/firecamp-desktop/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bc04839491e66c07b16ab03743c0c53b4109cc GIT binary patch literal 8591 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 JPDHLkV1lm|RXG3v literal 0 HcmV?d00001 diff --git a/packages/firecamp-desktop/src-tauri/icons/Square71x71Logo.png b/packages/firecamp-desktop/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..63440d7984936a9caa89275928d8dce97e4d033b GIT binary patch literal 2011 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∓t$dRJGIadE?vc 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 Kx8Vjl{{H|h@<;Lj literal 0 HcmV?d00001 diff --git a/packages/firecamp-desktop/src-tauri/icons/icon.ico b/packages/firecamp-desktop/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b3636e4b22ba65db9061cd60a77b02c92022dfd6 GIT binary patch literal 86642 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 AKmY&$ literal 0 HcmV?d00001 diff --git a/packages/firecamp-desktop/src-tauri/icons/icon.png b/packages/firecamp-desktop/src-tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e1cd2619e0b5ec089cbba5ec7b03ddf2b1dfceb6 GIT binary patch literal 14183 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

5l#v3A#xI3*z~1~fvo9Q(N^(==!|_FZ z*duZ=+M1~)8E|otX8KNZlr?qels#x_1Xq@9IIw~@9uAREJVH)Xw^}UclF6327}E42 zT)E&?U%TK?(+K7%R!`H5oX0i)4Qn5??Iw3p5J~6_u+aWehY{DSn}3V2p$bgjnAu?o)v@iC254fXeMv50$9YrpU`N?u@QIWs)T?SP|fa}(|9 zqAX+!7`cx=4)cCBg5h~pu(?@9`)aCr#oyz$ld=#RFxYCNZCZls@4v2~*e-t6PEVvV z&bbK3b3wt(Coc!ufAbXXC<**#HQ%J9k`New6iG<5RjtO4XVO?dCvwxD{kJ#tfQr(X zg^NTwF-FwAeS_{V4bfel8l`~NbfrTR2s!G>WduFWxH(t~aK4q=6rEE^$+Uox>gJO2 z{L<;6Q6nHa5#ZEM>H58not!)z(6*_=^~8}jWf*IG$AUKVWOZ4?)GfF z+BM#*wKKmLFD7E~W3U!$IVm$k_k1f&Kz6WV8@55P?r~bcg-Za-!rvW?ns&)KOGT2~ zlkAyqhQj=P$Eg3w#K~}zH@J5bo-BfHjInKSz$@?+Z)NPD4pHj^_Qxmi`UqoTy=`sV zLVxrXGuBr=QRm|}wg75yetQQK4fY3#P_~J}zEfPnb2C4Wo!E(d*(cA;b?7$g2in<( zPn)ghX}nzJPmb6(3Dpeg_GW~Hc}Lt=lgsSZz z!5QXyz7KaR;D`3Ee}d`af{H>WWZ|Io1QI3~4Ll_`g1(cRnhLK73Ro)7zPCd={1W2x zRp%Xlvv4>!<2@}$hz|!V{T}_eHx2xkLl^hQoZTCnsjCl|W_@5Fx2(+j0ogy&Y+;L- z<)G$*CiN7hOm^s!{U>1F7U=iNk{+u~dAC!eDz%=|glFW0jEZU1&o(G_c#wTxUjnG} z#cg3>jEpUi#Mlq@t?Msg_#geK^Lx@DyHWf7=AS5vVyM7YOjvUVCfcpVR<(+5!H?9- zySI6s>o3m&*zr||=wcPGyBkQV`EWJl@bH8qobjOp+sXL*)=&yX)8aAbf~tGv?a2SN zu^Ddo-z?DWk9h9Yz#5p^NU#x~wYSd?H@w@!2Gb4G)6-utEMV~~M85Br5ff(v5O1|T z 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 String { + format!("Hello, {}! You've been greeted from Rust!", name) +} + +fn main() { + tauri::Builder::default() + .invoke_handler(tauri::generate_handler![greet]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/packages/firecamp-desktop/src-tauri/tauri.conf.json b/packages/firecamp-desktop/src-tauri/tauri.conf.json new file mode 100644 index 000000000..3b7329100 --- /dev/null +++ b/packages/firecamp-desktop/src-tauri/tauri.conf.json @@ -0,0 +1,39 @@ +{ + "build": { + "beforeDevCommand": "pnpm dev", + "beforeBuildCommand": "pnpm build", + "devPath": "http://localhost:3000", + "distDir": "../dist", + "withGlobalTauri": false + }, + "package": { + "productName": "firecamp-desktop", + "version": "0.0.0" + }, + "tauri": { + "bundle": { + "active": true, + "targets": "all", + "identifier": "com.tauri.dev", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] + }, + "security": { + "csp": null + }, + "windows": [ + { + "fullscreen": false, + "resizable": true, + "title": "firecamp-desktop", + "width": 800, + "height": 600 + } + ] + } +} diff --git a/packages/firecamp-desktop/src/App.css b/packages/firecamp-desktop/src/App.css new file mode 100644 index 000000000..a89ebd15d --- /dev/null +++ b/packages/firecamp-desktop/src/App.css @@ -0,0 +1,7 @@ +.logo.vite:hover { + filter: drop-shadow(0 0 2em #747bff); +} + +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafb); +} diff --git a/packages/firecamp-desktop/src/App.tsx b/packages/firecamp-desktop/src/App.tsx new file mode 100644 index 000000000..a44991506 --- /dev/null +++ b/packages/firecamp-desktop/src/App.tsx @@ -0,0 +1,53 @@ +import { useState } from "react"; +import reactLogo from "./assets/react.svg"; +import { invoke } from "@tauri-apps/api/tauri"; +import "./App.css"; + +function App() { + const [greetMsg, setGreetMsg] = useState(""); + const [name, setName] = useState(""); + + async function greet() { + // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command + setGreetMsg(await invoke("greet", { name })); + } + + return ( +

+

Welcome to Tauri!

+ +
+ +

Click on the Tauri, Vite, and React logos to learn more.

+ +
{ + e.preventDefault(); + greet(); + }} + > + setName(e.currentTarget.value)} + placeholder="Enter a name..." + /> + +
+ +

{greetMsg}

+
+ ); +} + +export default App; diff --git a/packages/firecamp-desktop/src/assets/react.svg b/packages/firecamp-desktop/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/packages/firecamp-desktop/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/firecamp-desktop/src/main.tsx b/packages/firecamp-desktop/src/main.tsx new file mode 100644 index 000000000..81da3460b --- /dev/null +++ b/packages/firecamp-desktop/src/main.tsx @@ -0,0 +1,10 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App"; +import "./styles.css"; + +ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( + + + , +); diff --git a/packages/firecamp-desktop/src/styles.css b/packages/firecamp-desktop/src/styles.css new file mode 100644 index 000000000..f7de85bf0 --- /dev/null +++ b/packages/firecamp-desktop/src/styles.css @@ -0,0 +1,109 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color: #0f0f0f; + background-color: #f6f6f6; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +.container { + margin: 0; + padding-top: 10vh; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: 0.75s; +} + +.logo.tauri:hover { + filter: drop-shadow(0 0 2em #24c8db); +} + +.row { + display: flex; + justify-content: center; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} + +a:hover { + color: #535bf2; +} + +h1 { + text-align: center; +} + +input, +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + color: #0f0f0f; + background-color: #ffffff; + transition: border-color 0.25s; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); +} + +button { + cursor: pointer; +} + +button:hover { + border-color: #396cd8; +} +button:active { + border-color: #396cd8; + background-color: #e8e8e8; +} + +input, +button { + outline: none; +} + +#greet-input { + margin-right: 5px; +} + +@media (prefers-color-scheme: dark) { + :root { + color: #f6f6f6; + background-color: #2f2f2f; + } + + a:hover { + color: #24c8db; + } + + input, + button { + color: #ffffff; + background-color: #0f0f0f98; + } + button:active { + background-color: #0f0f0f69; + } +} diff --git a/packages/firecamp-desktop/tsconfig.json b/packages/firecamp-desktop/tsconfig.json new file mode 100644 index 000000000..a7fc6fbf2 --- /dev/null +++ b/packages/firecamp-desktop/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/packages/firecamp-desktop/tsconfig.node.json b/packages/firecamp-desktop/tsconfig.node.json new file mode 100644 index 000000000..42872c59f --- /dev/null +++ b/packages/firecamp-desktop/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/firecamp-desktop/vite.config.ts b/packages/firecamp-desktop/vite.config.ts new file mode 100644 index 000000000..e884c4be6 --- /dev/null +++ b/packages/firecamp-desktop/vite.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; + +// https://vitejs.dev/config/ +export default defineConfig(async () => ({ + plugins: [react()], + + // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` + // + // 1. prevent vite from obscuring rust errors + clearScreen: false, + // 2. tauri expects a fixed port, fail if that port is not available + server: { + port: 1420, + strictPort: true, + }, + // 3. to make use of `TAURI_DEBUG` and other env variables + // https://tauri.studio/v1/api/config#buildconfig.beforedevcommand + envPrefix: ["VITE_", "TAURI_"], +})); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 324883912..fc883b1c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@react-icons/all-files': specifier: ^4.1.0 - version: 4.1.0(react@17.0.2) + version: 4.1.0(react@18.2.0) dotenv: specifier: ^16.0.1 version: 16.0.3 @@ -19,7 +19,7 @@ importers: version: 0.7.0 lucide-react: specifier: ^0.264.0 - version: 0.264.0(react@17.0.2) + version: 0.264.0(react@18.2.0) devDependencies: '@babel/core': specifier: ^7.17.8 @@ -273,7 +273,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.11.18)(typescript@5.0.2) @@ -452,7 +452,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4) + version: 28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.0.3)(typescript@4.7.4) @@ -522,7 +522,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.11.18)(typescript@5.0.2) @@ -533,6 +533,37 @@ importers: specifier: ^5.0.2 version: 5.0.2 + packages/firecamp-desktop: + dependencies: + '@tauri-apps/api': + specifier: ^1.4.0 + version: 1.4.0 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@tauri-apps/cli': + specifier: 2.0.0-alpha.9 + version: 2.0.0-alpha.9 + '@types/react': + specifier: ^18.2.15 + version: 18.2.15 + '@types/react-dom': + specifier: ^18.2.7 + version: 18.2.7 + '@vitejs/plugin-react': + specifier: ^4.0.3 + version: 4.0.3(vite@4.4.4) + typescript: + specifier: ^5.0.2 + version: 5.0.2 + vite: + specifier: ^4.4.4 + version: 4.4.4(@types/node@16.18.40)(sass@1.57.1) + packages/firecamp-echo-server: dependencies: '@nestjs/common': @@ -631,7 +662,7 @@ importers: version: 6.2.4 ts-jest: specifier: 28.0.5 - version: 28.0.5(@babel/core@7.20.12)(jest@28.1.2)(typescript@4.7.4) + version: 28.0.5(@babel/core@7.22.11)(jest@28.1.2)(typescript@4.7.4) ts-loader: specifier: 9.3.1 version: 9.3.1(typescript@4.7.4)(webpack@5.75.0) @@ -761,7 +792,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1220,7 +1251,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1401,7 +1432,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@16.18.23)(typescript@5.0.2) @@ -1531,7 +1562,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1649,7 +1680,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1731,7 +1762,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1846,7 +1877,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1928,7 +1959,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -2042,17 +2073,30 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 + dev: true + + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.13 + chalk: 2.4.2 /@babel/compat-data@7.20.10: resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} engines: {node: '>=6.9.0'} dev: true + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/core@7.12.9: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 '@babel/generator': 7.20.7 '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.20.13 @@ -2095,6 +2139,29 @@ packages: - supports-color dev: true + /@babel/core@7.22.11: + resolution: {integrity: sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.10 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) + '@babel/helpers': 7.22.11 + '@babel/parser': 7.22.13 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.11 + '@babel/types': 7.22.11 + convert-source-map: 1.9.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/eslint-parser@7.19.1(@babel/core@7.20.12)(eslint@7.32.0): resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -2132,6 +2199,16 @@ packages: jsesc: 2.5.2 dev: true + /@babel/generator@7.22.10: + resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 + dev: true + /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} @@ -2161,6 +2238,17 @@ packages: semver: 6.3.0 dev: true + /@babel/helper-compilation-targets@7.22.10: + resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.10 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + /@babel/helper-create-class-features-plugin@7.20.12(@babel/core@7.20.12): resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==} engines: {node: '>=6.9.0'} @@ -2230,6 +2318,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} @@ -2245,6 +2338,14 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.11 + dev: true + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} @@ -2252,6 +2353,13 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + dev: true + /@babel/helper-member-expression-to-functions@7.20.7: resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} engines: {node: '>=6.9.0'} @@ -2264,6 +2372,13 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 + dev: true + + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 /@babel/helper-module-transforms@7.20.11: resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} @@ -2281,6 +2396,20 @@ packages: - supports-color dev: true + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + dev: true + /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} @@ -2297,6 +2426,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} @@ -2333,6 +2467,13 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + dev: true + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} @@ -2347,19 +2488,41 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + dev: true + /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} /@babel/helper-validator-option@7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} @@ -2383,11 +2546,31 @@ packages: - supports-color dev: true + /@babel/helpers@7.22.11: + resolution: {integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.11 + '@babel/types': 7.22.11 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/highlight@7.22.13: + resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 @@ -2399,6 +2582,14 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/parser@7.22.13: + resolution: {integrity: sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.11 + dev: true + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -3177,6 +3368,26 @@ packages: '@babel/plugin-transform-react-jsx': 7.20.13(@babel/core@7.20.12) dev: true + /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.11): + resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.11): + resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-transform-react-jsx@7.20.13(@babel/core@7.20.12): resolution: {integrity: sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==} engines: {node: '>=6.9.0'} @@ -3513,11 +3724,20 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.22.13 + '@babel/types': 7.22.11 + dev: true + /@babel/traverse@7.20.13: resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 '@babel/generator': 7.20.7 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 @@ -3531,6 +3751,24 @@ packages: - supports-color dev: true + /@babel/traverse@7.22.11: + resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.10 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.13 + '@babel/types': 7.22.11 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.20.7: resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} @@ -3538,6 +3776,15 @@ packages: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + dev: true + + /@babel/types@7.22.11: + resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -3796,7 +4043,7 @@ packages: /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.22.5 '@babel/runtime': 7.22.10 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 @@ -3891,6 +4138,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.17.18: resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} engines: {node: '>=12'} @@ -3900,6 +4156,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.17.18: resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} engines: {node: '>=12'} @@ -3909,6 +4174,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.17.18: resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} engines: {node: '>=12'} @@ -3918,6 +4192,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.17.18: resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} engines: {node: '>=12'} @@ -3927,6 +4210,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.17.18: resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} engines: {node: '>=12'} @@ -3936,6 +4228,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.17.18: resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} engines: {node: '>=12'} @@ -3945,6 +4246,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.17.18: resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} engines: {node: '>=12'} @@ -3954,6 +4264,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.17.18: resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} engines: {node: '>=12'} @@ -3963,6 +4282,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.17.18: resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} engines: {node: '>=12'} @@ -3972,6 +4300,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.17.18: resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} engines: {node: '>=12'} @@ -3981,6 +4318,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.17.18: resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} engines: {node: '>=12'} @@ -3990,6 +4336,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.17.18: resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} engines: {node: '>=12'} @@ -3999,6 +4354,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.17.18: resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} engines: {node: '>=12'} @@ -4008,6 +4372,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.17.18: resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} engines: {node: '>=12'} @@ -4017,6 +4390,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.17.18: resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} engines: {node: '>=12'} @@ -4026,6 +4408,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.17.18: resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} engines: {node: '>=12'} @@ -4035,6 +4426,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.17.18: resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} engines: {node: '>=12'} @@ -4044,6 +4444,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.17.18: resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} engines: {node: '>=12'} @@ -4053,6 +4462,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.17.18: resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} engines: {node: '>=12'} @@ -4062,6 +4480,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.17.18: resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} engines: {node: '>=12'} @@ -4071,6 +4498,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.17.18: resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} engines: {node: '>=12'} @@ -4080,6 +4516,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc@0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -6594,12 +7039,12 @@ packages: '@babel/runtime': 7.20.13 dev: false - /@react-icons/all-files@4.1.0(react@17.0.2): + /@react-icons/all-files@4.1.0(react@18.2.0): resolution: {integrity: sha512-hxBI2UOuVaI3O/BhQfhtb4kcGn9ft12RWAFVMUeNjqqhLsHvFtzIkFaptBJpFDANTKoDfdVoHTKZDlwKCACbMQ==} peerDependencies: react: '*' dependencies: - react: 17.0.2 + react: 18.2.0 dev: false /@sentry/browser@7.28.1: @@ -8392,6 +8837,108 @@ packages: engines: {node: '>=12'} dev: false + /@tauri-apps/api@1.4.0: + resolution: {integrity: sha512-Jd6HPoTM1PZSFIzq7FB8VmMu3qSSyo/3lSwLpoapW+lQ41CL5Dow2KryLg+gyazA/58DRWI9vu/XpEeHK4uMdw==} + engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} + dev: false + + /@tauri-apps/cli-darwin-arm64@2.0.0-alpha.9: + resolution: {integrity: sha512-h7AQY4MbHyy7CLANfoegJyaypKQ3fYPlBA3mnhtF+zntrMxVTv+HO9sgn98jGnwlOak8y0NPPKJ6gZFu5GYiNg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-darwin-x64@2.0.0-alpha.9: + resolution: {integrity: sha512-8RtvzZ4/1gZU8SvMaCygtjc9Q0bMnA0NuQKOMrehRfpvvy2gw/q8MMdw3WEawYGQHqEbr6YtNJmaR5wlsVk+IQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-alpha.9: + resolution: {integrity: sha512-nHAgFEJ2DXXEx96FLPnqZ9vfFGw7Hr2ZaY+xy28llXWljCOguWi8wdHv4OMnq0hbOkegVGplYPc4RSQ5uUia2Q==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-arm64-gnu@2.0.0-alpha.9: + resolution: {integrity: sha512-ETmUoTp+UgHypPpsq3OYwbcmX8MqjCGIUAzDHoVFpYuj2oqHw0ZaCx2lQPTnqW5G5L9X9VXhMAcRB8OBZG5KFw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-arm64-musl@2.0.0-alpha.9: + resolution: {integrity: sha512-S55E2u4LsQajoxkpYqd2skPEVG5hp+Mkhhnixfi+87q87n9iIvIqcH+4ejDXAPUrWNMsRKIWVURV2ZzivqK5Kw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-x64-gnu@2.0.0-alpha.9: + resolution: {integrity: sha512-/0J5sJDu+cSrj67L4Q4FVANe1ffpsz3LZMQRkbWmT2ggd2Mxg8LZBtg7y5ysMfJg8xjKvymi+1mS2yU1B7/k9Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-x64-musl@2.0.0-alpha.9: + resolution: {integrity: sha512-zjtf5H3c4amlBjIdDiQ3pmiMV/cmcPxaiH4KgyRD6NZXY9+gDk5dkzj3WAWegiD1ycz3bv5INO/tDxjk5ZSYlw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-win32-ia32-msvc@2.0.0-alpha.9: + resolution: {integrity: sha512-Hn0xDaEEMeXRzWCtew2MIYDky8hF+BOos0PP4qyCX14LfChpgSIT0aMYC8xbSfj9N9pwznhNBxgOtCADaTPWcg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-win32-x64-msvc@2.0.0-alpha.9: + resolution: {integrity: sha512-541nR7UoasX/fnEWhC14H4Ppj17Aa1fbCyFb9+zmWjupVkEGf/yQFvdWRHdmCkgOdGuxPahR5hbOPh+jvaklFw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli@2.0.0-alpha.9: + resolution: {integrity: sha512-roQNpFC3Ijni/c7TCkCpUg3gWKfxs1ftWSQJyCthqIPRM5J7I2vOfhcUXIZw9glrxDp5npyRW0xYyI7W/424uQ==} + engines: {node: '>= 10'} + hasBin: true + optionalDependencies: + '@tauri-apps/cli-darwin-arm64': 2.0.0-alpha.9 + '@tauri-apps/cli-darwin-x64': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-arm64-musl': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-x64-gnu': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-x64-musl': 2.0.0-alpha.9 + '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-alpha.9 + '@tauri-apps/cli-win32-x64-msvc': 2.0.0-alpha.9 + dev: true + /@testing-library/dom@8.20.0: resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==} engines: {node: '>=12'} @@ -8915,6 +9462,12 @@ packages: '@types/react': 17.0.53 dev: true + /@types/react-dom@18.2.7: + resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + dependencies: + '@types/react': 18.2.15 + dev: true + /@types/react-table@7.7.14: resolution: {integrity: sha512-TYrv7onCiakaG1uAu/UpQ9FojNEt/4/ht87EgJQaEGFoWV606ZLWUZAcUHzMxgc3v1mywP1cDyz3qB4ho3hWOw==} dependencies: @@ -8928,6 +9481,14 @@ packages: '@types/scheduler': 0.16.2 csstype: 3.1.1 + /@types/react@18.2.15: + resolution: {integrity: sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: true + /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: @@ -9569,6 +10130,21 @@ packages: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true + /@vitejs/plugin-react@4.0.3(vite@4.4.4): + resolution: {integrity: sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 + dependencies: + '@babel/core': 7.22.11 + '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.11) + '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.11) + react-refresh: 0.14.0 + vite: 4.4.4(@types/node@16.18.40)(sass@1.57.1) + transitivePeerDependencies: + - supports-color + dev: true + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: @@ -11378,6 +11954,17 @@ packages: pako: 1.0.11 dev: true + /browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001524 + electron-to-chromium: 1.4.504 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.10) + dev: true + /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -11710,6 +12297,10 @@ packages: /caniuse-lite@1.0.30001477: resolution: {integrity: sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ==} + /caniuse-lite@1.0.30001524: + resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==} + dev: true + /capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -13855,6 +14446,10 @@ packages: /electron-to-chromium@1.4.356: resolution: {integrity: sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==} + /electron-to-chromium@1.4.504: + resolution: {integrity: sha512-cSMwIAd8yUh54VwitVRVvHK66QqHWE39C3DRj8SWiXitEpVSY3wNPD9y1pxQtLIi4w3UdzF9klLsmuPshz09DQ==} + dev: true + /element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} dependencies: @@ -14363,6 +14958,36 @@ packages: '@esbuild/win32-x64': 0.17.18 dev: true + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -15962,7 +16587,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 chalk: 2.4.2 eslint: 8.32.0 micromatch: 3.1.10 @@ -15990,7 +16615,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 '@types/json-schema': 7.0.11 chalk: 4.1.2 chokidar: 3.5.3 @@ -16022,7 +16647,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 '@types/json-schema': 7.0.11 chalk: 4.1.2 chokidar: 3.5.3 @@ -19431,7 +20056,7 @@ packages: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 '@jest/types': 29.6.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -19446,7 +20071,7 @@ packages: resolution: {integrity: sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 '@jest/types': 29.6.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -21015,12 +21640,12 @@ packages: engines: {node: 14 || >=16.14} dev: true - /lucide-react@0.264.0(react@17.0.2): + /lucide-react@0.264.0(react@18.2.0): resolution: {integrity: sha512-BmQTimZDhAy2vH9aCeQa+TLrkWwWd8FP5GRMoK3hKEvO1eS/llGXe4RxrZGSTdOjhw1JuDLpvtS8VmNCKxhL5A==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 dependencies: - react: 17.0.2 + react: 18.2.0 dev: false /lunr@2.3.9: @@ -22154,6 +22779,10 @@ packages: /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + /node.extend@2.0.2: resolution: {integrity: sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==} engines: {node: '>=0.4.0'} @@ -23072,7 +23701,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -24219,7 +24848,7 @@ packages: peerDependencies: react-dom: ^15.4.2 dependencies: - react-dom: 15.7.0(react@17.0.2) + react-dom: 15.7.0(react@18.2.0) dev: true /react-aspen@0.0.1-alpha.1(react-window@1.8.8)(react@17.0.2): @@ -24278,7 +24907,7 @@ packages: - supports-color dev: true - /react-dom@15.7.0(react@17.0.2): + /react-dom@15.7.0(react@18.2.0): resolution: {integrity: sha512-mpjXqC2t1FuYsILOLCj0kg6pbg460byZkVA/80VtDmKU/pYmoTdHOtaMcTRIDiyXLz4sIur0cQ04nOC6iGndJg==} peerDependencies: react: ^15.7.0 @@ -24287,7 +24916,7 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 prop-types: 15.8.1 - react: 17.0.2 + react: 18.2.0 dev: true /react-dom@17.0.2(react@17.0.2): @@ -24300,6 +24929,16 @@ packages: react: 17.0.2 scheduler: 0.20.2 + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + /react-dropzone@14.2.3(react@17.0.2): resolution: {integrity: sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==} engines: {node: '>= 10.13'} @@ -24441,6 +25080,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: true + /react-remove-scroll-bar@2.3.4(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} @@ -24580,6 +25224,12 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + /read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: @@ -25208,6 +25858,14 @@ packages: fsevents: 2.3.2 dev: true + /rollup@3.28.1: + resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rsvp@4.8.5: resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} engines: {node: 6.* || >= 7.*} @@ -25368,6 +26026,12 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + /schema-utils@1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} engines: {node: '>= 4'} @@ -25446,6 +26110,11 @@ packages: hasBin: true dev: true + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} @@ -27055,7 +27724,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.17 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.1 @@ -27335,7 +28004,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@28.0.5(@babel/core@7.20.12)(jest@28.1.2)(typescript@4.7.4): + /ts-jest@28.0.5(@babel/core@7.22.11)(jest@28.1.2)(typescript@4.7.4): resolution: {integrity: sha512-Sx9FyP9pCY7pUzQpy4FgRZf2bhHY3za576HMKJFs+OnQ9jS96Du5vNsDKkyedQkik+sEabbKAnCliv9BEsHZgQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -27353,7 +28022,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.22.11 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 28.1.2(@types/node@18.0.3)(ts-node@10.8.2) @@ -27366,7 +28035,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4): + /ts-jest@28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -27387,7 +28056,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.22.11 bs-logger: 0.2.6 esbuild: 0.17.18 fast-json-stable-stringify: 2.1.0 @@ -27401,7 +28070,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2): + /ts-jest@28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -27422,7 +28091,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.22.11 bs-logger: 0.2.6 esbuild: 0.17.18 fast-json-stable-stringify: 2.1.0 @@ -27436,7 +28105,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2): + /ts-jest@28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -27457,7 +28126,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.22.11 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 28.1.3(@types/node@18.11.18)(ts-node@10.9.1) @@ -28377,6 +29046,17 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.11(browserslist@4.21.10): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.10 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /upper-case-first@1.1.2: resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} dependencies: @@ -28663,6 +29343,43 @@ packages: replace-ext: 1.0.1 dev: true + /vite@4.4.4(@types/node@16.18.40)(sass@1.57.1): + resolution: {integrity: sha512-4mvsTxjkveWrKDJI70QmelfVqTm+ihFAb6+xf4sjEU2TmUCTlVX87tmg/QooPEMQb/lM9qGHT99ebqPziEd3wg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 16.18.40 + esbuild: 0.18.20 + postcss: 8.4.27 + rollup: 3.28.1 + sass: 1.57.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true From 39d75684042e0a87566ec5e7764d073d6d9d5988 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Fri, 1 Sep 2023 15:22:01 +0530 Subject: [PATCH 02/71] feat: firecamp.dev tauri wrapper poc created --- packages/firecamp-desktop/package.json | 2 +- .../firecamp-desktop/src-tauri/Cargo.toml | 6 +- .../src-tauri/tauri.conf.json | 4 +- pnpm-lock.yaml | 87 +++++++++++-------- 4 files changed, 59 insertions(+), 40 deletions(-) diff --git a/packages/firecamp-desktop/package.json b/packages/firecamp-desktop/package.json index 41a8b277c..ac857d28e 100644 --- a/packages/firecamp-desktop/package.json +++ b/packages/firecamp-desktop/package.json @@ -20,6 +20,6 @@ "@vitejs/plugin-react": "^4.0.3", "typescript": "^5.0.2", "vite": "^4.4.4", - "@tauri-apps/cli": "2.0.0-alpha.9" + "@tauri-apps/cli": "^1.4.0" } } diff --git a/packages/firecamp-desktop/src-tauri/Cargo.toml b/packages/firecamp-desktop/src-tauri/Cargo.toml index 82ed40e38..9bf7cac61 100644 --- a/packages/firecamp-desktop/src-tauri/Cargo.toml +++ b/packages/firecamp-desktop/src-tauri/Cargo.toml @@ -10,12 +10,14 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies] -tauri-build = { version = "2.0.0-alpha.5", features = [] } +tauri-build = { version = "1.4", features = [] } [dependencies] -tauri = { version = "2.0.0-alpha.9", features = [] } +tauri = { version = "1.4", features = [] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +tauri-plugin-localhost = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } +portpicker = "0.1" # used in the example to pick a random free port [features] # this feature is used for production builds or when `devPath` points to the filesystem diff --git a/packages/firecamp-desktop/src-tauri/tauri.conf.json b/packages/firecamp-desktop/src-tauri/tauri.conf.json index 3b7329100..ba26736dc 100644 --- a/packages/firecamp-desktop/src-tauri/tauri.conf.json +++ b/packages/firecamp-desktop/src-tauri/tauri.conf.json @@ -2,7 +2,7 @@ "build": { "beforeDevCommand": "pnpm dev", "beforeBuildCommand": "pnpm build", - "devPath": "http://localhost:3000", + "devPath": "https://firecamp.dev", "distDir": "../dist", "withGlobalTauri": false }, @@ -14,7 +14,7 @@ "bundle": { "active": true, "targets": "all", - "identifier": "com.tauri.dev", + "identifier": "com.firecamp.dev", "icon": [ "icons/32x32.png", "icons/128x128.png", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc883b1c2..31b321d39 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -546,8 +546,8 @@ importers: version: 18.2.0(react@18.2.0) devDependencies: '@tauri-apps/cli': - specifier: 2.0.0-alpha.9 - version: 2.0.0-alpha.9 + specifier: ^1.4.0 + version: 1.4.0 '@types/react': specifier: ^18.2.15 version: 18.2.15 @@ -8243,10 +8243,10 @@ packages: - supports-color dev: true - /@storybook/expect@27.5.2-0: - resolution: {integrity: sha512-cP99mhWN/JeCp7VSIiymvj5tmuMY050iFohvp8Zq+kewKsBSZ6/qpTJAGCCZk6pneTcp4S0Fm5BSqyxzbyJ3gw==} + /@storybook/expect@28.1.3-5: + resolution: {integrity: sha512-lS1oJnY1qTAxnH87C765NdfvGhksA6hBcbUVI5CHiSbNsEtr456wtg/z+dT9XlPriq1D5t2SgfNL9dBAoIGyIA==} dependencies: - '@types/jest': 29.2.4 + '@types/jest': 28.1.3 dev: true /@storybook/instrumenter@6.5.15(react-dom@17.0.2)(react@17.0.2): @@ -8265,7 +8265,7 @@ packages: /@storybook/jest@0.0.10(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-qeYLIplpcOUQXboJde5pRCjTvkGmF80jEszRUoNYCNcEPfC2sMK68Wq6Ct8EQj3CoEdJqsK54O2YYh+7D9S+ag==} dependencies: - '@storybook/expect': 27.5.2-0 + '@storybook/expect': 28.1.3-5 '@storybook/instrumenter': 6.5.15(react-dom@17.0.2)(react@17.0.2) '@testing-library/jest-dom': 5.16.5 jest-mock: 27.5.1 @@ -8842,8 +8842,8 @@ packages: engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} dev: false - /@tauri-apps/cli-darwin-arm64@2.0.0-alpha.9: - resolution: {integrity: sha512-h7AQY4MbHyy7CLANfoegJyaypKQ3fYPlBA3mnhtF+zntrMxVTv+HO9sgn98jGnwlOak8y0NPPKJ6gZFu5GYiNg==} + /@tauri-apps/cli-darwin-arm64@1.4.0: + resolution: {integrity: sha512-nA/ml0SfUt6/CYLVbHmT500Y+ijqsuv5+s9EBnVXYSLVg9kbPUZJJHluEYK+xKuOj6xzyuT/+rZFMRapmJD3jQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -8851,8 +8851,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-darwin-x64@2.0.0-alpha.9: - resolution: {integrity: sha512-8RtvzZ4/1gZU8SvMaCygtjc9Q0bMnA0NuQKOMrehRfpvvy2gw/q8MMdw3WEawYGQHqEbr6YtNJmaR5wlsVk+IQ==} + /@tauri-apps/cli-darwin-x64@1.4.0: + resolution: {integrity: sha512-ov/F6Zr+dg9B0PtRu65stFo2G0ow2TUlneqYYrkj+vA3n+moWDHfVty0raDjMLQbQt3rv3uayFMXGPMgble9OA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -8860,8 +8860,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-alpha.9: - resolution: {integrity: sha512-nHAgFEJ2DXXEx96FLPnqZ9vfFGw7Hr2ZaY+xy28llXWljCOguWi8wdHv4OMnq0hbOkegVGplYPc4RSQ5uUia2Q==} + /@tauri-apps/cli-linux-arm-gnueabihf@1.4.0: + resolution: {integrity: sha512-zwjbiMncycXDV7doovymyKD7sCg53ouAmfgpUqEBOTY3vgBi9TwijyPhJOqoG5vUVWhouNBC08akGmE4dja15g==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -8869,8 +8869,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm64-gnu@2.0.0-alpha.9: - resolution: {integrity: sha512-ETmUoTp+UgHypPpsq3OYwbcmX8MqjCGIUAzDHoVFpYuj2oqHw0ZaCx2lQPTnqW5G5L9X9VXhMAcRB8OBZG5KFw==} + /@tauri-apps/cli-linux-arm64-gnu@1.4.0: + resolution: {integrity: sha512-5MCBcziqXC72mMXnkZU68mutXIR6zavDxopArE2gQtK841IlE06bIgtLi0kUUhlFJk2nhPRgiDgdLbrPlyt7fw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -8878,8 +8878,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm64-musl@2.0.0-alpha.9: - resolution: {integrity: sha512-S55E2u4LsQajoxkpYqd2skPEVG5hp+Mkhhnixfi+87q87n9iIvIqcH+4ejDXAPUrWNMsRKIWVURV2ZzivqK5Kw==} + /@tauri-apps/cli-linux-arm64-musl@1.4.0: + resolution: {integrity: sha512-7J3pRB6n6uNYgIfCeKt2Oz8J7oSaz2s8GGFRRH2HPxuTHrBNCinzVYm68UhVpJrL3bnGkU0ziVZLsW/iaOGfUg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -8887,8 +8887,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-x64-gnu@2.0.0-alpha.9: - resolution: {integrity: sha512-/0J5sJDu+cSrj67L4Q4FVANe1ffpsz3LZMQRkbWmT2ggd2Mxg8LZBtg7y5ysMfJg8xjKvymi+1mS2yU1B7/k9Q==} + /@tauri-apps/cli-linux-x64-gnu@1.4.0: + resolution: {integrity: sha512-Zh5gfAJxOv5AVWxcwuueaQ2vIAhlg0d6nZui6nMyfIJ8dbf3aZQ5ZzP38sYow5h/fbvgL+3GSQxZRBIa3c2E1w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -8896,8 +8896,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-x64-musl@2.0.0-alpha.9: - resolution: {integrity: sha512-zjtf5H3c4amlBjIdDiQ3pmiMV/cmcPxaiH4KgyRD6NZXY9+gDk5dkzj3WAWegiD1ycz3bv5INO/tDxjk5ZSYlw==} + /@tauri-apps/cli-linux-x64-musl@1.4.0: + resolution: {integrity: sha512-OLAYoICU3FaYiTdBsI+lQTKnDHeMmFMXIApN0M+xGiOkoIOQcV9CConMPjgmJQ867+NHRNgUGlvBEAh9CiJodQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -8905,8 +8905,17 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-ia32-msvc@2.0.0-alpha.9: - resolution: {integrity: sha512-Hn0xDaEEMeXRzWCtew2MIYDky8hF+BOos0PP4qyCX14LfChpgSIT0aMYC8xbSfj9N9pwznhNBxgOtCADaTPWcg==} + /@tauri-apps/cli-win32-arm64-msvc@1.4.0: + resolution: {integrity: sha512-gZ05GENFbI6CB5MlOUsLlU0kZ9UtHn9riYtSXKT6MYs8HSPRffPHaHSL0WxsJweWh9nR5Hgh/TUU8uW3sYCzCg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-win32-ia32-msvc@1.4.0: + resolution: {integrity: sha512-JsetT/lTx/Zq98eo8T5CiRyF1nKeX04RO8JlJrI3ZOYsZpp/A5RJvMd/szQ17iOzwiHdge+tx7k2jHysR6oBlQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -8914,8 +8923,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-x64-msvc@2.0.0-alpha.9: - resolution: {integrity: sha512-541nR7UoasX/fnEWhC14H4Ppj17Aa1fbCyFb9+zmWjupVkEGf/yQFvdWRHdmCkgOdGuxPahR5hbOPh+jvaklFw==} + /@tauri-apps/cli-win32-x64-msvc@1.4.0: + resolution: {integrity: sha512-z8Olcnwp5aYhzqUAarFjqF+oELCjuYWnB2HAJHlfsYNfDCAORY5kct3Fklz8PSsubC3U2EugWn8n42DwnThurg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -8923,20 +8932,21 @@ packages: dev: true optional: true - /@tauri-apps/cli@2.0.0-alpha.9: - resolution: {integrity: sha512-roQNpFC3Ijni/c7TCkCpUg3gWKfxs1ftWSQJyCthqIPRM5J7I2vOfhcUXIZw9glrxDp5npyRW0xYyI7W/424uQ==} + /@tauri-apps/cli@1.4.0: + resolution: {integrity: sha512-VXYr2i2iVFl98etQSQsqLzXgX96bnWiNZd1YADgatqwy/qecbd6Kl5ZAPB5R4ynsgE8A1gU7Fbzh7dCEQYFfmA==} engines: {node: '>= 10'} hasBin: true optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.0.0-alpha.9 - '@tauri-apps/cli-darwin-x64': 2.0.0-alpha.9 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-alpha.9 - '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-alpha.9 - '@tauri-apps/cli-linux-arm64-musl': 2.0.0-alpha.9 - '@tauri-apps/cli-linux-x64-gnu': 2.0.0-alpha.9 - '@tauri-apps/cli-linux-x64-musl': 2.0.0-alpha.9 - '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-alpha.9 - '@tauri-apps/cli-win32-x64-msvc': 2.0.0-alpha.9 + '@tauri-apps/cli-darwin-arm64': 1.4.0 + '@tauri-apps/cli-darwin-x64': 1.4.0 + '@tauri-apps/cli-linux-arm-gnueabihf': 1.4.0 + '@tauri-apps/cli-linux-arm64-gnu': 1.4.0 + '@tauri-apps/cli-linux-arm64-musl': 1.4.0 + '@tauri-apps/cli-linux-x64-gnu': 1.4.0 + '@tauri-apps/cli-linux-x64-musl': 1.4.0 + '@tauri-apps/cli-win32-arm64-msvc': 1.4.0 + '@tauri-apps/cli-win32-ia32-msvc': 1.4.0 + '@tauri-apps/cli-win32-x64-msvc': 1.4.0 dev: true /@testing-library/dom@8.20.0: @@ -9287,6 +9297,13 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true + /@types/jest@28.1.3: + resolution: {integrity: sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw==} + dependencies: + jest-matcher-utils: 28.1.3 + pretty-format: 28.1.3 + dev: true + /@types/jest@29.2.4: resolution: {integrity: sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A==} dependencies: From 3a030cc052e076840445e4aeeba2e462fa445976 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Fri, 1 Sep 2023 18:47:28 +0530 Subject: [PATCH 03/71] feat: dev certificates are generated and desktop app is now being opened with https devPath in tauri config --- .gitignore | 1 + ...-ice-2023-09-01T10:38:16.464703Z-21654.txt | 0 .../src-tauri/tauri.conf.json | 2 +- webpack.dev.js | 8 +++- x-dev-certs/README.md | 3 ++ x-dev-certs/ca/rootCA-key.pem | 40 +++++++++++++++++++ x-dev-certs/ca/rootCA.pem | 28 +++++++++++++ x-dev-certs/localhost.cert.pem | 25 ++++++++++++ x-dev-certs/localhost.key.pem | 28 +++++++++++++ 9 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 packages/firecamp-desktop/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt create mode 100644 x-dev-certs/README.md create mode 100644 x-dev-certs/ca/rootCA-key.pem create mode 100644 x-dev-certs/ca/rootCA.pem create mode 100644 x-dev-certs/localhost.cert.pem create mode 100644 x-dev-certs/localhost.key.pem diff --git a/.gitignore b/.gitignore index 8f17b4b67..a6b7c116e 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ cypress/videos *.zip *.crx *.pem +!x-dev-certs/**/*.pem update.xml .idea package-lock.json diff --git a/packages/firecamp-desktop/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt b/packages/firecamp-desktop/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt new file mode 100644 index 000000000..e69de29bb diff --git a/packages/firecamp-desktop/src-tauri/tauri.conf.json b/packages/firecamp-desktop/src-tauri/tauri.conf.json index ba26736dc..ce0128f03 100644 --- a/packages/firecamp-desktop/src-tauri/tauri.conf.json +++ b/packages/firecamp-desktop/src-tauri/tauri.conf.json @@ -2,7 +2,7 @@ "build": { "beforeDevCommand": "pnpm dev", "beforeBuildCommand": "pnpm build", - "devPath": "https://firecamp.dev", + "devPath": "https://localhost:3000", "distDir": "../dist", "withGlobalTauri": false }, diff --git a/webpack.dev.js b/webpack.dev.js index 4328dffb7..e7893a142 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -1,3 +1,4 @@ +const { readFileSync } = require('fs'); const path = require('path'); const webpack = require('webpack'); const { merge } = require('webpack-merge'); @@ -32,7 +33,12 @@ module.exports = merge(base, { ], }, devServer: { - //server: 'https', + server: 'https', + https: { + key: readFileSync('x-dev-certs/localhost.key.pem'), + cert: readFileSync('x-dev-certs/localhost.cert.pem'), + ca: readFileSync('x-dev-certs/ca/rootCA.pem'), + }, static: path.join(__dirname, './build/development'), compress: true, port: 3000, diff --git a/x-dev-certs/README.md b/x-dev-certs/README.md new file mode 100644 index 000000000..58a5b0c96 --- /dev/null +++ b/x-dev-certs/README.md @@ -0,0 +1,3 @@ +These certificates are generated with MKCert + +https://github.com/FiloSottile/mkcert \ No newline at end of file diff --git a/x-dev-certs/ca/rootCA-key.pem b/x-dev-certs/ca/rootCA-key.pem new file mode 100644 index 000000000..efb8e4ae2 --- /dev/null +++ b/x-dev-certs/ca/rootCA-key.pem @@ -0,0 +1,40 @@ +-----BEGIN PRIVATE KEY----- +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 +r4p3y0S7i+sVblm5gWeN0X+Y +-----END PRIVATE KEY----- diff --git a/x-dev-certs/ca/rootCA.pem b/x-dev-certs/ca/rootCA.pem new file mode 100644 index 000000000..d7d8c46f3 --- /dev/null +++ b/x-dev-certs/ca/rootCA.pem @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIE3DCCA0SgAwIBAgIRAPE8SCLbUrbV5v2Uh9CZTKkwDQYJKoZIhvcNAQELBQAw +gYUxHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTEtMCsGA1UECwwkbmlz +aGNoaXRAbmQubG9jYWwgKE5pc2hjaGl0IERoYW5hbmkpMTQwMgYDVQQDDCtta2Nl +cnQgbmlzaGNoaXRAbmQubG9jYWwgKE5pc2hjaGl0IERoYW5hbmkpMB4XDTIzMDkw +MTEyNDg0OVoXDTMzMDkwMTEyNDg0OVowgYUxHjAcBgNVBAoTFW1rY2VydCBkZXZl +bG9wbWVudCBDQTEtMCsGA1UECwwkbmlzaGNoaXRAbmQubG9jYWwgKE5pc2hjaGl0 +IERoYW5hbmkpMTQwMgYDVQQDDCtta2NlcnQgbmlzaGNoaXRAbmQubG9jYWwgKE5p +c2hjaGl0IERoYW5hbmkpMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA +w0cTNpayvNZK367h2h514pVB2cFpHMwRj/GOc8baXvcgiosnjGbg6SzroTBJNQYu +jN3C8HEtlWQkr13tNtXYA60V0p3hVkBnBkOiL4Vy0uOquMxkrrV9ry3PeqGlBHPi +6i+PUQdlu1LqXpOqL+2K1Z/pwdoJYGiGDxolBKvtRijxU8VgEr5qhVsfzCrO/MpC +hHd/UcCcGFTOe6i3EXJmRQuhE2FmLZ24cILBabmO4GAOIJii3JgpIl52xTCHA4qi +JSmeSFtVAi+i9Q68HOwxwhqkspMStNAqndOK8WxxCEJReO3uRSO0W9VSwLswLj5M +GlMeF0m0ZcI00VRZT274sdLr8AQFdxnYuj/KpPKMecQuoJQ0ojX5FuWfp/JQOj5w +t5XMPzx3arfMY4n/K9zIv42CKotE3gHw7nGZVdW8YUua+A3WYCn2GqZ5GYs2uJQf +IxI3uMepPFNR0manBFZ4sM8cL3wIgS0MjeisYUMvdz2r3v1mMPzAK8ZjAeEgKnV9 +AgMBAAGjRTBDMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +A1UdDgQWBBSowwoctxqlqvby2V2TAsG8zeMZ8DANBgkqhkiG9w0BAQsFAAOCAYEA +OA/20GLyp2B/gBAXfs4WhAMIXYjM5jXVhN3NA+ZYeiLstzLJ9lVBiorVX3rO4zYs +/CS95ullWiwNgUTBT6P0rjR6soLNb3lJWGp8Kef1A7XFrMemSQerhsnrNFlBEajA +y+x0D+aSHcwahfDaecvhxvviN0ic3XnWzhhC8nl43U+es+U0zH9wHJtrKW6AX8E7 +xjTXstWwKFKkGvPryhcKd6Wq2kp6XKsOTU+mhofgkLsV2eC5aiA61baF12gd03wa +m7ugTkuvouBmxlejipoRlo0klkxmI+wpcGK++K//t8WeUe1zqv3HuLepihPGrfDM +38m/mhNLUog3JQ4D/TMZy2vDYBRESX68Eu5orBiL2em3p9s/Hot4Np9yixcT4MMv +gDFzQklYQeG2YPbp6vJQ5W+/gXILgnDNiY63rYjIqUyYU8pZi3YSzqyALRLaG9u7 +M9OZjLtHlCJyBzP2hmkNIgW6b1GFevycdXSP2lokTA01oehFTdM/Ctsya+ytLVmn +-----END CERTIFICATE----- diff --git a/x-dev-certs/localhost.cert.pem b/x-dev-certs/localhost.cert.pem new file mode 100644 index 000000000..855f2674b --- /dev/null +++ b/x-dev-certs/localhost.cert.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIERzCCAq+gAwIBAgIRAIdbZ96puQfGmuJw9cn7/LQwDQYJKoZIhvcNAQELBQAw +gYUxHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTEtMCsGA1UECwwkbmlz +aGNoaXRAbmQubG9jYWwgKE5pc2hjaGl0IERoYW5hbmkpMTQwMgYDVQQDDCtta2Nl +cnQgbmlzaGNoaXRAbmQubG9jYWwgKE5pc2hjaGl0IERoYW5hbmkpMB4XDTIzMDkw +MTEyNDg1M1oXDTI1MTIwMTEyNDg1M1owWDEnMCUGA1UEChMebWtjZXJ0IGRldmVs +b3BtZW50IGNlcnRpZmljYXRlMS0wKwYDVQQLDCRuaXNoY2hpdEBuZC5sb2NhbCAo +TmlzaGNoaXQgRGhhbmFuaSkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDRziQGa8XIR3qu0/gLBosfsslrWkfJ+ng9RCHhnKx+C95iSQEnH76J0cTrbRxw +7FNmyja4IVcsrbWcKS7BDm0X/Q4huy4HXZ4Aicr2UTr/kKqYLKxmaDpJc4kqpDGm ++j8iR6DKylOKcbduFmMyHuRXYEo0CJtL5mwPwS7rGJfY6SMbrJqULw3+hJVNZNhO +1GM6oQ9QRfLERW5IGEo88/jj4RF+M/VkbhH+eVPlavCykyHNUQ7IRgE1dgy1uq2f +nlZDrsgpsqqYJ7WTzkufcam/5v7kxknw8Y6L1UbRc3FXRm5ivDkYh+PX/Aho8Od3 +jiVrQQ9oo6mDUXRzksS/dnxJAgMBAAGjXjBcMA4GA1UdDwEB/wQEAwIFoDATBgNV +HSUEDDAKBggrBgEFBQcDATAfBgNVHSMEGDAWgBSowwoctxqlqvby2V2TAsG8zeMZ +8DAUBgNVHREEDTALgglsb2NhbGhvc3QwDQYJKoZIhvcNAQELBQADggGBALezggEa +L06uST/PMZME+NFWHbGKkoNlFP1ACat6AzDDUuGLipX5svBuSaFyf4lqVrvhRZI4 +o5Idg0IlAMLEUPlryU5LY+LWq13+MXd/oOn1cImns9Pn5mOglvzFSoRd1t9GZol+ +v066AHNmHdzKVA9Qhfu5qS20I1FB35jGc1gqLwFeQuX9mrS7EdsAD8BzKcBFJnfc +HiEYkTKpYwQO2MmBf394PGF7dq83eh16nCrptsa/76s0iys6mwQQDBRsjaA+sEvw +8cmqeBCRUd1fHSD5/yCgXE9KYRRgaCHbnjxyy5IsJcH/gjVX160U3Qbq3S/94Iya +epBrqupIOJI6bWGWwngb2N7z+GBBhE4h5iVz9lmXiKFGw92V1UIGGXjgFHsxxFU9 ++TOUFrXhJ2Fr7eNxUSLOHsUVfD5BzCGdNC4pgGkbUyXn8VGr41yOAWOMR04zoqYg +n5DQ7/aUHkJJ40Jmzj1Iag70h5iH/8T4+ea2j/lmmwe26m6tDceVgM8Y9Q== +-----END CERTIFICATE----- diff --git a/x-dev-certs/localhost.key.pem b/x-dev-certs/localhost.key.pem new file mode 100644 index 000000000..5503740cb --- /dev/null +++ b/x-dev-certs/localhost.key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDRziQGa8XIR3qu +0/gLBosfsslrWkfJ+ng9RCHhnKx+C95iSQEnH76J0cTrbRxw7FNmyja4IVcsrbWc +KS7BDm0X/Q4huy4HXZ4Aicr2UTr/kKqYLKxmaDpJc4kqpDGm+j8iR6DKylOKcbdu +FmMyHuRXYEo0CJtL5mwPwS7rGJfY6SMbrJqULw3+hJVNZNhO1GM6oQ9QRfLERW5I +GEo88/jj4RF+M/VkbhH+eVPlavCykyHNUQ7IRgE1dgy1uq2fnlZDrsgpsqqYJ7WT +zkufcam/5v7kxknw8Y6L1UbRc3FXRm5ivDkYh+PX/Aho8Od3jiVrQQ9oo6mDUXRz +ksS/dnxJAgMBAAECggEBAMhn+T9s6MLTjFu9PB0EBhakSAPUe+hx6TLUhuykJJxO +KAGILKK7jtzE1C3xzo4LH+t60uP1bPjPgT+GkxNz/T9ByKLt0hzVDt0Cwi2hEBMY +k+vCGHfFrY+F3gsuRgNy3KWY9/1dYIlI8Gcm2WAB5CmWX6ruYbERjD1MUc3dcwaM +iOj6jLmaKvoByiNlXdErO0OBaZiHJVnSrkolsCbUMnpKyExV4tteJkn+l1Yqae7q +UP5CxlVX/vmpRKTxN4fRjHZhNBAHbQsOFHLFp64XzN45Ea+QHYbLX1uzNJp0DGKf +QXWWYoWHfJDEa4dFleS4Zjw9JfTifi+jtmJFgmu9YwECgYEA5bfZ7F7gp6jGZWmg +vup4R/Dq1Cv7ifKZ6eoDG5zVYvAAMg8LYmQaWqH2yMbbF+YwTZ3KUFcOhPy1s1L+ +H/he6vJydPm3YnVoAwpaU57PSoKVBLYaA1L5toiKWC5U5/cH4nkipdc1oI3F21G5 +Sj7gC/vodwVWphuH+TsCYHU7puECgYEA6c8QvPyWOkAl1hDCcCJOyBYUnBOybHJJ +9LuAOpnm9N2MnNA+dblqvKHK+0e123vYLrfkY3gbI+7hLXPWxLuxwegJk/AacEVq +AZkFWU+CLB0mNG3UkG1Gsuv6DhcQKb8zkwlvu2vogbeuPEFi9xF0FEmyk9Lxh3vq +Wg1Ng94CSmkCgYEAq21fEFjhV9zIaWfBEJgTOMSdycYkyZYkq/35YcLRLyshSjoV +6dAAJsCVVNGpMJWUWGe3UesVp8Kaqf72K8+CrdxN8+NiqfQpsZMpQxvRX65BHKn0 +kaR7O297pkC1FgIwfR6e75nBqFYEYB4Fo1V2hxrvKNrwBben6iLSLD9wS6ECgYB8 +HcW+7T86cO8k8gSlzjCQGtiZ+gLPeuQznI13jleCSVHptMpTaDh3JlRAjFLHzrh2 +JHyDKTEPJDI5FLNAAHteejULaXw/eTnK21ZxkLmDfX3Yey1J9hh/xrEZZbjY0H0q +YuoDTkdBBSbjKbrFeWhrlKvNuT8qMue3IjSx+dqxcQKBgG3R57lnIBDPOt5m6Rgf +Kj1S8HKJJS23gtkCW5eO3F4Z4XVsDlr4Lbpxl9jSfSb1x4Knfszg17LJCSJR/Kpr +H9hoZ9zWPVnCGiQw/FLAKm+N6L5NF2j3QObsqRdCUsRPh09wZ+leeuu4j2Q5XHVb +/74ghk8H5/xq7yXOH43LMw4m +-----END PRIVATE KEY----- From b95a7d876b60112c789f810f04c66cd817beae37 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Thu, 26 Oct 2023 14:42:11 +0530 Subject: [PATCH 04/71] feat: electron basic setup completed --- packages/firecamp-desktop/.gitignore | 10 ++ packages/firecamp-desktop/package.json | 17 ++ packages/firecamp-desktop/src/index.html | 20 +++ packages/firecamp-desktop/src/main.ts | 14 ++ pnpm-lock.yaml | 216 +++++++++++++++++------ 5 files changed, 227 insertions(+), 50 deletions(-) create mode 100644 packages/firecamp-desktop/.gitignore create mode 100644 packages/firecamp-desktop/package.json create mode 100644 packages/firecamp-desktop/src/index.html create mode 100644 packages/firecamp-desktop/src/main.ts diff --git a/packages/firecamp-desktop/.gitignore b/packages/firecamp-desktop/.gitignore new file mode 100644 index 000000000..868298401 --- /dev/null +++ b/packages/firecamp-desktop/.gitignore @@ -0,0 +1,10 @@ +.idea/* +.nyc_output +.vscode +build +node_modules +test +src/**.js +coverage +*.log +!src/declarations.d.ts \ No newline at end of file diff --git a/packages/firecamp-desktop/package.json b/packages/firecamp-desktop/package.json new file mode 100644 index 000000000..3c3dde76d --- /dev/null +++ b/packages/firecamp-desktop/package.json @@ -0,0 +1,17 @@ +{ + "name": "@firecamp/desktop", + "version": "1.0.0", + "description": "", + "main": "src/main.js", + "private": true, + "scripts": { + "start": "electron .", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "AGPLv3", + "devDependencies": { + "electron": "^27.0.2" + } +} diff --git a/packages/firecamp-desktop/src/index.html b/packages/firecamp-desktop/src/index.html new file mode 100644 index 000000000..c4890c158 --- /dev/null +++ b/packages/firecamp-desktop/src/index.html @@ -0,0 +1,20 @@ + + + + + + + + Hello from Electron renderer! + + +

Hello from Electron renderer!

+

👋

+ + \ No newline at end of file diff --git a/packages/firecamp-desktop/src/main.ts b/packages/firecamp-desktop/src/main.ts new file mode 100644 index 000000000..3b189a63d --- /dev/null +++ b/packages/firecamp-desktop/src/main.ts @@ -0,0 +1,14 @@ +const { app, BrowserWindow } = require('electron'); + +const createWindow = () => { + const win = new BrowserWindow({ + width: 800, + height: 600, + }); + + win.loadURL('https://firecamp.dev'); +}; + +app.whenReady().then(() => { + createWindow(); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61ad97a1f..4838bde81 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,7 +98,7 @@ importers: version: 19.0.4(eslint-plugin-import@2.27.5)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.32.1)(eslint@8.32.0) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(eslint@8.32.0) + version: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) eslint-plugin-jest: specifier: ^27.2.1 version: 27.2.1(eslint@8.32.0)(typescript@5.0.2) @@ -533,6 +533,12 @@ importers: specifier: ^5.0.2 version: 5.0.2 + packages/firecamp-desktop: + devDependencies: + electron: + specifier: ^27.0.2 + version: 27.0.2 + packages/firecamp-echo-server: dependencies: '@nestjs/common': @@ -3866,6 +3872,23 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} + /@electron/get@2.0.3: + resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} + engines: {node: '>=12'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.0 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: @@ -9164,6 +9187,14 @@ packages: '@types/yargs-parser': 21.0.0 dev: true + /@types/yauzl@2.10.2: + resolution: {integrity: sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==} + requiresBuild: true + dependencies: + '@types/node': 16.18.40 + dev: true + optional: true + /@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@4.9.5): resolution: {integrity: sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -11448,6 +11479,12 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true + /boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + requiresBuild: true + dev: true + optional: true + /boxen@5.1.2: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} @@ -11598,6 +11635,10 @@ packages: node-int64: 0.4.0 dev: true + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -11809,7 +11850,7 @@ packages: dependencies: clone-response: 1.0.3 get-stream: 5.2.0 - http-cache-semantics: 4.1.0 + http-cache-semantics: 4.1.1 keyv: 4.5.2 lowercase-keys: 2.0.0 normalize-url: 6.1.0 @@ -14052,6 +14093,19 @@ packages: /electron-to-chromium@1.4.356: resolution: {integrity: sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==} + /electron@27.0.2: + resolution: {integrity: sha512-4fbcHQ40ZDlqhr5Pamm+M5BF7ry2lGqjFTWTJ/mrBwuiPWu6xhV/RWgUhKBaLqKNfAaNl3eMxV3Jc82gv6JauQ==} + engines: {node: '>= 12.20.55'} + hasBin: true + requiresBuild: true + dependencies: + '@electron/get': 2.0.3 + '@types/node': 18.15.11 + extract-zip: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + /element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} dependencies: @@ -14607,7 +14661,7 @@ packages: dependencies: confusing-browser-globals: 1.0.11 eslint: 8.32.0 - eslint-plugin-import: 2.27.5(eslint@8.32.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) object.assign: 4.1.4 object.entries: 1.1.6 semver: 6.3.0 @@ -14625,7 +14679,7 @@ packages: dependencies: eslint: 8.32.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.27.5)(eslint@8.32.0) - eslint-plugin-import: 2.27.5(eslint@8.32.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.32.0) eslint-plugin-react: 7.32.1(eslint@8.32.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.32.0) @@ -14780,7 +14834,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.7.4) debug: 3.2.7 eslint: 8.32.0 eslint-import-resolver-node: 0.3.7 @@ -14949,7 +15003,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.7.4) array-includes: 3.1.6 array.prototype.flat: 1.3.1 debug: 2.6.9 @@ -15003,38 +15057,6 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(eslint@8.32.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.32.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.30.5)(eslint-import-resolver-node@0.3.7)(eslint@8.32.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.2 - semver: 6.3.0 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-jest@27.2.1(eslint@8.32.0)(typescript@5.0.2): resolution: {integrity: sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -15781,6 +15803,20 @@ packages: - supports-color dev: true + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4(supports-color@8.1.1) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.2 + transitivePeerDependencies: + - supports-color + dev: true + /faker@5.5.3: resolution: {integrity: sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==} dev: false @@ -15885,6 +15921,12 @@ packages: ua-parser-js: 0.7.35 dev: true + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: true + /fetch-retry@5.0.3: resolution: {integrity: sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==} dev: true @@ -16865,6 +16907,20 @@ packages: once: 1.4.0 dev: true + /global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + requiresBuild: true + dependencies: + boolean: 3.2.0 + es6-error: 4.1.1 + matcher: 3.0.0 + roarr: 2.15.4 + semver: 7.5.4 + serialize-error: 7.0.1 + dev: true + optional: true + /global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} @@ -17474,10 +17530,6 @@ packages: entities: 2.2.0 dev: true - /http-cache-semantics@4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} - dev: true - /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true @@ -17882,7 +17934,7 @@ packages: resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 dev: true @@ -18688,7 +18740,7 @@ packages: jest: ^26.0.1 || ^27.0.0 dependencies: '@types/chrome': 0.0.114 - jest: 28.1.3(@types/node@18.0.3)(ts-node@10.9.1) + jest: 28.1.3(@types/node@18.11.18)(ts-node@10.9.1) dev: true /jest-circus@28.1.3: @@ -19086,7 +19138,7 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.11.18)(typescript@5.0.2) transitivePeerDependencies: - supports-color dev: true @@ -19166,7 +19218,7 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.7.4) transitivePeerDependencies: - supports-color dev: true @@ -21308,7 +21360,7 @@ packages: dependencies: agentkeepalive: 4.5.0 cacache: 16.1.3 - http-cache-semantics: 4.1.0 + http-cache-semantics: 4.1.1 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 @@ -21356,7 +21408,7 @@ packages: dependencies: agentkeepalive: 4.5.0 cacache: 15.3.0 - http-cache-semantics: 4.1.0 + http-cache-semantics: 4.1.1 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 @@ -21439,6 +21491,15 @@ packages: hasBin: true dev: true + /matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + escape-string-regexp: 4.0.0 + dev: true + optional: true + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: @@ -23494,6 +23555,10 @@ packages: engines: {node: '>=8'} dev: true + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true + /picocolors@0.2.1: resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} dev: true @@ -23748,7 +23813,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.27 - ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.7.4) yaml: 1.10.2 dev: true @@ -25085,7 +25150,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 functions-have-names: 1.2.3 dev: true @@ -25431,6 +25496,20 @@ packages: inherits: 2.0.4 dev: true + /roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} + requiresBuild: true + dependencies: + boolean: 3.2.0 + detect-node: 2.1.0 + globalthis: 1.0.3 + json-stringify-safe: 5.0.1 + semver-compare: 1.0.0 + sprintf-js: 1.1.3 + dev: true + optional: true + /rollup@3.21.6: resolution: {integrity: sha512-SXIICxvxQxR3D4dp/3LDHZIJPC8a4anKMHd4E3Jiz2/JnY+2bEjqrOokAauc5ShGVNFHlEFjBXAXlaxkJqIqSg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -25661,6 +25740,12 @@ packages: dependencies: node-forge: 1.3.1 + /semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + requiresBuild: true + dev: true + optional: true + /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true @@ -25716,6 +25801,15 @@ packages: lower-case: 1.1.4 dev: true + /serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + type-fest: 0.13.1 + dev: true + optional: true + /serialize-javascript@4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: @@ -26449,6 +26543,12 @@ packages: /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + requiresBuild: true + dev: true + optional: true + /ssri@10.0.5: resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -26937,6 +27037,15 @@ packages: ts-interface-checker: 0.1.13 dev: true + /sumchecker@3.0.1: + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + /superagent@3.8.3: resolution: {integrity: sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==} engines: {node: '>= 4.0'} @@ -30063,6 +30172,13 @@ packages: requiresBuild: true dev: false + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + /yeast@0.1.2: resolution: {integrity: sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==} dev: false From a156ea7293ae83e56254cd48c593ab81985894e5 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Thu, 26 Oct 2023 14:51:24 +0530 Subject: [PATCH 05/71] chore: tsconfig configured for desktop app --- packages/firecamp-desktop/package.json | 5 +++-- packages/firecamp-desktop/tsconfig.json | 14 ++++++++++++++ pnpm-lock.yaml | 13 +++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 packages/firecamp-desktop/tsconfig.json diff --git a/packages/firecamp-desktop/package.json b/packages/firecamp-desktop/package.json index 3c3dde76d..7b5ad4b0d 100644 --- a/packages/firecamp-desktop/package.json +++ b/packages/firecamp-desktop/package.json @@ -2,16 +2,17 @@ "name": "@firecamp/desktop", "version": "1.0.0", "description": "", - "main": "src/main.js", + "main": "build/main.js", "private": true, "scripts": { - "start": "electron .", + "start": "tsc && electron .", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "AGPLv3", "devDependencies": { + "@types/node": "^20.8.9", "electron": "^27.0.2" } } diff --git a/packages/firecamp-desktop/tsconfig.json b/packages/firecamp-desktop/tsconfig.json new file mode 100644 index 000000000..3d5e8427f --- /dev/null +++ b/packages/firecamp-desktop/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "sourceMap": true, + "strict": true, + "outDir": "build", + "rootDir": "src", + "noEmitOnError": true, + "typeRoots": [ + "node_modules/@types" + ] + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4838bde81..9661284e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -535,6 +535,9 @@ importers: packages/firecamp-desktop: devDependencies: + '@types/node': + specifier: ^20.8.9 + version: 20.8.9 electron: specifier: ^27.0.2 version: 27.0.2 @@ -8968,6 +8971,12 @@ packages: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} dev: true + /@types/node@20.8.9: + resolution: {integrity: sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -28623,6 +28632,10 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + /unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} dev: true From aefa43435182652f7915808faf5cf0f799822179 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 28 Oct 2023 13:12:02 +0530 Subject: [PATCH 06/71] chore: loadURL tried with local path --- packages/firecamp-desktop/src/main.ts | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/firecamp-desktop/src/main.ts b/packages/firecamp-desktop/src/main.ts index 3b189a63d..426c5f573 100644 --- a/packages/firecamp-desktop/src/main.ts +++ b/packages/firecamp-desktop/src/main.ts @@ -6,7 +6,29 @@ const createWindow = () => { height: 600, }); - win.loadURL('https://firecamp.dev'); + if (app.isPackaged) { + // 'build/index.html' + // win.loadURL(`file://${__dirname}/../../build/prod/index.html`); + } else { + win.loadURL(`file://${__dirname}/../../../build/dev/index.html`); + // win.loadURL('http://localhost:3000'); + + win.webContents.openDevTools(); + + // Hot Reloading on 'node_modules/.bin/electronPath' + // require('electron-reload')(__dirname, { + // electron: path.join( + // __dirname, + // '..', + // '..', + // 'node_modules', + // '.bin', + // 'electron' + (process.platform === 'win32' ? '.cmd' : '') + // ), + // forceHardReset: true, + // hardResetMethod: 'exit', + // }); + } }; app.whenReady().then(() => { From e0ca14b6117d8d9799b3a53b553da02542bea4d6 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 28 Oct 2023 13:14:20 +0530 Subject: [PATCH 07/71] chore: folder renamed to firecamp-tauri --- .../{firecamp-desktop => firecamp-tauri}/.gitignore | 0 .../.vscode/extensions.json | 0 .../{firecamp-desktop => firecamp-tauri}/README.md | 0 .../{firecamp-desktop => firecamp-tauri}/index.html | 0 .../package.json | 0 .../public/tauri.svg | 0 .../public/vite.svg | 0 .../src-tauri/.gitignore | 0 .../src-tauri/Cargo.toml | 0 .../src-tauri/build.rs | 0 .../src-tauri/icons/128x128.png | Bin .../src-tauri/icons/128x128@2x.png | Bin .../src-tauri/icons/32x32.png | Bin .../src-tauri/icons/Square107x107Logo.png | Bin .../src-tauri/icons/Square142x142Logo.png | Bin .../src-tauri/icons/Square150x150Logo.png | Bin .../src-tauri/icons/Square284x284Logo.png | Bin .../src-tauri/icons/Square30x30Logo.png | Bin .../src-tauri/icons/Square310x310Logo.png | Bin .../src-tauri/icons/Square44x44Logo.png | Bin .../src-tauri/icons/Square71x71Logo.png | Bin .../src-tauri/icons/Square89x89Logo.png | Bin .../src-tauri/icons/StoreLogo.png | Bin .../src-tauri/icons/icon.icns | Bin .../src-tauri/icons/icon.ico | Bin .../src-tauri/icons/icon.png | Bin .../rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt | 0 .../rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt | 0 .../src-tauri/src/main.rs | 0 .../src-tauri/tauri.conf.json | 0 .../src/App.css | 0 .../src/App.tsx | 0 .../src/assets/react.svg | 0 .../src/main.tsx | 0 .../src/styles.css | 0 .../tsconfig.json | 0 .../tsconfig.node.json | 0 .../vite.config.ts | 0 38 files changed, 0 insertions(+), 0 deletions(-) rename packages/{firecamp-desktop => firecamp-tauri}/.gitignore (100%) rename packages/{firecamp-desktop => firecamp-tauri}/.vscode/extensions.json (100%) rename packages/{firecamp-desktop => firecamp-tauri}/README.md (100%) rename packages/{firecamp-desktop => firecamp-tauri}/index.html (100%) rename packages/{firecamp-desktop => firecamp-tauri}/package.json (100%) rename packages/{firecamp-desktop => firecamp-tauri}/public/tauri.svg (100%) rename packages/{firecamp-desktop => firecamp-tauri}/public/vite.svg (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/.gitignore (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/Cargo.toml (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/build.rs (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/128x128.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/128x128@2x.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/32x32.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/Square107x107Logo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/Square142x142Logo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/Square150x150Logo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/Square284x284Logo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/Square30x30Logo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/Square310x310Logo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/Square44x44Logo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/Square71x71Logo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/Square89x89Logo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/StoreLogo.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/icon.icns (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/icon.ico (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/icons/icon.png (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/src/main.rs (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src-tauri/tauri.conf.json (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src/App.css (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src/App.tsx (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src/assets/react.svg (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src/main.tsx (100%) rename packages/{firecamp-desktop => firecamp-tauri}/src/styles.css (100%) rename packages/{firecamp-desktop => firecamp-tauri}/tsconfig.json (100%) rename packages/{firecamp-desktop => firecamp-tauri}/tsconfig.node.json (100%) rename packages/{firecamp-desktop => firecamp-tauri}/vite.config.ts (100%) diff --git a/packages/firecamp-desktop/.gitignore b/packages/firecamp-tauri/.gitignore similarity index 100% rename from packages/firecamp-desktop/.gitignore rename to packages/firecamp-tauri/.gitignore diff --git a/packages/firecamp-desktop/.vscode/extensions.json b/packages/firecamp-tauri/.vscode/extensions.json similarity index 100% rename from packages/firecamp-desktop/.vscode/extensions.json rename to packages/firecamp-tauri/.vscode/extensions.json diff --git a/packages/firecamp-desktop/README.md b/packages/firecamp-tauri/README.md similarity index 100% rename from packages/firecamp-desktop/README.md rename to packages/firecamp-tauri/README.md diff --git a/packages/firecamp-desktop/index.html b/packages/firecamp-tauri/index.html similarity index 100% rename from packages/firecamp-desktop/index.html rename to packages/firecamp-tauri/index.html diff --git a/packages/firecamp-desktop/package.json b/packages/firecamp-tauri/package.json similarity index 100% rename from packages/firecamp-desktop/package.json rename to packages/firecamp-tauri/package.json diff --git a/packages/firecamp-desktop/public/tauri.svg b/packages/firecamp-tauri/public/tauri.svg similarity index 100% rename from packages/firecamp-desktop/public/tauri.svg rename to packages/firecamp-tauri/public/tauri.svg diff --git a/packages/firecamp-desktop/public/vite.svg b/packages/firecamp-tauri/public/vite.svg similarity index 100% rename from packages/firecamp-desktop/public/vite.svg rename to packages/firecamp-tauri/public/vite.svg diff --git a/packages/firecamp-desktop/src-tauri/.gitignore b/packages/firecamp-tauri/src-tauri/.gitignore similarity index 100% rename from packages/firecamp-desktop/src-tauri/.gitignore rename to packages/firecamp-tauri/src-tauri/.gitignore diff --git a/packages/firecamp-desktop/src-tauri/Cargo.toml b/packages/firecamp-tauri/src-tauri/Cargo.toml similarity index 100% rename from packages/firecamp-desktop/src-tauri/Cargo.toml rename to packages/firecamp-tauri/src-tauri/Cargo.toml diff --git a/packages/firecamp-desktop/src-tauri/build.rs b/packages/firecamp-tauri/src-tauri/build.rs similarity index 100% rename from packages/firecamp-desktop/src-tauri/build.rs rename to packages/firecamp-tauri/src-tauri/build.rs diff --git a/packages/firecamp-desktop/src-tauri/icons/128x128.png b/packages/firecamp-tauri/src-tauri/icons/128x128.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/128x128.png rename to packages/firecamp-tauri/src-tauri/icons/128x128.png diff --git a/packages/firecamp-desktop/src-tauri/icons/128x128@2x.png b/packages/firecamp-tauri/src-tauri/icons/128x128@2x.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/128x128@2x.png rename to packages/firecamp-tauri/src-tauri/icons/128x128@2x.png diff --git a/packages/firecamp-desktop/src-tauri/icons/32x32.png b/packages/firecamp-tauri/src-tauri/icons/32x32.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/32x32.png rename to packages/firecamp-tauri/src-tauri/icons/32x32.png diff --git a/packages/firecamp-desktop/src-tauri/icons/Square107x107Logo.png b/packages/firecamp-tauri/src-tauri/icons/Square107x107Logo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/Square107x107Logo.png rename to packages/firecamp-tauri/src-tauri/icons/Square107x107Logo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/Square142x142Logo.png b/packages/firecamp-tauri/src-tauri/icons/Square142x142Logo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/Square142x142Logo.png rename to packages/firecamp-tauri/src-tauri/icons/Square142x142Logo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/Square150x150Logo.png b/packages/firecamp-tauri/src-tauri/icons/Square150x150Logo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/Square150x150Logo.png rename to packages/firecamp-tauri/src-tauri/icons/Square150x150Logo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/Square284x284Logo.png b/packages/firecamp-tauri/src-tauri/icons/Square284x284Logo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/Square284x284Logo.png rename to packages/firecamp-tauri/src-tauri/icons/Square284x284Logo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/Square30x30Logo.png b/packages/firecamp-tauri/src-tauri/icons/Square30x30Logo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/Square30x30Logo.png rename to packages/firecamp-tauri/src-tauri/icons/Square30x30Logo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/Square310x310Logo.png b/packages/firecamp-tauri/src-tauri/icons/Square310x310Logo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/Square310x310Logo.png rename to packages/firecamp-tauri/src-tauri/icons/Square310x310Logo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/Square44x44Logo.png b/packages/firecamp-tauri/src-tauri/icons/Square44x44Logo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/Square44x44Logo.png rename to packages/firecamp-tauri/src-tauri/icons/Square44x44Logo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/Square71x71Logo.png b/packages/firecamp-tauri/src-tauri/icons/Square71x71Logo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/Square71x71Logo.png rename to packages/firecamp-tauri/src-tauri/icons/Square71x71Logo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/Square89x89Logo.png b/packages/firecamp-tauri/src-tauri/icons/Square89x89Logo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/Square89x89Logo.png rename to packages/firecamp-tauri/src-tauri/icons/Square89x89Logo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/StoreLogo.png b/packages/firecamp-tauri/src-tauri/icons/StoreLogo.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/StoreLogo.png rename to packages/firecamp-tauri/src-tauri/icons/StoreLogo.png diff --git a/packages/firecamp-desktop/src-tauri/icons/icon.icns b/packages/firecamp-tauri/src-tauri/icons/icon.icns similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/icon.icns rename to packages/firecamp-tauri/src-tauri/icons/icon.icns diff --git a/packages/firecamp-desktop/src-tauri/icons/icon.ico b/packages/firecamp-tauri/src-tauri/icons/icon.ico similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/icon.ico rename to packages/firecamp-tauri/src-tauri/icons/icon.ico diff --git a/packages/firecamp-desktop/src-tauri/icons/icon.png b/packages/firecamp-tauri/src-tauri/icons/icon.png similarity index 100% rename from packages/firecamp-desktop/src-tauri/icons/icon.png rename to packages/firecamp-tauri/src-tauri/icons/icon.png diff --git a/packages/firecamp-desktop/src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt b/packages/firecamp-tauri/src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt similarity index 100% rename from packages/firecamp-desktop/src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt rename to packages/firecamp-tauri/src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt diff --git a/packages/firecamp-desktop/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt b/packages/firecamp-tauri/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt similarity index 100% rename from packages/firecamp-desktop/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt rename to packages/firecamp-tauri/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt diff --git a/packages/firecamp-desktop/src-tauri/src/main.rs b/packages/firecamp-tauri/src-tauri/src/main.rs similarity index 100% rename from packages/firecamp-desktop/src-tauri/src/main.rs rename to packages/firecamp-tauri/src-tauri/src/main.rs diff --git a/packages/firecamp-desktop/src-tauri/tauri.conf.json b/packages/firecamp-tauri/src-tauri/tauri.conf.json similarity index 100% rename from packages/firecamp-desktop/src-tauri/tauri.conf.json rename to packages/firecamp-tauri/src-tauri/tauri.conf.json diff --git a/packages/firecamp-desktop/src/App.css b/packages/firecamp-tauri/src/App.css similarity index 100% rename from packages/firecamp-desktop/src/App.css rename to packages/firecamp-tauri/src/App.css diff --git a/packages/firecamp-desktop/src/App.tsx b/packages/firecamp-tauri/src/App.tsx similarity index 100% rename from packages/firecamp-desktop/src/App.tsx rename to packages/firecamp-tauri/src/App.tsx diff --git a/packages/firecamp-desktop/src/assets/react.svg b/packages/firecamp-tauri/src/assets/react.svg similarity index 100% rename from packages/firecamp-desktop/src/assets/react.svg rename to packages/firecamp-tauri/src/assets/react.svg diff --git a/packages/firecamp-desktop/src/main.tsx b/packages/firecamp-tauri/src/main.tsx similarity index 100% rename from packages/firecamp-desktop/src/main.tsx rename to packages/firecamp-tauri/src/main.tsx diff --git a/packages/firecamp-desktop/src/styles.css b/packages/firecamp-tauri/src/styles.css similarity index 100% rename from packages/firecamp-desktop/src/styles.css rename to packages/firecamp-tauri/src/styles.css diff --git a/packages/firecamp-desktop/tsconfig.json b/packages/firecamp-tauri/tsconfig.json similarity index 100% rename from packages/firecamp-desktop/tsconfig.json rename to packages/firecamp-tauri/tsconfig.json diff --git a/packages/firecamp-desktop/tsconfig.node.json b/packages/firecamp-tauri/tsconfig.node.json similarity index 100% rename from packages/firecamp-desktop/tsconfig.node.json rename to packages/firecamp-tauri/tsconfig.node.json diff --git a/packages/firecamp-desktop/vite.config.ts b/packages/firecamp-tauri/vite.config.ts similarity index 100% rename from packages/firecamp-desktop/vite.config.ts rename to packages/firecamp-tauri/vite.config.ts From b7f648571378e37cd8c5a9589658c3cf412c8aac Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 28 Oct 2023 13:25:09 +0530 Subject: [PATCH 08/71] chore: temp commit --- pnpm-lock.yaml | 2681 +++++++++++++++++++++--------------------------- 1 file changed, 1147 insertions(+), 1534 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 31b321d39..61ad97a1f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,7 +98,7 @@ importers: version: 19.0.4(eslint-plugin-import@2.27.5)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.32.1)(eslint@8.32.0) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) + version: 2.27.5(eslint@8.32.0) eslint-plugin-jest: specifier: ^27.2.1 version: 27.2.1(eslint@8.32.0)(typescript@5.0.2) @@ -273,7 +273,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.11.18)(typescript@5.0.2) @@ -452,7 +452,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4) + version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.0.3)(typescript@4.7.4) @@ -522,7 +522,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.11.18)(typescript@5.0.2) @@ -533,37 +533,6 @@ importers: specifier: ^5.0.2 version: 5.0.2 - packages/firecamp-desktop: - dependencies: - '@tauri-apps/api': - specifier: ^1.4.0 - version: 1.4.0 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - devDependencies: - '@tauri-apps/cli': - specifier: ^1.4.0 - version: 1.4.0 - '@types/react': - specifier: ^18.2.15 - version: 18.2.15 - '@types/react-dom': - specifier: ^18.2.7 - version: 18.2.7 - '@vitejs/plugin-react': - specifier: ^4.0.3 - version: 4.0.3(vite@4.4.4) - typescript: - specifier: ^5.0.2 - version: 5.0.2 - vite: - specifier: ^4.4.4 - version: 4.4.4(@types/node@16.18.40)(sass@1.57.1) - packages/firecamp-echo-server: dependencies: '@nestjs/common': @@ -662,7 +631,7 @@ importers: version: 6.2.4 ts-jest: specifier: 28.0.5 - version: 28.0.5(@babel/core@7.22.11)(jest@28.1.2)(typescript@4.7.4) + version: 28.0.5(@babel/core@7.20.12)(jest@28.1.2)(typescript@4.7.4) ts-loader: specifier: 9.3.1 version: 9.3.1(typescript@4.7.4)(webpack@5.75.0) @@ -676,6 +645,79 @@ importers: specifier: 4.7.4 version: 4.7.4 + packages/firecamp-har: + dependencies: + '@firecamp/types': + specifier: ^0.2.2 + version: 0.2.2 + '@types/har-format': + specifier: ^1.2.8 + version: 1.2.10 + devDependencies: + '@types/chrome': + specifier: ^0.0.204 + version: 0.0.204 + '@types/jest': + specifier: ^29.2.4 + version: 29.2.4 + '@types/node': + specifier: ^18.0.0 + version: 18.0.3 + '@typescript-eslint/eslint-plugin': + specifier: ^5.35.1 + version: 5.48.2(@typescript-eslint/parser@5.30.5)(eslint@8.32.0)(typescript@4.9.5) + '@typescript-eslint/parser': + specifier: ^5.29.0 + version: 5.30.5(eslint@8.32.0)(typescript@4.9.5) + cspell: + specifier: ^4.1.0 + version: 4.2.8 + eslint: + specifier: ^8.29.0 + version: 8.32.0 + eslint-config-prettier: + specifier: ^6.11.0 + version: 6.15.0(eslint@8.32.0) + eslint-plugin-eslint-comments: + specifier: ^3.2.0 + version: 3.2.0(eslint@8.32.0) + eslint-plugin-functional: + specifier: ^4.2.1 + version: 4.4.1(eslint@8.32.0)(typescript@4.9.5) + eslint-plugin-import: + specifier: ^2.22.0 + version: 2.26.0(@typescript-eslint/parser@5.30.5)(eslint@8.32.0) + jest: + specifier: ^28.1.3 + version: 28.1.3(@types/node@18.0.3)(ts-node@10.9.1) + jest-chrome: + specifier: ^0.8.0 + version: 0.8.0(jest@28.1.3) + prettier: + specifier: ^2.1.1 + version: 2.7.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + standard-version: + specifier: ^9.0.0 + version: 9.5.0 + ts-jest: + specifier: ^28.0.7 + version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.9.5) + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) + tsup: + specifier: ^6.7.0 + version: 6.7.0(postcss@8.4.27)(ts-node@10.9.1)(typescript@4.9.5) + typedoc: + specifier: ^0.23.8 + version: 0.23.24(typescript@4.9.5) + typescript: + specifier: ^4.7.4 + version: 4.9.5 + packages/firecamp-scripts: dependencies: '@firecamp/types': @@ -792,7 +834,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -849,7 +891,7 @@ importers: version: link:../../playgrounds/firecamp-websocket '@mantine/form': specifier: ^6.0.17 - version: 6.0.17(react@17.0.2) + version: 6.0.17(react@18.2.0) '@sentry/browser': specifier: 7.28.1 version: 7.28.1 @@ -896,26 +938,26 @@ importers: specifier: ^4.7.1 version: 4.11.0 react: - specifier: 17.0.2 - version: 17.0.2 + specifier: 18.2.0 + version: 18.2.0 react-dom: - specifier: 17.0.2 - version: 17.0.2(react@17.0.2) + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) react-dropzone: specifier: ^14.2.3 - version: 14.2.3(react@17.0.2) + version: 14.2.3(react@18.2.0) react-error-boundary: specifier: ^3.1.4 - version: 3.1.4(react@17.0.2) + version: 3.1.4(react@18.2.0) react-ga: specifier: ^3.1.2 - version: 3.3.1(prop-types@15.8.1)(react@17.0.2) + version: 3.3.1(prop-types@15.8.1)(react@18.2.0) react-hook-form: specifier: ^6.8.1 - version: 6.15.8(react@17.0.2) + version: 6.15.8(react@18.2.0) react-hotkeys-hook: specifier: ^3.3.1 - version: 3.4.7(react-dom@17.0.2)(react@17.0.2) + version: 3.4.7(react-dom@18.2.0)(react@18.2.0) redux: specifier: ^3.2.1 version: 3.7.2 @@ -927,14 +969,14 @@ importers: version: 0.2.0 zustand: specifier: ^4.3.9 - version: 4.3.9(react@17.0.2) + version: 4.3.9(react@18.2.0) devDependencies: '@types/chrome': specifier: ^0.0.204 version: 0.0.204 '@types/react-dom': - specifier: ^17.0.13 - version: 17.0.18 + specifier: ^18.2.0 + version: 18.2.14 platform/firecamp-ui: dependencies: @@ -949,43 +991,43 @@ importers: version: 0.0.24 '@mantine/core': specifier: ^6.0.14 - version: 6.0.14(@emotion/react@11.11.1)(@mantine/hooks@6.0.14)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + version: 6.0.14(@emotion/react@11.11.1)(@mantine/hooks@6.0.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) '@mantine/form': specifier: ^6.0.17 - version: 6.0.17(react@17.0.2) + version: 6.0.17(react@18.2.0) '@mantine/hooks': specifier: ^6.0.14 - version: 6.0.14(react@17.0.2) + version: 6.0.14(react@18.2.0) '@mantine/modals': specifier: ^6.0.17 - version: 6.0.17(@mantine/core@6.0.14)(@mantine/hooks@6.0.14)(react-dom@17.0.2)(react@17.0.2) + version: 6.0.17(@mantine/core@6.0.14)(@mantine/hooks@6.0.14)(react-dom@18.2.0)(react@18.2.0) '@monaco-editor/react': specifier: 4.4.5 - version: 4.4.5(monaco-editor@0.34.1)(react-dom@17.0.2)(react@17.0.2) + version: 4.4.5(monaco-editor@0.34.1)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dropdown-menu': specifier: ^2.0.1 - version: 2.0.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + version: 2.0.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-scroll-area': specifier: ^1.0.2 - version: 1.0.3(react-dom@17.0.2)(react@17.0.2) + version: 1.0.3(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-switch': specifier: ^1.0.2 - version: 1.0.2(react-dom@17.0.2)(react@17.0.2) + version: 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-toast': specifier: ^1.0.0 - version: 1.1.2(react-dom@17.0.2)(react@17.0.2) + version: 1.1.2(react-dom@18.2.0)(react@18.2.0) '@szhsin/react-menu': specifier: ^2.3.2 - version: 2.3.4(react-dom@17.0.2)(react@17.0.2) + version: 2.3.4(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-table': specifier: ^8.6.0 - version: 8.7.6(react-dom@17.0.2)(react@17.0.2) + version: 8.7.6(react-dom@18.2.0)(react@18.2.0) classnames: specifier: ^2.3.1 version: 2.3.2 firecamp-treeview: specifier: ^0.0.1-0 - version: 0.0.1-0(react-dom@17.0.2)(react-window@1.8.8)(react@17.0.2)(vscode-uri@3.0.7) + version: 0.0.1-0(react-dom@18.2.0)(react-window@1.8.8)(react@18.2.0)(vscode-uri@3.0.7) fuzzysort: specifier: ^2.0.1 version: 2.0.4 @@ -1006,31 +1048,31 @@ importers: version: 1.2.0 re-resizable: specifier: ^6.9.9 - version: 6.9.9(react-dom@17.0.2)(react@17.0.2) + version: 6.9.9(react-dom@18.2.0)(react@18.2.0) react: - specifier: ^17.0.0 - version: 17.0.2 + specifier: ^18.2.0 + version: 18.2.0 react-codemirror2: specifier: ^7.2.1 - version: 7.2.1(codemirror@5.65.11)(react@17.0.2) + version: 7.2.1(codemirror@5.65.11)(react@18.2.0) react-complex-tree: specifier: ^2.0.0 - version: 2.0.2(react@17.0.2) + version: 2.0.2(react@18.2.0) react-hook-form: specifier: ^6.8.1 - version: 6.15.8(react@17.0.2) + version: 6.15.8(react@18.2.0) react-reflex: specifier: ^4.0.3 - version: 4.0.9(react-dom@17.0.2)(react@17.0.2) + version: 4.0.9(react-dom@18.2.0)(react@18.2.0) react-table: specifier: 7.8.0 - version: 7.8.0(react@17.0.2) + version: 7.8.0(react@18.2.0) react-tiny-popover: specifier: ^7.0.1 - version: 7.2.0(react-dom@17.0.2)(react@17.0.2) + version: 7.2.0(react-dom@18.2.0)(react@18.2.0) react-window: specifier: ^1.8.5 - version: 1.8.8(react-dom@17.0.2)(react@17.0.2) + version: 1.8.8(react-dom@18.2.0)(react@18.2.0) vscode: specifier: ^1.1.37 version: 1.1.37 @@ -1046,37 +1088,37 @@ importers: version: 7.20.2(@babel/core@7.20.12) '@storybook/addon-actions': specifier: ^6.5.10 - version: 6.5.15(react-dom@17.0.2)(react@17.0.2) + version: 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-essentials': specifier: ^6.5.10 - version: 6.5.15(@babel/core@7.20.12)(@storybook/builder-webpack5@6.5.15)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0) + version: 6.5.15(@babel/core@7.20.12)(@storybook/builder-webpack5@6.5.15)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0) '@storybook/addon-interactions': specifier: ^6.5.10 - version: 6.5.15(@types/react@17.0.53)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + version: 6.5.15(@types/react@18.2.29)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/addon-jest': specifier: ^6.5.10 - version: 6.5.15(react-dom@17.0.2)(react@17.0.2) + version: 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-links': specifier: ^6.5.10 - version: 6.5.15(react-dom@17.0.2)(react@17.0.2) + version: 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/builder-webpack5': specifier: ^6.5.10 - version: 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + version: 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/jest': specifier: ^0.0.10 - version: 0.0.10(react-dom@17.0.2)(react@17.0.2) + version: 0.0.10(react-dom@18.2.0)(react@18.2.0) '@storybook/manager-webpack5': specifier: ^6.5.10 - version: 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + version: 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/react': specifier: ^6.5.10 - version: 6.5.15(@babel/core@7.20.12)(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(require-from-string@2.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack-dev-server@4.11.1)(webpack-hot-middleware@2.25.3) + version: 6.5.15(@babel/core@7.20.12)(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(require-from-string@2.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack-dev-server@4.11.1)(webpack-hot-middleware@2.25.3) '@storybook/test-runner': specifier: ^0.8.0 - version: 0.8.0(@types/node@16.18.40)(eslint@8.32.0)(jest-circus@28.1.3)(jest-environment-node@28.1.3)(react-dom@17.0.2)(react@17.0.2)(ts-node@10.9.1)(typescript@5.0.2)(webpack-cli@5.0.1) + version: 0.8.0(@types/node@16.18.40)(eslint@8.32.0)(jest-circus@28.1.3)(jest-environment-node@28.1.3)(react-dom@18.2.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/testing-library': specifier: ^0.0.13 - version: 0.0.13(react-dom@17.0.2)(react@17.0.2) + version: 0.0.13(react-dom@18.2.0)(react@18.2.0) '@tailwindcss/postcss7-compat': specifier: ^2.2.17 version: 2.2.17(ts-node@10.9.1) @@ -1085,7 +1127,7 @@ importers: version: 5.16.5 '@testing-library/react': specifier: 12.1.2 - version: 12.1.2(react-dom@17.0.2)(react@17.0.2) + version: 12.1.2(react-dom@18.2.0)(react@18.2.0) '@types/codemirror': specifier: ^5.60.5 version: 5.60.6 @@ -1093,11 +1135,11 @@ importers: specifier: ^12.2.3 version: 12.2.3 '@types/react': - specifier: ^17.0.2 - version: 17.0.53 + specifier: ^18.2.0 + version: 18.2.29 '@types/react-dom': - specifier: ^17.0.2 - version: 17.0.18 + specifier: ^18.2.0 + version: 18.2.14 '@types/react-table': specifier: ^7.7.10 version: 7.7.14 @@ -1144,8 +1186,8 @@ importers: specifier: ^4.0.2 version: 4.0.2(webpack@5.75.0) react-dom: - specifier: 17.0.2 - version: 17.0.2(react@17.0.2) + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) sass: specifier: ^1.54.4 version: 1.57.1 @@ -1187,7 +1229,7 @@ importers: version: 1.3.2(@codemirror/language@0.20.2)(codemirror@5.65.11)(graphql@15.8.0) graphiql-explorer: specifier: ^0.9.0 - version: 0.9.0(graphql@15.8.0)(react-dom@17.0.2)(react@17.0.2) + version: 0.9.0(graphql@15.8.0)(react-dom@18.2.0)(react@18.2.0) graphql: specifier: ^15.6.0 version: 15.8.0 @@ -1195,11 +1237,11 @@ importers: specifier: ^4.17.21 version: 4.17.21 react: - specifier: 17.0.2 - version: 17.0.2 + specifier: 18.2.0 + version: 18.2.0 react-dom: - specifier: 17.0.2 - version: 17.0.2(react@17.0.2) + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) devDependencies: '@types/jest': specifier: 29.2.4 @@ -1251,7 +1293,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1340,20 +1382,20 @@ importers: specifier: ^4.7.1 version: 4.11.0 react: - specifier: 17.0.2 - version: 17.0.2 + specifier: 18.2.0 + version: 18.2.0 react-dom: - specifier: 17.0.2 - version: 17.0.2(react@17.0.2) + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) react-file-drop: specifier: ^3.1.5 version: 3.1.6 react-ga: specifier: ^3.1.2 - version: 3.3.1(prop-types@15.8.1)(react@17.0.2) + version: 3.3.1(prop-types@15.8.1)(react@18.2.0) react-hotkeys-hook: specifier: ^3.3.1 - version: 3.4.7(react-dom@17.0.2)(react@17.0.2) + version: 3.4.7(react-dom@18.2.0)(react@18.2.0) tv4: specifier: ^1.3.0 version: 1.3.0 @@ -1432,7 +1474,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@16.18.23)(typescript@5.0.2) @@ -1562,7 +1604,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1606,17 +1648,17 @@ importers: specifier: ^15.6.2 version: 15.8.1 react: - specifier: 17.0.2 - version: 17.0.2 + specifier: 18.2.0 + version: 18.2.0 react-dom: - specifier: 17.0.2 - version: 17.0.2(react@17.0.2) + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) react-ga: specifier: ^3.1.2 - version: 3.3.1(prop-types@15.8.1)(react@17.0.2) + version: 3.3.1(prop-types@15.8.1)(react@18.2.0) react-virtualized: specifier: ^9.21.5 - version: 9.22.3(react-dom@17.0.2)(react@17.0.2) + version: 9.22.3(react-dom@18.2.0)(react@18.2.0) socket.io-client-v2: specifier: npm:socket.io-client@2.4.0 version: /socket.io-client@2.4.0 @@ -1628,7 +1670,7 @@ importers: version: /socket.io-client@4.1.3 zustand: specifier: ^4.3.9 - version: 4.3.9(react@17.0.2) + version: 4.3.9(react@18.2.0) devDependencies: '@types/jest': specifier: 29.2.4 @@ -1680,7 +1722,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1762,7 +1804,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1806,23 +1848,23 @@ importers: specifier: ^15.6.2 version: 15.8.1 react: - specifier: 17.0.2 - version: 17.0.2 + specifier: 18.2.0 + version: 18.2.0 react-dom: - specifier: 17.0.2 - version: 17.0.2(react@17.0.2) + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) react-fast-compare: specifier: ^3.2.0 version: 3.2.0 react-ga: specifier: ^3.1.2 - version: 3.3.1(prop-types@15.8.1)(react@17.0.2) + version: 3.3.1(prop-types@15.8.1)(react@18.2.0) react-virtualized: specifier: ^9.21.5 - version: 9.22.3(react-dom@17.0.2)(react@17.0.2) + version: 9.22.3(react-dom@18.2.0)(react@18.2.0) zustand: specifier: ^4.3.9 - version: 4.3.9(react@17.0.2) + version: 4.3.9(react@18.2.0) devDependencies: '@types/jest': specifier: 29.2.4 @@ -1877,7 +1919,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1959,7 +2001,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -2073,30 +2115,17 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 - dev: true - - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.13 - chalk: 2.4.2 /@babel/compat-data@7.20.10: resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} engines: {node: '>=6.9.0'} dev: true - /@babel/compat-data@7.22.9: - resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.12.9: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.21.4 '@babel/generator': 7.20.7 '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.20.13 @@ -2139,29 +2168,6 @@ packages: - supports-color dev: true - /@babel/core@7.22.11: - resolution: {integrity: sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.10 - '@babel/helper-compilation-targets': 7.22.10 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) - '@babel/helpers': 7.22.11 - '@babel/parser': 7.22.13 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.11 - '@babel/types': 7.22.11 - convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/eslint-parser@7.19.1(@babel/core@7.20.12)(eslint@7.32.0): resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -2199,16 +2205,6 @@ packages: jsesc: 2.5.2 dev: true - /@babel/generator@7.22.10: - resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.11 - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.19 - jsesc: 2.5.2 - dev: true - /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} @@ -2238,17 +2234,6 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.22.10: - resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.10 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-create-class-features-plugin@7.20.12(@babel/core@7.20.12): resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==} engines: {node: '>=6.9.0'} @@ -2318,11 +2303,6 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-environment-visitor@7.22.5: - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} @@ -2338,14 +2318,6 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.11 - dev: true - /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} @@ -2353,13 +2325,6 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.11 - dev: true - /@babel/helper-member-expression-to-functions@7.20.7: resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} engines: {node: '>=6.9.0'} @@ -2372,13 +2337,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 - dev: true - - /@babel/helper-module-imports@7.22.5: - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.11 /@babel/helper-module-transforms@7.20.11: resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} @@ -2396,20 +2354,6 @@ packages: - supports-color dev: true - /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11): - resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.11 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.5 - dev: true - /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} @@ -2426,11 +2370,6 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} @@ -2467,13 +2406,6 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.11 - dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} @@ -2488,41 +2420,19 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.11 - dev: true - /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} - engines: {node: '>=6.9.0'} /@babel/helper-validator-option@7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.22.5: - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} @@ -2546,31 +2456,11 @@ packages: - supports-color dev: true - /@babel/helpers@7.22.11: - resolution: {integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.11 - '@babel/types': 7.22.11 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - - /@babel/highlight@7.22.13: - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 @@ -2582,14 +2472,6 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/parser@7.22.13: - resolution: {integrity: sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.22.11 - dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -3368,26 +3250,6 @@ packages: '@babel/plugin-transform-react-jsx': 7.20.13(@babel/core@7.20.12) dev: true - /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.11 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.11): - resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.11 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-react-jsx@7.20.13(@babel/core@7.20.12): resolution: {integrity: sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==} engines: {node: '>=6.9.0'} @@ -3724,20 +3586,11 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/template@7.22.5: - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.22.13 - '@babel/types': 7.22.11 - dev: true - /@babel/traverse@7.20.13: resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.21.4 '@babel/generator': 7.20.7 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 @@ -3751,24 +3604,6 @@ packages: - supports-color dev: true - /@babel/traverse@7.22.11: - resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.10 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.13 - '@babel/types': 7.22.11 - debug: 4.3.4(supports-color@8.1.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/types@7.20.7: resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} @@ -3776,15 +3611,6 @@ packages: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - dev: true - - /@babel/types@7.22.11: - resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -3970,7 +3796,7 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@design-systems/utils@2.12.0(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): + /@design-systems/utils@2.12.0(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Y/d2Zzr+JJfN6u1gbuBUb1ufBuLMJJRZQk+dRmw8GaTpqKx5uf7cGUYGTwN02dIb3I+Tf+cW8jcGBTRiFxdYFg==} peerDependencies: '@types/react': '*' @@ -3978,25 +3804,25 @@ packages: react-dom: '>= 16.8.6' dependencies: '@babel/runtime': 7.20.13 - '@types/react': 17.0.53 + '@types/react': 18.2.29 clsx: 1.2.1 focus-lock: 0.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) react-merge-refs: 1.1.0 dev: true - /@devtools-ds/object-inspector@1.2.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): + /@devtools-ds/object-inspector@1.2.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-nrAVVj4c4Iv9958oE4HA7Mk6T+4Mn/4xBRlFDeX4Ps6SMzsqO8bKhw/y6+bOfNyb/TYHmC0/pnPS68GDVZcg5Q==} peerDependencies: react: '>= 16.8.6' dependencies: '@babel/runtime': 7.7.2 '@devtools-ds/object-parser': 1.2.1 - '@devtools-ds/themes': 1.2.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) - '@devtools-ds/tree': 1.2.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@devtools-ds/themes': 1.2.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) + '@devtools-ds/tree': 1.2.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) clsx: 1.1.0 - react: 17.0.2 + react: 18.2.0 transitivePeerDependencies: - '@types/react' - react-dom @@ -4008,29 +3834,29 @@ packages: '@babel/runtime': 7.5.5 dev: true - /@devtools-ds/themes@1.2.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): + /@devtools-ds/themes@1.2.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-4/KFsHnokGxUq8CSCchINcVBb6fQ74HtEfNtMuitGtGg3VCRV0kaVSOsz6wzShzhLEaVLd5coSRQKaZj7yx72w==} peerDependencies: react: '>= 16.8.6' dependencies: '@babel/runtime': 7.5.5 - '@design-systems/utils': 2.12.0(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@design-systems/utils': 2.12.0(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) clsx: 1.1.0 - react: 17.0.2 + react: 18.2.0 transitivePeerDependencies: - '@types/react' - react-dom dev: true - /@devtools-ds/tree@1.2.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): + /@devtools-ds/tree@1.2.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2ZHG28oWJno0gD+20EoSJO0yffm6JS5r7YzYhGMkrnLGvcCRZuwXSxMmIshSPLIR0cjidiAfGCqsrigHIR4ZQA==} peerDependencies: react: '>= 16.8.6' dependencies: '@babel/runtime': 7.7.2 - '@devtools-ds/themes': 1.2.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@devtools-ds/themes': 1.2.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) clsx: 1.1.0 - react: 17.0.2 + react: 18.2.0 transitivePeerDependencies: - '@types/react' - react-dom @@ -4043,7 +3869,7 @@ packages: /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.22.5 + '@babel/helper-module-imports': 7.18.6 '@babel/runtime': 7.22.10 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 @@ -4074,7 +3900,7 @@ packages: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: false - /@emotion/react@11.11.1(@types/react@17.0.53)(react@17.0.2): + /@emotion/react@11.11.1(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} peerDependencies: '@types/react': '*' @@ -4087,12 +3913,12 @@ packages: '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@17.0.2) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 - '@types/react': 17.0.53 + '@types/react': 18.2.29 hoist-non-react-statics: 3.3.2 - react: 17.0.2 + react: 18.2.0 dev: false /@emotion/serialize@1.1.2: @@ -4113,12 +3939,12 @@ packages: resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} dev: false - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@17.0.2): + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: react: '>=16.8.0' dependencies: - react: 17.0.2 + react: 18.2.0 dev: false /@emotion/utils@1.2.1: @@ -4138,15 +3964,6 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.17.18: resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} engines: {node: '>=12'} @@ -4156,15 +3973,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.17.18: resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} engines: {node: '>=12'} @@ -4174,15 +3982,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.17.18: resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} engines: {node: '>=12'} @@ -4192,15 +3991,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.17.18: resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} engines: {node: '>=12'} @@ -4210,15 +4000,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.17.18: resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} engines: {node: '>=12'} @@ -4228,15 +4009,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.17.18: resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} engines: {node: '>=12'} @@ -4246,15 +4018,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.17.18: resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} engines: {node: '>=12'} @@ -4264,15 +4027,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.17.18: resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} engines: {node: '>=12'} @@ -4282,15 +4036,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.17.18: resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} engines: {node: '>=12'} @@ -4300,62 +4045,26 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.17.18: - resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.17.18: - resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + /@esbuild/linux-loong64@0.17.18: + resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} engines: {node: '>=12'} - cpu: [mips64el] + cpu: [loong64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-ppc64@0.17.18: - resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} + /@esbuild/linux-mips64el@0.17.18: + resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} engines: {node: '>=12'} - cpu: [ppc64] + cpu: [mips64el] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + /@esbuild/linux-ppc64@0.17.18: + resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -4372,15 +4081,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.17.18: resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} engines: {node: '>=12'} @@ -4390,15 +4090,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.17.18: resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} engines: {node: '>=12'} @@ -4408,15 +4099,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.17.18: resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} engines: {node: '>=12'} @@ -4426,15 +4108,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.17.18: resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} engines: {node: '>=12'} @@ -4444,15 +4117,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.17.18: resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} engines: {node: '>=12'} @@ -4462,15 +4126,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.17.18: resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} engines: {node: '>=12'} @@ -4480,15 +4135,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.17.18: resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} engines: {node: '>=12'} @@ -4498,15 +4144,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.17.18: resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} engines: {node: '>=12'} @@ -4516,15 +4153,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint/eslintrc@0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4681,41 +4309,41 @@ packages: '@floating-ui/core': 1.3.1 dev: false - /@floating-ui/react-dom@0.7.2(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): + /@floating-ui/react-dom@0.7.2(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: '@floating-ui/dom': 0.5.4 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - use-isomorphic-layout-effect: 1.1.2(@types/react@17.0.53)(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.29)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /@floating-ui/react-dom@1.3.0(react-dom@17.0.2)(react@17.0.2): + /@floating-ui/react-dom@1.3.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-htwHm67Ji5E/pROEAr7f8IKFShuiCKHwUC/UY4vC3I5jiSvGFAYnSYiZO5MlGmads+QqvUkR9ANHEguGrDv72g==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: '@floating-ui/dom': 1.4.2 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@floating-ui/react@0.19.2(react-dom@17.0.2)(react@17.0.2): + /@floating-ui/react@0.19.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-JyNk4A0Ezirq8FlXECvRtQOX/iBe5Ize0W/pLkrZjfHW9GUV7Xnq6zm6fyZuQzaHHqEnVizmvlA96e1/CkZv+w==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/react-dom': 1.3.0(react-dom@17.0.2)(react@17.0.2) + '@floating-ui/react-dom': 1.3.0(react-dom@18.2.0)(react@18.2.0) aria-hidden: 1.2.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) tabbable: 6.1.2 dev: false @@ -5002,7 +4630,7 @@ packages: jest-changed-files: 29.2.0 jest-config: 29.3.1(@types/node@16.18.40)(ts-node@10.9.1) jest-haste-map: 29.3.1 - jest-message-util: 29.5.0 + jest-message-util: 29.6.2 jest-regex-util: 29.2.0 jest-resolve: 29.3.1 jest-resolve-dependencies: 29.3.1 @@ -5171,7 +4799,7 @@ packages: '@jest/types': 29.6.1 '@sinonjs/fake-timers': 9.1.2 '@types/node': 16.18.40 - jest-message-util: 29.5.0 + jest-message-util: 29.6.2 jest-mock: 29.3.1 jest-util: 29.6.2 dev: true @@ -5275,7 +4903,7 @@ packages: '@jest/test-result': 29.6.2 '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 '@types/node': 16.18.40 chalk: 4.1.2 collect-v8-coverage: 1.0.1 @@ -5349,13 +4977,6 @@ packages: '@sinclair/typebox': 0.24.51 dev: true - /@jest/schemas@29.4.3: - resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.25.24 - dev: true - /@jest/schemas@29.6.0: resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5580,7 +5201,7 @@ packages: resolution: {integrity: sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 16.18.40 @@ -5670,46 +5291,46 @@ packages: '@lezer/common': 0.16.1 dev: false - /@mantine/core@6.0.14(@emotion/react@11.11.1)(@mantine/hooks@6.0.14)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): + /@mantine/core@6.0.14(@emotion/react@11.11.1)(@mantine/hooks@6.0.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-O916itwsB5XtEStVZRqp3SlB4aLM0sSgOFYYCVnLJ3E9O9E8h1xhaNEml1FJbMtrlNaXYUd6sy/OSRqNl9DyKA==} peerDependencies: '@mantine/hooks': 6.0.14 react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/react': 0.19.2(react-dom@17.0.2)(react@17.0.2) - '@mantine/hooks': 6.0.14(react@17.0.2) - '@mantine/styles': 6.0.14(@emotion/react@11.11.1)(react-dom@17.0.2)(react@17.0.2) - '@mantine/utils': 6.0.14(react@17.0.2) - '@radix-ui/react-scroll-area': 1.0.2(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-remove-scroll: 2.5.5(@types/react@17.0.53)(react@17.0.2) - react-textarea-autosize: 8.3.4(@types/react@17.0.53)(react@17.0.2) + '@floating-ui/react': 0.19.2(react-dom@18.2.0)(react@18.2.0) + '@mantine/hooks': 6.0.14(react@18.2.0) + '@mantine/styles': 6.0.14(@emotion/react@11.11.1)(react-dom@18.2.0)(react@18.2.0) + '@mantine/utils': 6.0.14(react@18.2.0) + '@radix-ui/react-scroll-area': 1.0.2(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.29)(react@18.2.0) + react-textarea-autosize: 8.3.4(@types/react@18.2.29)(react@18.2.0) transitivePeerDependencies: - '@emotion/react' - '@types/react' dev: false - /@mantine/form@6.0.17(react@17.0.2): + /@mantine/form@6.0.17(react@18.2.0): resolution: {integrity: sha512-hrWlBukErklaFSvKfz4PCl3Cd7UgHf5Q/FyZPD+WvBDT0zZ5uMjatQpVs/HAfhFOA5O2DFKAcs654mLzmJJ6Wg==} peerDependencies: react: '>=16.8.0' dependencies: fast-deep-equal: 3.1.3 klona: 2.0.6 - react: 17.0.2 + react: 18.2.0 dev: false - /@mantine/hooks@6.0.14(react@17.0.2): + /@mantine/hooks@6.0.14(react@18.2.0): resolution: {integrity: sha512-cBGdTSdBDLcPScoeI12DCWFVzmT4tX+DmI9s+MOBm4IdhF4ogkLbbRgKosFbaBWNKx9WzYAUiQR/tUI5dTkJPQ==} peerDependencies: react: '>=16.8.0' dependencies: - react: 17.0.2 + react: 18.2.0 dev: false - /@mantine/modals@6.0.17(@mantine/core@6.0.14)(@mantine/hooks@6.0.14)(react-dom@17.0.2)(react@17.0.2): + /@mantine/modals@6.0.17(@mantine/core@6.0.14)(@mantine/hooks@6.0.14)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-57S4+G7+iPZOd6utzx3aYRKA1FcfJX7tfnbPafk303gSbZ9KQ3UWKJn9bk1HWev8AQsrNDyPH1zhjxVGpnqTZA==} peerDependencies: '@mantine/core': 6.0.17 @@ -5717,41 +5338,41 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@mantine/core': 6.0.14(@emotion/react@11.11.1)(@mantine/hooks@6.0.14)(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) - '@mantine/hooks': 6.0.14(react@17.0.2) - '@mantine/utils': 6.0.17(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@mantine/core': 6.0.14(@emotion/react@11.11.1)(@mantine/hooks@6.0.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) + '@mantine/hooks': 6.0.14(react@18.2.0) + '@mantine/utils': 6.0.17(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@mantine/styles@6.0.14(@emotion/react@11.11.1)(react-dom@17.0.2)(react@17.0.2): + /@mantine/styles@6.0.14(@emotion/react@11.11.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qkqUodvVPzthmVzWQHYe/yWrc8UZcz8A5KfegK2Ps67bZzfoZs/NBVcEx6REq8HTsISjYw3jJyMRxAE3G7Ms4Q==} peerDependencies: '@emotion/react': '>=11.9.0' react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@emotion/react': 11.11.1(@types/react@17.0.53)(react@17.0.2) + '@emotion/react': 11.11.1(@types/react@18.2.29)(react@18.2.0) clsx: 1.1.1 csstype: 3.0.9 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@mantine/utils@6.0.14(react@17.0.2): + /@mantine/utils@6.0.14(react@18.2.0): resolution: {integrity: sha512-se+3IXJsNj4wnLMlqc7LiBe74m+JLQJ5o3wEcDtFzaJEtEt1rtw/1q3xKuROkH3xEiauhxQgzsc4gj/AslHy2A==} peerDependencies: react: '>=16.8.0' dependencies: - react: 17.0.2 + react: 18.2.0 dev: false - /@mantine/utils@6.0.17(react@17.0.2): + /@mantine/utils@6.0.17(react@18.2.0): resolution: {integrity: sha512-U6SWV/asYE6NhiHx4ltmVZdQR3HwGVqJxVulhOylMcV1tX/P1LMQUCbGV2Oe4O9jbX4/YW5B/CBb4BbEhENQFQ==} peerDependencies: react: '>=16.8.0' dependencies: - react: 17.0.2 + react: 18.2.0 dev: false /@mdx-js/mdx@1.6.22: @@ -5780,12 +5401,12 @@ packages: - supports-color dev: true - /@mdx-js/react@1.6.22(react@17.0.2): + /@mdx-js/react@1.6.22(react@18.2.0): resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==} peerDependencies: react: ^16.13.1 || ^17.0.0 dependencies: - react: 17.0.2 + react: 18.2.0 dev: true /@mdx-js/util@1.6.22: @@ -5801,7 +5422,7 @@ packages: state-local: 1.0.7 dev: false - /@monaco-editor/react@4.4.5(monaco-editor@0.34.1)(react-dom@17.0.2)(react@17.0.2): + /@monaco-editor/react@4.4.5(monaco-editor@0.34.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-IImtzU7sRc66OOaQVCG+5PFHkSWnnhrUWGBuH6zNmH2h0YgmAhcjHZQc/6MY9JWEbUtVF1WPBMJ9u1XuFbRrVA==} peerDependencies: monaco-editor: '>= 0.25.0 < 1' @@ -5811,8 +5432,8 @@ packages: '@monaco-editor/loader': 1.3.2(monaco-editor@0.34.1) monaco-editor: 0.34.1 prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false /@mrmlnc/readdir-enhanced@2.2.1: @@ -6618,61 +6239,61 @@ packages: '@babel/runtime': 7.20.13 dev: false - /@radix-ui/react-arrow@1.0.1(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-arrow@1.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collection@1.0.1(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-collection@1.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-slot': 1.0.1(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.1(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-compose-refs@1.0.0(react@17.0.2): + /@radix-ui/react-compose-refs@1.0.0(react@18.2.0): resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - react: 17.0.2 + react: 18.2.0 dev: false - /@radix-ui/react-context@1.0.0(react@17.0.2): + /@radix-ui/react-context@1.0.0(react@18.2.0): resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - react: 17.0.2 + react: 18.2.0 dev: false - /@radix-ui/react-direction@1.0.0(react@17.0.2): + /@radix-ui/react-direction@1.0.0(react@18.2.0): resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - react: 17.0.2 + react: 18.2.0 dev: false - /@radix-ui/react-dismissable-layer@1.0.2(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-dismissable-layer@1.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-WjJzMrTWROozDqLB0uRWYvj4UuXsM/2L19EmQ3Au+IJWqwvwq9Bwd+P8ivo0Deg9JDPArR1I6MbWNi1CmXsskg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -6680,15 +6301,15 @@ packages: dependencies: '@babel/runtime': 7.20.13 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - '@radix-ui/react-use-escape-keydown': 1.0.2(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.2(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dropdown-menu@2.0.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-dropdown-menu@2.0.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-WDZqmwsNuxdBMkvgB85UeSPAT0wSBd+ojxtzX7lU7uYYh47gacCj6Spo0l9+X4TMe3JA1BBMN9c7OhIMaQeKbg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -6696,52 +6317,52 @@ packages: dependencies: '@babel/runtime': 7.20.13 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-id': 1.0.0(react@17.0.2) - '@radix-ui/react-menu': 2.0.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-id': 1.0.0(react@18.2.0) + '@radix-ui/react-menu': 2.0.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /@radix-ui/react-focus-guards@1.0.0(react@17.0.2): + /@radix-ui/react-focus-guards@1.0.0(react@18.2.0): resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - react: 17.0.2 + react: 18.2.0 dev: false - /@radix-ui/react-focus-scope@1.0.1(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-focus-scope@1.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Ej2MQTit8IWJiS2uuujGUmxXjF/y5xZptIIQnyd2JHLwtV0R2j9NRVoRj/1j/gJ7e3REdaBw4Hjf4a1ImhkZcQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-id@1.0.0(react@17.0.2): + /@radix-ui/react-id@1.0.0(react@18.2.0): resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) - react: 17.0.2 + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + react: 18.2.0 dev: false - /@radix-ui/react-menu@2.0.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-menu@2.0.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-I5FFZQxCl2fHoJ7R0m5/oWA9EX8/ttH4AbgneoCH7DAXQioFeb0XMAYnOVSp1GgJZ1Nx/mohxNQSeTMcaF1YPw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -6749,101 +6370,101 @@ packages: dependencies: '@babel/runtime': 7.20.13 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-direction': 1.0.0(react@17.0.2) - '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-focus-guards': 1.0.0(react@17.0.2) - '@radix-ui/react-focus-scope': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-id': 1.0.0(react@17.0.2) - '@radix-ui/react-popper': 1.0.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-portal': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-presence': 1.0.0(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-roving-focus': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-slot': 1.0.1(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) + '@radix-ui/react-collection': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-direction': 1.0.0(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.0(react@18.2.0) + '@radix-ui/react-popper': 1.0.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.1(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) aria-hidden: 1.2.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-remove-scroll: 2.5.5(@types/react@17.0.53)(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.29)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /@radix-ui/react-popper@1.0.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-popper@1.0.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@floating-ui/react-dom': 0.7.2(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-arrow': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) - '@radix-ui/react-use-rect': 1.0.0(react@17.0.2) - '@radix-ui/react-use-size': 1.0.0(react@17.0.2) + '@floating-ui/react-dom': 0.7.2(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.0(react@18.2.0) + '@radix-ui/react-use-size': 1.0.0(react@18.2.0) '@radix-ui/rect': 1.0.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /@radix-ui/react-portal@1.0.1(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-portal@1.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.0(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.1(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-primitive@1.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-slot': 1.0.1(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-slot': 1.0.1(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.2(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-primitive@1.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-slot': 1.0.1(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-slot': 1.0.1(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-roving-focus@1.0.1(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-roving-focus@1.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-TB76u5TIxKpqMpUAuYH2VqMhHYKa+4Vs1NHygo/llLvlffN6mLVsFhz0AnSFlSBAvTBYVHYAkHAyEt7x1gPJOA==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -6851,19 +6472,19 @@ packages: dependencies: '@babel/runtime': 7.20.13 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-direction': 1.0.0(react@17.0.2) - '@radix-ui/react-id': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - - /@radix-ui/react-scroll-area@1.0.2(react-dom@17.0.2)(react@17.0.2): + '@radix-ui/react-collection': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-direction': 1.0.0(react@18.2.0) + '@radix-ui/react-id': 1.0.0(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-scroll-area@1.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-k8VseTxI26kcKJaX0HPwkvlNBPTs56JRdYzcZ/vzrNUkDlvXBy8sMc7WvCpYzZkHgb+hd72VW9MqkqecGtuNgg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -6872,18 +6493,18 @@ packages: '@babel/runtime': 7.20.13 '@radix-ui/number': 1.0.0 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-direction': 1.0.0(react@17.0.2) - '@radix-ui/react-presence': 1.0.0(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - - /@radix-ui/react-scroll-area@1.0.3(react-dom@17.0.2)(react@17.0.2): + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-direction': 1.0.0(react@18.2.0) + '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-scroll-area@1.0.3(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-sBX9j8Q+0/jReNObEAveKIGXJtk3xUoSIx4cMKygGtO128QJyVDn01XNOFsyvihKDCTcu7SINzQ2jPAZEhIQtw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -6892,28 +6513,28 @@ packages: '@babel/runtime': 7.20.13 '@radix-ui/number': 1.0.0 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-direction': 1.0.0(react@17.0.2) - '@radix-ui/react-presence': 1.0.0(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - - /@radix-ui/react-slot@1.0.1(react@17.0.2): + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-direction': 1.0.0(react@18.2.0) + '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-slot@1.0.1(react@18.2.0): resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - react: 17.0.2 + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + react: 18.2.0 dev: false - /@radix-ui/react-switch@1.0.2(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-switch@1.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-BcG/LKehxt36NXG0wPnoCitIfSMtU9Xo7BmythYA1PAMLtsMvW7kALfBzmduQoHTWcKr0AVcFyh0gChBUp9TiQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -6921,17 +6542,17 @@ packages: dependencies: '@babel/runtime': 7.20.13 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-primitive': 1.0.2(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.0(react@17.0.2) - '@radix-ui/react-use-previous': 1.0.0(react@17.0.2) - '@radix-ui/react-use-size': 1.0.0(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.0(react@18.2.0) + '@radix-ui/react-use-size': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-toast@1.1.2(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-toast@1.1.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Kpr4BBYoP0O5A1UeDBmao87UnCMNdAKGNioQH5JzEm6OYTUVGhuDRbOwoZxPwOZ6vsjJHeIpdUrwbiHEB65CCw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -6939,98 +6560,98 @@ packages: dependencies: '@babel/runtime': 7.20.13 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.0(react@17.0.2) - '@radix-ui/react-context': 1.0.0(react@17.0.2) - '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-portal': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-presence': 1.0.0(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.0(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) - '@radix-ui/react-visually-hidden': 1.0.1(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - - /@radix-ui/react-use-callback-ref@1.0.0(react@17.0.2): + '@radix-ui/react-collection': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0): resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - react: 17.0.2 + react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.0(react@17.0.2): + /@radix-ui/react-use-controllable-state@1.0.0(react@18.2.0): resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - react: 17.0.2 + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown@1.0.2(react@17.0.2): + /@radix-ui/react-use-escape-keydown@1.0.2(react@18.2.0): resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-use-callback-ref': 1.0.0(react@17.0.2) - react: 17.0.2 + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.0(react@17.0.2): + /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - react: 17.0.2 + react: 18.2.0 dev: false - /@radix-ui/react-use-previous@1.0.0(react@17.0.2): + /@radix-ui/react-use-previous@1.0.0(react@18.2.0): resolution: {integrity: sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - react: 17.0.2 + react: 18.2.0 dev: false - /@radix-ui/react-use-rect@1.0.0(react@17.0.2): + /@radix-ui/react-use-rect@1.0.0(react@18.2.0): resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 '@radix-ui/rect': 1.0.0 - react: 17.0.2 + react: 18.2.0 dev: false - /@radix-ui/react-use-size@1.0.0(react@17.0.2): + /@radix-ui/react-use-size@1.0.0(react@18.2.0): resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-use-layout-effect': 1.0.0(react@17.0.2) - react: 17.0.2 + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + react: 18.2.0 dev: false - /@radix-ui/react-visually-hidden@1.0.1(react-dom@17.0.2)(react@17.0.2): + /@radix-ui/react-visually-hidden@1.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-K1hJcCMfWfiYUibRqf3V8r5Drpyf7rh44jnrwAbdvI5iCCijilBBeyQv9SKidYNZIopMdCyR9FnIjkHxHN0FcQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.20.13 - '@radix-ui/react-primitive': 1.0.1(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false /@radix-ui/rect@1.0.0: @@ -7153,10 +6774,6 @@ packages: resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} dev: true - /@sinclair/typebox@0.25.24: - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} - dev: true - /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -7238,7 +6855,7 @@ packages: /@socket.io/component-emitter@3.1.0: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} - /@storybook/addon-actions@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/addon-actions@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-cnLzVK1S+EydFDSuvxMmMAxVqNXijBGdV9QTgsu6ys5sOkoiXRETKZmxuN8/ZRbkfc4N+1KAylSCZOOHzBQTBQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7249,22 +6866,22 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 polished: 4.2.2 prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-inspector: 5.1.1(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-inspector: 5.1.1(react@18.2.0) regenerator-runtime: 0.13.11 telejson: 6.0.8 ts-dedent: 2.2.0 @@ -7272,7 +6889,7 @@ packages: uuid-browser: 3.1.0 dev: true - /@storybook/addon-backgrounds@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/addon-backgrounds@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-9ddB3QIL8mRurf7TvYG1P9i1sW0b8Iik3kGlHggKogHER9WJPzbiUeH0XDjkASSa4rMCZdYn5CZKNkIAoJ2jdA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7283,24 +6900,24 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 global: 4.4.0 memoizerific: 1.11.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true - /@storybook/addon-controls@6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/addon-controls@6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-q5y0TvD0stvQoJZ2PnFmmKIRNSOI4/k2NKyZq//J2cBUBcP1reYlFxdsNwLZWmAFpSIkc2+nsliEzNxU1WByoA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7311,19 +6928,19 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/node-logger': 6.5.15 - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 lodash: 4.17.21 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 transitivePeerDependencies: - eslint @@ -7334,7 +6951,7 @@ packages: - webpack-command dev: true - /@storybook/addon-docs@6.5.15(@babel/core@7.20.12)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0): + /@storybook/addon-docs@6.5.15(@babel/core@7.20.12)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0): resolution: {integrity: sha512-k3LAu+wVp6pNhfh6B1soCRl6+7sNTNxtqy6WTrIeVJVCGbXbyc5s7gQ48gJ4WAk6meoDEZbypiP4NK1El03YLg==} peerDependencies: '@storybook/mdx2-csf': ^0.0.3 @@ -7351,28 +6968,28 @@ packages: '@babel/plugin-transform-react-jsx': 7.20.13(@babel/core@7.20.12) '@babel/preset-env': 7.20.2(@babel/core@7.20.12) '@jest/transform': 26.6.2 - '@mdx-js/react': 1.6.22(react@17.0.2) - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@mdx-js/react': 1.6.22(react@18.2.0) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/docs-tools': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/docs-tools': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/mdx1-csf': 0.0.1(@babel/core@7.20.12) '@storybook/node-logger': 6.5.15 '@storybook/postinstall': 6.5.15 - '@storybook/preview-web': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/source-loader': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/preview-web': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/source-loader': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) babel-loader: 8.3.0(@babel/core@7.20.12)(webpack@5.75.0) core-js: 3.27.2 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 remark-external-links: 8.0.0 remark-slug: 6.1.0 @@ -7389,7 +7006,7 @@ packages: - webpack-command dev: true - /@storybook/addon-essentials@6.5.15(@babel/core@7.20.12)(@storybook/builder-webpack5@6.5.15)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0): + /@storybook/addon-essentials@6.5.15(@babel/core@7.20.12)(@storybook/builder-webpack5@6.5.15)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0): resolution: {integrity: sha512-m3EY6BhUk6Z9Et7P5wGaRGNoEDHzJIOsLbGS/4IXvIoDfrqmNIilqUQl8kfDqpVdBSFprvpacHpKpLosu9H37w==} peerDependencies: '@babel/core': ^7.9.6 @@ -7447,22 +7064,22 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@storybook/addon-actions': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-backgrounds': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-controls': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) - '@storybook/addon-docs': 6.5.15(@babel/core@7.20.12)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0) - '@storybook/addon-measure': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-outline': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-toolbars': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-viewport': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/builder-webpack5': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/addon-actions': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-backgrounds': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-controls': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/addon-docs': 6.5.15(@babel/core@7.20.12)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0) + '@storybook/addon-measure': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-outline': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-toolbars': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-viewport': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/builder-webpack5': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/node-logger': 6.5.15 core-js: 3.27.2 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 webpack: 5.75.0(webpack-cli@5.0.1) @@ -7476,7 +7093,7 @@ packages: - webpack-command dev: true - /@storybook/addon-interactions@6.5.15(@types/react@17.0.53)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/addon-interactions@6.5.15(@types/react@18.2.29)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-9mDhkKJeWPvfrSBvuE5zn3DAKTXw37ZT21jkQzIt+dUEu0X3jCLY1dWel3Rbr9JI/PLnUnANDHOY/YtFUfrK9Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7487,22 +7104,22 @@ packages: react-dom: optional: true dependencies: - '@devtools-ds/object-inspector': 1.2.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@devtools-ds/object-inspector': 1.2.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/instrumenter': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/instrumenter': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 global: 4.4.0 jest-mock: 27.5.1 polished: 4.2.2 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -7514,7 +7131,7 @@ packages: - webpack-command dev: true - /@storybook/addon-jest@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/addon-jest@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-8/MTHQDMl8oQ7vZh3uyhJGxzl6wb+XJb/bY8HF67X67SzwwUqYKI2/IA92742HpNfvlr8Q4lL0RA5n3zC5x9mQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7525,22 +7142,22 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 6.5.15 - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 global: 4.4.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) react-sizeme: 3.0.2 regenerator-runtime: 0.13.11 upath: 1.2.0 dev: true - /@storybook/addon-links@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/addon-links@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-L7Q3u/xEUuy1uPq8ttjDfvDj19Hr2Crq/Us0RfowfGAAzOb7fCoiUJDP37ADtRUlCYyuKM5V/nHxN8eGpWtugw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7551,23 +7168,23 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/router': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/router': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@types/qs': 6.9.7 core-js: 3.27.2 global: 4.4.0 prop-types: 15.8.1 qs: 6.11.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 dev: true - /@storybook/addon-measure@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/addon-measure@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-j77WX/v6qpWK8ZuYscWLIc+Am4/WOJRsVgyXLIw1EZIviQsjoXPo7mmyoTneEIbbHfPtWlLRbtmkjh8DAVDrCA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7578,19 +7195,19 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 core-js: 3.27.2 global: 4.4.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/addon-outline@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/addon-outline@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-8yGEZQOYypnliU3rsakoZlgT4Pkq8iOhX9JclVXZL/fJMQWFQGCsXqlLaRn8sx7qsa+21PPxY5bd2+Hv/Au4zQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7601,21 +7218,21 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 core-js: 3.27.2 global: 4.4.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 dev: true - /@storybook/addon-toolbars@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/addon-toolbars@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-btwDTgElmaaT0dBRASABbTpq6m1UiQXQmLUmxfjLxVC3I2SK5tyJKbPQ2hVLFAQHK4cQn4u45BxdZ5LDpJ830A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7626,18 +7243,18 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 dev: true - /@storybook/addon-viewport@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/addon-viewport@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-oOiVzgFMlTnzPLVoHWQNzWdmpksrUyT6Aq8ZOyBPNMQ0RN2doIgFr7W53nZ1OBB5cPQx9q2FgWwzJ7Tawo+iVA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7648,43 +7265,43 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 6.5.15 - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 global: 4.4.0 memoizerific: 1.11.3 prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 dev: true - /@storybook/addons@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/addons@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xT31SuSX+kYGyxCNK2nqL7WTxucs3rSmhiCLovJcUjYk+QquV3c2c53Ki7lwwdDbzfXFcNAe0HJ4hoTN4jhn0Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/channels': 6.5.15 '@storybook/client-logger': 6.5.15 '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/router': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/router': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@types/webpack-env': 1.18.0 core-js: 3.27.2 global: 4.4.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 dev: true - /@storybook/api@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/api@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-BBE0KXKvj1/3jTghbIoWfrcDM0t+xO7EYtWWAXD6XlhGsZVD2Dy82Z52ONyLulMDRpMWl0OYy3h6A1YnFUH25w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7694,16 +7311,16 @@ packages: '@storybook/client-logger': 6.5.15 '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/router': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/router': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 memoizerific: 1.11.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 store2: 2.14.2 telejson: 6.0.8 @@ -7711,7 +7328,7 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/builder-webpack4@6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/builder-webpack4@6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-1ZkMECUUdiYplhlgyUF5fqW3XU7eWNDJbuPUguyDOeidgJ111WZzBcLuKj+SNrzdNNgXwROCWAFybiNnX33YHQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7722,22 +7339,22 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/channel-postmessage': 6.5.15 '@storybook/channels': 6.5.15 - '@storybook/client-api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/core-events': 6.5.15 '@storybook/node-logger': 6.5.15 - '@storybook/preview-web': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/router': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/preview-web': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/router': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/ui': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/ui': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@types/node': 16.18.40 '@types/webpack': 4.41.33 autoprefixer: 9.8.8 @@ -7757,8 +7374,8 @@ packages: postcss-flexbugs-fixes: 4.2.1 postcss-loader: 4.3.0(postcss@7.0.39)(webpack@4.46.0) raw-loader: 4.0.2(webpack@4.46.0) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 style-loader: 1.3.0(webpack@4.46.0) terser-webpack-plugin: 4.2.3(webpack@4.46.0) @@ -7780,7 +7397,7 @@ packages: - webpack-command dev: true - /@storybook/builder-webpack5@6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/builder-webpack5@6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-BnSoAmI02pvbGBSyzCx+voXb/d5EopQ78zx/lYv4CeOspBFOYEfGvAgYHILFo04V12S2/k8aSOc/tCYw5AqPtw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7791,21 +7408,21 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/channel-postmessage': 6.5.15 '@storybook/channels': 6.5.15 - '@storybook/client-api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/core-events': 6.5.15 '@storybook/node-logger': 6.5.15 - '@storybook/preview-web': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/router': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/preview-web': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/router': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@types/node': 16.18.40 babel-loader: 8.3.0(@babel/core@7.20.12)(webpack@5.75.0) babel-plugin-named-exports-order: 0.0.2 @@ -7819,8 +7436,8 @@ packages: html-webpack-plugin: 5.5.0(webpack@5.75.0) path-browserify: 1.0.1 process: 0.11.10 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 style-loader: 2.0.0(webpack@5.75.0) terser-webpack-plugin: 5.3.6(webpack@5.75.0) @@ -7872,19 +7489,19 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/client-api@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/client-api@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-0ZGpRgVz7rdbCguBqBpwObXbsVY5qlSTWDzzIBpmz8EkxW/MtK5wEyeq+0L0O+DTn41FwvH5yCGLAENpzWD8BQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/channel-postmessage': 6.5.15 '@storybook/channels': 6.5.15 '@storybook/client-logger': 6.5.15 '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@types/qs': 6.9.7 '@types/webpack-env': 1.18.0 core-js: 3.27.2 @@ -7893,8 +7510,8 @@ packages: lodash: 4.17.21 memoizerific: 1.11.3 qs: 6.11.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 store2: 2.14.2 synchronous-promise: 2.0.17 @@ -7909,7 +7526,7 @@ packages: global: 4.4.0 dev: true - /@storybook/components@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/components@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-bHTT0Oa3s4g+MBMaLBbX9ofMtb1AW59AzIUNGrfqW1XqJMGuUHMiJ7TSo+i5dRSFpbFygnwMEG9LfHxpR2Z0Dw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7917,17 +7534,17 @@ packages: dependencies: '@storybook/client-logger': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 memoizerific: 1.11.3 qs: 6.11.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 util-deprecate: 1.0.2 dev: true - /@storybook/core-client@6.5.15(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack@4.46.0): + /@storybook/core-client@6.5.15(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack@4.46.0): resolution: {integrity: sha512-i9t4WONy2MxJwLI1FIp5ck7b52EXyJfALnxUn4O/3GTkw09J0NOKi2DPjefUsi7IB5MzFpDjDH9vw/XiTM+OZw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7938,24 +7555,24 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/channel-postmessage': 6.5.15 '@storybook/channel-websocket': 6.5.15 - '@storybook/client-api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/preview-web': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/ui': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/preview-web': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/ui': 6.5.15(react-dom@18.2.0)(react@18.2.0) airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 core-js: 3.27.2 global: 4.4.0 lodash: 4.17.21 qs: 6.11.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 typescript: 5.0.2 @@ -7964,7 +7581,7 @@ packages: webpack: 4.46.0(webpack-cli@5.0.1) dev: true - /@storybook/core-client@6.5.15(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack@5.75.0): + /@storybook/core-client@6.5.15(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack@5.75.0): resolution: {integrity: sha512-i9t4WONy2MxJwLI1FIp5ck7b52EXyJfALnxUn4O/3GTkw09J0NOKi2DPjefUsi7IB5MzFpDjDH9vw/XiTM+OZw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7975,24 +7592,24 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/channel-postmessage': 6.5.15 '@storybook/channel-websocket': 6.5.15 - '@storybook/client-api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/preview-web': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/ui': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/preview-web': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/ui': 6.5.15(react-dom@18.2.0)(react@18.2.0) airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 core-js: 3.27.2 global: 4.4.0 lodash: 4.17.21 qs: 6.11.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 typescript: 5.0.2 @@ -8001,7 +7618,7 @@ packages: webpack: 5.75.0(webpack-cli@5.0.1) dev: true - /@storybook/core-common@6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/core-common@6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-uits9o6qwHTPnjsNZP25f7hWmUBGRJ7FXtxxtEaNSmtiwk50KWxBaro7wt505lJ1Gb9vOhpNPhS7y3IxdsXNmQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8055,8 +7672,8 @@ packages: picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) resolve-from: 5.0.0 slash: 3.0.0 telejson: 6.0.8 @@ -8078,7 +7695,7 @@ packages: core-js: 3.27.2 dev: true - /@storybook/core-server@6.5.15(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/core-server@6.5.15(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-m+pZwHhCjwryeqTptyyKHSbIjnnPGKoRSnkqLTOpKQf8llZMnNQWUFrn4fx6UDKzxFQ2st2+laV8O2QbMs8qwQ==} peerDependencies: '@storybook/builder-webpack5': '*' @@ -8095,19 +7712,19 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) - '@storybook/builder-webpack5': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) - '@storybook/core-client': 6.5.15(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack@4.46.0) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/builder-webpack4': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/builder-webpack5': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/core-client': 6.5.15(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack@4.46.0) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.15 - '@storybook/manager-webpack4': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) - '@storybook/manager-webpack5': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/manager-webpack4': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/manager-webpack5': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/node-logger': 6.5.15 '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/telemetry': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/telemetry': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@types/node': 16.18.40 '@types/node-fetch': 2.6.2 '@types/pretty-hrtime': 1.0.1 @@ -8131,8 +7748,8 @@ packages: open: 8.4.0 pretty-hrtime: 1.0.3 prompts: 2.4.2 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 serve-favicon: 2.5.0 slash: 3.0.0 @@ -8157,7 +7774,7 @@ packages: - webpack-command dev: true - /@storybook/core@6.5.15(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0): + /@storybook/core@6.5.15(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0): resolution: {integrity: sha512-T9TjLxbb5P/XvLEoj0dnbtexJa0V3pqCifRlIUNkTJO0nU3PdGLMcKMSyIYWjkthAJ9oBrajnodV0UveM/epTg==} peerDependencies: '@storybook/builder-webpack5': '*' @@ -8174,12 +7791,12 @@ packages: typescript: optional: true dependencies: - '@storybook/builder-webpack5': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) - '@storybook/core-client': 6.5.15(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack@5.75.0) - '@storybook/core-server': 6.5.15(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) - '@storybook/manager-webpack5': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + '@storybook/builder-webpack5': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/core-client': 6.5.15(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack@5.75.0) + '@storybook/core-server': 6.5.15(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/manager-webpack5': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) typescript: 5.0.2 webpack: 5.75.0(webpack-cli@5.0.1) transitivePeerDependencies: @@ -8227,12 +7844,12 @@ packages: lodash: 4.17.21 dev: true - /@storybook/docs-tools@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/docs-tools@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-8w78NFOtlJGuIa9vPPsr87J9iQUGmLFh7CrMS2+t9LxW+0oH5MZ8QqPQUHNuTuKsYN3r+QAmmi2pj0auZmCoKA==} dependencies: '@babel/core': 7.20.12 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 doctrine: 3.0.0 lodash: 4.17.21 @@ -8249,10 +7866,10 @@ packages: '@types/jest': 28.1.3 dev: true - /@storybook/instrumenter@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/instrumenter@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-93WyH0s63RCv496eHjQ5dWFXoExXg9dlNMe7i4/FVVbWeDdb1pPVIHsLn28WxOiVQahQEAW2EA7Mao3BiBWg+A==} dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 '@storybook/core-events': 6.5.15 core-js: 3.27.2 @@ -8262,11 +7879,11 @@ packages: - react-dom dev: true - /@storybook/jest@0.0.10(react-dom@17.0.2)(react@17.0.2): + /@storybook/jest@0.0.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qeYLIplpcOUQXboJde5pRCjTvkGmF80jEszRUoNYCNcEPfC2sMK68Wq6Ct8EQj3CoEdJqsK54O2YYh+7D9S+ag==} dependencies: '@storybook/expect': 28.1.3-5 - '@storybook/instrumenter': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/instrumenter': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@testing-library/jest-dom': 5.16.5 jest-mock: 27.5.1 transitivePeerDependencies: @@ -8274,7 +7891,7 @@ packages: - react-dom dev: true - /@storybook/manager-webpack4@6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/manager-webpack4@6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-zRvBTMoaFO6MvHDsDLnt3tsFENhpY3k+e/UIPdqbIDMbUPGGQzxJucAM9aS/kbVSO5IVs8IflVxbeeB/uTIIfA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8287,12 +7904,12 @@ packages: '@babel/core': 7.20.12 '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.20.12) '@babel/preset-react': 7.18.6(@babel/core@7.20.12) - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-client': 6.5.15(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack@4.46.0) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-client': 6.5.15(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack@4.46.0) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/node-logger': 6.5.15 - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/ui': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/ui': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@types/node': 16.18.40 '@types/webpack': 4.41.33 babel-loader: 8.3.0(@babel/core@7.20.12)(webpack@4.46.0) @@ -8307,8 +7924,8 @@ packages: html-webpack-plugin: 4.5.2(webpack@4.46.0) node-fetch: 2.6.8 pnp-webpack-plugin: 1.6.4(typescript@5.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 @@ -8332,7 +7949,7 @@ packages: - webpack-command dev: true - /@storybook/manager-webpack5@6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/manager-webpack5@6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-yrHVFUHGdVRWq/oGJwQu+UOZzxELH5SS+Lpn5oIQ/Dblam9piQC0KmBZtFuA9X8acaw4BBVnXgF/aiqs9fOp/Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8345,12 +7962,12 @@ packages: '@babel/core': 7.20.12 '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.20.12) '@babel/preset-react': 7.18.6(@babel/core@7.20.12) - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-client': 6.5.15(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack@5.75.0) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-client': 6.5.15(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack@5.75.0) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/node-logger': 6.5.15 - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/ui': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/ui': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@types/node': 16.18.40 babel-loader: 8.3.0(@babel/core@7.20.12)(webpack@5.75.0) case-sensitive-paths-webpack-plugin: 2.4.0 @@ -8363,8 +7980,8 @@ packages: html-webpack-plugin: 5.5.0(webpack@5.75.0) node-fetch: 2.6.8 process: 0.11.10 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 @@ -8424,25 +8041,25 @@ packages: core-js: 3.27.2 dev: true - /@storybook/preview-web@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/preview-web@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-gIHABSAD0JS0iRaG67BnSDq/q8Zf4fFwEWBQOSYgcEx2TzhAUeSkhGZUQHdlOTCwuA2PpXT0/cWDH8u2Ev+msg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/channel-postmessage': 6.5.15 '@storybook/client-logger': 6.5.15 '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) ansi-to-html: 0.6.15 core-js: 3.27.2 global: 4.4.0 lodash: 4.17.21 qs: 6.11.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 @@ -8469,7 +8086,7 @@ packages: - supports-color dev: true - /@storybook/react@6.5.15(@babel/core@7.20.12)(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(require-from-string@2.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack-dev-server@4.11.1)(webpack-hot-middleware@2.25.3): + /@storybook/react@6.5.15(@babel/core@7.20.12)(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(require-from-string@2.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack-dev-server@4.11.1)(webpack-hot-middleware@2.25.3): resolution: {integrity: sha512-iQta2xOs/oK0sw/zpn3g/huvOmvggzi8z2/WholmUmmRiSQRo9lOhRXH0u13T4ja4fEa+u7m58G83xOG6i73Kw==} engines: {node: '>=10.13.0'} hasBin: true @@ -8501,18 +8118,18 @@ packages: '@babel/preset-flow': 7.18.6(@babel/core@7.20.12) '@babel/preset-react': 7.18.6(@babel/core@7.20.12) '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.11.0)(webpack-dev-server@4.11.1)(webpack-hot-middleware@2.25.3)(webpack@5.75.0) - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/builder-webpack5': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/builder-webpack5': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/client-logger': 6.5.15 - '@storybook/core': 6.5.15(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/core': 6.5.15(@storybook/builder-webpack5@6.5.15)(@storybook/manager-webpack5@6.5.15)(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1)(webpack@5.75.0) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/docs-tools': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/manager-webpack5': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/docs-tools': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-webpack5': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/node-logger': 6.5.15 '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.0.2)(webpack@5.75.0) '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@types/estree': 0.0.51 '@types/node': 16.18.40 '@types/webpack-env': 1.18.0 @@ -8528,9 +8145,9 @@ packages: html-tags: 3.2.0 lodash: 4.17.21 prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-element-to-jsx-string: 14.3.4(react-dom@17.0.2)(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-element-to-jsx-string: 14.3.4(react-dom@18.2.0)(react@18.2.0) react-refresh: 0.11.0 read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 @@ -8561,7 +8178,7 @@ packages: - webpack-plugin-serve dev: true - /@storybook/router@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/router@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-9t8rI8t7/Krolau29gsdjdbRQ66orONIyP0efp0EukVgv6reNFzb/U14ARrl0uHys6Tl5Xyece9FoakQUdn8Kg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8571,8 +8188,8 @@ packages: core-js: 3.27.2 memoizerific: 1.11.3 qs: 6.11.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 dev: true @@ -8585,13 +8202,13 @@ packages: find-up: 4.1.0 dev: true - /@storybook/source-loader@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/source-loader@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-MaWzki40g0/7NWmJgUBhOp+e7y8Ohw6G/bRr/rcDP7eXSnud6ThYylXv0QqBScLPPTy8txjmBClCoqdLGyvLWQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 core-js: 3.27.2 @@ -8600,18 +8217,18 @@ packages: loader-utils: 2.0.4 lodash: 4.17.21 prettier: 2.3.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 dev: true - /@storybook/store@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/store@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-r6cYTf6GtbqgdI4ZG3xuWdJAAu5fJ3xAWMiDkHyoK2u+R2TeYXIsJvgn0BPrW87sZhELIkg4ckdFECmATs3kpQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 6.5.15 '@storybook/core-events': 6.5.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 @@ -8620,8 +8237,8 @@ packages: global: 4.4.0 lodash: 4.17.21 memoizerific: 1.11.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 slash: 3.0.0 stable: 0.1.8 @@ -8630,11 +8247,11 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/telemetry@6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/telemetry@6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-WHMRG6xMkEGscn1q4SotwzV8hxM1g3zHyXPN77iosY5zpOIn/qAzvkmW28V1DPH9jPWMZMizBgG1TIQvUpduXg==} dependencies: '@storybook/client-logger': 6.5.15 - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) chalk: 4.1.2 core-js: 3.27.2 detect-package-manager: 2.0.1 @@ -8657,7 +8274,7 @@ packages: - webpack-command dev: true - /@storybook/test-runner@0.8.0(@types/node@16.18.40)(eslint@8.32.0)(jest-circus@28.1.3)(jest-environment-node@28.1.3)(react-dom@17.0.2)(react@17.0.2)(ts-node@10.9.1)(typescript@5.0.2)(webpack-cli@5.0.1): + /@storybook/test-runner@0.8.0(@types/node@16.18.40)(eslint@8.32.0)(jest-circus@28.1.3)(jest-environment-node@28.1.3)(react-dom@18.2.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.0.2)(webpack-cli@5.0.1): resolution: {integrity: sha512-61KZN5dTjJ35x289s3jwTpCOCf6Vp+p/bC9cRBdMwAUBeDGU8AibINNF8p07BezzfMlnvJSHrsXT/DCcAoyLuw==} hasBin: true dependencies: @@ -8666,10 +8283,10 @@ packages: '@babel/preset-env': 7.20.2(@babel/core@7.20.12) '@babel/preset-react': 7.18.6(@babel/core@7.20.12) '@babel/preset-typescript': 7.18.6(@babel/core@7.20.12) - '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.2)(webpack-cli@5.0.1) + '@storybook/core-common': 6.5.15(eslint@8.32.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(webpack-cli@5.0.1) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.15 - '@storybook/store': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.5.15(react-dom@18.2.0)(react@18.2.0) can-bind-to-host: 1.1.2 commander: 9.5.0 expect-playwright: 0.8.0 @@ -8706,11 +8323,11 @@ packages: - webpack-command dev: true - /@storybook/testing-library@0.0.13(react-dom@17.0.2)(react@17.0.2): + /@storybook/testing-library@0.0.13(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-vRMeIGer4EjJkTgI8sQyK9W431ekPWYCWL//OmSDJ64IT3h7FnW7Xg6p+eqM3oII98/O5pcya5049GxnjaPtxw==} dependencies: '@storybook/client-logger': 6.5.15 - '@storybook/instrumenter': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/instrumenter': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -8719,7 +8336,7 @@ packages: - react-dom dev: true - /@storybook/theming@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/theming@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pgdW0lVZKKXQ4VhIfLHycMmwFSVOY7vLTKnytag4Y8Yz+aXm0bwDN/QxPntFzDH47F1Rcy2ywNnvty8ooDTvuA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8728,45 +8345,45 @@ packages: '@storybook/client-logger': 6.5.15 core-js: 3.27.2 memoizerific: 1.11.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 dev: true - /@storybook/ui@6.5.15(react-dom@17.0.2)(react@17.0.2): + /@storybook/ui@6.5.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-OO+TWZmI8ebWA1C3JBKNvbUbsgvt4GppqsGlkf5CTBZrT/MzmMlYiooLAtlY1ZPcMtTd5ynLxvroHWBEnMOk2A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/addons': 6.5.15(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.5.15(react-dom@18.2.0)(react@18.2.0) + '@storybook/api': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/channels': 6.5.15 '@storybook/client-logger': 6.5.15 - '@storybook/components': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 6.5.15 - '@storybook/router': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/router': 6.5.15(react-dom@18.2.0)(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/theming': 6.5.15(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.5.15(react-dom@18.2.0)(react@18.2.0) core-js: 3.27.2 memoizerific: 1.11.3 qs: 6.11.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 resolve-from: 5.0.0 dev: true - /@szhsin/react-menu@2.3.4(react-dom@17.0.2)(react@17.0.2): + /@szhsin/react-menu@2.3.4(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-RYgrAxAeEjqE62G2r3LFO89uWulJcTZReo5DtUnSkBbGx1aXrl8I7v1p/YUdJSYbimEsRB0qMHiQpQGQmOwDKw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-transition-state: 1.1.5(react-dom@17.0.2)(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-state: 1.1.5(react-dom@18.2.0)(react@18.2.0) dev: false /@szmarczak/http-timer@4.0.6: @@ -8811,143 +8428,31 @@ packages: postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 pretty-hrtime: 1.0.3 - purgecss: 4.1.3 - quick-lru: 5.1.1 - reduce-css-calc: 2.1.8 - resolve: 1.22.2 - tmp: 0.2.1 - transitivePeerDependencies: - - ts-node - dev: true - - /@tanstack/react-table@8.7.6(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-/QijmMFeP7wDLBnr0MQ/5MlbXePbIL/1nOtkxBC9zvmBu4gDKJEDBqipUyM7Wc/iBpSd0IFyqBlvZvTPD9FYDA==} - engines: {node: '>=12'} - peerDependencies: - react: '>=16' - react-dom: '>=16' - dependencies: - '@tanstack/table-core': 8.7.6 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - - /@tanstack/table-core@8.7.6: - resolution: {integrity: sha512-sqiNTMzB6cpyL8DFH6/VqW48SwiflLqxQqYpo2wNock7rdVGvlm0BLNI8vZUJbr1+fmmWmHwBvi5OMgZw8n1DA==} - engines: {node: '>=12'} - dev: false - - /@tauri-apps/api@1.4.0: - resolution: {integrity: sha512-Jd6HPoTM1PZSFIzq7FB8VmMu3qSSyo/3lSwLpoapW+lQ41CL5Dow2KryLg+gyazA/58DRWI9vu/XpEeHK4uMdw==} - engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - dev: false - - /@tauri-apps/cli-darwin-arm64@1.4.0: - resolution: {integrity: sha512-nA/ml0SfUt6/CYLVbHmT500Y+ijqsuv5+s9EBnVXYSLVg9kbPUZJJHluEYK+xKuOj6xzyuT/+rZFMRapmJD3jQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-darwin-x64@1.4.0: - resolution: {integrity: sha512-ov/F6Zr+dg9B0PtRu65stFo2G0ow2TUlneqYYrkj+vA3n+moWDHfVty0raDjMLQbQt3rv3uayFMXGPMgble9OA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-arm-gnueabihf@1.4.0: - resolution: {integrity: sha512-zwjbiMncycXDV7doovymyKD7sCg53ouAmfgpUqEBOTY3vgBi9TwijyPhJOqoG5vUVWhouNBC08akGmE4dja15g==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-arm64-gnu@1.4.0: - resolution: {integrity: sha512-5MCBcziqXC72mMXnkZU68mutXIR6zavDxopArE2gQtK841IlE06bIgtLi0kUUhlFJk2nhPRgiDgdLbrPlyt7fw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-arm64-musl@1.4.0: - resolution: {integrity: sha512-7J3pRB6n6uNYgIfCeKt2Oz8J7oSaz2s8GGFRRH2HPxuTHrBNCinzVYm68UhVpJrL3bnGkU0ziVZLsW/iaOGfUg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-x64-gnu@1.4.0: - resolution: {integrity: sha512-Zh5gfAJxOv5AVWxcwuueaQ2vIAhlg0d6nZui6nMyfIJ8dbf3aZQ5ZzP38sYow5h/fbvgL+3GSQxZRBIa3c2E1w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-x64-musl@1.4.0: - resolution: {integrity: sha512-OLAYoICU3FaYiTdBsI+lQTKnDHeMmFMXIApN0M+xGiOkoIOQcV9CConMPjgmJQ867+NHRNgUGlvBEAh9CiJodQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-win32-arm64-msvc@1.4.0: - resolution: {integrity: sha512-gZ05GENFbI6CB5MlOUsLlU0kZ9UtHn9riYtSXKT6MYs8HSPRffPHaHSL0WxsJweWh9nR5Hgh/TUU8uW3sYCzCg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-win32-ia32-msvc@1.4.0: - resolution: {integrity: sha512-JsetT/lTx/Zq98eo8T5CiRyF1nKeX04RO8JlJrI3ZOYsZpp/A5RJvMd/szQ17iOzwiHdge+tx7k2jHysR6oBlQ==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true + purgecss: 4.1.3 + quick-lru: 5.1.1 + reduce-css-calc: 2.1.8 + resolve: 1.22.2 + tmp: 0.2.1 + transitivePeerDependencies: + - ts-node dev: true - optional: true - /@tauri-apps/cli-win32-x64-msvc@1.4.0: - resolution: {integrity: sha512-z8Olcnwp5aYhzqUAarFjqF+oELCjuYWnB2HAJHlfsYNfDCAORY5kct3Fklz8PSsubC3U2EugWn8n42DwnThurg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + /@tanstack/react-table@8.7.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-/QijmMFeP7wDLBnr0MQ/5MlbXePbIL/1nOtkxBC9zvmBu4gDKJEDBqipUyM7Wc/iBpSd0IFyqBlvZvTPD9FYDA==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16' + react-dom: '>=16' + dependencies: + '@tanstack/table-core': 8.7.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false - /@tauri-apps/cli@1.4.0: - resolution: {integrity: sha512-VXYr2i2iVFl98etQSQsqLzXgX96bnWiNZd1YADgatqwy/qecbd6Kl5ZAPB5R4ynsgE8A1gU7Fbzh7dCEQYFfmA==} - engines: {node: '>= 10'} - hasBin: true - optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 1.4.0 - '@tauri-apps/cli-darwin-x64': 1.4.0 - '@tauri-apps/cli-linux-arm-gnueabihf': 1.4.0 - '@tauri-apps/cli-linux-arm64-gnu': 1.4.0 - '@tauri-apps/cli-linux-arm64-musl': 1.4.0 - '@tauri-apps/cli-linux-x64-gnu': 1.4.0 - '@tauri-apps/cli-linux-x64-musl': 1.4.0 - '@tauri-apps/cli-win32-arm64-msvc': 1.4.0 - '@tauri-apps/cli-win32-ia32-msvc': 1.4.0 - '@tauri-apps/cli-win32-x64-msvc': 1.4.0 - dev: true + /@tanstack/table-core@8.7.6: + resolution: {integrity: sha512-sqiNTMzB6cpyL8DFH6/VqW48SwiflLqxQqYpo2wNock7rdVGvlm0BLNI8vZUJbr1+fmmWmHwBvi5OMgZw8n1DA==} + engines: {node: '>=12'} + dev: false /@testing-library/dom@8.20.0: resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==} @@ -8978,7 +8483,7 @@ packages: redent: 3.0.0 dev: true - /@testing-library/react@12.1.2(react-dom@17.0.2)(react@17.0.2): + /@testing-library/react@12.1.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==} engines: {node: '>=12'} peerDependencies: @@ -8987,8 +8492,8 @@ packages: dependencies: '@babel/runtime': 7.20.13 '@testing-library/dom': 8.20.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: true /@testing-library/user-event@13.5.0(@testing-library/dom@8.20.0): @@ -9040,7 +8545,7 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@tufjs/canonical-json': 1.0.0 - minimatch: 9.0.0 + minimatch: 9.0.3 dev: true /@types/aria-query@5.0.1: @@ -9221,7 +8726,7 @@ packages: resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: '@types/jsonfile': 6.1.1 - '@types/node': 16.18.35 + '@types/node': 16.18.40 dev: true /@types/glob@7.2.0: @@ -9246,7 +8751,6 @@ packages: /@types/har-format@1.2.10: resolution: {integrity: sha512-o0J30wqycjF5miWDKYKKzzOU1ZTLuA42HZ4HE7/zqTOc/jTLdQ5NhYWvsRQo45Nfi1KHoRdNhteSI4BAxTF1Pg==} - dev: true /@types/hast@2.3.4: resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} @@ -9473,38 +8977,24 @@ packages: /@types/range-parser@1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - /@types/react-dom@17.0.18: - resolution: {integrity: sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw==} + /@types/react-dom@18.2.14: + resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==} dependencies: - '@types/react': 17.0.53 - dev: true - - /@types/react-dom@18.2.7: - resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} - dependencies: - '@types/react': 18.2.15 + '@types/react': 18.2.29 dev: true /@types/react-table@7.7.14: resolution: {integrity: sha512-TYrv7onCiakaG1uAu/UpQ9FojNEt/4/ht87EgJQaEGFoWV606ZLWUZAcUHzMxgc3v1mywP1cDyz3qB4ho3hWOw==} dependencies: - '@types/react': 17.0.53 + '@types/react': 18.2.29 dev: true - /@types/react@17.0.53: - resolution: {integrity: sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==} - dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.2 - csstype: 3.1.1 - - /@types/react@18.2.15: - resolution: {integrity: sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==} + /@types/react@18.2.29: + resolution: {integrity: sha512-Z+ZrIRocWtdD70j45izShRwDuiB4JZqDegqMFW/I8aG5DxxLKOzVNoq62UIO82v9bdgi+DO1jvsb9sTEZUSm+Q==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 csstype: 3.1.1 - dev: true /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} @@ -9644,7 +9134,7 @@ packages: /@types/ws@8.5.3: resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} dependencies: - '@types/node': 18.0.3 + '@types/node': 16.18.40 dev: true /@types/ws@8.5.4: @@ -9754,6 +9244,33 @@ packages: - supports-color dev: true + /@typescript-eslint/eslint-plugin@5.48.2(@typescript-eslint/parser@5.30.5)(eslint@8.32.0)(typescript@4.9.5): + resolution: {integrity: sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.48.2 + '@typescript-eslint/type-utils': 5.48.2(eslint@8.32.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.48.2(eslint@8.32.0)(typescript@4.9.5) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.32.0 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + regexpp: 3.2.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/eslint-plugin@5.48.2(@typescript-eslint/parser@5.48.2)(eslint@8.32.0)(typescript@5.0.2): resolution: {integrity: sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9859,6 +9376,26 @@ packages: - supports-color dev: true + /@typescript-eslint/parser@5.30.5(eslint@8.32.0)(typescript@4.9.5): + resolution: {integrity: sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.30.5 + '@typescript-eslint/types': 5.30.5 + '@typescript-eslint/typescript-estree': 5.30.5(typescript@4.9.5) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.32.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@5.48.2(eslint@8.32.0)(typescript@5.0.2): resolution: {integrity: sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9942,6 +9479,26 @@ packages: - supports-color dev: true + /@typescript-eslint/type-utils@5.48.2(eslint@8.32.0)(typescript@4.9.5): + resolution: {integrity: sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.48.2(typescript@4.9.5) + '@typescript-eslint/utils': 5.48.2(eslint@8.32.0)(typescript@4.9.5) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.32.0 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/type-utils@5.48.2(eslint@8.32.0)(typescript@5.0.2): resolution: {integrity: sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10019,6 +9576,27 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@5.30.5(typescript@4.9.5): + resolution: {integrity: sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.30.5 + '@typescript-eslint/visitor-keys': 5.30.5 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/typescript-estree@5.48.2(typescript@4.7.4): resolution: {integrity: sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10040,6 +9618,27 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@5.48.2(typescript@4.9.5): + resolution: {integrity: sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.48.2 + '@typescript-eslint/visitor-keys': 5.48.2 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/typescript-estree@5.48.2(typescript@5.0.2): resolution: {integrity: sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10093,7 +9692,27 @@ packages: eslint: 8.32.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@8.32.0) - semver: 7.3.8 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@5.48.2(eslint@8.32.0)(typescript@4.9.5): + resolution: {integrity: sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.48.2 + '@typescript-eslint/types': 5.48.2 + '@typescript-eslint/typescript-estree': 5.48.2(typescript@4.9.5) + eslint: 8.32.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0(eslint@8.32.0) + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -10113,7 +9732,7 @@ packages: eslint: 8.32.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@8.32.0) - semver: 7.3.8 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -10147,21 +9766,6 @@ packages: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true - /@vitejs/plugin-react@4.0.3(vite@4.4.4): - resolution: {integrity: sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 - dependencies: - '@babel/core': 7.22.11 - '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.11) - '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.11) - react-refresh: 0.14.0 - vite: 4.4.4(@types/node@16.18.40)(sass@1.57.1) - transitivePeerDependencies: - - supports-color - dev: true - /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: @@ -10982,9 +10586,9 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 - get-intrinsic: 1.2.0 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 is-string: 1.0.7 dev: true @@ -11017,8 +10621,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 dev: true @@ -11971,17 +11575,6 @@ packages: pako: 1.0.11 dev: true - /browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001524 - electron-to-chromium: 1.4.504 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.10) - dev: true - /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -12314,10 +11907,6 @@ packages: /caniuse-lite@1.0.30001477: resolution: {integrity: sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ==} - /caniuse-lite@1.0.30001524: - resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==} - dev: true - /capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -14463,10 +14052,6 @@ packages: /electron-to-chromium@1.4.356: resolution: {integrity: sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==} - /electron-to-chromium@1.4.504: - resolution: {integrity: sha512-cSMwIAd8yUh54VwitVRVvHK66QqHWE39C3DRj8SWiXitEpVSY3wNPD9y1pxQtLIi4w3UdzF9klLsmuPshz09DQ==} - dev: true - /element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} dependencies: @@ -14975,36 +14560,6 @@ packages: '@esbuild/win32-x64': 0.17.18 dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -15052,7 +14607,7 @@ packages: dependencies: confusing-browser-globals: 1.0.11 eslint: 8.32.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) + eslint-plugin-import: 2.27.5(eslint@8.32.0) object.assign: 4.1.4 object.entries: 1.1.6 semver: 6.3.0 @@ -15070,7 +14625,7 @@ packages: dependencies: eslint: 8.32.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.27.5)(eslint@8.32.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) + eslint-plugin-import: 2.27.5(eslint@8.32.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.32.0) eslint-plugin-react: 7.32.1(eslint@8.32.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.32.0) @@ -15169,8 +14724,8 @@ packages: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7 - is-core-module: 2.11.0 - resolve: 1.22.2 + is-core-module: 2.13.0 + resolve: 1.22.4 transitivePeerDependencies: - supports-color dev: true @@ -15225,7 +14780,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.7.4) + '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.9.5) debug: 3.2.7 eslint: 8.32.0 eslint-import-resolver-node: 0.3.7 @@ -15307,6 +14862,29 @@ packages: - supports-color dev: true + /eslint-plugin-functional@4.4.1(eslint@8.32.0)(typescript@4.9.5): + resolution: {integrity: sha512-YhSfHS52Si62Sn126g9wGx+XnWMoWhwEt6ctVXfcJj+xMUiggjOqUVMca7fuLNzX8jYiNBIeU1Y0teHGePZ3NA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^8.0.0 + tsutils: ^3.0.0 + typescript: ^3.4.1 || ^4.0.0 + peerDependenciesMeta: + tsutils: + optional: true + typescript: + optional: true + dependencies: + '@typescript-eslint/utils': 5.48.2(eslint@8.32.0)(typescript@4.9.5) + deepmerge-ts: 4.2.2 + escape-string-regexp: 4.0.0 + eslint: 8.32.0 + semver: 7.5.4 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-functional@4.4.1(eslint@8.32.0)(typescript@5.0.2): resolution: {integrity: sha512-YhSfHS52Si62Sn126g9wGx+XnWMoWhwEt6ctVXfcJj+xMUiggjOqUVMca7fuLNzX8jYiNBIeU1Y0teHGePZ3NA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -15371,7 +14949,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.7.4) + '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 debug: 2.6.9 @@ -15384,7 +14962,40 @@ packages: is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 - resolve: 1.22.4 + resolve: 1.22.4 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.48.2(eslint@8.32.0)(typescript@5.0.2) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.32.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.48.2)(eslint-import-resolver-node@0.3.7)(eslint@8.32.0) + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.2 + semver: 6.3.0 tsconfig-paths: 3.14.1 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -15392,7 +15003,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0): + /eslint-plugin-import@2.27.5(eslint@8.32.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -15402,7 +15013,6 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.48.2(eslint@8.32.0)(typescript@5.0.2) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -15410,7 +15020,7 @@ packages: doctrine: 2.1.0 eslint: 8.32.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.48.2)(eslint-import-resolver-node@0.3.7)(eslint@8.32.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.30.5)(eslint-import-resolver-node@0.3.7)(eslint@8.32.0) has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -16016,7 +15626,7 @@ packages: jest-get-type: 29.2.0 jest-matcher-utils: 29.3.1 jest-message-util: 29.3.1 - jest-util: 29.3.1 + jest-util: 29.6.2 dev: true /expect@29.5.0: @@ -16502,7 +16112,7 @@ packages: micromatch: 4.0.5 dev: true - /firecamp-treeview@0.0.1-0(react-dom@17.0.2)(react-window@1.8.8)(react@17.0.2)(vscode-uri@3.0.7): + /firecamp-treeview@0.0.1-0(react-dom@18.2.0)(react-window@1.8.8)(react@18.2.0)(vscode-uri@3.0.7): resolution: {integrity: sha512-nMVGcr9XztR8ei3J3viDOvRRJEcc2lXmTqNoNZ5gXwkOjcHEgX+qIMGBSV1MONoAPbO+iqA1crRJUh36lp7K8g==} peerDependencies: react: ^17.0.0 @@ -16510,10 +16120,10 @@ packages: react-window: ^1.8.6 vscode-uri: ^3.0.2 dependencies: - react: 17.0.2 - react-aspen: 0.0.1-alpha.1(react-window@1.8.8)(react@17.0.2) - react-dom: 17.0.2(react@17.0.2) - react-window: 1.8.8(react-dom@17.0.2)(react@17.0.2) + react: 18.2.0 + react-aspen: 0.0.1-alpha.1(react-window@1.8.8)(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + react-window: 1.8.8(react-dom@18.2.0)(react@18.2.0) vscode-uri: 3.0.7 dev: false @@ -16604,7 +16214,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.21.4 chalk: 2.4.2 eslint: 8.32.0 micromatch: 3.1.10 @@ -16632,7 +16242,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.21.4 '@types/json-schema': 7.0.11 chalk: 4.1.2 chokidar: 3.5.3 @@ -16664,7 +16274,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.21.4 '@types/json-schema': 7.0.11 chalk: 4.1.2 chokidar: 3.5.3 @@ -17178,7 +16788,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: fs.realpath: 1.0.0 - minimatch: 9.0.0 + minimatch: 9.0.3 minipass: 5.0.0 path-scurry: 1.6.4 dev: true @@ -17377,7 +16987,7 @@ packages: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphiql-explorer@0.9.0(graphql@15.8.0)(react-dom@17.0.2)(react@17.0.2): + /graphiql-explorer@0.9.0(graphql@15.8.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-fZC/wsuatqiQDO2otchxriFO0LaWIo/ovF/CQJ1yOudmY0P7pzDiP+l9CEHUiWbizk3e99x6DQG4XG1VxA+d6A==} peerDependencies: graphql: ^0.6.0 || ^0.7.0 || ^0.8.0-b || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 @@ -17385,8 +16995,8 @@ packages: react-dom: ^15.6.0 || ^16.0.0 dependencies: graphql: 15.8.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false /graphql-language-service@5.1.1(graphql@15.8.0): @@ -18126,7 +17736,7 @@ packages: resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minimatch: 9.0.0 + minimatch: 9.0.3 dev: true /ignore@4.0.6: @@ -19078,7 +18688,7 @@ packages: jest: ^26.0.1 || ^27.0.0 dependencies: '@types/chrome': 0.0.114 - jest: 28.1.3(@types/node@18.11.18)(ts-node@10.9.1) + jest: 28.1.3(@types/node@18.0.3)(ts-node@10.9.1) dev: true /jest-circus@28.1.3: @@ -19476,7 +19086,7 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.11.18)(typescript@5.0.2) + ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) transitivePeerDependencies: - supports-color dev: true @@ -19556,7 +19166,7 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.7.4) + ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) transitivePeerDependencies: - supports-color dev: true @@ -19824,7 +19434,7 @@ packages: '@jest/fake-timers': 29.3.1 '@jest/types': 29.4.3 '@types/jsdom': 20.0.1 - '@types/node': 18.0.3 + '@types/node': 16.18.40 jest-mock: 29.3.1 jest-util: 29.4.3 jsdom: 20.0.3 @@ -20073,7 +19683,7 @@ packages: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.21.4 '@jest/types': 29.6.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -20088,7 +19698,7 @@ packages: resolution: {integrity: sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.21.4 '@jest/types': 29.6.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -20611,18 +20221,6 @@ packages: picomatch: 2.3.1 dev: true - /jest-util@29.3.1: - resolution: {integrity: sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.1 - '@types/node': 16.18.40 - chalk: 4.1.2 - ci-info: 3.8.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - /jest-util@29.4.3: resolution: {integrity: sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -22184,13 +21782,6 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.0: - resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -22796,10 +22387,6 @@ packages: /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true - /node.extend@2.0.2: resolution: {integrity: sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==} engines: {node: '>=0.4.0'} @@ -23200,8 +22787,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /object.getownpropertydescriptors@2.1.5: @@ -23233,8 +22820,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /objectorarray@1.0.5: @@ -23718,7 +23305,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.21.4 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -24161,7 +23748,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.27 - ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.7.4) + ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) yaml: 1.10.2 dev: true @@ -24507,7 +24094,7 @@ packages: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.0 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true @@ -24850,14 +24437,14 @@ packages: resolution: {integrity: sha512-dye+7rERqNf/6mDT1iwps+4Gf42420xuZgygF33uX178DxffqcyeuHbBuJ382FIcB5iP6mMZOhfW7kI0uXwb/Q==} dev: false - /re-resizable@6.9.9(react-dom@17.0.2)(react@17.0.2): + /re-resizable@6.9.9(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-l+MBlKZffv/SicxDySKEEh42hR6m5bAHfNu3Tvxks2c4Ah+ldnWjfnVRwxo/nxF27SsUsxDS0raAzFuJNKABXA==} peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 dependencies: - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false /react-addons-test-utils@15.6.2(react-dom@15.7.0): @@ -24868,33 +24455,33 @@ packages: react-dom: 15.7.0(react@18.2.0) dev: true - /react-aspen@0.0.1-alpha.1(react-window@1.8.8)(react@17.0.2): + /react-aspen@0.0.1-alpha.1(react-window@1.8.8)(react@18.2.0): resolution: {integrity: sha512-+SeJz0w1+Z0Xi3c2qsIp78WM44/zoIY9vMGOmgJ4L668otYrX2rRkvV6kytVkfseIJZByu/ITHbE3dWd2Rvg0A==} peerDependencies: react: ^16.0.0 || ^17.0.0 react-window: ^1.0.0 dependencies: aspen-core: 0.0.1-alpha.1 - react: 17.0.2 - react-window: 1.8.8(react-dom@17.0.2)(react@17.0.2) + react: 18.2.0 + react-window: 1.8.8(react-dom@18.2.0)(react@18.2.0) dev: false - /react-codemirror2@7.2.1(codemirror@5.65.11)(react@17.0.2): + /react-codemirror2@7.2.1(codemirror@5.65.11)(react@18.2.0): resolution: {integrity: sha512-t7YFmz1AXdlImgHXA9Ja0T6AWuopilub24jRaQdPVbzUJVNKIYuy3uCFZYa7CE5S3UW6SrSa5nAqVQvtzRF9gw==} peerDependencies: codemirror: 5.x react: '>=15.5 <=16.x' dependencies: codemirror: 5.65.11 - react: 17.0.2 + react: 18.2.0 dev: false - /react-complex-tree@2.0.2(react@17.0.2): + /react-complex-tree@2.0.2(react@18.2.0): resolution: {integrity: sha512-gFNTAjN3t9cQ2SnkNKf7rqAiy4et7Sr6wI3V2Qs0fvmomKNnyJ7o/1jioRlTMpaIWPlL0vx1hwed5uAf1pjYBQ==} peerDependencies: react: '>=16.0.0' dependencies: - react: 17.0.2 + react: 18.2.0 dev: false /react-docgen-typescript@2.2.2(typescript@5.0.2): @@ -24936,16 +24523,6 @@ packages: react: 18.2.0 dev: true - /react-dom@17.0.2(react@17.0.2): - resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} - peerDependencies: - react: 17.0.2 - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react: 17.0.2 - scheduler: 0.20.2 - /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -24954,9 +24531,8 @@ packages: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 - dev: false - /react-dropzone@14.2.3(react@17.0.2): + /react-dropzone@14.2.3(react@18.2.0): resolution: {integrity: sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==} engines: {node: '>= 10.13'} peerDependencies: @@ -24965,10 +24541,10 @@ packages: attr-accept: 2.2.2 file-selector: 0.6.0 prop-types: 15.8.1 - react: 17.0.2 + react: 18.2.0 dev: false - /react-element-to-jsx-string@14.3.4(react-dom@17.0.2)(react@17.0.2): + /react-element-to-jsx-string@14.3.4(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==} peerDependencies: react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 @@ -24976,19 +24552,19 @@ packages: dependencies: '@base2/pretty-print-object': 1.0.1 is-plain-object: 5.0.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) react-is: 17.0.2 dev: true - /react-error-boundary@3.1.4(react@17.0.2): + /react-error-boundary@3.1.4(react@18.2.0): resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} engines: {node: '>=10', npm: '>=6'} peerDependencies: react: '>=16.13.1' dependencies: '@babel/runtime': 7.20.13 - react: 17.0.2 + react: 18.2.0 dev: false /react-fast-compare@3.2.0: @@ -25005,36 +24581,36 @@ packages: prop-types: 15.8.1 dev: false - /react-ga@3.3.1(prop-types@15.8.1)(react@17.0.2): + /react-ga@3.3.1(prop-types@15.8.1)(react@18.2.0): resolution: {integrity: sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==} peerDependencies: prop-types: ^15.6.0 react: ^15.6.2 || ^16.0 || ^17 || ^18 dependencies: prop-types: 15.8.1 - react: 17.0.2 + react: 18.2.0 dev: false - /react-hook-form@6.15.8(react@17.0.2): + /react-hook-form@6.15.8(react@18.2.0): resolution: {integrity: sha512-prq82ofMbnRyj5wqDe8hsTRcdR25jQ+B8KtCS7BLCzjFHAwNuCjRwzPuP4eYLsEBjEIeYd6try+pdLdw0kPkpg==} peerDependencies: react: ^16.8.0 || ^17 dependencies: - react: 17.0.2 + react: 18.2.0 dev: false - /react-hotkeys-hook@3.4.7(react-dom@17.0.2)(react@17.0.2): + /react-hotkeys-hook@3.4.7(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-+bbPmhPAl6ns9VkXkNNyxlmCAIyDAcWbB76O4I0ntr3uWCRuIQf/aRLartUahe9chVMPj+OEzzfk3CQSjclUEQ==} peerDependencies: react: '>=16.8.1' react-dom: '>=16.8.1' dependencies: hotkeys-js: 3.9.4 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /react-inspector@5.1.1(react@17.0.2): + /react-inspector@5.1.1(react@18.2.0): resolution: {integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==} peerDependencies: react: ^16.8.4 || ^17.0.0 @@ -25042,7 +24618,7 @@ packages: '@babel/runtime': 7.20.13 is-dom: 1.1.0 prop-types: 15.8.1 - react: 17.0.2 + react: 18.2.0 dev: true /react-is@16.13.1: @@ -25060,7 +24636,7 @@ packages: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} dev: false - /react-measure@2.5.2(react-dom@17.0.2)(react@17.0.2): + /react-measure@2.5.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-M+rpbTLWJ3FD6FXvYV6YEGvQ5tMayQ3fGrZhRPHrE9bVlBYfDCLuDcgNttYfk8IqfOI03jz6cbpqMRTUclQnaA==} peerDependencies: react: '>0.13.0' @@ -25069,8 +24645,8 @@ packages: '@babel/runtime': 7.20.13 get-node-dimensions: 1.2.1 prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) resize-observer-polyfill: 1.5.1 dev: false @@ -25078,7 +24654,7 @@ packages: resolution: {integrity: sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==} dev: true - /react-reflex@4.0.9(react-dom@17.0.2)(react@17.0.2): + /react-reflex@4.0.9(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-XFTNRekFK4ul8mzVd1lniKT/SI0FvNYhXyLNl5gagS1i3iW9QKlpFYcRfVhZlxxaYHb8UyLOs3+H4Ay5cjtbxQ==} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 @@ -25086,8 +24662,8 @@ packages: '@babel/runtime': 7.20.13 lodash.throttle: 4.1.1 prop-types: 15.8.1 - react: 17.0.2 - react-measure: 2.5.2(react-dom@17.0.2)(react@17.0.2) + react: 18.2.0 + react-measure: 2.5.2(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: - react-dom dev: false @@ -25097,12 +24673,7 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} - engines: {node: '>=0.10.0'} - dev: true - - /react-remove-scroll-bar@2.3.4(@types/react@17.0.53)(react@17.0.2): + /react-remove-scroll-bar@2.3.4(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -25112,13 +24683,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 17.0.53 - react: 17.0.2 - react-style-singleton: 2.2.1(@types/react@17.0.53)(react@17.0.2) + '@types/react': 18.2.29 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.29)(react@18.2.0) tslib: 2.6.1 dev: false - /react-remove-scroll@2.5.5(@types/react@17.0.53)(react@17.0.2): + /react-remove-scroll@2.5.5(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -25128,13 +24699,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 17.0.53 - react: 17.0.2 - react-remove-scroll-bar: 2.3.4(@types/react@17.0.53)(react@17.0.2) - react-style-singleton: 2.2.1(@types/react@17.0.53)(react@17.0.2) + '@types/react': 18.2.29 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.29)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.29)(react@18.2.0) tslib: 2.6.1 - use-callback-ref: 1.3.0(@types/react@17.0.53)(react@17.0.2) - use-sidecar: 1.1.2(@types/react@17.0.53)(react@17.0.2) + use-callback-ref: 1.3.0(@types/react@18.2.29)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.29)(react@18.2.0) dev: false /react-sizeme@3.0.2: @@ -25146,7 +24717,7 @@ packages: throttle-debounce: 3.0.1 dev: true - /react-style-singleton@2.2.1(@types/react@17.0.53)(react@17.0.2): + /react-style-singleton@2.2.1(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -25156,56 +24727,56 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 17.0.53 + '@types/react': 18.2.29 get-nonce: 1.0.1 invariant: 2.2.4 - react: 17.0.2 + react: 18.2.0 tslib: 2.6.1 dev: false - /react-table@7.8.0(react@17.0.2): + /react-table@7.8.0(react@18.2.0): resolution: {integrity: sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==} peerDependencies: react: ^16.8.3 || ^17.0.0-0 || ^18.0.0 dependencies: - react: 17.0.2 + react: 18.2.0 dev: false - /react-textarea-autosize@8.3.4(@types/react@17.0.53)(react@17.0.2): + /react-textarea-autosize@8.3.4(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@babel/runtime': 7.20.13 - react: 17.0.2 - use-composed-ref: 1.3.0(react@17.0.2) - use-latest: 1.2.1(@types/react@17.0.53)(react@17.0.2) + react: 18.2.0 + use-composed-ref: 1.3.0(react@18.2.0) + use-latest: 1.2.1(@types/react@18.2.29)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /react-tiny-popover@7.2.0(react-dom@17.0.2)(react@17.0.2): + /react-tiny-popover@7.2.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-AIliRDqTFB1+qy4GvWn+8B8JPKA13xtESWYdFkrdCeI8hEnPKufBvcF9a3dO/0SmD21mV6721xxhAnUm8TRXJw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /react-transition-state@1.1.5(react-dom@17.0.2)(react@17.0.2): + /react-transition-state@1.1.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-ITY2mZqc2dWG2eitJkYNdcSFW8aKeOlkL2A/vowRrLL8GH3J6Re/SpD/BLvQzrVOTqjsP0b5S9N10vgNNzwMUQ==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /react-virtualized@9.22.3(react-dom@17.0.2)(react@17.0.2): + /react-virtualized@9.22.3(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-MKovKMxWTcwPSxE1kK1HcheQTWfuCxAuBoSTf2gwyMM21NdX/PXUhnoP8Uc5dRKd+nKm8v41R36OellhdCpkrw==} peerDependencies: react: ^15.3.0 || ^16.0.0-alpha @@ -25216,12 +24787,12 @@ packages: dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) react-lifecycles-compat: 3.0.4 dev: false - /react-window@1.8.8(react-dom@17.0.2)(react@17.0.2): + /react-window@1.8.8(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4IiBeRtGXziZ1n0XklnFGu7h9gU684zepqyKzgPNzrsrk7xOCxni+TCckjg2Nr/DiaEEGVVmnhYSlT2rB47dQ==} engines: {node: '>8.0.0'} peerDependencies: @@ -25230,17 +24801,10 @@ packages: dependencies: '@babel/runtime': 7.20.13 memoize-one: 5.2.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /react@17.0.2: - resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -25765,7 +25329,7 @@ packages: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -25875,14 +25439,6 @@ packages: fsevents: 2.3.2 dev: true - /rollup@3.28.1: - resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - /rsvp@4.8.5: resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} engines: {node: 6.* || >= 7.*} @@ -26037,17 +25593,10 @@ packages: xmlchars: 2.2.0 dev: true - /scheduler@0.20.2: - resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 - dev: false /schema-utils@1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} @@ -26127,11 +25676,6 @@ packages: hasBin: true dev: true - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} @@ -27741,7 +27285,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.1 @@ -28021,7 +27565,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@28.0.5(@babel/core@7.22.11)(jest@28.1.2)(typescript@4.7.4): + /ts-jest@28.0.5(@babel/core@7.20.12)(jest@28.1.2)(typescript@4.7.4): resolution: {integrity: sha512-Sx9FyP9pCY7pUzQpy4FgRZf2bhHY3za576HMKJFs+OnQ9jS96Du5vNsDKkyedQkik+sEabbKAnCliv9BEsHZgQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -28039,7 +27583,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.20.12 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 28.1.2(@types/node@18.0.3)(ts-node@10.8.2) @@ -28052,7 +27596,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4): + /ts-jest@28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -28073,7 +27617,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.20.12 bs-logger: 0.2.6 esbuild: 0.17.18 fast-json-stable-stringify: 2.1.0 @@ -28087,7 +27631,42 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.22.11)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2): + /ts-jest@28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.9.5): + resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^28.0.0 + babel-jest: ^28.0.0 + esbuild: '*' + jest: ^28.0.0 + typescript: '>=4.3' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.20.12 + bs-logger: 0.2.6 + esbuild: 0.17.18 + fast-json-stable-stringify: 2.1.0 + jest: 28.1.3(@types/node@18.0.3)(ts-node@10.9.1) + jest-util: 28.1.3 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.5.4 + typescript: 4.9.5 + yargs-parser: 21.1.1 + dev: true + + /ts-jest@28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -28108,7 +27687,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.20.12 bs-logger: 0.2.6 esbuild: 0.17.18 fast-json-stable-stringify: 2.1.0 @@ -28122,7 +27701,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.22.11)(jest@28.1.3)(typescript@5.0.2): + /ts-jest@28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -28143,7 +27722,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.20.12 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 28.1.3(@types/node@18.11.18)(ts-node@10.9.1) @@ -28375,6 +27954,37 @@ packages: yn: 3.1.1 dev: true + /ts-node@10.9.1(@types/node@18.0.3)(typescript@4.9.5): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.0.3 + acorn: 8.8.2 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /ts-node@10.9.1(@types/node@18.11.18)(typescript@5.0.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -28526,6 +28136,43 @@ packages: - ts-node dev: true + /tsup@6.7.0(postcss@8.4.27)(ts-node@10.9.1)(typescript@4.9.5): + resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} + engines: {node: '>=14.18'} + hasBin: true + peerDependencies: + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.1.0' + peerDependenciesMeta: + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.1(esbuild@0.17.18) + cac: 6.7.14 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + esbuild: 0.17.18 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss: 8.4.27 + postcss-load-config: 3.1.4(postcss@8.4.27)(ts-node@10.9.1) + resolve-from: 5.0.0 + rollup: 3.21.6 + source-map: 0.8.0-beta.0 + sucrase: 3.32.0 + tree-kill: 1.2.2 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + /tsup@6.7.0(postcss@8.4.27)(ts-node@10.9.1)(typescript@5.0.2): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} @@ -28782,6 +28429,20 @@ packages: typescript: 4.7.4 dev: true + /typedoc@0.23.24(typescript@4.9.5): + resolution: {integrity: sha512-bfmy8lNQh+WrPYcJbtjQ6JEEsVl/ce1ZIXyXhyW+a1vFrjO39t6J8sL/d6FfAGrJTc7McCXgk9AanYBSNvLdIA==} + engines: {node: '>= 14.14'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x + dependencies: + lunr: 2.3.9 + marked: 4.2.12 + minimatch: 5.1.6 + shiki: 0.12.1 + typescript: 4.9.5 + dev: true + /typedoc@0.23.24(typescript@5.0.2): resolution: {integrity: sha512-bfmy8lNQh+WrPYcJbtjQ6JEEsVl/ce1ZIXyXhyW+a1vFrjO39t6J8sL/d6FfAGrJTc7McCXgk9AanYBSNvLdIA==} engines: {node: '>= 14.14'} @@ -29063,17 +28724,6 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 - /update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.10 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - /upper-case-first@1.1.2: resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} dependencies: @@ -29135,7 +28785,7 @@ packages: querystring: 0.2.0 dev: true - /use-callback-ref@1.3.0(@types/react@17.0.53)(react@17.0.2): + /use-callback-ref@1.3.0(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -29145,20 +28795,20 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 17.0.53 - react: 17.0.2 + '@types/react': 18.2.29 + react: 18.2.0 tslib: 2.6.1 dev: false - /use-composed-ref@1.3.0(react@17.0.2): + /use-composed-ref@1.3.0(react@18.2.0): resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 17.0.2 + react: 18.2.0 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@17.0.53)(react@17.0.2): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -29167,11 +28817,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 17.0.53 - react: 17.0.2 + '@types/react': 18.2.29 + react: 18.2.0 dev: false - /use-latest@1.2.1(@types/react@17.0.53)(react@17.0.2): + /use-latest@1.2.1(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -29180,12 +28830,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 17.0.53 - react: 17.0.2 - use-isomorphic-layout-effect: 1.1.2(@types/react@17.0.53)(react@17.0.2) + '@types/react': 18.2.29 + react: 18.2.0 + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.29)(react@18.2.0) dev: false - /use-sidecar@1.1.2(@types/react@17.0.53)(react@17.0.2): + /use-sidecar@1.1.2(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -29195,18 +28845,18 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 17.0.53 + '@types/react': 18.2.29 detect-node-es: 1.1.0 - react: 17.0.2 + react: 18.2.0 tslib: 2.6.1 dev: false - /use-sync-external-store@1.2.0(react@17.0.2): + /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 17.0.2 + react: 18.2.0 dev: false /use@3.1.1: @@ -29360,43 +29010,6 @@ packages: replace-ext: 1.0.1 dev: true - /vite@4.4.4(@types/node@16.18.40)(sass@1.57.1): - resolution: {integrity: sha512-4mvsTxjkveWrKDJI70QmelfVqTm+ihFAb6+xf4sjEU2TmUCTlVX87tmg/QooPEMQb/lM9qGHT99ebqPziEd3wg==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 16.18.40 - esbuild: 0.18.20 - postcss: 8.4.27 - rollup: 3.28.1 - sass: 1.57.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true @@ -30557,7 +30170,7 @@ packages: wrap-ansi: 2.1.0 dev: true - /zustand@4.3.9(react@17.0.2): + /zustand@4.3.9(react@18.2.0): resolution: {integrity: sha512-Tat5r8jOMG1Vcsj8uldMyqYKC5IZvQif8zetmLHs9WoZlntTHmIoNM8TpLRY31ExncuUvUOXehd0kvahkuHjDw==} engines: {node: '>=12.7.0'} peerDependencies: @@ -30569,8 +30182,8 @@ packages: react: optional: true dependencies: - react: 17.0.2 - use-sync-external-store: 1.2.0(react@17.0.2) + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) dev: false /zwitch@1.0.5: From bfb6048ce72eebd73f7245ad6e281c770278b66a Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 28 Oct 2023 13:26:53 +0530 Subject: [PATCH 09/71] chore: pnpm.lock updated --- pnpm-lock.yaml | 820 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 770 insertions(+), 50 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61ad97a1f..59b255c15 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,7 +98,7 @@ importers: version: 19.0.4(eslint-plugin-import@2.27.5)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.32.1)(eslint@8.32.0) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(eslint@8.32.0) + version: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) eslint-plugin-jest: specifier: ^27.2.1 version: 27.2.1(eslint@8.32.0)(typescript@5.0.2) @@ -848,6 +848,37 @@ importers: specifier: ^5.0.2 version: 5.0.2 + packages/firecamp-tauri: + dependencies: + '@tauri-apps/api': + specifier: ^1.4.0 + version: 1.5.1 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@tauri-apps/cli': + specifier: ^1.4.0 + version: 1.5.6 + '@types/react': + specifier: ^18.2.15 + version: 18.2.29 + '@types/react-dom': + specifier: ^18.2.7 + version: 18.2.14 + '@vitejs/plugin-react': + specifier: ^4.0.3 + version: 4.1.0(vite@4.5.0) + typescript: + specifier: ^5.0.2 + version: 5.0.2 + vite: + specifier: ^4.4.4 + version: 4.5.0(@types/node@16.18.40)(sass@1.57.1) + platform/firecamp-platform: dependencies: '@firecamp/agent-manager': @@ -2116,11 +2147,24 @@ packages: dependencies: '@babel/highlight': 7.18.6 + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + dev: true + /@babel/compat-data@7.20.10: resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} engines: {node: '>=6.9.0'} dev: true + /@babel/compat-data@7.23.2: + resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/core@7.12.9: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} @@ -2168,6 +2212,29 @@ packages: - supports-color dev: true + /@babel/core@7.23.2: + resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helpers': 7.23.2 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/eslint-parser@7.19.1(@babel/core@7.20.12)(eslint@7.32.0): resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -2205,6 +2272,16 @@ packages: jsesc: 2.5.2 dev: true + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 + dev: true + /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} @@ -2234,6 +2311,17 @@ packages: semver: 6.3.0 dev: true + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.22.1 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + /@babel/helper-create-class-features-plugin@7.20.12(@babel/core@7.20.12): resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==} engines: {node: '>=6.9.0'} @@ -2303,6 +2391,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} @@ -2318,6 +2411,14 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + dev: true + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} @@ -2325,6 +2426,13 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + /@babel/helper-member-expression-to-functions@7.20.7: resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} engines: {node: '>=6.9.0'} @@ -2338,6 +2446,13 @@ packages: dependencies: '@babel/types': 7.20.7 + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + /@babel/helper-module-transforms@7.20.11: resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} engines: {node: '>=6.9.0'} @@ -2354,6 +2469,20 @@ packages: - supports-color dev: true + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} @@ -2370,6 +2499,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} @@ -2406,6 +2540,13 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} @@ -2420,19 +2561,41 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} @@ -2456,6 +2619,17 @@ packages: - supports-color dev: true + /@babel/helpers@7.23.2: + resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} @@ -2464,6 +2638,15 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + /@babel/parser@7.20.13: resolution: {integrity: sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==} engines: {node: '>=6.0.0'} @@ -2472,6 +2655,14 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + dev: true + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -3250,6 +3441,26 @@ packages: '@babel/plugin-transform-react-jsx': 7.20.13(@babel/core@7.20.12) dev: true + /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-transform-react-jsx@7.20.13(@babel/core@7.20.12): resolution: {integrity: sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==} engines: {node: '>=6.9.0'} @@ -3586,6 +3797,15 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + dev: true + /@babel/traverse@7.20.13: resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} engines: {node: '>=6.9.0'} @@ -3604,6 +3824,24 @@ packages: - supports-color dev: true + /@babel/traverse@7.23.2: + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.20.7: resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} @@ -3612,6 +3850,15 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -3964,6 +4211,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.17.18: resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} engines: {node: '>=12'} @@ -3973,6 +4229,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.17.18: resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} engines: {node: '>=12'} @@ -3982,6 +4247,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.17.18: resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} engines: {node: '>=12'} @@ -3991,6 +4265,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.17.18: resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} engines: {node: '>=12'} @@ -4000,6 +4283,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.17.18: resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} engines: {node: '>=12'} @@ -4009,6 +4301,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.17.18: resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} engines: {node: '>=12'} @@ -4018,6 +4319,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.17.18: resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} engines: {node: '>=12'} @@ -4027,6 +4337,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.17.18: resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} engines: {node: '>=12'} @@ -4036,6 +4355,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.17.18: resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} engines: {node: '>=12'} @@ -4045,6 +4373,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.17.18: resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} engines: {node: '>=12'} @@ -4054,6 +4391,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.17.18: resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} engines: {node: '>=12'} @@ -4063,6 +4409,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.17.18: resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} engines: {node: '>=12'} @@ -4072,6 +4427,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.17.18: resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} engines: {node: '>=12'} @@ -4081,6 +4445,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.17.18: resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} engines: {node: '>=12'} @@ -4090,6 +4463,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.17.18: resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} engines: {node: '>=12'} @@ -4099,6 +4481,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.17.18: resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} engines: {node: '>=12'} @@ -4108,6 +4499,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.17.18: resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} engines: {node: '>=12'} @@ -4117,6 +4517,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.17.18: resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} engines: {node: '>=12'} @@ -4126,6 +4535,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.17.18: resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} engines: {node: '>=12'} @@ -4135,6 +4553,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.17.18: resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} engines: {node: '>=12'} @@ -4144,6 +4571,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.17.18: resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} engines: {node: '>=12'} @@ -4153,6 +4589,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc@0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5100,7 +5545,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@jest/types': 28.1.3 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 1.9.0 @@ -5249,7 +5694,7 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -8454,6 +8899,118 @@ packages: engines: {node: '>=12'} dev: false + /@tauri-apps/api@1.5.1: + resolution: {integrity: sha512-6unsZDOdlXTmauU3NhWhn+Cx0rODV+rvNvTdvolE5Kls5ybA6cqndQENDt1+FS0tF7ozCP66jwWoH6a5h90BrA==} + engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} + dev: false + + /@tauri-apps/cli-darwin-arm64@1.5.6: + resolution: {integrity: sha512-NNvG3XLtciCMsBahbDNUEvq184VZmOveTGOuy0So2R33b/6FDkuWaSgWZsR1mISpOuP034htQYW0VITCLelfqg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-darwin-x64@1.5.6: + resolution: {integrity: sha512-nkiqmtUQw3N1j4WoVjv81q6zWuZFhBLya/RNGUL94oafORloOZoSY0uTZJAoeieb3Y1YK0rCHSDl02MyV2Fi4A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-arm-gnueabihf@1.5.6: + resolution: {integrity: sha512-z6SPx+axZexmWXTIVPNs4Tg7FtvdJl9EKxYN6JPjOmDZcqA13iyqWBQal2DA/GMZ1Xqo3vyJf6EoEaKaliymPQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-arm64-gnu@1.5.6: + resolution: {integrity: sha512-QuQjMQmpsCbzBrmtQiG4uhnfAbdFx3nzm+9LtqjuZlurc12+Mj5MTgqQ3AOwQedH3f7C+KlvbqD2AdXpwTg7VA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-arm64-musl@1.5.6: + resolution: {integrity: sha512-8j5dH3odweFeom7bRGlfzDApWVOT4jIq8/214Wl+JeiNVehouIBo9lZGeghZBH3XKFRwEvU23i7sRVjuh2s8mg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-x64-gnu@1.5.6: + resolution: {integrity: sha512-gbFHYHfdEGW0ffk8SigDsoXks6USpilF6wR0nqB/JbWzbzFR/sBuLVNQlJl1RKNakyJHu+lsFxGy0fcTdoX8xA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-x64-musl@1.5.6: + resolution: {integrity: sha512-9v688ogoLkeFYQNgqiSErfhTreLUd8B3prIBSYUt+x4+5Kcw91zWvIh+VSxL1n3KCGGsM7cuXhkGPaxwlEh1ug==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-win32-arm64-msvc@1.5.6: + resolution: {integrity: sha512-DRNDXFNZb6y5IZrw+lhTTA9l4wbzO4TNRBAlHAiXUrH+pRFZ/ZJtv5WEuAj9ocVSahVw2NaK5Yaold4NPAxHog==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-win32-ia32-msvc@1.5.6: + resolution: {integrity: sha512-oUYKNR/IZjF4fsOzRpw0xesl2lOjhsQEyWlgbpT25T83EU113Xgck9UjtI7xemNI/OPCv1tPiaM1e7/ABdg5iA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-win32-x64-msvc@1.5.6: + resolution: {integrity: sha512-RmEf1os9C8//uq2hbjXi7Vgz9ne7798ZxqemAZdUwo1pv3oLVZSz1/IvZmUHPdy2e6zSeySqWu1D0Y3QRNN+dg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli@1.5.6: + resolution: {integrity: sha512-k4Y19oVCnt7WZb2TnDzLqfs7o98Jq0tUoVMv+JQSzuRDJqaVu2xMBZ8dYplEn+EccdR5SOMyzaLBJWu38TVK1A==} + engines: {node: '>= 10'} + hasBin: true + optionalDependencies: + '@tauri-apps/cli-darwin-arm64': 1.5.6 + '@tauri-apps/cli-darwin-x64': 1.5.6 + '@tauri-apps/cli-linux-arm-gnueabihf': 1.5.6 + '@tauri-apps/cli-linux-arm64-gnu': 1.5.6 + '@tauri-apps/cli-linux-arm64-musl': 1.5.6 + '@tauri-apps/cli-linux-x64-gnu': 1.5.6 + '@tauri-apps/cli-linux-x64-musl': 1.5.6 + '@tauri-apps/cli-win32-arm64-msvc': 1.5.6 + '@tauri-apps/cli-win32-ia32-msvc': 1.5.6 + '@tauri-apps/cli-win32-x64-msvc': 1.5.6 + dev: true + /@testing-library/dom@8.20.0: resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==} engines: {node: '>=12'} @@ -8562,6 +9119,16 @@ packages: '@types/babel__traverse': 7.18.3 dev: true + /@types/babel__core@7.20.3: + resolution: {integrity: sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==} + dependencies: + '@babel/parser': 7.20.13 + '@babel/types': 7.20.7 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.18.3 + dev: true + /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: @@ -9766,6 +10333,22 @@ packages: resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} dev: true + /@vitejs/plugin-react@4.1.0(vite@4.5.0): + resolution: {integrity: sha512-rM0SqazU9iqPUraQ2JlIvReeaxOoRj6n+PzB1C0cBzIbd8qP336nC39/R9yPi3wVcah7E7j/kdU1uCUqMEU4OQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.23.2) + '@types/babel__core': 7.20.3 + react-refresh: 0.14.0 + vite: 4.5.0(@types/node@16.18.40)(sass@1.57.1) + transitivePeerDependencies: + - supports-color + dev: true + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: @@ -11585,6 +12168,17 @@ packages: node-releases: 2.0.10 update-browserslist-db: 1.0.10(browserslist@4.21.5) + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001555 + electron-to-chromium: 1.4.569 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: true + /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -11907,6 +12501,10 @@ packages: /caniuse-lite@1.0.30001477: resolution: {integrity: sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ==} + /caniuse-lite@1.0.30001555: + resolution: {integrity: sha512-NzbUFKUnJ3DTcq6YyZB6+qqhfD112uR3uoEnkmfzm2wVzUNsFkU7AwBjKQ654Sp5cau0JxhFyRSn/tQZ+XfygA==} + dev: true + /capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -13261,13 +13859,13 @@ packages: peerDependencies: webpack: ^4.27.0 || ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.21) + icss-utils: 5.1.0(postcss@8.4.27) loader-utils: 2.0.4 - postcss: 8.4.21 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.21) - postcss-modules-local-by-default: 4.0.0(postcss@8.4.21) - postcss-modules-scope: 3.0.0(postcss@8.4.21) - postcss-modules-values: 4.0.0(postcss@8.4.21) + postcss: 8.4.27 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.27) + postcss-modules-local-by-default: 4.0.0(postcss@8.4.27) + postcss-modules-scope: 3.0.0(postcss@8.4.27) + postcss-modules-values: 4.0.0(postcss@8.4.27) postcss-value-parser: 4.2.0 schema-utils: 3.1.1 semver: 7.5.4 @@ -14052,6 +14650,10 @@ packages: /electron-to-chromium@1.4.356: resolution: {integrity: sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==} + /electron-to-chromium@1.4.569: + resolution: {integrity: sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg==} + dev: true + /element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} dependencies: @@ -14560,6 +15162,36 @@ packages: '@esbuild/win32-x64': 0.17.18 dev: true + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -14607,7 +15239,7 @@ packages: dependencies: confusing-browser-globals: 1.0.11 eslint: 8.32.0 - eslint-plugin-import: 2.27.5(eslint@8.32.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) object.assign: 4.1.4 object.entries: 1.1.6 semver: 6.3.0 @@ -14625,7 +15257,7 @@ packages: dependencies: eslint: 8.32.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.27.5)(eslint@8.32.0) - eslint-plugin-import: 2.27.5(eslint@8.32.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.32.0) eslint-plugin-react: 7.32.1(eslint@8.32.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.32.0) @@ -14780,7 +15412,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.7.4) debug: 3.2.7 eslint: 8.32.0 eslint-import-resolver-node: 0.3.7 @@ -14949,7 +15581,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.30.5(eslint@8.32.0)(typescript@4.7.4) array-includes: 3.1.6 array.prototype.flat: 1.3.1 debug: 2.6.9 @@ -15003,38 +15635,6 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(eslint@8.32.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.32.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.30.5)(eslint-import-resolver-node@0.3.7)(eslint@8.32.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.2 - semver: 6.3.0 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-jest@27.2.1(eslint@8.32.0)(typescript@5.0.2): resolution: {integrity: sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -17703,6 +18303,15 @@ packages: postcss: 8.4.21 dev: true + /icss-utils@5.1.0(postcss@8.4.27): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.27 + dev: true + /identity-obj-proxy@3.0.0: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} engines: {node: '>=4'} @@ -18688,7 +19297,7 @@ packages: jest: ^26.0.1 || ^27.0.0 dependencies: '@types/chrome': 0.0.114 - jest: 28.1.3(@types/node@18.0.3)(ts-node@10.9.1) + jest: 28.1.3(@types/node@18.11.18)(ts-node@10.9.1) dev: true /jest-circus@28.1.3: @@ -19086,7 +19695,7 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.11.18)(typescript@5.0.2) transitivePeerDependencies: - supports-color dev: true @@ -19166,7 +19775,7 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.7.4) transitivePeerDependencies: - supports-color dev: true @@ -22387,6 +22996,10 @@ packages: /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + /node.extend@2.0.2: resolution: {integrity: sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==} engines: {node: '>=0.4.0'} @@ -23748,7 +24361,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.27 - ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.0.3)(typescript@4.7.4) yaml: 1.10.2 dev: true @@ -23818,6 +24431,15 @@ packages: postcss: 8.4.21 dev: true + /postcss-modules-extract-imports@3.0.0(postcss@8.4.27): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.27 + dev: true + /postcss-modules-local-by-default@1.2.0: resolution: {integrity: sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==} dependencies: @@ -23847,6 +24469,18 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-modules-local-by-default@4.0.0(postcss@8.4.27): + resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.27) + postcss: 8.4.27 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + dev: true + /postcss-modules-resolve-imports@1.3.0(postcss@6.0.23): resolution: {integrity: sha512-9xECsLcuR1DRu7mVhK6GIkdEeg4sdZXbLEcuEkDh9mKiz+uxDBfDREYiVehINdW0UPF9gbHnb64ZQMuRsqqkDA==} engines: {node: '>= 4'} @@ -23884,6 +24518,16 @@ packages: postcss-selector-parser: 6.0.11 dev: true + /postcss-modules-scope@3.0.0(postcss@8.4.27): + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.27 + postcss-selector-parser: 6.0.11 + dev: true + /postcss-modules-values@1.3.0: resolution: {integrity: sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==} dependencies: @@ -23908,6 +24552,16 @@ packages: postcss: 8.4.21 dev: true + /postcss-modules-values@4.0.0(postcss@8.4.27): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.27) + postcss: 8.4.27 + dev: true + /postcss-nested@4.2.3: resolution: {integrity: sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==} dependencies: @@ -24313,7 +24967,7 @@ packages: dependencies: commander: 8.3.0 glob: 7.2.3 - postcss: 8.4.21 + postcss: 8.4.27 postcss-selector-parser: 6.0.11 dev: true @@ -24673,6 +25327,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: true + /react-remove-scroll-bar@2.3.4(@types/react@18.2.29)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} @@ -25439,6 +26098,14 @@ packages: fsevents: 2.3.2 dev: true + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rsvp@4.8.5: resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} engines: {node: 6.* || >= 7.*} @@ -25676,6 +26343,11 @@ packages: hasBin: true dev: true + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} @@ -28724,6 +29396,17 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.1 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /upper-case-first@1.1.2: resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} dependencies: @@ -29010,6 +29693,43 @@ packages: replace-ext: 1.0.1 dev: true + /vite@4.5.0(@types/node@16.18.40)(sass@1.57.1): + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 16.18.40 + esbuild: 0.18.20 + postcss: 8.4.27 + rollup: 3.29.4 + sass: 1.57.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true From d6b02765b5fea1db4167a1c36619b751fd114178 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 28 Oct 2023 14:52:26 +0530 Subject: [PATCH 10/71] feat: tauri http config added and response json created --- .../__mock__/tauri-http-response.json | 115 ++++++++++++++++++ packages/firecamp-tauri/src-tauri/Cargo.toml | 2 +- .../firecamp-tauri/src-tauri/tauri.conf.json | 13 +- 3 files changed, 125 insertions(+), 5 deletions(-) create mode 100644 packages/firecamp-tauri/__mock__/tauri-http-response.json diff --git a/packages/firecamp-tauri/__mock__/tauri-http-response.json b/packages/firecamp-tauri/__mock__/tauri-http-response.json new file mode 100644 index 000000000..d9e0f79cc --- /dev/null +++ b/packages/firecamp-tauri/__mock__/tauri-http-response.json @@ -0,0 +1,115 @@ +{ + "url": "https://jsonplaceholder.typicode.com/todos/1", + "status": 200, + "ok": true, + "headers": { + "accept-ranges": "bytes", + "access-control-allow-credentials": "true", + "age": "9717", + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "max-age=43200", + "cf-cache-status": "HIT", + "cf-ray": "81d1e7287db23809-FRA", + "connection": "keep-alive", + "content-length": "83", + "content-type": "application/json; charset=utf-8", + "date": "Sat, 28 Oct 2023 08:45:30 GMT", + "etag": "W/\"53-hfEnumeNh6YirfjyjaujcOPPT+s\"", + "expires": "-1", + "nel": "{\"report_to\":\"heroku-nel\",\"max_age\":3600,\"success_fraction\":0.005,\"failure_fraction\":0.05,\"response_headers\":[\"Via\"]}", + "pragma": "no-cache", + "report-to": "{\"group\":\"heroku-nel\",\"max_age\":3600,\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?ts=1698156156&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=rxlCyfRhLhnp3lVMQzdhkPzF2ylwuTSX7V2ohFFl5rM%D\"}]}", + "reporting-endpoints": "heroku-nel=https://nel.heroku.com/reports?ts=1698156156&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=rxlCyfRhLhnp3lVMQzdhkPzF2ylwuTSX7V2ohFFl5rM%D", + "server": "cloudflare", + "vary": "Origin, Accept-Encoding", + "via": "1.1 vegur", + "x-content-type-options": "nosniff", + "x-powered-by": "Express", + "x-ratelimit-limit": "1000", + "x-ratelimit-remaining": "999", + "x-ratelimit-reset": "1698156189" + }, + "rawHeaders": { + "accept-ranges": [ + "bytes" + ], + "access-control-allow-credentials": [ + "true" + ], + "age": [ + "9717" + ], + "alt-svc": [ + "h3=\":443\"; ma=86400" + ], + "cache-control": [ + "max-age=43200" + ], + "cf-cache-status": [ + "HIT" + ], + "cf-ray": [ + "81d1e7287db23809-FRA" + ], + "connection": [ + "keep-alive" + ], + "content-length": [ + "83" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Sat, 28 Oct 2023 08:45:30 GMT" + ], + "etag": [ + "W/\"53-hfEnumeNh6YirfjyjaujcOPPT+s\"" + ], + "expires": [ + "-1" + ], + "nel": [ + "{\"report_to\":\"heroku-nel\",\"max_age\":3600,\"success_fraction\":0.005,\"failure_fraction\":0.05,\"response_headers\":[\"Via\"]}" + ], + "pragma": [ + "no-cache" + ], + "report-to": [ + "{\"group\":\"heroku-nel\",\"max_age\":3600,\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?ts=1698156156&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=rxlCyfRhLhnp3lVMQzdhkPzF2ylwuTSX7V2ohFFl5rM%D\"}]}" + ], + "reporting-endpoints": [ + "heroku-nel=https://nel.heroku.com/reports?ts=1698156156&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=rxlCyfRhLhnp3lVMQzdhkPzF2ylwuTSX7V2ohFFl5rM%D" + ], + "server": [ + "cloudflare" + ], + "vary": [ + "Origin, Accept-Encoding" + ], + "via": [ + "1.1 vegur" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-powered-by": [ + "Express" + ], + "x-ratelimit-limit": [ + "1000" + ], + "x-ratelimit-remaining": [ + "999" + ], + "x-ratelimit-reset": [ + "1698156189" + ] + }, + "data": { + "userId": 1, + "id": 1, + "title": "delectus aut autem", + "completed": false + } +} \ No newline at end of file diff --git a/packages/firecamp-tauri/src-tauri/Cargo.toml b/packages/firecamp-tauri/src-tauri/Cargo.toml index 9bf7cac61..a0df3ebfb 100644 --- a/packages/firecamp-tauri/src-tauri/Cargo.toml +++ b/packages/firecamp-tauri/src-tauri/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" tauri-build = { version = "1.4", features = [] } [dependencies] -tauri = { version = "1.4", features = [] } +tauri = { version = "1.4", features = ["http-all"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" tauri-plugin-localhost = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } diff --git a/packages/firecamp-tauri/src-tauri/tauri.conf.json b/packages/firecamp-tauri/src-tauri/tauri.conf.json index ce0128f03..ec5f3583f 100644 --- a/packages/firecamp-tauri/src-tauri/tauri.conf.json +++ b/packages/firecamp-tauri/src-tauri/tauri.conf.json @@ -11,6 +11,13 @@ "version": "0.0.0" }, "tauri": { + "allowlist": { + "http": { + "scope": ["https://*", "http://*"], + "all": true, + "request": true + } + }, "bundle": { "active": true, "targets": "all", @@ -28,11 +35,9 @@ }, "windows": [ { - "fullscreen": false, + "fullscreen": true, "resizable": true, - "title": "firecamp-desktop", - "width": 800, - "height": 600 + "title": "Firecamp, API Campsite" } ] } From 71030453e1aca186efe1f64dce521a5053fd1307 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Mon, 30 Oct 2023 12:52:39 +0530 Subject: [PATCH 11/71] feat: axios adapter creared for tauri native http api --- packages/firecamp-scripts/package.json | 1 - .../firecamp-rest-executor/package.json | 4 +- .../firecamp-rest-executor/src/index.ts | 30 +++-- .../src/tauri-adapter/index.ts | 73 ++++++++++++ .../src/tauri-adapter/type.ts | 9 ++ .../src/tauri-adapter/util.ts | 107 ++++++++++++++++++ playgrounds/firecamp-rest/package.json | 1 - pnpm-lock.yaml | 89 ++++++++------- 8 files changed, 264 insertions(+), 50 deletions(-) create mode 100644 playgrounds/firecamp-rest-executor/src/tauri-adapter/index.ts create mode 100644 playgrounds/firecamp-rest-executor/src/tauri-adapter/type.ts create mode 100644 playgrounds/firecamp-rest-executor/src/tauri-adapter/util.ts diff --git a/packages/firecamp-scripts/package.json b/packages/firecamp-scripts/package.json index 3161d7130..4f6e74af5 100644 --- a/packages/firecamp-scripts/package.json +++ b/packages/firecamp-scripts/package.json @@ -35,7 +35,6 @@ "@firecamp/utils": "^0.0.24", "@hapi/joi": "^17.1.1", "ajv": "^8.11.2", - "axios": "0.27.2", "browser-or-node": "^2.0.0", "chai": "^4.3.6", "chai-http": "^4.3.0", diff --git a/playgrounds/firecamp-rest-executor/package.json b/playgrounds/firecamp-rest-executor/package.json index 5e99830d8..92eb520dd 100644 --- a/playgrounds/firecamp-rest-executor/package.json +++ b/playgrounds/firecamp-rest-executor/package.json @@ -41,12 +41,14 @@ "@firecamp/utils": "^0.0.24", "@hapi/joi": "^17.1.1", "ajv": "^8.11.2", - "axios": "0.27.2", + "axios": "^1.6.0", "browser-or-node": "^2.0.0", + "build-url-ts": "^6.1.5", "chai": "^4.3.6", "chai-http": "^4.3.0", "form-data": "^4.0.0", "get-value": "^3.0.1", + "http-status-codes": "^2.3.0", "mocha": "^10.1.0", "nanoid": "3.3.4", "qs": "^6.11.0", diff --git a/playgrounds/firecamp-rest-executor/src/index.ts b/playgrounds/firecamp-rest-executor/src/index.ts index aa76f1975..54b9a18a6 100644 --- a/playgrounds/firecamp-rest-executor/src/index.ts +++ b/playgrounds/firecamp-rest-executor/src/index.ts @@ -14,6 +14,7 @@ import { _env, _array, _object, _table } from '@firecamp/utils'; import __url from '@firecamp/url'; import parseBody from './helpers/body'; import { IRestExecutor, TRestExecutionResponse } from './types'; +import axiosTauriApiAdapter from './tauri-adapter'; //@ts-ignore //TODO: research in depth about url esm module, it's import value in console is { default: {...}, __esModule: true } const _url = __url.default || __url; @@ -84,15 +85,20 @@ export default class RestExecutor implements IRestExecutor { return tl.join('\n'); } - private _normalizeResponse(axiosResponse: AxiosResponse): IRestResponse { + private _normalizeResponse(res: AxiosResponse): IRestResponse { + let dataType = typeof res.data; + let body = ''; + if (dataType == 'string') body = res.data; + else if (dataType == 'object') body = JSON.stringify(res.data, null, 4); + else body = res.data; return { - code: axiosResponse.status, - status: axiosResponse.statusText, - body: axiosResponse.data, - headers: _table.objectToTable(axiosResponse.headers || {}), + code: res.status, + status: res.statusText, + body, + headers: _table.objectToTable(res.headers || {}), // @ts-ignore - responseTime: axiosResponse?.config?.metadata?.responseTime || 0, - responseSize: Number(axiosResponse?.headers?.['content-length']) || 0, + responseTime: res?.config?.metadata?.responseTime || 0, + responseSize: Number(res?.headers?.['content-length']) || 0, }; } @@ -119,7 +125,7 @@ export default class RestExecutor implements IRestExecutor { signal: this._controller.signal, timeout: config?.requestTimeout, maxRedirects: config?.maxRedirects, - transformResponse: (response) => response, + // transformResponse: (response) => response, withCredentials: false, }; @@ -239,9 +245,15 @@ export default class RestExecutor implements IRestExecutor { const axiosRequest: AxiosRequestConfig = await this._prepare(request); try { // execute request - const axiosResponse = await axios(axiosRequest); + const axiosResponse = await axios({ + /** @ts-ignore */ + adapter: window?.__TAURI__ ? axiosTauriApiAdapter : null, + ...axiosRequest, + }); // normalize response according to Firecamp REST request's response const response = this._normalizeResponse(axiosResponse); + + console.log(axiosResponse, response, 999888777); // prepare timeline of request execution response.timeline = this._timeline(axiosRequest, axiosResponse); return Promise.resolve({ diff --git a/playgrounds/firecamp-rest-executor/src/tauri-adapter/index.ts b/playgrounds/firecamp-rest-executor/src/tauri-adapter/index.ts new file mode 100644 index 000000000..3ace1e9ba --- /dev/null +++ b/playgrounds/firecamp-rest-executor/src/tauri-adapter/index.ts @@ -0,0 +1,73 @@ +import { getClient, HttpVerb } from '@tauri-apps/api/http'; +import { AxiosError, AxiosPromise } from 'axios'; +import { ReasonPhrases, StatusCodes } from 'http-status-codes'; +import { ITauriAxiosRequestConfig } from './type'; +import { + buildBasicAuthorization, + buildJWTAuthorization, + buildTauriRequestData, + buildRequestUrl, + getTauriResponseType, +} from './util'; + +export const adaptor = (config: ITauriAxiosRequestConfig): AxiosPromise => + new Promise(async (resolve, reject) => { + const client = await getClient({ + maxRedirections: config.maxRedirects, + }); + let timeout = 5; + if (config.timeout !== undefined && config.timeout > 0) { + timeout = Math.round(config.timeout / 1000); + } + + client + .request({ + url: buildRequestUrl(config), + method: config.method?.toUpperCase(), + body: buildTauriRequestData(config.data), + headers: { + ...config.headers, + ...(config.auth && buildBasicAuthorization(config.auth)), + ...(config.jwt && buildJWTAuthorization(config.jwt)), + }, + responseType: getTauriResponseType(config.responseType), + timeout: timeout, + }) + .then((response) => { + // @ts-ignore + const statusText = ReasonPhrases[StatusCodes[response.status]]; + if (response.ok) { + // const data = JSON.stringify(response.data, null, 16); + return resolve({ + data: response.data, + status: response.status, + statusText: statusText, + headers: response.headers, + config: config, + }); + } else { + reject( + new AxiosError( + 'Request failed with status code ' + response.status, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][ + Math.floor(response.status / 100) - 4 + ], + config, + client, + { + data: response.data, + status: response.status, + statusText: statusText, + headers: response.headers, + config: config, + } + ) + ); + } + }) + .catch((error) => { + return reject(error); + }); + }); + +export default adaptor; diff --git a/playgrounds/firecamp-rest-executor/src/tauri-adapter/type.ts b/playgrounds/firecamp-rest-executor/src/tauri-adapter/type.ts new file mode 100644 index 000000000..7f428629c --- /dev/null +++ b/playgrounds/firecamp-rest-executor/src/tauri-adapter/type.ts @@ -0,0 +1,9 @@ +import { InternalAxiosRequestConfig } from 'axios'; + +export interface IAuthorization { + Authorization: string; +} + +export interface ITauriAxiosRequestConfig extends InternalAxiosRequestConfig { + jwt?: string; +} diff --git a/playgrounds/firecamp-rest-executor/src/tauri-adapter/util.ts b/playgrounds/firecamp-rest-executor/src/tauri-adapter/util.ts new file mode 100644 index 000000000..b9c68e1f0 --- /dev/null +++ b/playgrounds/firecamp-rest-executor/src/tauri-adapter/util.ts @@ -0,0 +1,107 @@ +import { Body, ResponseType as TauriResponseType } from '@tauri-apps/api/http'; +import { + AxiosBasicCredentials, + ResponseType as AxiosResponseType, +} from 'axios'; +import { buildUrl, IQueryParams } from 'build-url-ts'; +import URLParse from 'url-parse'; +import { IAuthorization, ITauriAxiosRequestConfig } from './type'; + +export const base64Decode = (str: string): string => + Buffer.from(str, 'base64').toString('binary'); +export const base64Encode = (str: string): string => + Buffer.from(str, 'binary').toString('base64'); + +export function buildBasicAuthorization( + basicCredentials: AxiosBasicCredentials +): IAuthorization { + const username = basicCredentials.username || ''; + const password = basicCredentials.password + ? encodeURIComponent(basicCredentials.password) + : ''; + return { + Authorization: `Basic ${base64Encode(`${username}:${password}`)}`, + }; +} + +export function buildJWTAuthorization(jwt: string): IAuthorization { + return { + Authorization: `Bearer ${jwt}`, + }; +} + +export function getTauriResponseType( + type?: AxiosResponseType +): TauriResponseType { + let responseType = TauriResponseType.JSON; + if (type !== undefined && type !== null) { + switch (type.toLowerCase()) { + case 'json': { + responseType = TauriResponseType.JSON; + break; + } + case 'text': { + responseType = TauriResponseType.Text; + break; + } + default: { + responseType = TauriResponseType.Binary; + } + } + } + return responseType; +} + +export function buildTauriRequestData(data?: any): Body | undefined { + if (data === undefined || data === null) { + return undefined; + } + if (typeof data === 'string') { + return Body.text(data); + } else if (typeof data === 'object') { + return Body.json(data); + } else if (data instanceof FormData) { + // @ts-ignore + return Body.form(data); + } + return Body.bytes(data); +} + +export const buildRequestUrl = ( + config: Omit +): string => { + if ( + (config.baseURL === undefined || + config.baseURL === null || + config.baseURL.trim() === '') && + (config.url === undefined || + config.url === null || + config.url.trim() === '') + ) { + throw new Error('config.baseURL or config.url must be specified'); + } + if (config.baseURL) { + return buildUrl(config.baseURL, { + path: config.url, + queryParams: config.params, + }); + } + const url = config.url ? config.url : ''; + let urlObj = URLParse(url, true); + const path = urlObj.pathname === '/' ? undefined : urlObj.pathname; + const params = urlObj.query; + urlObj.set('pathname', ''); + urlObj.set('query', ''); + return buildUrl(urlObj.toString(), { + path: path, + queryParams: mergeQueryParams(params, config.params), + }); +}; + +export function mergeQueryParams( + ...queryParams: IQueryParams[] +): IQueryParams | undefined { + let params: IQueryParams = {}; + queryParams.forEach((qp) => Object.assign(params, qp)); + return Object.keys(params).length === 0 ? undefined : params; +} diff --git a/playgrounds/firecamp-rest/package.json b/playgrounds/firecamp-rest/package.json index a76f7796b..37792d2a6 100644 --- a/playgrounds/firecamp-rest/package.json +++ b/playgrounds/firecamp-rest/package.json @@ -74,7 +74,6 @@ "@types/node": "^16.4.3", "@typescript-eslint/eslint-plugin": "^5.35.1", "@typescript-eslint/parser": "^5.29.0", - "axios": "^0.27.2", "cspell": "^4.1.0", "eslint": "^8.29.0", "eslint-config-prettier": "^6.11.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 59b255c15..665745919 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -273,7 +273,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.11.18)(typescript@5.0.2) @@ -452,7 +452,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4) + version: 28.0.7(@babel/core@7.23.2)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.0.3)(typescript@4.7.4) @@ -522,7 +522,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.11.18)(typescript@5.0.2) @@ -631,7 +631,7 @@ importers: version: 6.2.4 ts-jest: specifier: 28.0.5 - version: 28.0.5(@babel/core@7.20.12)(jest@28.1.2)(typescript@4.7.4) + version: 28.0.5(@babel/core@7.23.2)(jest@28.1.2)(typescript@4.7.4) ts-loader: specifier: 9.3.1 version: 9.3.1(typescript@4.7.4)(webpack@5.75.0) @@ -704,7 +704,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.9.5) + version: 28.0.7(@babel/core@7.23.2)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.9.5) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.0.3)(typescript@4.9.5) @@ -735,9 +735,6 @@ importers: ajv: specifier: ^8.11.2 version: 8.12.0 - axios: - specifier: 0.27.2 - version: 0.27.2 browser-or-node: specifier: ^2.0.0 version: 2.1.1 @@ -834,7 +831,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1324,7 +1321,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1461,9 +1458,6 @@ importers: '@typescript-eslint/parser': specifier: ^5.29.0 version: 5.48.2(eslint@8.32.0)(typescript@5.0.2) - axios: - specifier: ^0.27.2 - version: 0.27.2 cspell: specifier: ^4.1.0 version: 4.2.8 @@ -1505,7 +1499,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@16.18.23)(typescript@5.0.2) @@ -1534,11 +1528,14 @@ importers: specifier: ^8.11.2 version: 8.12.0 axios: - specifier: 0.27.2 - version: 0.27.2 + specifier: ^1.6.0 + version: 1.6.0 browser-or-node: specifier: ^2.0.0 version: 2.1.1 + build-url-ts: + specifier: ^6.1.5 + version: 6.1.5 chai: specifier: ^4.3.6 version: 4.3.7 @@ -1551,6 +1548,9 @@ importers: get-value: specifier: ^3.0.1 version: 3.0.1 + http-status-codes: + specifier: ^2.3.0 + version: 2.3.0 mocha: specifier: ^10.1.0 version: 10.2.0 @@ -1635,7 +1635,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1753,7 +1753,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1835,7 +1835,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -1950,7 +1950,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -2032,7 +2032,7 @@ importers: version: 9.5.0 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2) + version: 28.0.7(@babel/core@7.23.2)(jest@28.1.3)(typescript@5.0.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@18.15.11)(typescript@5.0.2) @@ -2445,13 +2445,13 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 + dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 - dev: true /@babel/helper-module-transforms@7.20.11: resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} @@ -2571,11 +2571,11 @@ packages: /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} @@ -2584,7 +2584,6 @@ packages: /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option@7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} @@ -3849,6 +3848,7 @@ packages: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + dev: true /@babel/types@7.23.0: resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} @@ -3857,7 +3857,6 @@ packages: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: true /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -4116,7 +4115,7 @@ packages: /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.22.15 '@babel/runtime': 7.22.10 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 @@ -11437,13 +11436,15 @@ packages: transitivePeerDependencies: - debug - /axios@0.27.2: - resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + /axios@1.6.0: + resolution: {integrity: sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==} dependencies: follow-redirects: 1.15.2 form-data: 4.0.0 + proxy-from-env: 1.1.0 transitivePeerDependencies: - debug + dev: false /axobject-query@3.1.1: resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} @@ -12220,6 +12221,10 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 + /build-url-ts@6.1.5: + resolution: {integrity: sha512-kjauShWoKG69xYwoJ4OTbHSliwhWHXa3wFJSamAva9SyK7OoihxdBfamaBjWhZPJvy0MP0cioXsZZhKKfFFCsg==} + dev: false + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -18179,6 +18184,10 @@ packages: transitivePeerDependencies: - debug + /http-status-codes@2.3.0: + resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + dev: false + /http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} @@ -24905,6 +24914,10 @@ packages: forwarded: 0.2.0 ipaddr.js: 1.9.1 + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} dev: true @@ -28237,7 +28250,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@28.0.5(@babel/core@7.20.12)(jest@28.1.2)(typescript@4.7.4): + /ts-jest@28.0.5(@babel/core@7.23.2)(jest@28.1.2)(typescript@4.7.4): resolution: {integrity: sha512-Sx9FyP9pCY7pUzQpy4FgRZf2bhHY3za576HMKJFs+OnQ9jS96Du5vNsDKkyedQkik+sEabbKAnCliv9BEsHZgQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -28255,7 +28268,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.23.2 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 28.1.2(@types/node@18.0.3)(ts-node@10.8.2) @@ -28268,7 +28281,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4): + /ts-jest@28.0.7(@babel/core@7.23.2)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.7.4): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -28289,7 +28302,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.23.2 bs-logger: 0.2.6 esbuild: 0.17.18 fast-json-stable-stringify: 2.1.0 @@ -28303,7 +28316,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.9.5): + /ts-jest@28.0.7(@babel/core@7.23.2)(esbuild@0.17.18)(jest@28.1.3)(typescript@4.9.5): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -28324,7 +28337,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.23.2 bs-logger: 0.2.6 esbuild: 0.17.18 fast-json-stable-stringify: 2.1.0 @@ -28338,7 +28351,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.20.12)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2): + /ts-jest@28.0.7(@babel/core@7.23.2)(esbuild@0.17.18)(jest@28.1.3)(typescript@5.0.2): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -28359,7 +28372,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.23.2 bs-logger: 0.2.6 esbuild: 0.17.18 fast-json-stable-stringify: 2.1.0 @@ -28373,7 +28386,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.7(@babel/core@7.20.12)(jest@28.1.3)(typescript@5.0.2): + /ts-jest@28.0.7(@babel/core@7.23.2)(jest@28.1.3)(typescript@5.0.2): resolution: {integrity: sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -28394,7 +28407,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.23.2 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 28.1.3(@types/node@18.11.18)(ts-node@10.9.1) From 28bc8f739eb19ce088245761abbc201420236016 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Mon, 30 Oct 2023 15:59:22 +0530 Subject: [PATCH 12/71] feat: app window behaviour for darwin configured --- packages/firecamp-electron/src/main.ts | 16 ++++++++++++++-- packages/firecamp-electron/src/preload.ts | 0 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 packages/firecamp-electron/src/preload.ts diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 426c5f573..9f24fc462 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -2,8 +2,8 @@ const { app, BrowserWindow } = require('electron'); const createWindow = () => { const win = new BrowserWindow({ - width: 800, - height: 600, + // width: 800, + // height: 600, }); if (app.isPackaged) { @@ -33,4 +33,16 @@ const createWindow = () => { app.whenReady().then(() => { createWindow(); + + app.on('activate', () => { + if (BrowserWindow.getAllWindows().length === 0) { + createWindow(); + } + }); + + app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } + }); }); diff --git a/packages/firecamp-electron/src/preload.ts b/packages/firecamp-electron/src/preload.ts new file mode 100644 index 000000000..e69de29bb From b49b5f799c9f8b393258eadfdf06937864975d7d Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Mon, 30 Oct 2023 16:02:43 +0530 Subject: [PATCH 13/71] feat: desktop app fullscreen window set --- packages/firecamp-electron/src/main.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 9f24fc462..831aad771 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -1,10 +1,9 @@ +const electron = require('electron'); const { app, BrowserWindow } = require('electron'); const createWindow = () => { - const win = new BrowserWindow({ - // width: 800, - // height: 600, - }); + const { width, height } = electron.screen.getPrimaryDisplay().workAreaSize; + const win = new BrowserWindow({ width, height }); if (app.isPackaged) { // 'build/index.html' From d28a2e25b0e13c5083692c3511cd8de7c9bfbb51 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Mon, 30 Oct 2023 18:35:02 +0530 Subject: [PATCH 14/71] feat: ipc channel integration in progress for rest execution --- packages/firecamp-electron/package.json | 3 +++ packages/firecamp-electron/src/main.ts | 13 ++++++++++--- packages/firecamp-electron/src/preload.ts | 8 ++++++++ pnpm-lock.yaml | 22 +++++++++++++--------- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 7b5ad4b0d..afe5364ce 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -11,6 +11,9 @@ "keywords": [], "author": "", "license": "AGPLv3", + "dependencies": { + "@firecamp/rest-executor": "workspace:*" + }, "devDependencies": { "@types/node": "^20.8.9", "electron": "^27.0.2" diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 831aad771..0714a0bcb 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -1,8 +1,11 @@ -const electron = require('electron'); -const { app, BrowserWindow } = require('electron'); +import { app, BrowserWindow, ipcMain, screen } from 'electron'; +import RestExecutor from '@firecamp/rest-executor'; + +// initialize the rest executor +// const httpExecutor = new HttpExecutor(); const createWindow = () => { - const { width, height } = electron.screen.getPrimaryDisplay().workAreaSize; + const { width, height } = screen.getPrimaryDisplay().workAreaSize; const win = new BrowserWindow({ width, height }); if (app.isPackaged) { @@ -33,6 +36,10 @@ const createWindow = () => { app.whenReady().then(() => { createWindow(); + ipcMain.handle('http:send', async () => { + return RestExecutor; + }); + app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); diff --git a/packages/firecamp-electron/src/preload.ts b/packages/firecamp-electron/src/preload.ts index e69de29bb..3bcff7d4d 100644 --- a/packages/firecamp-electron/src/preload.ts +++ b/packages/firecamp-electron/src/preload.ts @@ -0,0 +1,8 @@ +const { contextBridge, ipcRenderer } = require('electron'); + +contextBridge.exposeInMainWorld('__electron__', { + http: { + send: () => ipcRenderer.invoke('http:send'), + stop: () => ipcRenderer.invoke('http:stop'), + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec74d1793..72f72e7fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -533,15 +533,6 @@ importers: specifier: ^5.0.2 version: 5.0.2 - packages/firecamp-desktop: - devDependencies: - '@types/node': - specifier: ^20.8.9 - version: 20.8.9 - electron: - specifier: ^27.0.2 - version: 27.0.2 - packages/firecamp-echo-server: dependencies: '@nestjs/common': @@ -654,6 +645,19 @@ importers: specifier: 4.7.4 version: 4.7.4 + packages/firecamp-electron: + dependencies: + '@firecamp/rest-executor': + specifier: workspace:* + version: link:../../playgrounds/firecamp-rest-executor + devDependencies: + '@types/node': + specifier: ^20.8.9 + version: 20.8.9 + electron: + specifier: ^27.0.2 + version: 27.0.2 + packages/firecamp-har: dependencies: '@firecamp/types': From b84b82ab4cbfa20b2337a0447d2fc7902afd20f5 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Mon, 30 Oct 2023 19:05:21 +0530 Subject: [PATCH 15/71] chore: unused deps removed --- platform/firecamp-platform/package.json | 1 - playgrounds/firecamp-rest/package.json | 1 - 2 files changed, 2 deletions(-) diff --git a/platform/firecamp-platform/package.json b/platform/firecamp-platform/package.json index ea2afeb48..109b71bcc 100644 --- a/platform/firecamp-platform/package.json +++ b/platform/firecamp-platform/package.json @@ -54,7 +54,6 @@ "@firecamp/cookie-manager": "^0.0.0", "@firecamp/graphql": "workspace:*", "@firecamp/rest": "workspace:*", - "@firecamp/rest-executor": "workspace:*", "@firecamp/scripts": "workspace:*", "@firecamp/socket.io": "workspace:*", "@firecamp/types": "^0.2.2", diff --git a/playgrounds/firecamp-rest/package.json b/playgrounds/firecamp-rest/package.json index 690eeb208..cf90e4df4 100644 --- a/playgrounds/firecamp-rest/package.json +++ b/playgrounds/firecamp-rest/package.json @@ -34,7 +34,6 @@ }, "dependencies": { "@firecamp/curl-to-firecamp": "^1.0.2", - "@firecamp/rest-executor": "workspace:*", "@firecamp/scripts": "workspace:*", "@firecamp/types": "^0.2.2", "@firecamp/ui": "workspace:*", From a881484eab39e17e5237ea536d75417931fc596c Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Tue, 31 Oct 2023 12:58:30 +0530 Subject: [PATCH 16/71] feat: rest executor flow implemented between ipcMain and ipcRenderer via preload.js --- packages/firecamp-agent-manager/src/chrome.ts | 2 +- packages/firecamp-agent-manager/src/index.ts | 30 +++++++++++-------- packages/firecamp-electron/src/main.ts | 30 ++++++++++++++----- packages/firecamp-electron/src/preload.ts | 5 ++-- .../firecamp-rest-executor/src/index.ts | 3 +- pnpm-lock.yaml | 6 ---- 6 files changed, 46 insertions(+), 30 deletions(-) diff --git a/packages/firecamp-agent-manager/src/chrome.ts b/packages/firecamp-agent-manager/src/chrome.ts index 4058437ff..66c8a4964 100644 --- a/packages/firecamp-agent-manager/src/chrome.ts +++ b/packages/firecamp-agent-manager/src/chrome.ts @@ -2,7 +2,7 @@ import { IRest, IRestResponse, TId } from '@firecamp/types'; import { _misc } from '@firecamp/utils'; -import RestExecutor from '@firecamp/rest-executor/dist/esm'; +import RestExecutor from '@firecamp/rest-executor'; // Holds the rest executors instance to handle const restExecutors: { [key: TId]: RestExecutor } = {}; diff --git a/packages/firecamp-agent-manager/src/index.ts b/packages/firecamp-agent-manager/src/index.ts index a7ad2120b..dd49cabd4 100644 --- a/packages/firecamp-agent-manager/src/index.ts +++ b/packages/firecamp-agent-manager/src/index.ts @@ -10,7 +10,7 @@ import { import RestExecutor from '@firecamp/rest-executor'; import parseBody from '@firecamp/rest-executor/dist/helpers/body'; import { _object } from '@firecamp/utils'; -import * as extension from './chrome'; +// import * as extension from './chrome'; const restExecutors: { [key: TId]: RestExecutor } = {}; @@ -30,15 +30,21 @@ export const send = async ( testResult: any; scriptErrors: any[]; }> => { + const requestId = request.__ref.id; + let res: any; switch (firecampAgent) { case EFirecampAgent.Desktop: - return window.fc.restExecutor.send(request, variables); + //@ts-ignore + return await window.__electron__.http.send(request, variables); + // return window.fc.restExecutor.send(request, variables); case EFirecampAgent.Extension: - return extension.send(request, variables); + // return extension.send(request, variables); case EFirecampAgent.Web: restExecutors[request.__ref.id] = new RestExecutor(); //@ts-ignore - return await restExecutors[request.__ref.id].send(request, variables); + res = restExecutors[request.__ref.id].send(request, variables); + delete restExecutors[requestId]; + return res; case EFirecampAgent.Cloud: if (request.body?.type == ERestBodyTypes.FormData) { const body = await parseBody(request.body); @@ -76,14 +82,14 @@ export const cancel = async ( ): Promise => { switch (firecampAgent) { case EFirecampAgent.Desktop: - return window.fc.restExecutor.cancel(requestId); - case EFirecampAgent.Extension: - return extension.cancel(requestId); + /** @ts-ignore */ + return window.__electron__.http.stop(requestId); + // return window.fc.restExecutor.cancel(requestId); + // case EFirecampAgent.Extension: + // return extension.cancel(requestId); case EFirecampAgent.Web: restExecutors[requestId].cancel(); - delete restExecutors[requestId]; - return; case EFirecampAgent.Cloud: const response = await axios.get( @@ -94,6 +100,6 @@ export const cancel = async ( } }; -export const pingExtension = (): Promise => { - return extension.ping(); -}; +// export const pingExtension = (): Promise => { +// // return extension.ping(); +// }; diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 0714a0bcb..3d37ff661 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -1,19 +1,24 @@ import { app, BrowserWindow, ipcMain, screen } from 'electron'; import RestExecutor from '@firecamp/rest-executor'; +import * as path from 'node:path'; -// initialize the rest executor -// const httpExecutor = new HttpExecutor(); const createWindow = () => { const { width, height } = screen.getPrimaryDisplay().workAreaSize; - const win = new BrowserWindow({ width, height }); + const win = new BrowserWindow({ + width, + height, + webPreferences: { + preload: path.join(__dirname, 'preload.js'), + }, + }); if (app.isPackaged) { // 'build/index.html' // win.loadURL(`file://${__dirname}/../../build/prod/index.html`); } else { - win.loadURL(`file://${__dirname}/../../../build/dev/index.html`); - // win.loadURL('http://localhost:3000'); + // win.loadURL(`file://${__dirname}/../../../build/dev/index.html`); + win.loadURL('https://localhost:3000'); win.webContents.openDevTools(); @@ -36,8 +41,19 @@ const createWindow = () => { app.whenReady().then(() => { createWindow(); - ipcMain.handle('http:send', async () => { - return RestExecutor; + const reMap: Record = {}; + ipcMain.handle('http:send', async (event, request, variables) => { + reMap[request.__ref.id] = new RestExecutor(); + const res = await reMap[request.__ref.id].send(request, variables); + // once the request is executed, free the cached executor + delete reMap[request.__ref.id]; + return res; + }); + + ipcMain.handle('http:stop', async (event, requestId) => { + const restE = reMap[requestId]; + if (restE) restE.cancel(); + return; }); app.on('activate', () => { diff --git a/packages/firecamp-electron/src/preload.ts b/packages/firecamp-electron/src/preload.ts index 3bcff7d4d..11bb1a95c 100644 --- a/packages/firecamp-electron/src/preload.ts +++ b/packages/firecamp-electron/src/preload.ts @@ -2,7 +2,8 @@ const { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('__electron__', { http: { - send: () => ipcRenderer.invoke('http:send'), - stop: () => ipcRenderer.invoke('http:stop'), + send: (request: any, variables: any) => + ipcRenderer.invoke('http:send', request, variables), + stop: (requestId: string) => ipcRenderer.invoke('http:stop', requestId), }, }); diff --git a/playgrounds/firecamp-rest-executor/src/index.ts b/playgrounds/firecamp-rest-executor/src/index.ts index 54b9a18a6..01c278037 100644 --- a/playgrounds/firecamp-rest-executor/src/index.ts +++ b/playgrounds/firecamp-rest-executor/src/index.ts @@ -247,13 +247,12 @@ export default class RestExecutor implements IRestExecutor { // execute request const axiosResponse = await axios({ /** @ts-ignore */ - adapter: window?.__TAURI__ ? axiosTauriApiAdapter : null, + // adapter: window?.__TAURI__ ? axiosTauriApiAdapter : null, ...axiosRequest, }); // normalize response according to Firecamp REST request's response const response = this._normalizeResponse(axiosResponse); - console.log(axiosResponse, response, 999888777); // prepare timeline of request execution response.timeline = this._timeline(axiosRequest, axiosResponse); return Promise.resolve({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72f72e7fb..49c68591b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -906,9 +906,6 @@ importers: '@firecamp/rest': specifier: workspace:* version: link:../../playgrounds/firecamp-rest - '@firecamp/rest-executor': - specifier: workspace:* - version: link:../../playgrounds/firecamp-rest-executor '@firecamp/scripts': specifier: workspace:* version: link:../../packages/firecamp-scripts @@ -1350,9 +1347,6 @@ importers: '@firecamp/curl-to-firecamp': specifier: ^1.0.2 version: 1.0.2(nanoid@3.3.4) - '@firecamp/rest-executor': - specifier: workspace:* - version: link:../firecamp-rest-executor '@firecamp/scripts': specifier: workspace:* version: link:../../packages/firecamp-scripts From 814b84dccffbf1b0a76a0696d932d43660c7c9bd Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Fri, 3 Nov 2023 14:57:10 +0530 Subject: [PATCH 17/71] feat: auth:github ipc event implemented to handle the github auth --- packages/firecamp-electron/src/main.ts | 35 ++++++++++++++++++- packages/firecamp-electron/src/preload.ts | 5 +++ .../modals/auth/GithubGoogleAuth.tsx | 2 +- .../src/services/auth/oauth2/github.ts | 11 +++--- .../src/services/auth/sign-in.ts | 27 +++++++------- 5 files changed, 61 insertions(+), 19 deletions(-) diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 3d37ff661..a7e87a51f 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -2,7 +2,6 @@ import { app, BrowserWindow, ipcMain, screen } from 'electron'; import RestExecutor from '@firecamp/rest-executor'; import * as path from 'node:path'; - const createWindow = () => { const { width, height } = screen.getPrimaryDisplay().workAreaSize; const win = new BrowserWindow({ @@ -56,6 +55,40 @@ app.whenReady().then(() => { return; }); + ipcMain.handle('auth:github', async (e, clientId, scopes = []) => { + const authWindow = new BrowserWindow({ + width: 800, + height: 600, + show: false, + }); + let githubUrl = 'https://github.com/login/oauth/authorize?'; + let authUrl = + githubUrl + 'client_id=' + clientId + '&scope=' + scopes.join(','); + authWindow.loadURL(authUrl); + authWindow.show(); + + const cb = (e: any, rs: any, rj: any) => { + const rawCode = /code=([^&]*)/.exec(e.url) || null, + code = rawCode && rawCode.length > 1 ? rawCode[1] : null, + error = /\?error=(.+)$/.exec(e.url); + + // if there is a code in the callback, proceed to get token from github throw front + if (code) { + authWindow.close(); + rs(code); + } else if (error) { + authWindow.close(); + rj(error); + } + }; + return new Promise((rs, rj) => { + // will-navigate is observed when github session is alive + authWindow.webContents.on('will-navigate', (e) => cb(e, rs, rj)); + // will-redirect is observed when github session is expired or user is signing first time + authWindow.webContents.on('will-redirect', (e) => cb(e, rs, rj)); + }); + }); + app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); diff --git a/packages/firecamp-electron/src/preload.ts b/packages/firecamp-electron/src/preload.ts index 11bb1a95c..7cec35659 100644 --- a/packages/firecamp-electron/src/preload.ts +++ b/packages/firecamp-electron/src/preload.ts @@ -6,4 +6,9 @@ contextBridge.exposeInMainWorld('__electron__', { ipcRenderer.invoke('http:send', request, variables), stop: (requestId: string) => ipcRenderer.invoke('http:stop', requestId), }, + auth: { + github: (clientId: string, scope: string[]) => { + return ipcRenderer.invoke('auth:github', clientId, scope); + }, + }, }); diff --git a/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx b/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx index ce6e33b42..146e96f3f 100644 --- a/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx +++ b/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx @@ -17,7 +17,7 @@ const GithubGoogleAuth: FC = ({ onClose }) => { const _initApp = async (response, provider) => { try { // Close auth modal on Sign In success - onClose(); + typeof onClose == 'function' && onClose(); return Promise.resolve(); } catch (error) { return Promise.reject({ diff --git a/platform/firecamp-platform/src/services/auth/oauth2/github.ts b/platform/firecamp-platform/src/services/auth/oauth2/github.ts index 55251f40a..2fae97030 100644 --- a/platform/firecamp-platform/src/services/auth/oauth2/github.ts +++ b/platform/firecamp-platform/src/services/auth/oauth2/github.ts @@ -9,10 +9,11 @@ export const authorize = async (): Promise => { try { // Execute following logic when using electron agent if (_misc.firecampAgent() === EFirecampAgent.Desktop) { - return window.fc.auth.loginViaGithub({ - clientId: GITHUB_CONFIG.CLIENT_ID, - scope: GITHUB_CONFIG.SCOPE.join(), - }); + /** @ts-ignore */ + return window.__electron__.auth.github( + GITHUB_CONFIG.CLIENT_ID, + GITHUB_CONFIG.SCOPE + ); } // Execute following logic when using chrome extension else { @@ -25,6 +26,8 @@ export const authorize = async (): Promise => { console.log(url); // @ts-ignore window.location = url; + + return Promise.resolve(''); } } catch (error) { return Promise.reject(error); diff --git a/platform/firecamp-platform/src/services/auth/sign-in.ts b/platform/firecamp-platform/src/services/auth/sign-in.ts index 91dea8dc6..7a2b434a6 100644 --- a/platform/firecamp-platform/src/services/auth/sign-in.ts +++ b/platform/firecamp-platform/src/services/auth/sign-in.ts @@ -51,21 +51,22 @@ export default async ( } case EProvider.GITHUB: // Fetch auth code - githubAuth.authorize(); + const code = await githubAuth.authorize(); - // Send auth code to authenticate - // const response = await Rest.auth.viaGithub(code); - // console.log(response, "121212121") + // send auth code to authenticate + const response = await Rest.auth.viaGithub(code); + console.log(response, '121212121'); - // if (validateAuthResponse(response?.data)) { - // return Promise.resolve({ - // response: response.data, - // provider: EProvider.GITHUB, - // }); - // } else - // return Promise.reject({ - // message: 'Failed to login into your account', - // }); + if (response?.data) { + return Promise.resolve({ + response: response.data, + provider: EProvider.GITHUB, + }); + } else {F + return Promise.reject({ + message: 'Failed to login into your account', + }); + } default: console.log(provider); From 2eea4efc0ebe654f9b45e2e368ad420fa8eaefe3 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 4 Nov 2023 16:42:47 +0530 Subject: [PATCH 18/71] feat: github auth flow is improved, architectureal improvement for desktop/web --- packages/firecamp-agent-manager/src/index.ts | 3 -- packages/firecamp-electron/src/main.ts | 2 +- packages/firecamp-electron/src/preload.ts | 7 +-- .../modals/auth/GithubGoogleAuth.tsx | 33 ++++++------- .../src/containers/identity.tsx | 12 +++-- .../src/services/auth/oauth2/github.ts | 44 ++++++------------ .../src/services/auth/refresh-token.ts | 4 +- .../src/services/auth/sign-in.ts | 46 +++++++++++-------- 8 files changed, 74 insertions(+), 77 deletions(-) diff --git a/packages/firecamp-agent-manager/src/index.ts b/packages/firecamp-agent-manager/src/index.ts index dd49cabd4..41ee7eac6 100644 --- a/packages/firecamp-agent-manager/src/index.ts +++ b/packages/firecamp-agent-manager/src/index.ts @@ -36,9 +36,7 @@ export const send = async ( case EFirecampAgent.Desktop: //@ts-ignore return await window.__electron__.http.send(request, variables); - // return window.fc.restExecutor.send(request, variables); case EFirecampAgent.Extension: - // return extension.send(request, variables); case EFirecampAgent.Web: restExecutors[request.__ref.id] = new RestExecutor(); //@ts-ignore @@ -84,7 +82,6 @@ export const cancel = async ( case EFirecampAgent.Desktop: /** @ts-ignore */ return window.__electron__.http.stop(requestId); - // return window.fc.restExecutor.cancel(requestId); // case EFirecampAgent.Extension: // return extension.cancel(requestId); case EFirecampAgent.Web: diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index a7e87a51f..3dfe8dd8f 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -55,7 +55,7 @@ app.whenReady().then(() => { return; }); - ipcMain.handle('auth:github', async (e, clientId, scopes = []) => { + ipcMain.handle('auth:github:code', async (e, clientId, scopes = []) => { const authWindow = new BrowserWindow({ width: 800, height: 600, diff --git a/packages/firecamp-electron/src/preload.ts b/packages/firecamp-electron/src/preload.ts index 7cec35659..2cd8a70cd 100644 --- a/packages/firecamp-electron/src/preload.ts +++ b/packages/firecamp-electron/src/preload.ts @@ -2,13 +2,14 @@ const { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('__electron__', { http: { - send: (request: any, variables: any) => - ipcRenderer.invoke('http:send', request, variables), + send: (request: any, variables: any) => { + return ipcRenderer.invoke('http:send', request, variables); + }, stop: (requestId: string) => ipcRenderer.invoke('http:stop', requestId), }, auth: { github: (clientId: string, scope: string[]) => { - return ipcRenderer.invoke('auth:github', clientId, scope); + return ipcRenderer.invoke('auth:github:code', clientId, scope); }, }, }); diff --git a/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx b/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx index 146e96f3f..a04e53fe6 100644 --- a/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx +++ b/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx @@ -1,11 +1,12 @@ import { FC, useState } from 'react'; - +import { Button } from '@firecamp/ui'; import { VscGithub } from '@react-icons/all-files/vsc/VscGithub'; // import { GrGoogle } from '@react-icons/all-files/gr/GrGoogle'; import _auth from '../../../services/auth'; -import { Button } from '@firecamp/ui'; import { EProvider } from '../../../services/auth/types'; +import { _misc } from '@firecamp/utils'; +import { EFirecampAgent } from '@firecamp/types'; const GithubGoogleAuth: FC = ({ onClose }) => { const [disableSignInWithGoogleButton, setDisableSignInWithGoogleButton] = @@ -14,31 +15,31 @@ const GithubGoogleAuth: FC = ({ onClose }) => { const [disableSignInWithGitHubButton, setDisableSignInWithGitHubButton] = useState(false); - const _initApp = async (response, provider) => { + const closeModal = async () => { try { - // Close auth modal on Sign In success + // close auth modal on sign in success typeof onClose == 'function' && onClose(); return Promise.resolve(); - } catch (error) { - return Promise.reject({ - API: 'authModel._initApp', - error, - }); - } + } catch (e) { } }; const _githubOAuth = async (e: any) => { if (e) e.preventDefault(); - if (!!disableSignInWithGitHubButton) return Promise.reject(''); setDisableSignInWithGitHubButton(true); - _auth + if (_misc.firecampAgent() == EFirecampAgent.Web) { + _auth.oauth2.githubAuth.authorize.web(); + return; + } + + return _auth .signIn(EProvider.GITHUB) .then(async ({ response, provider }) => { - // Note: It'll never reach here as It'll redirect to the identity page after git auth + // note: tt'll never reach here as it'll redirect to the identity page after git auth console.log(response, 'response....'); - await _initApp(response, provider); + // window.location.reload(); + await closeModal(); }) .catch((e) => { console.log(e); @@ -59,7 +60,7 @@ const GithubGoogleAuth: FC = ({ onClose }) => { .signIn(EProvider.GOOGLE) .then(async ({ response, provider }) => { console.log(response, 'response....'); - await _initApp(response, provider); + await closeModal(); }) .finally(() => { setDisableSignInWithGoogleButton(false); @@ -73,7 +74,7 @@ const GithubGoogleAuth: FC = ({ onClose }) => { // // Enable to click sign up/ sign in button // setDisableSignInWithGoogleButton(false); // // Init App - // await _initApp(response, provider); + // await closeModal(); // resolve(response); // }, // error => { diff --git a/platform/firecamp-platform/src/containers/identity.tsx b/platform/firecamp-platform/src/containers/identity.tsx index d3a67b134..43b7da12e 100644 --- a/platform/firecamp-platform/src/containers/identity.tsx +++ b/platform/firecamp-platform/src/containers/identity.tsx @@ -4,6 +4,8 @@ import * as Sentry from '@sentry/browser'; import { Integrations } from '@sentry/tracing'; import CloudApiGlobal, { Rest } from '@firecamp/cloud-apis'; import { ECloudApiHeaders } from '../types'; +import _auth from '../services/auth'; +import { EProvider } from '../services/auth/types'; const IdentityPage = () => { const [error, setError] = useState(''); @@ -19,14 +21,14 @@ const IdentityPage = () => { if (errorDescription) setError(errorDescription); if (code) { CloudApiGlobal.setHost(process.env.FIRECAMP_API_HOST); - // Set app version into cloud-api headers + // set app version into cloud-api headers CloudApiGlobal.setGlobalHeaders({ [ECloudApiHeaders.AppVersion]: process.env.APP_VERSION || '', }); - Rest.auth - .viaGithub(code) - .then(({ data }) => { - localStorage.setItem('socketId', data.__meta.accessToken); + + _auth + .signIn(EProvider.GITHUB, { username: '', password: '' }, code) + .then(async () => { localStorage.setItem( 'authSuccessMessage', "You're signed in successfully." diff --git a/platform/firecamp-platform/src/services/auth/oauth2/github.ts b/platform/firecamp-platform/src/services/auth/oauth2/github.ts index 2fae97030..dd66c988b 100644 --- a/platform/firecamp-platform/src/services/auth/oauth2/github.ts +++ b/platform/firecamp-platform/src/services/auth/oauth2/github.ts @@ -2,36 +2,22 @@ import { EFirecampAgent } from '@firecamp/types'; import { _misc, _string } from '@firecamp/utils'; import { GITHUB_CONFIG } from './constants'; -/** - * TODO: TBD usage of getProfile argument - */ -export const authorize = async (): Promise => { - try { - // Execute following logic when using electron agent - if (_misc.firecampAgent() === EFirecampAgent.Desktop) { - /** @ts-ignore */ - return window.__electron__.auth.github( - GITHUB_CONFIG.CLIENT_ID, - GITHUB_CONFIG.SCOPE - ); - } - // Execute following logic when using chrome extension - else { - // Web flow - const redirectUrl = - location.origin + '/identity.html?redirect=' + location.href; - const url = `${GITHUB_CONFIG.AUTH_URL}?client_id=${ - GITHUB_CONFIG.CLIENT_ID - }&redirect_uri=${redirectUrl}&scope=${GITHUB_CONFIG.SCOPE.join(',')}`; - console.log(url); - // @ts-ignore - window.location = url; +const { CLIENT_ID, SCOPE, AUTH_URL } = GITHUB_CONFIG; - return Promise.resolve(''); - } - } catch (error) { - return Promise.reject(error); - } +export const authorize = { + electron: (): Promise => { + /** @ts-ignore */ // it will return tne code from github oauth + return window.__electron__.auth.github(CLIENT_ID, SCOPE); + }, + web: (): void => { + // web flow + const scope = SCOPE.join(','); + const redirectUrl = `${location.origin}/identity.html?redirect=${location.href}`; + const url = `${AUTH_URL}?client_id=${CLIENT_ID}&redirect_uri=${redirectUrl}&scope=${scope}`; + // console.log(url); + // @ts-ignore + window.location = url; + }, }; /** diff --git a/platform/firecamp-platform/src/services/auth/refresh-token.ts b/platform/firecamp-platform/src/services/auth/refresh-token.ts index c5d8c2ebd..b5f1311a8 100644 --- a/platform/firecamp-platform/src/services/auth/refresh-token.ts +++ b/platform/firecamp-platform/src/services/auth/refresh-token.ts @@ -43,9 +43,9 @@ export default async ({ } break; - // Re-LogIn via gitHub + // re-logIn via gitHub case EProvider.GITHUB: - const code = await githubAuth.authorize(); + const code = await githubAuth.authorize.electron(); if (code) { response = await Rest.auth.refreshToken.reLogin({ diff --git a/platform/firecamp-platform/src/services/auth/sign-in.ts b/platform/firecamp-platform/src/services/auth/sign-in.ts index 7a2b434a6..50dd60ac1 100644 --- a/platform/firecamp-platform/src/services/auth/sign-in.ts +++ b/platform/firecamp-platform/src/services/auth/sign-in.ts @@ -1,6 +1,8 @@ import { Rest } from '@firecamp/cloud-apis'; +import { _misc } from '@firecamp/utils'; import { EProvider, IAuthResponse } from './types'; import { githubAuth, googleAuth } from './oauth2'; +import { EFirecampAgent } from '@firecamp/types'; /** credentials require while sign-in using Firecamp domain */ export interface ICredentials { @@ -9,19 +11,18 @@ export interface ICredentials { } /** - * sign-in user into their account via Firecamp, Google or GitHub domain + * sign-in user into their account via Firecamp, Google or GitHub */ export default async ( provider: EProvider, - credentials: ICredentials = { username: '', password: '' } + credentials: ICredentials = { username: '', password: '' }, + code?: string // if github/google auth from web then oauth code will exist from oauth web redirect method ): Promise<{ response: IAuthResponse; provider: EProvider } | any> => { - console.log(provider, 111); try { const { username = '', password = '' } = credentials; - switch (provider) { case EProvider.LOCAL: { - // Request to sign-in via Firecamp domain + // request to sign-in via email/password try { const response = await Rest.auth.signIn(username, password); // validate auth response @@ -50,23 +51,32 @@ export default async ( }); } case EProvider.GITHUB: - // Fetch auth code - const code = await githubAuth.authorize(); + // fetch auth code + const oAuthCode = + _misc.firecampAgent() == EFirecampAgent.Desktop + ? await githubAuth.authorize.electron() + : code; // send auth code to authenticate - const response = await Rest.auth.viaGithub(code); - console.log(response, '121212121'); - if (response?.data) { - return Promise.resolve({ - response: response.data, - provider: EProvider.GITHUB, + return Rest.auth + .viaGithub(oAuthCode) + .then(({ data }) => { + if (data) { + localStorage.setItem('socketId', data.__meta.accessToken); + return Promise.resolve({ + response: data, + provider: EProvider.GITHUB, + }); + } else { + return Promise.reject({ + message: 'failed to login into your account', + }); + } + }) + .catch((e) => { + // setError(e.response?.data?.message || e.message); }); - } else {F - return Promise.reject({ - message: 'Failed to login into your account', - }); - } default: console.log(provider); From c3dd44193db358e564f570a803dabb8335ff29e9 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Mon, 6 Nov 2023 15:07:59 +0530 Subject: [PATCH 19/71] feat: auth modal close on github auth success flow improved --- .../src/components/modals/auth/GithubGoogleAuth.tsx | 7 ++++--- .../firecamp-platform/src/services/auth/sign-in.ts | 10 ++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx b/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx index a04e53fe6..45b729150 100644 --- a/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx +++ b/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx @@ -7,6 +7,7 @@ import _auth from '../../../services/auth'; import { EProvider } from '../../../services/auth/types'; import { _misc } from '@firecamp/utils'; import { EFirecampAgent } from '@firecamp/types'; +import platformContext from '../../../services/platform-context'; const GithubGoogleAuth: FC = ({ onClose }) => { const [disableSignInWithGoogleButton, setDisableSignInWithGoogleButton] = @@ -36,9 +37,9 @@ const GithubGoogleAuth: FC = ({ onClose }) => { return _auth .signIn(EProvider.GITHUB) .then(async ({ response, provider }) => { - // note: tt'll never reach here as it'll redirect to the identity page after git auth - console.log(response, 'response....'); - // window.location.reload(); + // note: this'll be reachable only for desktop environment + await platformContext.app.initApp(); + platformContext.app.modals.close(); await closeModal(); }) .catch((e) => { diff --git a/platform/firecamp-platform/src/services/auth/sign-in.ts b/platform/firecamp-platform/src/services/auth/sign-in.ts index 50dd60ac1..f2d54ce62 100644 --- a/platform/firecamp-platform/src/services/auth/sign-in.ts +++ b/platform/firecamp-platform/src/services/auth/sign-in.ts @@ -10,9 +10,7 @@ export interface ICredentials { password: string; } -/** - * sign-in user into their account via Firecamp, Google or GitHub - */ +/** sign-in user into their account via Firecamp, Google or GitHub */ export default async ( provider: EProvider, credentials: ICredentials = { username: '', password: '' }, @@ -81,15 +79,15 @@ export default async ( default: console.log(provider); return Promise.reject({ - message: 'Failed to login into your account', + message: 'failed to login into your account', }); } } catch (e) { console.log(e, 'e....'); return Promise.reject({ message: e?.data?.message - ? `Failed to login into your account: ${e.data.message || '-'}` - : 'Failed to login into your account', + ? `failed to login into your account: ${e.data.message || '-'}` + : 'failed to login into your account', }); } }; From 4021d43508960327a7a7915bccaeee31860dd7b9 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Mon, 6 Nov 2023 16:36:14 +0530 Subject: [PATCH 20/71] feat: GitHub OAuth redirect flow improved #145 --- .../modals/auth/GithubGoogleAuth.tsx | 9 +++- .../src/services/app.service.ts | 48 ++++++++++++++----- .../src/services/auth/oauth2/github.ts | 4 +- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx b/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx index 45b729150..20798c78a 100644 --- a/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx +++ b/platform/firecamp-platform/src/components/modals/auth/GithubGoogleAuth.tsx @@ -8,6 +8,7 @@ import { EProvider } from '../../../services/auth/types'; import { _misc } from '@firecamp/utils'; import { EFirecampAgent } from '@firecamp/types'; import platformContext from '../../../services/platform-context'; +import AppService from '../../../services/app.service'; const GithubGoogleAuth: FC = ({ onClose }) => { const [disableSignInWithGoogleButton, setDisableSignInWithGoogleButton] = @@ -37,9 +38,13 @@ const GithubGoogleAuth: FC = ({ onClose }) => { return _auth .signIn(EProvider.GITHUB) .then(async ({ response, provider }) => { - // note: this'll be reachable only for desktop environment - await platformContext.app.initApp(); platformContext.app.modals.close(); + // note: this'll be reachable only for desktop environment + await platformContext.app.initApp().then(() => { + AppService.notify.success(`You're signed in successfully.`, { + labels: { alert: 'success' }, + }); + }); await closeModal(); }) .catch((e) => { diff --git a/platform/firecamp-platform/src/services/app.service.ts b/platform/firecamp-platform/src/services/app.service.ts index 9158be909..fb0f9334e 100644 --- a/platform/firecamp-platform/src/services/app.service.ts +++ b/platform/firecamp-platform/src/services/app.service.ts @@ -11,6 +11,8 @@ import { useEnvStore } from '../store/environment'; import { useModalStore } from '../store/modal'; import { platformEmitter } from './platform-emitter'; import { useExplorerStore } from '../store/explorer'; +import _auth from '../services/auth'; +import { EProvider } from '../services/auth/types'; const userService = { isLoggedIn: () => { @@ -47,14 +49,44 @@ const switchWorkspace = async ( //initialize app flow on first load, after login and after signup const initApp = async () => { - const { fetchExplorer } = useExplorerStore.getState(); - CloudApiGlobal.setHost(process.env.FIRECAMP_API_HOST); + const urlParams = new URLSearchParams(location.search); + console.log(urlParams); + const code = urlParams.get('code'); + const _error = urlParams.get('error'); + const errorDescription = urlParams.get('error_description'); - // Set client id and app version into cloud-api headers + CloudApiGlobal.setHost(process.env.FIRECAMP_API_HOST); + // set app version into cloud-api headers CloudApiGlobal.setGlobalHeaders({ [ECloudApiHeaders.AppVersion]: process.env.APP_VERSION || '', }); + Promise.resolve() + .then(async () => { + if (code) { + await _auth + .signIn(EProvider.GITHUB, { username: '', password: '' }, code) + .then(async () => { + AppService.notify.success(`You're signed in successfully.`, { + labels: { alert: 'success' }, + }); + //@ts-ignore + window?.history?.replaceState({}, '', '/'); + }) + .catch((e) => { + // setError(e.response?.data?.message || e.message); + }); + } + return; + }) + .finally(() => { + initSession(); + }); + // if (errorDescription) setError(errorDescription); +}; + +const initSession = async () => { + const { fetchExplorer } = useExplorerStore.getState(); const socketId = localStorage.getItem('socketId'); //1/ check if user is logged in or not @@ -73,15 +105,6 @@ const initApp = async () => { await fetchExplorer(workspace.__ref.id); return res.data; }) - .then((res) => { - // if auth happens via github/google then success message would be set at localStorage from identity page - const sMessage = localStorage.getItem('authSuccessMessage'); - if (sMessage) { - AppService.notify.success(sMessage); - localStorage.removeItem('authSuccessMessage'); - } - return res; - }) .then(({ user }) => { // subscribe request changes (pull actions) try { @@ -119,6 +142,7 @@ const initApp = async () => { }) .catch(console.log); }; + const initUser = (user: any) => { const { setUser } = useUserStore.getState(); setUser(user); diff --git a/platform/firecamp-platform/src/services/auth/oauth2/github.ts b/platform/firecamp-platform/src/services/auth/oauth2/github.ts index dd66c988b..16f8e74e5 100644 --- a/platform/firecamp-platform/src/services/auth/oauth2/github.ts +++ b/platform/firecamp-platform/src/services/auth/oauth2/github.ts @@ -2,7 +2,7 @@ import { EFirecampAgent } from '@firecamp/types'; import { _misc, _string } from '@firecamp/utils'; import { GITHUB_CONFIG } from './constants'; -const { CLIENT_ID, SCOPE, AUTH_URL } = GITHUB_CONFIG; +const { CLIENT_ID, SCOPE, AUTH_URL, REDIRECT_URL } = GITHUB_CONFIG; export const authorize = { electron: (): Promise => { @@ -12,7 +12,7 @@ export const authorize = { web: (): void => { // web flow const scope = SCOPE.join(','); - const redirectUrl = `${location.origin}/identity.html?redirect=${location.href}`; + const redirectUrl = `${REDIRECT_URL}/?redirect=${location.href}`; const url = `${AUTH_URL}?client_id=${CLIENT_ID}&redirect_uri=${redirectUrl}&scope=${scope}`; // console.log(url); // @ts-ignore From b80c0e9097f58b03f96ddf779629db60aba21852 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Mon, 6 Nov 2023 16:39:38 +0530 Subject: [PATCH 21/71] chore: identity.html removed in favour of #145 --- .../src/containers/identity.tsx | 74 ------------------- webpack.common.js | 11 --- 2 files changed, 85 deletions(-) delete mode 100644 platform/firecamp-platform/src/containers/identity.tsx diff --git a/platform/firecamp-platform/src/containers/identity.tsx b/platform/firecamp-platform/src/containers/identity.tsx deleted file mode 100644 index 43b7da12e..000000000 --- a/platform/firecamp-platform/src/containers/identity.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { useEffect, useState } from 'react'; -import { createRoot } from 'react-dom/client'; -import * as Sentry from '@sentry/browser'; -import { Integrations } from '@sentry/tracing'; -import CloudApiGlobal, { Rest } from '@firecamp/cloud-apis'; -import { ECloudApiHeaders } from '../types'; -import _auth from '../services/auth'; -import { EProvider } from '../services/auth/types'; - -const IdentityPage = () => { - const [error, setError] = useState(''); - - useEffect(() => { - const urlParams = new URLSearchParams(location.search); - console.log(urlParams); - - const code = urlParams.get('code'); - const _error = urlParams.get('error'); - const errorDescription = urlParams.get('error_description'); - - if (errorDescription) setError(errorDescription); - if (code) { - CloudApiGlobal.setHost(process.env.FIRECAMP_API_HOST); - // set app version into cloud-api headers - CloudApiGlobal.setGlobalHeaders({ - [ECloudApiHeaders.AppVersion]: process.env.APP_VERSION || '', - }); - - _auth - .signIn(EProvider.GITHUB, { username: '', password: '' }, code) - .then(async () => { - localStorage.setItem( - 'authSuccessMessage', - "You're signed in successfully." - ); - //@ts-ignore - window.location = '/'; //redirect to the main app - // console.log(data, 12345); - }) - .catch((e) => { - setError(e.response?.data?.message || e.message); - }); - } - }, []); - - return ( - <> - {error} -
- {error ? Go to Firecamp : 'Authenticating...'} - - ); -}; - -if (process.env.NODE_ENV == 'production') { - Sentry.init({ - dsn: process.env.SENTRY_DSN, - - // Alternatively, use `process.env.npm_package_version` for a dynamic release version - // if your build tool supports it. - release: `Firecamp@${process.env.APP_VERSION}`, - - //@ts-ignore - integrations: [new Integrations.BrowserTracing()], - - // Set tracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. - // We recommend adjusting this value in production - tracesSampleRate: 1.0, - }); -} - -const root = createRoot(document.getElementById('root')); -root.render(); \ No newline at end of file diff --git a/webpack.common.js b/webpack.common.js index 53de7aa37..acce02bc0 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -23,13 +23,6 @@ const plugins = [ favicon: 'templates/favicon.png', hash: true, }), - new HtmlWebpackPlugin({ - inject: true, - chunks: ['identity'], - filename: 'identity.html', - template: 'templates/identity.html', - favicon: 'templates/favicon.png', - }), new NodePolyfillPlugin(), new webpack.ProgressPlugin({ entries: true, @@ -165,10 +158,6 @@ module.exports = { __dirname, './platform/firecamp-platform/src/containers/index.tsx' ), - identity: path.join( - __dirname, - './platform/firecamp-platform/src/containers/identity.tsx' - ), }, optimization: { runtimeChunk: 'single', From 22a153acf82a8db59373b52758e9aa320052e9a2 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Tue, 7 Nov 2023 16:46:31 +0530 Subject: [PATCH 22/71] feat: multipart file upload flow implemented for desktop/node/electron environment --- .../firecamp-rest-executor/package.json | 2 +- .../src/helpers/body.ts | 40 ++++++------------- .../firecamp-rest-executor/src/index.ts | 2 + 3 files changed, 16 insertions(+), 28 deletions(-) diff --git a/playgrounds/firecamp-rest-executor/package.json b/playgrounds/firecamp-rest-executor/package.json index 92eb520dd..57400d3e0 100644 --- a/playgrounds/firecamp-rest-executor/package.json +++ b/playgrounds/firecamp-rest-executor/package.json @@ -1,6 +1,6 @@ { "name": "@firecamp/rest-executor", - "version": "1.0.19", + "version": "1.0.20", "description": "REST request executor", "repository": "https://github.com/firecamp-dev/firecamp/packages-executors/rest-executor", "keywords": [], diff --git a/playgrounds/firecamp-rest-executor/src/helpers/body.ts b/playgrounds/firecamp-rest-executor/src/helpers/body.ts index 8135045f1..602b39b62 100644 --- a/playgrounds/firecamp-rest-executor/src/helpers/body.ts +++ b/playgrounds/firecamp-rest-executor/src/helpers/body.ts @@ -30,38 +30,24 @@ export default async (body: IRestBody): Promise => { // prepare form data case ERestBodyTypes.FormData: if (_array.isEmpty(value as any[])) return {}; - if (isNode) { - // prepare multipart/form-data using form-data lib in node environment - const FormData = (await import('form-data')).default; - const form = new FormData(); - (value as any[]).forEach((row: IKeyValueTable) => { - if (row?.type === EKeyValueTableRowType.File) { + + const form: FormData = new FormData(); + // append entries into form + (value as any[]).forEach((row: IKeyValueTable) => { + if (row?.type === EKeyValueTableRowType.File) { + if (isNode) { //@ts-ignore - if (!row.file && !_string.isEmpty(row.value || '')) { - // read the file using its path - form.append(row.key, fs.createReadStream(row.value || '')); - } else { - //@ts-ignore - form.append(row.key, row.file); - } + const f = fs.createReadStream(row.file.path); + form.append(row.key, f); } else { - form.append(row.key, row.value); - } - }); - return form; - } else { - const form: FormData = new FormData(); - // append entries into form - (value as any[]).forEach((row: IKeyValueTable) => { - if (row?.type === EKeyValueTableRowType.File) { //@ts-ignore form.append(row.key, row.file); - } else { - form.append(row.key, row.value); } - }); - return form; - } + } else { + form.append(row.key, row.value); + } + }); + return form; // encode data using the qs library case ERestBodyTypes.UrlEncoded: diff --git a/playgrounds/firecamp-rest-executor/src/index.ts b/playgrounds/firecamp-rest-executor/src/index.ts index 01c278037..b02ea3a13 100644 --- a/playgrounds/firecamp-rest-executor/src/index.ts +++ b/playgrounds/firecamp-rest-executor/src/index.ts @@ -145,7 +145,9 @@ export default class RestExecutor implements IRestExecutor { // TODO: Check sending file without serialize in desktop environment // parse body payload + console.log(body, 555); if (body?.value) { + console.log(body, 7777); axiosRequest.data = await parseBody(body); } return axiosRequest; From f28605337f9453a56c8a7fd024c40a4cf8c4e674 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Tue, 7 Nov 2023 16:49:39 +0530 Subject: [PATCH 23/71] feat: preload script improved to handle invocation of multipart rest request for main ipc --- packages/firecamp-electron/src/preload.ts | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/firecamp-electron/src/preload.ts b/packages/firecamp-electron/src/preload.ts index 2cd8a70cd..60e0972dd 100644 --- a/packages/firecamp-electron/src/preload.ts +++ b/packages/firecamp-electron/src/preload.ts @@ -3,6 +3,12 @@ const { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('__electron__', { http: { send: (request: any, variables: any) => { + if (request.body?.type == 'multipart/form-data') { + request.body = { + ...request.body, + value: interceptMultipartBody(request.body), + }; + } return ipcRenderer.invoke('http:send', request, variables); }, stop: (requestId: string) => ipcRenderer.invoke('http:stop', requestId), @@ -13,3 +19,21 @@ contextBridge.exposeInMainWorld('__electron__', { }, }, }); + +/* electron has limitation that we can not send DOM elements like files over ipc, thus we need to send only file meta including name, path and type */ +const interceptMultipartBody = (body: any) => { + const { value = [], type } = body; + return value.map((v: any) => { + if (v.file) { + return { + ...v, + file: { + name: v.file.name, + path: v.file.path, + type: v.file.type, + }, + }; + } + return v; + }); +}; From e52d82ae27e0bef711df4cca4a34806fa8a948c0 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Wed, 8 Nov 2023 13:26:22 +0530 Subject: [PATCH 24/71] fix: electron axios error ipc issue fixed --- playgrounds/firecamp-rest-executor/src/index.ts | 4 ++-- playgrounds/firecamp-rest/src/store/slices/execution.slice.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/playgrounds/firecamp-rest-executor/src/index.ts b/playgrounds/firecamp-rest-executor/src/index.ts index b02ea3a13..532001bc5 100644 --- a/playgrounds/firecamp-rest-executor/src/index.ts +++ b/playgrounds/firecamp-rest-executor/src/index.ts @@ -275,7 +275,7 @@ export default class RestExecutor implements IRestExecutor { error: { message: e.message, code: e.code, - e, + e: isNode ? null : e, //@note: electron can not clone the error object to send over ipc }, }, variables, @@ -289,7 +289,7 @@ export default class RestExecutor implements IRestExecutor { error: { message: e.message, code: e.code, - e, + e: isNode ? null : e, //@note: electron can not clone the error object to send over ipc }, }, variables, diff --git a/playgrounds/firecamp-rest/src/store/slices/execution.slice.ts b/playgrounds/firecamp-rest/src/store/slices/execution.slice.ts index be121ae51..25947c83f 100644 --- a/playgrounds/firecamp-rest/src/store/slices/execution.slice.ts +++ b/playgrounds/firecamp-rest/src/store/slices/execution.slice.ts @@ -181,7 +181,7 @@ const createExecutionSlice: TStoreSlice = (set, get) => ({ console.log({ response, variables, testResult }); if (response?.error) { const error = response.error; - console.log(error.message, error.code, error.e.response, error.e); + console.log(error.message, error.code, error.e?.response, error.e); } if (response) { set((s) => ({ response, testResult, scriptErrors })); // TODO: check what to set/ response or testScriptResponse From aada3225fc6e87b17dc5d0ff0ae52aab97663f3d Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Fri, 10 Nov 2023 16:59:44 +0530 Subject: [PATCH 25/71] feat: electron-builder implemented and icons are set --- .../assets/icons/app-icon.icns | Bin 0 -> 241511 bytes .../assets/icons/app-icon.png | Bin 0 -> 20521 bytes packages/firecamp-electron/package.json | 20 +++++++++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 packages/firecamp-electron/assets/icons/app-icon.icns create mode 100644 packages/firecamp-electron/assets/icons/app-icon.png diff --git a/packages/firecamp-electron/assets/icons/app-icon.icns b/packages/firecamp-electron/assets/icons/app-icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..279fd62cfd4196f7185e667286f8ba7a99d9d102 GIT binary patch literal 241511 zcmeFY`#;lt{69V_I!Q|*$KqNNk(`fHEv_h%Q*sO;M97&1dhKCUahzt{UO`2O;K{<7V6d%d2I^ZjvnKKIbc%MY-x)b*j0!X*F)4IOpc zNT27h&|v@oz;oko$Q=M+|L)iQfa6@dAM&x(762dua07D1EGT1XA~40-yjpe2|4Y3T zH<#f0@mEI^-u`vt&6#Hf5eYHpPncmi6wljTKPg#o=JjbwhZbX#qi3vE4|DAY8D^fn zxmcosb0VAnJp|&pSrm+;w|N^4=;Q||Yg5MCs<$R%cj^7R_(Q{wgmPZujcFfO^RtCSVwy*;$`b}WSNd?|nWW@vjzV2}7PSaWTW81kd&|=~GPIoG@y-|nKmRj>f?EUAb z5j2B+0E%h8se2a2GO-{ILyC9yx}5{Hv+KrRg(`m_6yS)PBed4p)UIH9@Na%(9W`WF zl{y2>rGz3PCcm3*9ktln$O?$sdEdwin`=;X#pDNfo2vq4^2Lyh$QdB#o7CxP`b~k(nx9+dtmL z`!CgqpN7n_gf8)W}rH zlW&c^>|!6S^IFb@d!xtC+k>}nK(7eqa748AwR^g=)T_`Ito;7~KzElP4 zW5rvjxmilNtf_y$CUZQ@YFs)@&PvZ2i^g1}6gnBGRQMHCui(Kh)#JZlpD2c2@7aJy z2-o+X2v@fE_I}sIetQ}99%%xRUpkgN*NE-Fh;n|x_Hq^yx4j<(u+9o^Zf9}-R;aPT zAX0*4w?;YPkErvU(@4d2`UIQlYR31hbc%izw$x&^O}sl|Q;L@4z`|~zJ1fgzcp;EC z(*^x7-bBEIpjGJU>Bc;VyQ}VZZ-^)0=)8guAjCA66moSA0ZJROGPAd+2-h20wo0*g ztxWKMeIzJSc1ElTn^!>kldSnZK}@CDs8zOihFL|2qKOc7cGDpE$2o+sB0X~|l=EL6 zTXF~=FgDvlP6kz!f{2}wVCDj*!60s&ye3YMFG{!F`H+BY$|GdK5>t6N`{ctm==99w ztYjXZdkM~Q{l*Nt6T(z@j6)hzN`Ya1zA2AX3B% zJYMJ={;)ZVs$9WW5E6V0bJ3V#_uKtiOnYp-J4LIqR_%EvdomZpD0} zpWinhPfc?3VahYEi0k+K&Co2ZbSLb@4;*f_BY}I?zE)H}d3-u$8o#JThdqu@=sE-v zR`k^sJG;7iY#)=dB=egv;K;p|gR860Z~}>L4-jSAdCqKNBu<4X1?uihWP!&&69UDA zbV^b;JBL-X8UpMB1J1x=4s>I@g#i2)?WKFE)P(2VT|Gg zr$vDz&)Hr;csEA11if@}M^lsY?#ORA1~e6#iZ3mld~<*q@;TwTxBLj~`|8+ACt^R8 zIh25-`JgMe1a-VnXK5MZ!HwZeErhml+OC*a@$W!|vfDL-GU{`-Ap5}kXaSeVE|oSO zB(e#H4rxp1GNi<6;U!nPGcJK$_Grmk+)MSl?3cf`6HN+S=X^hKzOir?ZoPIWb-G&H23>)6}IC>_-ALj zxcX`_NJzeuG=BDsi%VQ)B<{ES0_JZaUPWMyIC2g8v!q9wKRQ!LKfLKw9Z)y8me4>^ zS8c9x#=jN`3e|BXH;SdxdKwug+yE)K3dM8lMa)*=b&c*}?<_Ol%B2kTm1-5JRZC; zCN4ih?G9VwrMyygjl*PU%Og<$gBH-+w*aKi@A8v&?}yp%-6I{~*)!(BdL@)^E|1!{+Ir^ir9T9nZ<0 z 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≥w4FI^WYF4gYB%rFF;d`Z`+~-&7m<{ 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�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 Date: Sat, 11 Nov 2023 13:40:59 +0530 Subject: [PATCH 26/71] feat: desktop app local pack logic implemented --- packages/firecamp-electron/.npmrc | 1 + packages/firecamp-electron/package.json | 21 +- packages/firecamp-electron/src/main.ts | 11 +- pnpm-lock.yaml | 447 ++++++++++++++++++++++++ 4 files changed, 473 insertions(+), 7 deletions(-) create mode 100644 packages/firecamp-electron/.npmrc diff --git a/packages/firecamp-electron/.npmrc b/packages/firecamp-electron/.npmrc new file mode 100644 index 000000000..bf2e7648b --- /dev/null +++ b/packages/firecamp-electron/.npmrc @@ -0,0 +1 @@ +shamefully-hoist=true diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index dc2e66b0f..ffb069765 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -7,7 +7,7 @@ "scripts": { "start": "tsc && electron .", "test": "echo \"Error: no test specified\" && exit 1", - "pack": "electron-builder --dir", + "pack": "tsc && electron-builder --dir -c.compression=store -c.mac.identity=null", "build": "electron-builder", "postinstall": "electron-builder install-app-deps" }, @@ -15,23 +15,34 @@ "author": "", "license": "AGPLv3", "dependencies": { - "@firecamp/rest-executor": "workspace:*" + "@firecamp/rest-executor": "workspace:*", + "@firecamp/scripts": "workspace:*", + "react-fast-compare": "^3.2.2" }, "devDependencies": { "@types/node": "^20.8.9", - "electron": "^27.0.2" + "electron": "^27.0.2", + "electron-builder": "^24.6.4" }, "build": { + "productName": "Firecamp", "appId": "com.firecamp.desktop", "files": [ "./build/**/*", - "dist/**/*", - "package.json" + "package.json", + { + "from": "../../build/development", + "to": "app" + } ], "directories": { "buildResources": "assets" }, "mac": { + "artifactName": "${name}-${version}.${arch}.${ext}", + "target": { + "target": "dmg" + }, "category": "public.app-category.developer-tools", "icon": "icons/app-icon.png" } diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 3dfe8dd8f..c7341d938 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -1,12 +1,17 @@ import { app, BrowserWindow, ipcMain, screen } from 'electron'; -import RestExecutor from '@firecamp/rest-executor'; +import RestExecutor from '@firecamp/rest-executor/dist/index'; import * as path from 'node:path'; const createWindow = () => { const { width, height } = screen.getPrimaryDisplay().workAreaSize; const win = new BrowserWindow({ + frame: false, width, height, + titleBarStyle: 'customButtonsOnHover', + // titleBarStyle: 'hiddenInset', + // titleBarStyle: 'hidden', + // transparent: true, webPreferences: { preload: path.join(__dirname, 'preload.js'), }, @@ -14,7 +19,9 @@ const createWindow = () => { if (app.isPackaged) { // 'build/index.html' - // win.loadURL(`file://${__dirname}/../../build/prod/index.html`); + // win.loadURL(`file://${__dirname}/index.html`); + console.log(path.join(__dirname, 'index.html')); + win.loadFile(path.join(__dirname, '../app', 'index.html')); } else { // win.loadURL(`file://${__dirname}/../../../build/dev/index.html`); win.loadURL('https://localhost:3000'); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49c68591b..e7cab9b9d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -650,6 +650,12 @@ importers: '@firecamp/rest-executor': specifier: workspace:* version: link:../../playgrounds/firecamp-rest-executor + '@firecamp/scripts': + specifier: workspace:* + version: link:../firecamp-scripts + react-fast-compare: + specifier: ^3.2.2 + version: 3.2.2 devDependencies: '@types/node': specifier: ^20.8.9 @@ -657,6 +663,9 @@ importers: electron: specifier: ^27.0.2 version: 27.0.2 + electron-builder: + specifier: ^24.6.4 + version: 24.6.4 packages/firecamp-har: dependencies: @@ -2052,6 +2061,10 @@ importers: packages: + /7zip-bin@5.1.1: + resolution: {integrity: sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==} + dev: true + /@adobe/css-tools@4.0.2: resolution: {integrity: sha512-Fx6tYjk2wKUgLi8uMANZr8GNZx05u44ArIJldn9VxLvolzlJVgHbTUCbwhMd6bcYky178+WUSxPHO3DAtGLWpw==} dev: true @@ -4065,6 +4078,14 @@ packages: react-merge-refs: 1.1.0 dev: true + /@develar/schema-utils@2.6.5: + resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} + engines: {node: '>= 8.9.0'} + dependencies: + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + /@devtools-ds/object-inspector@1.2.1(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-nrAVVj4c4Iv9958oE4HA7Mk6T+4Mn/4xBRlFDeX4Ps6SMzsqO8bKhw/y6+bOfNyb/TYHmC0/pnPS68GDVZcg5Q==} peerDependencies: @@ -4119,6 +4140,16 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} + /@electron/asar@3.2.8: + resolution: {integrity: sha512-cmskk5M06ewHMZAplSiF4AlME3IrnnZhKnWbtwKVLRkdJkKyUVjMLhDIiPIx/+6zQWVlKX/LtmK9xDme7540Sg==} + engines: {node: '>=10.12.0'} + hasBin: true + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /@electron/get@2.0.3: resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} @@ -4136,6 +4167,47 @@ packages: - supports-color dev: true + /@electron/notarize@2.1.0: + resolution: {integrity: sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==} + engines: {node: '>= 10.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@electron/osx-sign@1.0.5: + resolution: {integrity: sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + compare-version: 0.1.2 + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@electron/universal@1.4.1: + resolution: {integrity: sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ==} + engines: {node: '>=8.6'} + dependencies: + '@electron/asar': 3.2.8 + '@malept/cross-spawn-promise': 1.1.1 + debug: 4.3.4(supports-color@8.1.1) + dir-compare: 3.3.0 + fs-extra: 9.1.0 + minimatch: 3.1.2 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + dev: true + /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: @@ -5753,6 +5825,25 @@ packages: '@lezer/common': 0.16.1 dev: false + /@malept/cross-spawn-promise@1.1.1: + resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==} + engines: {node: '>= 10'} + dependencies: + cross-spawn: 7.0.3 + dev: true + + /@malept/flatpak-bundler@0.4.0: + resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} + engines: {node: '>= 10.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 9.1.0 + lodash: 4.17.21 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: true + /@mantine/core@6.0.14(@emotion/react@11.11.1)(@mantine/hooks@6.0.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-O916itwsB5XtEStVZRqp3SlB4aLM0sSgOFYYCVnLJ3E9O9E8h1xhaNEml1FJbMtrlNaXYUd6sy/OSRqNl9DyKA==} peerDependencies: @@ -9243,6 +9334,12 @@ packages: dependencies: '@types/node': 16.18.40 + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: true + /@types/emscripten@1.39.6: resolution: {integrity: sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==} dev: true @@ -9313,6 +9410,12 @@ packages: '@types/node': 16.18.40 dev: true + /@types/fs-extra@9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 16.18.40 + dev: true + /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: @@ -9492,6 +9595,10 @@ packages: resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} dev: true + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: true + /@types/node-fetch@2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: @@ -9550,6 +9657,15 @@ packages: resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} dev: true + /@types/plist@3.0.5: + resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} + requiresBuild: true + dependencies: + '@types/node': 16.18.40 + xmlbuilder: 11.0.1 + dev: true + optional: true + /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true @@ -9685,6 +9801,12 @@ packages: /@types/validator@13.11.1: resolution: {integrity: sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==} + /@types/verror@1.10.9: + resolution: {integrity: sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ==} + requiresBuild: true + dev: true + optional: true + /@types/vinyl@2.0.7: resolution: {integrity: sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==} dependencies: @@ -10633,6 +10755,12 @@ packages: webpack-cli: 5.0.1(webpack-bundle-analyzer@4.7.0)(webpack-dev-server@4.11.1)(webpack@5.75.0) webpack-dev-server: 4.11.1(webpack-cli@5.0.1)(webpack@5.75.0) + /@xmldom/xmldom@0.8.10: + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dev: true + /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -11083,6 +11211,46 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 + /app-builder-bin@4.0.0: + resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} + dev: true + + /app-builder-lib@24.6.4: + resolution: {integrity: sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg==} + engines: {node: '>=14.0.0'} + dependencies: + 7zip-bin: 5.1.1 + '@develar/schema-utils': 2.6.5 + '@electron/notarize': 2.1.0 + '@electron/osx-sign': 1.0.5 + '@electron/universal': 1.4.1 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + bluebird-lst: 1.0.9 + builder-util: 24.5.0 + builder-util-runtime: 9.2.1 + chromium-pickle-js: 0.2.0 + debug: 4.3.4(supports-color@8.1.1) + ejs: 3.1.9 + electron-publish: 24.5.0 + form-data: 4.0.0 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + is-ci: 3.0.1 + isbinaryfile: 5.0.0 + js-yaml: 4.1.0 + lazy-val: 1.0.5 + minimatch: 5.1.6 + read-config-file: 6.3.2 + sanitize-filename: 1.6.3 + semver: 7.5.4 + tar: 6.1.13 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color + dev: true + /app-root-dir@1.0.2: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} dev: true @@ -11327,6 +11495,13 @@ packages: vscode-uri: 3.0.7 dev: false + /assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + requiresBuild: true + dev: true + optional: true + /assert@1.5.0: resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} dependencies: @@ -11373,6 +11548,11 @@ packages: dev: true optional: true + /async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} + dev: true + /async@0.2.10: resolution: {integrity: sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==} dev: true @@ -11993,6 +12173,12 @@ packages: resolution: {integrity: sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==} dev: false + /bluebird-lst@1.0.9: + resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} + dependencies: + bluebird: 3.7.2 + dev: true + /bluebird@2.11.0: resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==} dev: true @@ -12235,6 +12421,11 @@ packages: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true + /buffer-equal@1.0.1: + resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} + engines: {node: '>=0.4'} + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -12267,6 +12458,39 @@ packages: resolution: {integrity: sha512-kjauShWoKG69xYwoJ4OTbHSliwhWHXa3wFJSamAva9SyK7OoihxdBfamaBjWhZPJvy0MP0cioXsZZhKKfFFCsg==} dev: false + /builder-util-runtime@9.2.1: + resolution: {integrity: sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==} + engines: {node: '>=12.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + sax: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: true + + /builder-util@24.5.0: + resolution: {integrity: sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==} + dependencies: + 7zip-bin: 5.1.1 + '@types/debug': 4.1.12 + app-builder-bin: 4.0.0 + bluebird-lst: 1.0.9 + builder-util-runtime: 9.2.1 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 10.1.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-ci: 3.0.1 + js-yaml: 4.1.0 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color + dev: true + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -12765,6 +12989,10 @@ packages: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} + /chromium-pickle-js@0.2.0: + resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} + dev: true + /ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true @@ -13229,6 +13457,11 @@ packages: dot-prop: 5.3.0 dev: true + /compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} + dev: true + /component-bind@1.0.0: resolution: {integrity: sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==} dev: false @@ -13322,6 +13555,13 @@ packages: yargs: 17.6.2 dev: true + /config-file-ts@0.2.4: + resolution: {integrity: sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ==} + dependencies: + glob: 7.2.3 + typescript: 4.9.5 + dev: true + /configstore@5.0.1: resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} engines: {node: '>=8'} @@ -13635,6 +13875,12 @@ packages: requiresBuild: true dev: true + /core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + requiresBuild: true + dev: true + optional: true + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -13693,6 +13939,14 @@ packages: - supports-color dev: true + /crc@3.8.0: + resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} + requiresBuild: true + dependencies: + buffer: 5.7.1 + dev: true + optional: true + /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: @@ -14490,6 +14744,13 @@ packages: randombytes: 2.1.0 dev: true + /dir-compare@3.3.0: + resolution: {integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==} + dependencies: + buffer-equal: 1.0.1 + minimatch: 3.1.2 + dev: true + /dir-glob@2.2.2: resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} engines: {node: '>=4'} @@ -14507,6 +14768,39 @@ packages: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true + /dmg-builder@24.6.4: + resolution: {integrity: sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw==} + dependencies: + app-builder-lib: 24.6.4 + builder-util: 24.5.0 + builder-util-runtime: 9.2.1 + fs-extra: 10.1.0 + iconv-lite: 0.6.3 + js-yaml: 4.1.0 + optionalDependencies: + dmg-license: 1.0.11 + transitivePeerDependencies: + - supports-color + dev: true + + /dmg-license@1.0.11: + resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} + engines: {node: '>=8'} + os: [darwin] + hasBin: true + requiresBuild: true + dependencies: + '@types/plist': 3.0.5 + '@types/verror': 1.10.9 + ajv: 6.12.6 + crc: 3.8.0 + iconv-corefoundation: 1.1.7 + plist: 3.1.0 + smart-buffer: 4.2.0 + verror: 1.10.1 + dev: true + optional: true + /dns-equal@1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} @@ -14660,6 +14954,11 @@ packages: engines: {node: '>=10'} dev: true + /dotenv@9.0.2: + resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} + engines: {node: '>=10'} + dev: true + /dotgitignore@2.1.0: resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==} engines: {node: '>=6'} @@ -14694,6 +14993,40 @@ packages: dependencies: jake: 10.8.7 + /electron-builder@24.6.4: + resolution: {integrity: sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + app-builder-lib: 24.6.4 + builder-util: 24.5.0 + builder-util-runtime: 9.2.1 + chalk: 4.1.2 + dmg-builder: 24.6.4 + fs-extra: 10.1.0 + is-ci: 3.0.1 + lazy-val: 1.0.5 + read-config-file: 6.3.2 + simple-update-notifier: 2.0.0 + yargs: 17.6.2 + transitivePeerDependencies: + - supports-color + dev: true + + /electron-publish@24.5.0: + resolution: {integrity: sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==} + dependencies: + '@types/fs-extra': 9.0.13 + builder-util: 24.5.0 + builder-util-runtime: 9.2.1 + chalk: 4.1.2 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + dev: true + /electron-to-chromium@1.4.356: resolution: {integrity: sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==} @@ -16455,6 +16788,13 @@ packages: - supports-color dev: true + /extsprintf@1.4.1: + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} + requiresBuild: true + dev: true + optional: true + /faker@5.5.3: resolution: {integrity: sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==} dev: false @@ -18358,6 +18698,17 @@ packages: resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} engines: {node: '>=4'} + /iconv-corefoundation@1.1.7: + resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} + engines: {node: ^8.11.2 || >=10} + os: [darwin] + requiresBuild: true + dependencies: + cli-truncate: 2.1.0 + node-addon-api: 1.7.2 + dev: true + optional: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -18744,6 +19095,13 @@ packages: ci-info: 2.0.0 dev: true + /is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + dependencies: + ci-info: 3.8.0 + dev: true + /is-color-stop@1.1.0: resolution: {integrity: sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==} dependencies: @@ -21511,6 +21869,10 @@ packages: dotenv-expand: 5.1.0 dev: true + /lazy-val@1.0.5: + resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -22948,6 +23310,12 @@ packages: - supports-color dev: true + /node-addon-api@1.7.2: + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} + requiresBuild: true + dev: true + optional: true + /node-dir@0.1.17: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} engines: {node: '>= 0.10.5'} @@ -24319,6 +24687,15 @@ packages: playwright-core: 1.29.2 dev: true + /plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} + dependencies: + '@xmldom/xmldom': 0.8.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + dev: true + /pluralize@7.0.0: resolution: {integrity: sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==} engines: {node: '>=4'} @@ -25592,6 +25969,18 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true + /read-config-file@6.3.2: + resolution: {integrity: sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==} + engines: {node: '>=12.0.0'} + dependencies: + config-file-ts: 0.2.4 + dotenv: 9.0.2 + dotenv-expand: 5.1.0 + js-yaml: 4.1.0 + json5: 2.2.3 + lazy-val: 1.0.5 + dev: true + /read-package-json-fast@2.0.3: resolution: {integrity: sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==} engines: {node: '>=10'} @@ -26332,6 +26721,12 @@ packages: - supports-color dev: true + /sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + dependencies: + truncate-utf8-bytes: 1.0.2 + dev: true + /sass-loader@13.2.0(sass@1.57.1)(webpack@5.75.0): resolution: {integrity: sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==} engines: {node: '>= 14.15.0'} @@ -26728,6 +27123,13 @@ packages: is-arrayish: 0.3.2 dev: true + /simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + /sirv@1.0.19: resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} engines: {node: '>= 10'} @@ -27331,6 +27733,11 @@ packages: yargs: 16.2.0 dev: true + /stat-mode@1.0.0: + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} + engines: {node: '>= 6'} + dev: true + /state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} dev: false @@ -28004,6 +28411,13 @@ packages: engines: {node: '>=8'} dev: true + /temp-file@3.4.0: + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} + dependencies: + async-exit-hook: 2.0.1 + fs-extra: 10.1.0 + dev: true + /temp-write@4.0.0: resolution: {integrity: sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==} engines: {node: '>=8'} @@ -28243,6 +28657,12 @@ packages: upper-case: 1.1.3 dev: true + /tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + dependencies: + tmp: 0.2.1 + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -28383,6 +28803,12 @@ packages: resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} dev: true + /truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + dependencies: + utf8-byte-length: 1.0.4 + dev: true + /ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -29706,6 +30132,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /utf8-byte-length@1.0.4: + resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} + dev: true + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -29809,6 +30239,17 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + /verror@1.10.1: + resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} + engines: {node: '>=0.6.0'} + requiresBuild: true + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.1 + dev: true + optional: true + /vfile-location@3.2.0: resolution: {integrity: sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==} dev: true @@ -30799,6 +31240,12 @@ packages: engines: {node: '>=4.0'} dev: true + /xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + requiresBuild: true + dev: true + /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true From d042147bec6bb67857b98d78d3432437a8ed78e4 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 11 Nov 2023 14:04:30 +0530 Subject: [PATCH 27/71] feat: relese channel configured --- packages/firecamp-electron/package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index ffb069765..30a05ff22 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -1,6 +1,6 @@ { "name": "@firecamp/desktop", - "version": "1.0.0", + "version": "3.3.0-beta", "description": "", "main": "build/main.js", "private": true, @@ -25,8 +25,9 @@ "electron-builder": "^24.6.4" }, "build": { - "productName": "Firecamp", "appId": "com.firecamp.desktop", + "generateUpdatesFilesForAllChannels": true, + "productName": "Firecamp", "files": [ "./build/**/*", "package.json", From 187dc41194e7d464968bfd9c01936305776ba8ef Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 11 Nov 2023 16:01:24 +0530 Subject: [PATCH 28/71] chore: electron updater and log installed --- packages/firecamp-electron/package.json | 5 ++++ pnpm-lock.yaml | 38 ++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 30a05ff22..5c1e92466 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -17,6 +17,8 @@ "dependencies": { "@firecamp/rest-executor": "workspace:*", "@firecamp/scripts": "workspace:*", + "electron-log": "^5.0.0", + "electron-updater": "^6.1.4", "react-fast-compare": "^3.2.2" }, "devDependencies": { @@ -46,6 +48,9 @@ }, "category": "public.app-category.developer-tools", "icon": "icons/app-icon.png" + }, + "publish": { + "provider": "spaces" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7cab9b9d..9e5d24141 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -653,6 +653,12 @@ importers: '@firecamp/scripts': specifier: workspace:* version: link:../firecamp-scripts + electron-log: + specifier: ^5.0.0 + version: 5.0.0 + electron-updater: + specifier: ^6.1.4 + version: 6.1.4 react-fast-compare: specifier: ^3.2.2 version: 3.2.2 @@ -12466,7 +12472,6 @@ packages: sax: 1.2.4 transitivePeerDependencies: - supports-color - dev: true /builder-util@24.5.0: resolution: {integrity: sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==} @@ -15013,6 +15018,11 @@ packages: - supports-color dev: true + /electron-log@5.0.0: + resolution: {integrity: sha512-vB3akupmQvA8jAyNL9rULZtf6WoP8vsabjXsRtiqXS6/D37SwN/4LEyj4JD+9Bv6xoTcx/LrVnsIKEEWdq5ClQ==} + engines: {electron: '>= 13', node: '>= 14'} + dev: false + /electron-publish@24.5.0: resolution: {integrity: sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==} dependencies: @@ -15034,6 +15044,21 @@ packages: resolution: {integrity: sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg==} dev: true + /electron-updater@6.1.4: + resolution: {integrity: sha512-yYAJc6RQjjV4WtInZVn+ZcLyXRhbVXoomKEfUUwDqIk5s2wxzLhWaor7lrNgxODyODhipjg4SVPMhJHi5EnsCA==} + dependencies: + builder-util-runtime: 9.2.1 + fs-extra: 10.1.0 + js-yaml: 4.1.0 + lazy-val: 1.0.5 + lodash.escaperegexp: 4.1.2 + lodash.isequal: 4.5.0 + semver: 7.5.4 + tiny-typed-emitter: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + /electron@27.0.2: resolution: {integrity: sha512-4fbcHQ40ZDlqhr5Pamm+M5BF7ry2lGqjFTWTJ/mrBwuiPWu6xhV/RWgUhKBaLqKNfAaNl3eMxV3Jc82gv6JauQ==} engines: {node: '>= 12.20.55'} @@ -17437,7 +17462,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 - dev: true /fs-extra@11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} @@ -21871,7 +21895,6 @@ packages: /lazy-val@1.0.5: resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} - dev: true /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} @@ -22096,6 +22119,10 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true + /lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} + dev: false + /lodash.filter@4.6.0: resolution: {integrity: sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==} dev: true @@ -22121,7 +22148,6 @@ packages: /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: true /lodash.isfunction@3.0.9: resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} @@ -28650,6 +28676,10 @@ packages: setimmediate: 1.0.5 dev: true + /tiny-typed-emitter@2.1.0: + resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} + dev: false + /title-case@1.1.2: resolution: {integrity: sha512-xYbo5Um5MBgn24xJSK+x5hZ8ehuGXTVhgx32KJCThHRHwpyIb1lmABi1DH5VvN9E7rNEquPjz//rF/tZQd7mjQ==} dependencies: From 9282154e2e2169f68b849f64015d10a9ada26ed7 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 11 Nov 2023 16:06:20 +0530 Subject: [PATCH 29/71] feat: app updater initiated --- packages/firecamp-electron/src/updater.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/firecamp-electron/src/updater.ts diff --git a/packages/firecamp-electron/src/updater.ts b/packages/firecamp-electron/src/updater.ts new file mode 100644 index 000000000..e88063351 --- /dev/null +++ b/packages/firecamp-electron/src/updater.ts @@ -0,0 +1,16 @@ +import { autoUpdater } from 'electron-updater'; + +export default class AppUpdater { + constructor() { + const log = require('electron-log'); + log.transports.file.level = 'debug'; + autoUpdater.logger = log; + + autoUpdater.allowDowngrade = true; + this.checkUpdateAndNotify(); + } + + private checkUpdateAndNotify() { + autoUpdater.checkForUpdatesAndNotify(); + } +} From 0c1d529f82889c181e6d4039815d29f86a325335 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 25 Nov 2023 17:46:42 +0530 Subject: [PATCH 30/71] chore: app publish config set --- packages/firecamp-electron/package.json | 24 +++++--- pnpm-lock.yaml | 79 ++++++++++++++----------- 2 files changed, 62 insertions(+), 41 deletions(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 5c1e92466..3c999b45d 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -1,6 +1,6 @@ { "name": "@firecamp/desktop", - "version": "3.3.0-beta", + "version": "1.0.0-beta", "description": "", "main": "build/main.js", "private": true, @@ -23,8 +23,8 @@ }, "devDependencies": { "@types/node": "^20.8.9", - "electron": "^27.0.2", - "electron-builder": "^24.6.4" + "electron": "^27.1.2", + "electron-builder": "^24.9.1" }, "build": { "appId": "com.firecamp.desktop", @@ -42,15 +42,25 @@ "buildResources": "assets" }, "mac": { + "sign": false, "artifactName": "${name}-${version}.${arch}.${ext}", "target": { "target": "dmg" }, "category": "public.app-category.developer-tools", - "icon": "icons/app-icon.png" - }, - "publish": { - "provider": "spaces" + "entitlements": "assets/entitlements.mac.plist", + "entitlementsInherit": "assets/entitlements.mac.plist", + "icon": "icons/app-icon.png", + "hardenedRuntime": true, + "gatekeeperAssess": false, + "publish": { + "provider": "spaces", + "name": "firecamp", + "region": "ams3", + "channel": "latest", + "path": "/desktop-apps/mac-dmg", + "acl": "public-read" + } } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e5d24141..ffb35f543 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -667,11 +667,11 @@ importers: specifier: ^20.8.9 version: 20.8.9 electron: - specifier: ^27.0.2 - version: 27.0.2 + specifier: ^27.1.2 + version: 27.1.2 electron-builder: - specifier: ^24.6.4 - version: 24.6.4 + specifier: ^24.9.1 + version: 24.9.1 packages/firecamp-har: dependencies: @@ -2067,8 +2067,8 @@ importers: packages: - /7zip-bin@5.1.1: - resolution: {integrity: sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==} + /7zip-bin@5.2.0: + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} dev: true /@adobe/css-tools@4.0.2: @@ -9668,7 +9668,7 @@ packages: requiresBuild: true dependencies: '@types/node': 16.18.40 - xmlbuilder: 11.0.1 + xmlbuilder: 15.1.1 dev: true optional: true @@ -11221,11 +11221,11 @@ packages: resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} dev: true - /app-builder-lib@24.6.4: - resolution: {integrity: sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg==} + /app-builder-lib@24.9.1: + resolution: {integrity: sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g==} engines: {node: '>=14.0.0'} dependencies: - 7zip-bin: 5.1.1 + 7zip-bin: 5.2.0 '@develar/schema-utils': 2.6.5 '@electron/notarize': 2.1.0 '@electron/osx-sign': 1.0.5 @@ -11234,12 +11234,12 @@ packages: '@types/fs-extra': 9.0.13 async-exit-hook: 2.0.1 bluebird-lst: 1.0.9 - builder-util: 24.5.0 - builder-util-runtime: 9.2.1 + builder-util: 24.8.1 + builder-util-runtime: 9.2.3 chromium-pickle-js: 0.2.0 debug: 4.3.4(supports-color@8.1.1) ejs: 3.1.9 - electron-publish: 24.5.0 + electron-publish: 24.8.1 form-data: 4.0.0 fs-extra: 10.1.0 hosted-git-info: 4.1.0 @@ -12472,15 +12472,26 @@ packages: sax: 1.2.4 transitivePeerDependencies: - supports-color + dev: false + + /builder-util-runtime@9.2.3: + resolution: {integrity: sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==} + engines: {node: '>=12.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + sax: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: true - /builder-util@24.5.0: - resolution: {integrity: sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==} + /builder-util@24.8.1: + resolution: {integrity: sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw==} dependencies: - 7zip-bin: 5.1.1 + 7zip-bin: 5.2.0 '@types/debug': 4.1.12 app-builder-bin: 4.0.0 bluebird-lst: 1.0.9 - builder-util-runtime: 9.2.1 + builder-util-runtime: 9.2.3 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4(supports-color@8.1.1) @@ -14773,12 +14784,12 @@ packages: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true - /dmg-builder@24.6.4: - resolution: {integrity: sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw==} + /dmg-builder@24.9.1: + resolution: {integrity: sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ==} dependencies: - app-builder-lib: 24.6.4 - builder-util: 24.5.0 - builder-util-runtime: 9.2.1 + app-builder-lib: 24.9.1 + builder-util: 24.8.1 + builder-util-runtime: 9.2.3 fs-extra: 10.1.0 iconv-lite: 0.6.3 js-yaml: 4.1.0 @@ -14998,16 +15009,16 @@ packages: dependencies: jake: 10.8.7 - /electron-builder@24.6.4: - resolution: {integrity: sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA==} + /electron-builder@24.9.1: + resolution: {integrity: sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg==} engines: {node: '>=14.0.0'} hasBin: true dependencies: - app-builder-lib: 24.6.4 - builder-util: 24.5.0 - builder-util-runtime: 9.2.1 + app-builder-lib: 24.9.1 + builder-util: 24.8.1 + builder-util-runtime: 9.2.3 chalk: 4.1.2 - dmg-builder: 24.6.4 + dmg-builder: 24.9.1 fs-extra: 10.1.0 is-ci: 3.0.1 lazy-val: 1.0.5 @@ -15023,12 +15034,12 @@ packages: engines: {electron: '>= 13', node: '>= 14'} dev: false - /electron-publish@24.5.0: - resolution: {integrity: sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==} + /electron-publish@24.8.1: + resolution: {integrity: sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw==} dependencies: '@types/fs-extra': 9.0.13 - builder-util: 24.5.0 - builder-util-runtime: 9.2.1 + builder-util: 24.8.1 + builder-util-runtime: 9.2.3 chalk: 4.1.2 fs-extra: 10.1.0 lazy-val: 1.0.5 @@ -15059,8 +15070,8 @@ packages: - supports-color dev: false - /electron@27.0.2: - resolution: {integrity: sha512-4fbcHQ40ZDlqhr5Pamm+M5BF7ry2lGqjFTWTJ/mrBwuiPWu6xhV/RWgUhKBaLqKNfAaNl3eMxV3Jc82gv6JauQ==} + /electron@27.1.2: + resolution: {integrity: sha512-Dy6BUuGLiIJv+zfsXwr78TV2TNppi24rXF4PIIS+OjDblEKdkI9r1iM8JUd3/x3sbGUy5mdLMSPhvmu//IhkgA==} engines: {node: '>= 12.20.55'} hasBin: true requiresBuild: true From c792e536f6e4af67582fb9e070c38caf9693ff0d Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 25 Nov 2023 17:47:02 +0530 Subject: [PATCH 31/71] chore: entitelments file added --- .../firecamp-electron/assets/entitlements.mac.plist | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 packages/firecamp-electron/assets/entitlements.mac.plist diff --git a/packages/firecamp-electron/assets/entitlements.mac.plist b/packages/firecamp-electron/assets/entitlements.mac.plist new file mode 100644 index 000000000..82acc2678 --- /dev/null +++ b/packages/firecamp-electron/assets/entitlements.mac.plist @@ -0,0 +1,10 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-jit + + + \ No newline at end of file From ec3fc2265ac027651465381e046a68cd6ce02408 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sat, 25 Nov 2023 18:55:08 +0530 Subject: [PATCH 32/71] feat: notarization script added --- packages/firecamp-electron/package.json | 5 +++-- packages/firecamp-electron/scripts/notarize.js | 17 +++++++++++++++++ pnpm-lock.yaml | 14 ++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 packages/firecamp-electron/scripts/notarize.js diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 3c999b45d..f4d966d50 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -5,10 +5,11 @@ "main": "build/main.js", "private": true, "scripts": { + "afterSign": "scripts/notarize.js", "start": "tsc && electron .", "test": "echo \"Error: no test specified\" && exit 1", "pack": "tsc && electron-builder --dir -c.compression=store -c.mac.identity=null", - "build": "electron-builder", + "build": "electron-builder -c.mac.identity=null", "postinstall": "electron-builder install-app-deps" }, "keywords": [], @@ -18,6 +19,7 @@ "@firecamp/rest-executor": "workspace:*", "@firecamp/scripts": "workspace:*", "electron-log": "^5.0.0", + "electron-notarize": "^1.2.2", "electron-updater": "^6.1.4", "react-fast-compare": "^3.2.2" }, @@ -42,7 +44,6 @@ "buildResources": "assets" }, "mac": { - "sign": false, "artifactName": "${name}-${version}.${arch}.${ext}", "target": { "target": "dmg" diff --git a/packages/firecamp-electron/scripts/notarize.js b/packages/firecamp-electron/scripts/notarize.js new file mode 100644 index 000000000..ca3538f84 --- /dev/null +++ b/packages/firecamp-electron/scripts/notarize.js @@ -0,0 +1,17 @@ +const { notarize } = require('electron-notarize'); + +exports.default = async function notarizing(context) { + const { electronPlatformName, appOutDir } = context; + if (electronPlatformName !== 'darwin') { + return; + } + + const appName = context.packager.appInfo.productFilename; + + return notarize({ + appBundleId: process.env.appBundleId, + appPath: `${appOutDir}/${appName}.app`, + appleId: process.env.AID, + appleIdPassword: process.env.APASS, + }); +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ffb35f543..40ad598fa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -656,6 +656,9 @@ importers: electron-log: specifier: ^5.0.0 version: 5.0.0 + electron-notarize: + specifier: ^1.2.2 + version: 1.2.2 electron-updater: specifier: ^6.1.4 version: 6.1.4 @@ -15034,6 +15037,17 @@ packages: engines: {electron: '>= 13', node: '>= 14'} dev: false + /electron-notarize@1.2.2: + resolution: {integrity: sha512-ZStVWYcWI7g87/PgjPJSIIhwQXOaw4/XeXU+pWqMMktSLHaGMLHdyPPN7Cmao7+Cr7fYufA16npdtMndYciHNw==} + engines: {node: '>= 10.0.0'} + deprecated: Please use @electron/notarize moving forward. There is no API change, just a package name change + dependencies: + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 9.1.0 + transitivePeerDependencies: + - supports-color + dev: false + /electron-publish@24.8.1: resolution: {integrity: sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw==} dependencies: From 63f504866abc1580d83ced066ff7b857559b8e01 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sun, 26 Nov 2023 12:48:16 +0530 Subject: [PATCH 33/71] feat: desktop artifact build issue fixed with productName set and skipping external lib in ts check --- packages/firecamp-electron/package.json | 17 +++++++++++------ packages/firecamp-electron/tsconfig.json | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index f4d966d50..6cac06f8a 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -1,7 +1,8 @@ { - "name": "@firecamp/desktop", - "version": "1.0.0-beta", - "description": "", + "name": "@firecamp/electron", + "productName": "Firecamp", + "version": "3.0.0", + "description": "The Firecamp Desktop Application", "main": "build/main.js", "private": true, "scripts": { @@ -29,7 +30,7 @@ "electron-builder": "^24.9.1" }, "build": { - "appId": "com.firecamp.desktop", + "appId": "com.firecamp.electron", "generateUpdatesFilesForAllChannels": true, "productName": "Firecamp", "files": [ @@ -44,14 +45,15 @@ "buildResources": "assets" }, "mac": { - "artifactName": "${name}-${version}.${arch}.${ext}", + "artifactName": "firecamp-${version}.${arch}.${ext}", + "executableName": "Firecamp", "target": { "target": "dmg" }, "category": "public.app-category.developer-tools", "entitlements": "assets/entitlements.mac.plist", "entitlementsInherit": "assets/entitlements.mac.plist", - "icon": "icons/app-icon.png", + "icon": "assets/icons/app-icon.icns", "hardenedRuntime": true, "gatekeeperAssess": false, "publish": { @@ -62,6 +64,9 @@ "path": "/desktop-apps/mac-dmg", "acl": "public-read" } + }, + "dmg": { + "sign": false } } } diff --git a/packages/firecamp-electron/tsconfig.json b/packages/firecamp-electron/tsconfig.json index 3d5e8427f..a0f5de456 100644 --- a/packages/firecamp-electron/tsconfig.json +++ b/packages/firecamp-electron/tsconfig.json @@ -7,6 +7,7 @@ "outDir": "build", "rootDir": "src", "noEmitOnError": true, + "skipLibCheck": true, "typeRoots": [ "node_modules/@types" ] From 63bdba781f8160aedf3af6a8c7f681bcfaadd2e0 Mon Sep 17 00:00:00 2001 From: Nishchit Dhanani Date: Sun, 26 Nov 2023 14:05:19 +0530 Subject: [PATCH 34/71] feat: desktop app icons are created --- .../assets/icons/app-icon.icns | Bin 241511 -> 0 bytes .../assets/icons/app-icon.png | Bin 20521 -> 0 bytes .../firecamp-electron/assets/icons/mac/128.png | Bin 0 -> 1793 bytes .../firecamp-electron/assets/icons/mac/256.png | Bin 0 -> 3470 bytes .../firecamp-electron/assets/icons/mac/512.png | Bin 0 -> 7015 bytes .../firecamp-electron/assets/icons/mac/64.png | Bin 0 -> 975 bytes packages/firecamp-electron/package.json | 6 +++--- 7 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 packages/firecamp-electron/assets/icons/app-icon.icns delete mode 100644 packages/firecamp-electron/assets/icons/app-icon.png create mode 100644 packages/firecamp-electron/assets/icons/mac/128.png create mode 100644 packages/firecamp-electron/assets/icons/mac/256.png create mode 100644 packages/firecamp-electron/assets/icons/mac/512.png create mode 100644 packages/firecamp-electron/assets/icons/mac/64.png diff --git a/packages/firecamp-electron/assets/icons/app-icon.icns b/packages/firecamp-electron/assets/icons/app-icon.icns deleted file mode 100644 index 279fd62cfd4196f7185e667286f8ba7a99d9d102..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241511 zcmeFY`#;lt{69V_I!Q|*$KqNNk(`fHEv_h%Q*sO;M97&1dhKCUahzt{UO`2O;K{<7V6d%d2I^ZjvnKKIbc%MY-x)b*j0!X*F)4IOpc zNT27h&|v@oz;oko$Q=M+|L)iQfa6@dAM&x(762dua07D1EGT1XA~40-yjpe2|4Y3T zH<#f0@mEI^-u`vt&6#Hf5eYHpPncmi6wljTKPg#o=JjbwhZbX#qi3vE4|DAY8D^fn zxmcosb0VAnJp|&pSrm+;w|N^4=;Q||Yg5MCs<$R%cj^7R_(Q{wgmPZujcFfO^RtCSVwy*;$`b}WSNd?|nWW@vjzV2}7PSaWTW81kd&|=~GPIoG@y-|nKmRj>f?EUAb z5j2B+0E%h8se2a2GO-{ILyC9yx}5{Hv+KrRg(`m_6yS)PBed4p)UIH9@Na%(9W`WF zl{y2>rGz3PCcm3*9ktln$O?$sdEdwin`=;X#pDNfo2vq4^2Lyh$QdB#o7CxP`b~k(nx9+dtmL z`!CgqpN7n_gf8)W}rH zlW&c^>|!6S^IFb@d!xtC+k>}nK(7eqa748AwR^g=)T_`Ito;7~KzElP4 zW5rvjxmilNtf_y$CUZQ@YFs)@&PvZ2i^g1}6gnBGRQMHCui(Kh)#JZlpD2c2@7aJy z2-o+X2v@fE_I}sIetQ}99%%xRUpkgN*NE-Fh;n|x_Hq^yx4j<(u+9o^Zf9}-R;aPT zAX0*4w?;YPkErvU(@4d2`UIQlYR31hbc%izw$x&^O}sl|Q;L@4z`|~zJ1fgzcp;EC z(*^x7-bBEIpjGJU>Bc;VyQ}VZZ-^)0=)8guAjCA66moSA0ZJROGPAd+2-h20wo0*g ztxWKMeIzJSc1ElTn^!>kldSnZK}@CDs8zOihFL|2qKOc7cGDpE$2o+sB0X~|l=EL6 zTXF~=FgDvlP6kz!f{2}wVCDj*!60s&ye3YMFG{!F`H+BY$|GdK5>t6N`{ctm==99w ztYjXZdkM~Q{l*Nt6T(z@j6)hzN`Ya1zA2AX3B% zJYMJ={;)ZVs$9WW5E6V0bJ3V#_uKtiOnYp-J4LIqR_%EvdomZpD0} zpWinhPfc?3VahYEi0k+K&Co2ZbSLb@4;*f_BY}I?zE)H}d3-u$8o#JThdqu@=sE-v zR`k^sJG;7iY#)=dB=egv;K;p|gR860Z~}>L4-jSAdCqKNBu<4X1?uihWP!&&69UDA zbV^b;JBL-X8UpMB1J1x=4s>I@g#i2)?WKFE)P(2VT|Gg zr$vDz&)Hr;csEA11if@}M^lsY?#ORA1~e6#iZ3mld~<*q@;TwTxBLj~`|8+ACt^R8 zIh25-`JgMe1a-VnXK5MZ!HwZeErhml+OC*a@$W!|vfDL-GU{`-Ap5}kXaSeVE|oSO zB(e#H4rxp1GNi<6;U!nPGcJK$_Grmk+)MSl?3cf`6HN+S=X^hKzOir?ZoPIWb-G&H23>)6}IC>_-ALj zxcX`_NJzeuG=BDsi%VQ)B<{ES0_JZaUPWMyIC2g8v!q9wKRQ!LKfLKw9Z)y8me4>^ zS8c9x#=jN`3e|BXH;SdxdKwug+yE)K3dM8lMa)*=b&c*}?<_Ol%B2kTm1-5JRZC; zCN4ih?G9VwrMyygjl*PU%Og<$gBH-+w*aKi@A8v&?}yp%-6I{~*)!(BdL@)^E|1!{+Ir^ir9T9nZ<0 z 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≥w4FI^WYF4gYB%rFF;d`Z`+~-&7m<{ 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�i`Nxm(GK8d%UOztVIP*0PAc{SU%mYA5tlL-yJLhy0pNaAU19wkr;icPG^K2Y zB^I{m-HzH?QUiAHduqnRp=R0lnO|B)r=D`mBrpVoL1s+6!(EUfEw!878fZViSr}p) zA?!og6PPslv59HZfKyPAh?` z{OGX~UXyea}N%+x`{~m3g(l!wt#xF?~9b?_)z5lUi4DtbX}TZiPg+ zs>6;Jf#~TeA?%xdRH)Au1dOKT(QkGPH8qp7xM|GiCGuo!e56kH?ZZU`+&uBhxZj${ zxJ+!ez%JXz3!xr_7MWMD-U}>xC%1pE-C6T%qS=ejlH?jBDACXHQ!JW27TIRw+sa^b z6!5+kSNCJbx~17ieuz%y2=beIb0_N1+8@~z?0zV)>&_?e!hAU$3+(Yp(9KijJvX31T@4wY%N!q<4Y%P)qCl>2Ej_t2lq_$nDyE=6bgOD}-8C z7maPxVFXaorwmuR<7;~ zn*nVDym3F+^xTJvn2{NVk`r;JuSZ2^cydrZC+tj|!O$Y4jZZa>t2%&S&Q zt?sG62(~z9qr(Hxo2|n(9QVwoN2|#(ED4Nvqz2Xy8q6u@MOKI6CvN4{e|`u31BBCQ zNwZc^JKoo`0RIH!5On4xPv;GVws3p;K#_}M-e)3_=Z~4^*YuHRgc%6SjsUbJf3E#SO|k*_cMr zeLJK6^vFE@4AB_|u59|*ZLx?!o$bE33tB+8#&~4BAWMoGI5_EWt?qND^7CeNHX(*=OH8sP11roMa3g)HWvvDYzJ`UFQiwL(uZkyqCgbi4M1?uyPW!s8 z+w9fYkw*Yfq>6^#$tOPQf3ll*ncO?dQ=al;HsH1_8)lpKyNJKRZiy@F&w63X;N@pK zrl6nL85+@sGqr3V!MAuzTygl%o8eO}_j&CkBS&CUS%v?j?$bqt%t)vD`X-ROgn7ve z9KB1YL^a=6h;sIrY)Z|zF|5q9Px={mGA?`k5KLkQ*RRdSg@|QrCvp_~Aym97y$P_Yj$9-$szFFS5NDx8Un#GSe;*V-bL+^r$~9Dft2qQ^S1W*ySc@tr zGT1WD#!@T=ZMi#NJ&d+KjQ8fE^)cfu*|d669l|T($;ANrsv_&My2eOtj{Z4^dhy_| z(p-M&u-q8tm&nyU#bR5$o({P0hI!)?Nomxj*7BokY>p5PyGCJ%CVucrW`Nl6!uj~R z9SC&-h~DN{!tr|rMws7v*dM6U4P=+tk+sH=JNi!b+Ny3<09pMEenk|JZ+s_rtRQ7S zB}o>dA*Fm;^H!c9r3#YmHFAC(yi^KkHJ3exZTtN}qFa3uwJMrPa!7xS7Xn!9PZNq- zjq=)lhuI|5FUfhv+aV4p5nx(P<9D8e^lm)hV>a8S^)cYF0P3`%nz6}z(J$$*?7lpy zy=d+4N*LTCOOaCZj7F5#>?hkQ5E;mrPe{#UM79gdP!=$%+Ex|qcL1yU+E`wSIk57S z9P{1=_CAHPe%))cN5Ta&Jw#E#Y z^E-;K=TTn&095yV#2c|WdoV2J_317Gd;AB4#P+23ECkQeZVK}#FxiRDytJcSWCz2G%}u$GeIe>8EoxNkf`#u8@4A< zdtUjOMtF|-;#IT#zaOYrs;efpAv%86yHg_2aH5DlmS#IyGf4R%8b3aX?G5%!n!4OpPoPo4m{Bo zm^jOz^I})3c9^EDM|ce_q!3ti}7xwf$!ncemeKv{zpN@Hi*x3ccQC3LrL$ z9EElV$+utc@jHSGN}MEH#HJHZhqkHz3iUE*es4EdpI42HCPuYtHp5udZozwrKj{vsGrnM$`kf7){el z-v(IhitJGP&X~H%S-Zvvbm+hLpj_=X7R#ML-{5a*q?^1kcXVh%-M}_Myy@E_-RY$n zq7f*sUX{b{e+=0E_!k04Ahl67|3*sc$>@=obkdj2 zzl*24?sHWCwB>ZvFDR-Umu5Sg%0CD=^dL}W2yGKRy?M8M@pYIt_11sqf5c=V2l!|O z!$y9XeuBTQF+;nf%VTLuqAi8kRH=lzuL+x?%JI^F6%2NBA4ttp-vf#KFj6@}Q3_xW zo)_kM@u8avY29;6(rM$L1PvAX^KL2Qrw$H_{GRw~8Us>Sg&Xy>@{7;%Gz{GKBmFV$ zXQq$F$d1xT6XH%UCBUS8o{iD2TDwN0O;zaBmJap#AJYOyLPO%t4#Nab&$+O&Z|}o$ zA%b;veOm0RFu8jym_>7j-EgP-y=7uQ5yd@? zmU#={WID@gcfh#?dR&yvq)oXR_m=rqFH5U2cNy)IHAZGJF%tV9Va{^{$`-ukwEi}e zwYqzYWLz0aZY-q~H|WETl>ceRGS#xxcEEoAWddGm7sf_)$GzFD%l6WKLc#|#(rZw@ zATuA-%zMw5{^~X}gxnLC-1|RjRGb zk1yuHi90>s7q?qg1~MI9b6`Z)L2znFah#Wn*GJG={VkZ)E@C6!_~={+y{~faE@oUf zw8n6fkh{@bwt3tzUev_aI5lG@|0euvwRC3E9>4MROZHJ3XMgzXm;Mweo11Rg<)chH zxk-`Ai@(Chc>lE}|FZV|lRV4^0Xt5(KZt;A8UzbwA;x625FOeGdRd_@{anf#PJB|^V;|5iFp>qwNw$&pU>GU z5Ld6Fo3sX{rLvepqH7?zXqE4^*2vloG=tDpfffsQt}$WbqqwSIUGw*<$Q-svf!9#h z8SRnbns=uR;UN(eid@gYv`cPw^e)J!zo>lJ8y~V=6n~r&JJ*(dh#?L1!H zvNLU>tz=9oU%*%&UBAEYlBRZULiV~Su|;QB+}dsbMwjtf_IK7CD)OEw zE&1Pon&*4#JhFE;$-jRLDmVRWUWlHxT&S*Fg6I>f=5*8YC&8jIXA{b(y#d~w@MYba zD?IqFJo>@kC7JN!g0^k-6g}kf@|;P4*Ot?_7HLw}$D31QQgFQm`kjW|${PaTuBfe3 z6_7j4Gc8xXaj=<5i-@CB>{&(H@2W6o01DEgx}&Ff+MYp_cb*jUGqs@yP@HqtFbI!G zSjl}@BmF>6Cg}c)*yhnUce5GPRB8pST{#6G9Xcloe!6-nKUd3qN+cL ziMN@Q+WK7`jm`a4J87xsW*nE`q~|9~L2ascSgB2?W4^Ej4>KxK-nI=BBZ9c7Z!MEP z@clL=d&7EO3^1)=W&w;1dt;Bz#PC%g(a*Mx(}U)08i(Kgr8ih2u23DnnfANBrBHb^ zkbWvE(E%HDWt~>rLtH-LWQ4y`vo~tHrUbu2IdJ{47gZ{Fu-<_bP)k&EvdBE_u?}>l zXzwH)?HB7exxd2WDKyF$x59ATDl}Vkzvj8idY*3S>hiA{90-Rp5(;qlf+(754ahaU zJZ!ScZYU+swLq*TURy07Xnd_X3Ib zNuqAPJtC?`h|W%Uo3LBDl-n1#extXsy<52cMr2}W?a`a@`2%2220S#oD(}Ku9_xIB z!U(D8{ISZ+1RoW$aCLgwh`!CxKLJIz#f(g8%=OkgcJICW!0FiyEl?e4l?`F;sbNub zn5^%Jp_{&aWXNeiK~ez0#vTH}lDeVRmVEQSFxXV~x3Z&3X9EJ#TSmYV{J zcWHK_AqtBI+X)dkT!_<5WtM^Cdj7!z2ntOF)gnt9r;$bezxBM|mq)jEmP=t~Zl znZgLyvrCcU#JlD#Mq&vzf84ZphzoibK6R2F%ovHB^f|ox!d6~i({Os`4F*AIi4zV_ zam?N|hSNS+`zFOTiU?=HFS|)OQQj43I)h$sy;)jFu0bX#JO`nKa%Uw@5E4N-rQdB$ z6K@Lx-JhrTz#tJ2P@u~=~2Ca7AMQzs1V^QVU_ z9-YXv8N5BPMK`o}%)futBRp!)ZUG%#psR(`w_Swrr_CGU(bw*_W-XL5nKLTBI^m1? zpVkcDjls?%A~mLpoEkK@)&10P~lisSxSwa z7I}qM^)_E_P-UFu$Jk$_ha+o?>R^Jb&l3hT<7jsi^EJ^3&MDtJ9-rEW7k==aX1n8M zVlg$Owh~&+ts|St)3YbN=*j{h`j%Hp0LSeRv>1c-A9wu7E&=5aEhV(z-v_=4erd@* zP;F$B^G+sXf}fV7Pz2#Uj1)x}*v99wbrwuVyPNN*q}mOv+05B+_gmg9>LlS~)Fo@* zYpDA?Qwu;1Mz7AbE@kS1pCGQTwS|i;MDe^S*f-<#1y2rV7{8b*(i#||hE=B7esz~$ z`gluA=T@J{-&MlDO4z?y8&A4tlp`s6{hP3X)U{&k?R~~i^I=d)D^!Vk-hIQb%UO(( zx62K*9CzZcIi_OUpq;9Z>#I*&&XP1_j%O{jx`!OOGFnx}f}Lew!ViY!i0Uh{a@S>W zXJ(VVW)mS*Q7A)D!n>mzoh>!VTdF%VX?CeZY2>BXy7iy_L?kEb4^xi$EV|Fx5IcIe zST5Zqa#+dN7542`fR^YliX-1mg#b68<<%*L+9w!V6jWv5$0!SoKiK6Snsd=z4j zF#qr$;e@{0&~detpHRLl~x+`2#Dg=L+kp~hpiR;@W7M${iCq=5=AUKxF z>`{y!a;rsDY$b}Q_g|{^8)?{GU~Sv={<14QYpu3!L`}@*;MY9~i>l+dziK|&YJbY4 zprH$e<)ygz(=~o`Un*RM=AT!~Znw)>h&e2!pgUrND781NWSFkRM=W5s_nl*yufMEu z-E`3YKFNAf9j($9Ypec%oir4qd*kC@MmIb^32283LVi$h?c%fw!oKvMX40D0s4cFt zf^M$7TF*#q)EbGh$!z9pQeLI;(NhhJ#WOxwwC_v`5(R5|819$N+dWgs*9EIP7Io;Gdx38(dnPTjWRtR4U)!mVNK6V|$nt z(%G-5_1q`_##&-r*>2aY4r5Qm+_1i)(4ysfN`>&EbK%*ZA8U+2e?G)pDq`IZAq^z~ zGaE7fnScs_57YpCUGV$qezXwfOR_@D9u;3;YH}%1G7?p4-07Q= z^mJ%E<*CNdn8X_l>l5k21qtuAsT@o%cr`dszD%M!Hmv+FZ&>xJqDIAGF z+9HtV8YYrFxa~0)&+Wdq)nanBI}dg)1aJ%}&+{lI!Y`5RBk>7$mGIgabDHR`?8x_^ zF^_C7ffHA^6d(R(>Z+wjXaKxWX)L%T4Is7>_HQbl@6OuW`QF)c&6+#%nM-aw<1WGs`QV4&4EE37bP}h4dI-_7tHD?nH zccW8T*i}VlospD=KKyDm*>Ym`@k9=p|6;~-wGMMl9#T61Y7mmJ4lppA2>85syUcoS zV!Ap$VvA|7l4&gr_Co1LFq@lbboh^!z$4U0K7J1{tz6fZJ34Godk-$ z8pnZv7sc$~5{-V(7F@~ z|7&)y`@A?xFSlu&$>F2+lPwC?Jf8mUReNX6RE2r3fm@xQz&fCRA(C#E(;HERH6vb~ ztQeVf_8xS9n_@f#oTBlsFRDrLqNs8+Y1COU4NW`g4BFw(NV)E}87TJ1{|_W3{2X|{ zBdQ%58{lHtD6lDFRn0h758wM-C7nC}X^KZn8z?Ynxyq~LU3@TaZ+(p;SJvb+KmU~0t3-#)y#OIi4WgpF3eXM_A|7@22(g43t5g%ae6@0Hi zAG)NT1__0wPk!5^_bp!vgk*FYB2Sa${6630pNh)t(VwsVH4$j=VRY<{{?%b>?usb4 z-1z1+e3;_cCp~9!is0nTA8i+J=zjj_46j|zn!b&C(YNp#d2+magRe;^Zo#8$a`(cV zRufHT0WrmV6|jG4O-n28skT0d|9a#bHmf-JMM-CcQa@^a&ofm*f9r zs>DZ7gY3A_CrXgd2dx^j{ny-chrWF^`H>UZZfVzBBbOTNBS%$@YiyE-0MkYu1Xyeh ziP9R#en!_VVjdiISGDw3*52^A9R0oY8rJw0@#0@TWY$O8O$(*=1y5*pt2xt&gI**U5cb3#{3?`@`?u#n>}$r(MHQYET; zjwPpZ_^(EDwva)*}UVCV#X%J#%#akMP~~?YPI5 zPIcSX#nj8j1xC94d8V!%f5}J`=ls@Tjl%G1CMG|mvZBM}6*w^Td|d=vYsQwrRcPy4X@OCWpaw$Rg(@Q1m@6a z8eG+l8)kp$d;p_-Ro_eGx*Nyy5?63zy!NP}FrN(7aesKkFqC95icm3Fe1$$!s?tq~xwPpgwS|G4~qi|6ak6@6dtv5(eU` z7Y#=YE`r5yS)8ke3K8$PWYkROEi$S{@UV|ICuh8DR#S@x7uYj+%^fttSQ=NVWUfEU zSn^mBT1{FEAy1{?&s08UbY6ZB%G%4q`!B3MG5N-yrSy5{!j7E0XG8)8Hg)ex-{lR1n$WJ+AKw%EnO!gk|*8REnanZf0rt3*smY%srdh zJh3uxC@U`?uwrOD#n&OM|_GbKGm30@0rXG85P^p z`3)nFg!2>hu0G%eA!+US2HDH-(|C7oPZhSEcEuhZ5iaR2Lh=uVaGfLOrp z!;fp^PJ%nThrQ*`-57)~4Zg-QX(aW`-bkl-;6bywB}xz#hd?E;OiysL$MHT6H*sH^ zdR}Lvl#M#k9nk~Q+l^fBG;aO}^6&O8=9~nK);QKhd$lUewkNnZZcWNy=jDiZFU0nk`?H&BnZL6E9CXFSic?K?ZqmHh*xB*~E^ z5}?%{BZTRI?yIUt@wK< z127GwA%s75*rj5=Nc;WeQ~Pt&(KI?!uWhX49Y>gS&s`##=LJzD$+>HJHivl2YY+jgYBfJ&UyBs zBD`6rnUtH$Nv04qs~wED`MA#O?PKYKq@)R(c$?H_&ck=>s(f3MX{@q#FOUH z#2PrtNbXBDpBNj-F)2ts(fm*s;Gbkr>-dH3h3?b5|CE5dE!;_JQw7N?HJ`gaVdbpx z!mM`edW{)vENt_nyyL5u=fqcX_iA=!`z=539zNh!PZ&h-`=#+ne$)Ra_n2Yr{>6 zpJF=>Y2bUi&QV4IAFDuCw}^kBx9{p?^IYSE%J<6=xq+T{fNaWfPD)-Wte!3yAnBWV zYf#1od&ipzDXQn3xv3l1gwi!=T z`U0~?=B}-Ebt7_f7LRJ}e=5Hr=gxo#ek)&NBPE^>;Yr;O;|P3dSmPg=a#bq6eUbDg zHDvJGP*gak97cD0$GaIWdD&73#5f)5qABn4K%&LiNoM-D=sNxZ6mE%n2iPaxzIVIs zq#sKtLP~i;wI}Kw&$tkp^U;iB)1zJgGJ}}XI0e9ktFPPUu^7i=aHyK+lJ<0@=kd5C zSjC01%6-J!ByscHd#+y$XaFc_a%f;oF^r)@VowXwn51Q+F7Fq>xH^*~GINcupjiX< zBfaMXxt`465f!~UgK({7sBeOasFe1{cckz`upn~MVLI_c`+QRE=_lKvLoPP=S*ikV z8Q!L2FPn>m@0{U-xDcddww9CaTV1~2wo3QuSp`dJ??GZg&{ESq`Y1ZX89mRjSZzbJ zqp;u<{`*5hafHqH?&GKUaD1xud|Vu<9U+CThMa?6q1cMPt#4PWt%sK~ZV)Q%Z~580 z0P5B`f2nsR+i{I?7pL0WLN5m5UX&BdPp>{x<%(1Lj$I?l;43{nyUMW z0EHTE;k-;AeTs0NZOa;#RNAI*o&h0y#Z!Cyz~=3Ep9$`pT{@%u64ep&c7&JP%*L@G z_RrfCVE;&uLDKWalxB)YbdquV!qHvB#RQLi$DM$Vb$#w?K-6d=H+!c2==Kf%Bc4la zza5%OOds8e7SC4f)9}svZT>ZqGm;BitcBMEJbAV%^7aiHF;wNFiaE*hoK0w=m4lV4 z*RTXAgO9p*w>@dzQ7^eN|V0mjX-q_yA>!zcUeOL2-@T0&~ z8*|JdTG5y_j&s8C&Z zOZEBn`kg>g>k9@f2?*j(H9w5KVuLNe8;f*UwubfJ?o%DdkZ0@f@DP8hxOLNR-expI zt&RIZmawPE!G07Qfm8FRX=Co=L(6O|12LO>tD zDpLe+pZz;+_K^6az0UX#-Sugb#y3R575!hHvZWRdN;rt5JkdSkBJZ{{#_#Z@)~`w( zYqe!gskbrnDy@^V(fQhKD&@lwQsmsPUm*7uy|DeUV&pj)hKrUX`0~*9Mc!Gr49_!p zhPr4Jh|<)tiMX`YS4N!A9HIe5+!zV&vA3}hcXXsTP0jpwL#%G z&W4)>I>$xzX(~;AC!{~u?Tsikp9IxN^$g-4D`2+-0)yp6UdNnRi@@eQ|^4MVwRBjhwN*S`HsX}|=1=Yd2*9Gq9N9REKQ_JtNoSxGhuyUHCxByIF zB6hZ%j@%0qBb@JV)#!yU&r$m$416lhJDiU?S_qRu-)pRkk}eo(dfM+ieUM52X2&cY zKAY}UawLnG_4nF+aTNebF6oH0QCCn15R`=zHo~6@EyS?Iz@Mhjm|VzTyC6b;n~oYZ z?b!OOkb?!KTg6DBV)gLw^lFyVtqYwVWhpaJZ^>;+bstGTA#NXQ)mz%$D{{O5Q#)Jt z8k}l+g3l5NgzbS+w(|b8ro-IVU zL3MPgX(&be`-LLyp?C9fcn`e)tN0UAdpF6kk3>2<$oph?O_i#x`Zkuw67c1q=<)D% zq0;PN=t!AXD@t`h8Wa1>a$VQeo#P3nK1Yh6M(3lHYBUwS`t~3YUGcHQ_K+dIDhGOn ze5Va|to^d?jjPVDYDGE=kUefZz%1u`2PF(&PX;aa?-)f(Y$u zVD9k4<~d1nh}0y1IplfBW+tSq=s9jds4RMFF!L_(AegznLASMA&VZ?pD8K%rK3 z=Rzc}F`{Z_Ke@22j%w(1C9kJ7I~n%8EzagKw_p+M+zzI0tE_2mmTD2Q41Rt5-kr*X{xGEG0&&-{e@r~Wc-{f+z{;r* zr^Y$UrXbSKo7F(=afHc2tpRGGz`*U38eLbOig zi<^oGT-MJ#U!^dVgDP_7bD+ z{7fnD^IdagNeAq%g1^dc%v-N)yWpac*&+C`dX4s}XzSqh47yww6r+!kI)I!%a%<3j z&;fO2qw}F}dPkX4!RDMSbyEu%PfF|eMW17!aQFppd z3a+zR*l$Ky0niu+dTY(CVw`%$;QB#D7&$Zl<-apYkJ5iwRFY2)YJ=y`-pN=B zgZ}!!GwazgMQ5nS{RmOwt$#mKXr1r>Gw#N78D9@zCpj$ z-UQy?Y^~ECDp9K9eqLHqqrZ|UTGy#=%M;EAqD?D6*zr(aLVgri(-VcS$*gK#mUD72 z4L7xEQK+7e+NymYj9`}K-3vzWiD=VgJQ_uuO=uv111E2e$hSEVBvL7SKa41zACaPd z@o~6qyTFFEz_O``6pgb*UTUHKd}00V^rvTCNt^TCDQKx|LxloIO0&#|jvacB(TkQ3dyIC3vk%)6JWvXwApL0@iPueQ&9 z6U8F4s?;Lbee4*lb_ltyRJSn&QH)R;6j(E%QyJ=ZD>FFPHt74-`+}ZmNXi4NuFYUN zt=9+J9`jsj*n0pa$>vf2A$(ae{&>^}6Um^&c2u`1`M^1F=E~hk?TOS`gUArkbsrK9 zHZ#DsI3(Di)vTg-ZuJ;8`6wmJ+5+^?tl@aKO$;?@ttdDQA;eV7>U^D5(i3g!3y!tV$VhKRwMDi)UODrQvr()1& zj8pj&Gc^wuzWr+Z;xpfn(=Drd;4yD*e&ae{>OHCrK=V}cD$MvuYq^ z!BnY-?NLofOxK%xcD_;tX>Rh#Oem$Zw(aHGdeR2a1#u0COAr}4{65Sje75c`+I8^N z-nv^O7O+1+xFD1rNQ!x-U(j|g#zW<_ImKouLt1!tO339TX+*vH95n&y=kL^X1Lar4 zm+CMk-XYP6RBV<8eZ=$l?aM*ul3Q_QMcWMQ1X11EIjw3bt~&*a5#t*6EWJhaI>YHx z_)lwOs6ZdA`ah=ddD3;EtiOi5)k{7+em3KGh)c?oA#6vZ_D&a|`dFqi_bo4+h9^#6 zat>x}XReQATx?Qz;l<>V`^{?L`LNidB&dp(T-_o_R!Pbw>tjy6I0Pbi`^a z=}L{@7UW0dq!0t$^VwPNzJNM>7h86Qh-O#)B}4I&(AU<5s!s%CeuS$;sI;=y-o*{L zpIu3Sn@+feh%6vb#k7qB#D260Yz|BfzPVx08&81WtRClLz4wI{F8FJ(I3J|_|FCqG zaZz?pn_fCZx)c=zq`N^trBOhXT)JT;C6^9C5drCXXz6ZtSGon1jzthemZf`P-y8n# zCqD6;opa`zxMt?u?w;1&gV-oZ1(u82AeW)0f-tOJ&{;~z^0Ee9+cnqQp_T(Sno z`^;z#x%+j01Id4=wI{NLHaJU1EZ07xMT=%LXf@=x6mA zk4RXFa5oZAeBZ697xbd&yv*;jzu$o>);4B|@ku?0%3f&D<1V6W8iiQwRm@jHRZ#+; zuk3g}mx)*W(1c}cNpbHo z_a5WwP?Y=!dVqQ%g82FStq#$68oC2F>Ghb5=efaO!~Li*UwZgol^o2$aI@vh<&5gO zg{OAPy%F}zE#88kZG**YOIar^F0h4LSBnzhV<(HA6Ut+rga^tB^ z|1?W35S>`Xe59hEJ-sKjxUrCQU!Lcj6e>7?vZxIjGTR%L%!EB=BwMR~zw^nRBLr<- zwR8vsbJYp^O#yaFEgRw`_@V}Vb5ABN*W7L>>%p3)>wl-OJ&Ge@9?EHd2L|2Fx$j0j zSXstjeeu4=7h?E>*dMjjIPJD%xpxqnLe-5TEQ&6- zfE!PT`?f<%X7H?(r$eQ)^A4E;?7f}vx=BG@-g`Na-OhwjXeHTMwZCB}RJr2uV^XVy zyAng&8E)s^6F$%?qmU)|J$9mn1@!ladoYnWEw+Jx;u=RiHZHlt;6p#SwNapq@5|?m zkl$!N=HqDE4V1UiRPc{hpS9lf!@Pf(qw=Jgr^}e{4R5pucFlf1U?fnZ2wz3KL4vA8 zo`(o;D1XBDlP#kwBOiNa-KHr3*H*%4gX zn1FO<_ennrcjY}P*PZt-GSI(H{gwX}uFGE8-@h7M55MBe13OLhB1Fy3-ZIh5d7s80r05dqeKCZm@onDJlDnxf}GguJJuxX zbl;^q?HSuU==zX~z#8Ipk|eMe`)cD+dm@@U9bSaILUr1X5kv{ivyx5y>kOP@E66u- ztFAtgx)Y`%VQZ61y3DdHvfFU>Vwrb(r^jquGrn+MWhdptT1Zsis8B03*F<0eYADda zhsu`s;;e9o?H8bymGuAVQ=!gJEH70YyKv{qRAXJlY=f8?AotEvGn_{~Vmj^RFPEUX z)7EH#%V`YF#p!NKp|Z>odePrIJO785)kiWu!$>FJ*MGm%kyyDCgkIhG&_y;zQ5E_h z34&La!pef6>?9zD?Jjx47WlNuXrUR=Ak?VUH(f;Tld|OCxfU6ArNy_07HZD4fKzp} z785zUp-8C;LBPRtTr zMMLiQpVNnmZ>GqLMRLV^&-W*m%Qpo6{w$bC9@+n~HTTR=RPt%GFh%&c^871nim`7^ z3_lr-VhuQW<#SIACsp*emVXu&5+SP(s}G!eEvhrFB)ZlgJyLM@VJ&$-NKIbDbn<={ z^YWTOZL7vl>-x)oZ)@!Ir^WruEYbUXuz4?zk&b|^;$wbfCaOq#8cJdzVZ7+Iq&M)^ zVDFs^UQJB%+V0`j-p)nksPPmzKva~;6NS0?SOf%M4hJ@3T@@G}U2`6AI}!nG`T(U( zl`wZ2z0&jf2|SVK23JA__#-Z&e~v+d(f(LRsaEs@IQzLIeIUgK_u*%zmK{Q$$wcgz z|I%>?_a&gcBvbiWludCn3nqAezsQ{E?4E93p2EPh?Lwy?37fG;#P2x*d^4fSd#Za$ zJ1^(mpZfSutVG%v3CX1Ah=Hmb&lz&@Qht}CNpzYXlwQCDjsEl=u_Wb&8ISTRCcmZ; zF)^q}_NOoO+7C!41oJH<%HbOnJq=tKjUFAu_Ai@-ynVY9#DT5y9w%R7n_SA~y%!S^ z@*-RezclaOP8DE+9~b0yH$~5 ziI9$WCb;Pzag57Sc8g>PSab0cc;lK7c8Z}My(g7neB6geM`AgKCsiN1iP#)gkZtE( z*A&coSt#>_UBr2|r9Xf7+q(p_Kne)R{vFevXr=?Zj~X;pH-+RLR@vnNYq>WpeP#}4 z>_YM}p}~Jr=b?m0`82aT#q7EvJZ|h_1qlAVqAT*fnF|e50(JXh-Enq2^}^`OovSZY znEjUx>VFKeD^S?)YV1n=sv;E;Q!p`hF1s(8P_)~{j%W6{ws}1sh8pTD)p&0Zo1_od z-lv+B=&)Es>4&_O@?jfd&{18-vAtRPV8!!ka&?^!Zy&$&t$5MDeU)lXy#*Tg@dBqDUgW@lX}t^Uq@qg*<~aKAc_QXg6?EM)_aR zhFURtC2#7(w_?>Xh%Jw7UU>#jZ`QnrU8^$;nRgTB)$+gKt3oO8_pI(mRh7|C$0;`ql1D-WJGuM^8 z0ITq`m}Bwm^qLa%H&du76G~WLdw(sG1 zF(>)XWm9{vJqUM&{6Ox@o;HTL#bc>sn;X3{AOTTZe0(pq`O03&V*bZtqwx@H?*f*9 z;9e@57isNU+DUcT;{o<;d1?Vazj^C|*DAFnYOm?O;iI3zzE|UmE*%NmV%=;111tse zj`YT0Ff2s3#2~fW|Uo7yQ`^)b=v-pz>P?~%jgZ?nQFqsqOzsQ`S5I;%X#_L z!S^DL{d;|iTqhXLbrdvP>(lw-laK+BW2MNnN^kl0QMC-4ots=gWe!!!REdw)S<&`fub}04NQ*=2{+bH)PU7e81QgC?W6-h>?uyuXL&H7CHv0 zf6f|PiuTsO#Ss&xD5LyYz?D)^jorU11zhGi+5bzk;do)&+&p{DMPjNix!@Y^W6?Z2 z1I8iGg-%y?Muldkc^P@&69cafhjX7=Y{INHt1`~kQYfG&uuqm;N;MA$SWGF=VTF`~ zx+*Z&tCOq@2AP%jzXL{taeNal$C^Ry-zn>OCT1+wegcbI*Pqw?NPw}egM~j2+@&M~ zh3nM`1Wt_Jai-Cib^ zYr01un_T4n8=Ll7eq`{TEk>0wu^KyUcBs;xDg&F^xDVmxO3*bU^hpou^`XinaI@ch z_XD+i`k|A34rL`cTaNND0WA&=zAgKeZ+Mv`+dPX~;6xs{+E4bC>YiaXU?HPtZ-ygwU1JGfP>xbktha5{jhwN=EH?+T35Yh{~fizDZ%EUkfm33;%7J$ z!jh`+@Bv{(ZTrZFnuVaDcfuRH;~zQ|qzk`LN+8_CCBvN46?h+z@urj?zH8KmSjNRp zfxK}nhI|ia!lefd!~*`)rpxx{yTK*>#Ww&i=e{14Vwv?j{2P{#?xk!2cBiX1^1CFR z-~;qNc?IS5(YmZYjL<~p?EVY#%&W>(lV2FDTkQPUP_s@cA=xkH`*z6aL^17y9EVy*jiVf-Hf}7*noK>Hj^I)MFy;0Q`Q5OBa)N-r_ z^?4PH9vA`dmpvrxp#W=k`6W%4+r=Yu@VDv z8b~^i+JtYO)m=Y)F`M;6vWxbKtIX*?68uwlp;2OeXKZd)`Ywok<6(xfRI{%>gO}S6kb6!NX<8t*UTx`Yb<}1J6eoe7Llxm-#$&4!@>gHC% zUva*x@kJslT8mzG4&NuXbL=&~k%;scV|?S?e|!4F&X%gJ!Gb=cWWFvIDW|RZ)K6*_ zP!D5l+FeqU_#Slk&r5#*5&>B9O)lTx{I_ofB_WtzhCFG>aAP)j-{E36m@VYIlq}rc zEetKowKFB!cxp1y#pL?>w7}__s&$sJHv(TDPbJsq}&2 ztP24K@be zJ=0_YjHZdu^7ssqf$bl$Efzg94$iY6nbOUk_0}UYSY8I(e_VjKHt=r^Bj|+{GffIc zH$A)#pgq!Q6Z>R?;N3di`6T%9yd=-Dy2GJP35UtAP|Kyuu3trhE&WU5U1S9HE_|2T z@68^L5d7FRR8{@-;3nxAsO1mq4wYY`7Z+5rsc0Yn6P;0F6jW^Gns%|=IvQAd^p(7o2_t^6#p{xaP{>>|({Mk5UZGb0b23vL zw^-<+JHF^-164nX@&9fx|Hh@VX8tbV`OW5_X^pfoj)pD|bjsmsDrVHny?e5bEmXbc z%ncn+>J-297Sh%RPe*chgZ@UG4fsH`kfBPt?6jXqydtM~?K|*O6iTrkADvgfbJ7a3 z&eCCUpk*uAfUd=O5phcMk`-VAot5g=R;~3`2TJ1 z+}$zbL{4*wzi0)8fx^EaC;sJo&x43Z!LCod;l2i*V(i#LBGf=miF}EPzzkY4_xsd zIVd%qM=NDk4UvO+*-N-jPS1n%!7|<7?L3?)eZ4+pBcEf%xYOSsQnXap36AIB5rR@O z-eR7=Is0)$^;{QkenOUYd$!-JNM0|@>h730*DC-LjJGk0mBoq$PA)PSme+WEq72#f zUjxDC${r}7mKc~jfBC#vbEQ_-MSqbYLV2|Jye6od9W^fs<2XiDYjZ%Y7zm6&`-neC zH}!8xfn?-5ObsQM52aeow=13rhMN3VIBG<6xs)t~fil%@{Ak?&PEZFxVuuF@Pix=MVD0^BRtVD+6UE{# z=u8%&^>O?|IkBeZ*p7?>TbP=%{w29ktn~Fo&GR14G0;I|>q8(o_20djyRz z!Nir;tYBmjBB z%9`we)yOL4385S`KbJfyibTQlVV zx)@`NxBgi}X7;mj*e;t0nkQ0EXyJ0;jd|MpsK<$H zL?6WHo&tdPzu={%Nh}yf{6s^n?d%ttPFNt$L6(ZlQ5AnZzw`Lz>#tR9HUzLQ`dwZW zE#jVdT*k67y8R6XXJ%Zn0egH`4}u?4@Z&+`yvDBt5bG{JYHIM@;aM!;Ed4%bGQ!mec_P!?BdV@<{CxV~=F)2JOi2ZuSLN4g=yUv;bHHr|4X zG+XFg3~BAV05It7ascP};kM9t9z7d)?a&NuUzT&~4>8$U!|0`%+ga@>pXblVM-7VG zhnr-!$zRFW7>3PnbPEv%a+JxOE27_`Lf<6@Q>;9NsQeH*1GQv+QPA4L@BTo^Gg&~; z&|cN6NkOV?)9$>@4hl$Ra}%XJ$pT7MY3Bcz$;zn;ZxWHVqf^!KG-?$qr74qX_m{!w!})13ce7aBjuen&;+IL##ArE7s#reh=zO>)n!%TMHpmaH-9q?P zL2+}xhY$>FoSDC{+>PrWQZ+f%i1Dc;?95Jt7mcw7{F_R-n zwI64dL~A^T7;Tk*fD)oNDun045e8z3kTs6&-&IM_!5y$*EXN$~iOyx$4ybCa>wsqs z*~8Fg;BZM#Zoag+ufq{)@=xKU@%|Znthvb37VmG+BS03-?d=WRT`>3)VUL}iL6Msf zaBiE)`*L{k2OT8vqa$(GE+qfWlP*>UTyk@()bKj6$g$^Os;$>7gDE}M;}UY#8Du|O zekZdl@uQLwE)Vu$dUIFu@awx&m3%=`fl)<<#TU>>D2EoeeoE)+gNR2!dBOP{|9@g_ z3V1HJ{o(=;yL*0t4`Om@PE|}@-( zC!05MrZ}w~v7^~88$@g%U9Wtcu?^Pv-XeHOL9jAov2KBD^1Y(jD0%^lZ(wyJ4L8Uz zHfA94(R3mI9ZK^DjP}m+REX3=dCbSpQsCKb`Q1=Ej+~axEoO*!Qb{pCk?dTKJuToV zUN!8euJD|64If$5;f~yCpOnB|dGaUcXSC&ocM>l}C52&e&W{>YAY{6EKQ*+{{mY0M zXr=l_qR9XB`we+7RGqP{QGQ(4#M_ zv)+-lq<(QZ&>}7dWrs0@Jb`_6_dXDW)a~ zIcbW1&}Y5UA88nS+$9h8cRQhiH^s@2Pu525u!X=^^)KCmDE!NYpoJ5n8CQ#mWXm7d z`vT%7_T5O)%Le%(qLy^Dtp$6SZBz3St+_AwTgbsnAZ`%Y7 zbwfk({g3~?7xXIoadnxLLo_2%W;>(;wxFu$ygRVL?ZflOg0l9Fox0jVBIu3VNrr9+ z-rHf1zV82`?R1!YaqnXC;B@CXgua!~>0MxU-{5!Z-{TvLowJ7BV(jpId>bD=d;p&XHD!jVW@^N@n3~A$}r#?Ep?(T7$K^b}{S)s!Q z#vLUKPs4brBun)?9h}y!QrWPl zwYx0~4WpQlCg-Zyds>+y!9(!NeE-!xhM8b|PO1_L?P~I-P=1#jDoF!Jo4@N8*LJn1 zmG+=^L{**9tP@hUxUk4I+Hq@hQSu=hZ(40TsK^BZMyrS;Ay;wp|A$D}? z2IKC%mvgwg$noj?^6O};ggNJPJeJqT-G_@~w#eaU%&kx*h*Q_7Umt?bVsuG*)n8~l zL#It0&g~uM)5zZc=;jrs?}~d#-XgA0%|U2w z!5;WBVLV@LNS#9*#%_AL&hD7>ojlaUb!o3{hxw5EdB>ZOavsCSpeO78q6`kS(%fH2 z;+RL6#j2>*u>vc79je|H)XpS;}RBFPbG8mKTmRb^#Xr^x72Pqa^UaJh$Hv> zzM;OQe_9bdiXVsnNs?exp&zk#E1EeL;;6p%mG%I)cTIWm4JZ_0uLGs>u|_Anq7y#} zv0qk{l+$vh#a&g|9#7R@#HO?<+35PG#zVvWrWIWJB1eCT49aBbDy>t+bnbSp3{loZ z?r511V4}<9C+EM%`z0wbX5i6r@HE%|oI;+o8Ka*9tn8YdRTWn%5HF%X-vV)Fh>P3h z#J51c8x=Y*isqZSn<3%wqtZ^9F;%L~e8ma*6}9kX5;u%Unc9@d=3@LzMrK3TdUD-? zj)hjL$46WZ{%ahSE>7~Hx{W7L=PBdmLhHB3dRNfBNp8BVN<5pv``egQU$00MR{NW9I zNv(G)EbC2D7Ye`e5+M>0wM2mqZtl$`4s!pud|fE=<9L|eH`f%jh$^fboCy!Q_t>$T zN>an(5E%Qp!wIdOjlF)b!CQ>q&gr_8L=Cm*V)wI%DjM{xVuInk8GqJvVoY z=IEGxl^}Cz&#OJ>bU8`YDVC7(h>s&|`SvBD11@zF)Q#6Ee3_q&WF7x*(ancnU^q5M z@tP;>FXzF=8DB77dxwDUJ}~;dVL-VS)1;*)u;e zR#?lgHO$+y{$rd%3O7qXR+>HpU(7OdNzWY1oTsi0A~r&D55&`0b_|rn+8z%PC+Kq(K>1bG|6GriZFNtw~Gz zkOPc_D|1nI&9#ct$zKpUy;J4OsZz}o2X;9;8@AF&dTD`PJoAY!IHDsGVspr`QI`~P z@(<>(^X=20BPYvCj#+;(Vont@Wxxs|f*B^Eyat6@URuSk-GO5TZSevAEjaUR55>N` zE?fm_yFdgp_cRjw5LF_Fo*sVF&7z3^0FywABYhP66bVd~t)%FMd^&Zm|GcLUz}jC> zxP*Z<^n~9~c3Hjpwcc)NQ=KpF|23T6SG=q2q!T&ccJ9VK8@DrPXZ=Ql`Xv`YnqXeu zI#XzBz=#Fq?Ca?{LuA(;;nfSqdcVC2bY%XohNQTr_mrm1K?|=m!#aO0+h#^F;ln;x ze1r{Px$nzt>~fg)%png|=iB-b#TzTh&HPW&rG`Il<9p>l;Kl=n-g5Cg(|T%ZlDUXA z9dEP)-P$TFu9!7bbA(!-5W@)@a*w?8u6Ld;hdk9(?CN}?8v*;;%2iIB)_78J1x*mK ztgC z|HWNMfQM*ShaI?-7H>QTr$@v8@X_f|S*Pd+<6%;=$VMjyu4D6^QWuPA_0cgo_>vpgf4Vuy=6Nz7yXqolc7_}_gzE9S9 zvTK@B`i=8UR{zLEmTwk5L*u@B)15T&F{aB*H8>YJBaL;m3E6Tao3lrZYhK>JdX`q} z{;EG8Kkxfc-O5)}s;;lHQ%jU~mFLk+be~9$&Ti}P^%o_NG5{08iVSkHpr(B4v~eWo z{>41`i2>Kvq$#1}*cskl{6Q1MDk}>|@C@#PO z0KVrosruwAk>Q_3_nOvvxw&}(7g>HGdPORQ?Gp|k9|1Myx_^B`1*tBvD})lAcr6T7 zkvV@(65G&S7o;a6sQAO=hKE%ftFOZEv8B)Wip6{5VrTnto5-$~$>|>sOjR*@jZtG< zD9<-9`8n`3J;M!1KKTk@5EvJ8q0R7Ilu?TyGQ#kWWHLL2=zMmrcpzyDn{s!#I1_TDsZ18Zh<@O?cdza-25__OaelP$$~5j0(}IY@_CLU-*~ z!p-eu=d@S7EqM}dx=}Y?fVKKR9&B>n<46QbC^xeo4nxhnB&Pq9KIesE(W~%2uPSN| zUCBCEdmSv4I{$7p*1F;KTL2=_KdyDRuE!mXGU~9NlHtq-gzVnpR}WiUcH--wE8?CD zj9k9Y;X=9}S6?JM=zdBCra6EsRJ_&DXd)RJ0Aq9Ygo}HLF3~&qzKXkloEue7M9wp_ z_7Ecb#Z9M*5}~h*MY7#nf{tWhtDRe8Sb1x4Oe8K}#C}~4q)7BBJ1sJ!^zL#9w!5Mb zY907160{Ho>rq5PL-L}QY>n232=qL4XlQPFnd?$_Ik?;F&@&w(lN#xTQYa z5b{UzuunUXK+ESl{yqbaKARgOgo&1kc>RIK8GGt0Vr31M$fx6_nLghM$w{|g=kc*eL{5->m#Um-~smfWHT zoQ!&lzVEFE50?B2_mR~Ru6%&xMU4W_$N6~f<#fuiQk^|e#P>^n^~7UV^*hH%V5Y;r zFwyh}b(8rK)ydVUXKANr=X~QCIJ9F~=|Q8Z;LCZVk!<8zklbk$6QODVSp<{PO@HAf zF#I&I&*_inARvLS{Rr~$iWn+*x4muP-_s!Qs;Fo#I}1*)=?+L(-MtFT zD*;gHrU8~{Z8jE~43%BUvFVB)&}g1$jPOsLmMPMpNi&5$ZO1i3a6eqhIuM>6L1rV# z?+sU5Tc2s?1K}!>i~jTQ-bx(_Y6&4AOSc%LPF4I+DOIq|SH@BD$Pe2fyMV=Ws|{G0 z2}8b>?cE^J^rsX9{VXw2U2nN5#RqD6eGU{u%)JN#&+tF~9g%t?6RdOC^Xs#3Ky5B* zDjvt6Te>x3T{zS4QOC8?5KQMXQTKn(>NP&`;hr;W zw%^yKKf~2JN)6%B65)8JxMEE4A%<1bYZy4y>7J(Ti6ktNM|Q9;+yuFN@(X!1P_{H5 zOjMG(BY&7YfxL6tmE^%ZYaeEZ=(cp-Cz1eIs`XN8vLAmwKa-iguPk}_Kq__eUM2m{ z-5C$7?rreX#kZOMoh){E9c#{^m0-yQmV!=Y(+2g@*O7p!$}RmRD>h6 zdfntK^t1cRWs}1!0?pl=!`?Id5MRGgst}@%---ln`q55KC)^$eAH+c;2P=E>X$nn^ zS40@`GVMuy%Q0R391e4up`15P0sBBI>YK9Y2UZYjPFHTl!v!oYnUu!pm+aCR06A6NJ=N&rVz>(DGausiMFqQmlVY z22HfqD7F~qA|@hy6t;~p(*Bm|!Tm5tyA-Rm%Dw|g<;lNRXwd}4dP&8EiikRXw-{>If?7R2J+ z>_ZOO-I+nyz=Yt5^rw`Aj!{=r(qM}*v&3TR=5Iez2<^WA=B?+AcP6TMM1Hp>X$eIb zp(I$_EVQHa~6$PvDCZfeMv_>kaYnRh<*K(YY$MDNHAp~WUdaqj7zR*Szr zH$Te>CGm!LZZ@C4TJ6FV09E#)Z%8XLeDvw%K>wo7}C8vPs?v~X~u4Vh`z4N_tB zw_kZ`mJ^cH=F2qc!`GUvyz_g>BD>!a@EE= zyB}N|K=$FQV8=JG=9@Egg{3t^xJ92) z@w>0!LB0R^G5rFg$9T@86T<4mHG=dz$Xe>UO4@Np7B;x11Ut}hEI<~&)V@_x4PcCb zVF*L68xEku;(2hIICOIMzNAW#^LA7DG?QuU5g`*Dd_!0<{m+Cjlu72C0jNC`PAM65 z$lf{@r_&?n?I?#ks5AnN{hT7_Arluo=TW(2*JQb>kA&2;GtM8&*hZKZsQ`F1nB+HA zU3UODqnSyYOhY7no3E*N>9N{zAoo$!p?M}4WEWnY9{AMQsD=b#t$YbVU>_)!mp8|( z&%-xs(s!uIsWgaY!Y{!qJ?q||XM=zCiL#1q=|O!y*2Bdi3~i&}lKEo0Q3OsQkY!}w zp62AA`?|BJY9@*@!g$f{E!;&on;enmVug6DyGj@6gZ{exUS{2}-7bOtveYyy8oSTw zp;|Yg1oxF2^*|P8(N*F0z)VUlu1{*#cjmB+z90zh8dI_}uad9K#07HpC4h*wQc?re z^%tq?cC)D6T%Qbn;;I&wKcwA`99|tQfBgRjSi?Z=2DqnMufmg8!R}PN1SY_I*o^)I z(^8W=l&4A5i4Qa?$}H#?<_J$#kqojFro)9PJVZLfTXS`5BtI@wr~Wm$_vXr^WCj4yfBh?J+8Dw5HcrBN^5lk(-Lp z#uL!-{mtI2iCoi_vc}FV$qg%W&WN3Z zUsr?>ofMjc6ZNpDodqwqyPzuHq0TbhP&V3;#@_F=oouLA^@=p-6jrCPE?-_yI$wbn z?m|)v)5P+w*Iz$knU08U&M_=8dbih!alzgppmjBCmzn9aIAsA48FoV=J{MfoB;M1r@maL&FZhy9_^I~mM1N=IDN2l zKVhjKIM|q*zW6{Qr!1=eW9JNI^IK|l-;&nUykFAVKELKDtSy-R{BmdD=bfjIBqPAa zKc2iNesP*xC(stc0K8&m_2>oDHQBVv51s*rC%CzSTVu&mQkP@3lBe}QYV5Lm4MpJ; zK73h(vfWK$791T3H+>`Z8&}ZH|J6T$E!9InFP`&mL|&Ge>v$L+EaSAVCkm`MEGf1d zt)waWJ&0(rSB?wEuRGNA8-gworUN(+$qidK5J&3Tg9N4TAHE-xcHzfyj|YqHo97WU z@_@7~v$jA-n_e;zMK73XA9H#T+z@l?kl2r_LnI4VG#xI24UzChPqHO9#y~8Ss4f!@ zH*DG4ygeH^Hrp&^D>-YwlW>w%Gq)n)sINu@Va(KJMP3kv2H^%q=&l82c>?#|7A> zW`#6kBRIf=v(m?X?qMC-2U;)w5(nQAy*h^LbgjoiikKW4c{n}R^)l%JmURIk3-BqOj;XmEMr(-U;x=xBJ!14Iepc8s*!-5 zj&Js^xY*9|e2H0>(YfMxRsFHz@^paBKE1JAm?mI^0X|*)glO{SMYTNV6v}gBIf|?K zQ}>C+M=i_&P#tp;L_eYisd8@^I$ZpB5Qd)T^pNVs!+jgf#&X|*9$=fhuDh!Box0~D z`+|cu?m9r!vcn8hl?y**u1bWNIkjiFf--Y}@xRslqQaPg{IAqGSKTumh$SRGG;Eig zr1JM}LI7bEqg3-~#CS-$&nHL9qXU&Iaxk8mLna^aG~YTTju7W}!D(Y<#|SATcm3gW zbof~b*(qNO&DSom%k-X5I4OFS2`M_g$NwX9%Ap$QmnU}L%;YAj{FzCr+e78%WjCH! z?(KJdv}l1sp|2y&EtJ-ZcKRgEh-q?7d5#TgjOHVoOy9q1N-!wG#0}6q_OTeU0~#ND zPe1ny5H)j_c@8E0So>qH==+Ug2_|C;-d0DlLl!WD)E$=g^PD&RIcd{dZV8S-4ciG2#$uX0p-#F7#71yXvKXVAp0cSSCTNADaAhlR={*dO}F{7~SuXMx(QuH8jBX1ygQZrz`i z;~HqT-2bnrC}zOo1{A6Dlp7$3Q43WNn}d%tpNIs!M02gdN=ODX}<^qB{dUQS&y&h!CZ!go4sRwfiP{Q0xFLvW}v(tcel;Vynt z#%YV<3`v^Pwc5G^ZM(Z#3=-bq{5lO6X+HWl@ti1m?q$7tk-yMp#b9Q1C)u?!Hvbgt zpC-e#gY<620|v%Di2u^_aUR(B(swc0d?rL_$c_|;YI;#!JQXT6tk%iClYf}KbeP>h z$0@B|o&-{^;VE@9Lc_+~&%8%+C9XL=#Ntu})I>8-v52o=&X(%a6m9j0ddc{J|18K# zWlJ|ghPcBPcAQ$s;FR^;Y0cf+fV%;@x+=FYROItFch5-s&jt6iG68s<>;2pOB+{Pl z|JpZ`nVV@#bC)>nCDY^s-OX{GUL`-Z+)&C9x&g);8Vb9N@0gx#+M zvLqN?_NcFO4n}97SpTwr-dD*+ZT{_+IN~eiP?}MdWB9psKts-ap?-3}RngnR=oviH`#75wK};YwG( zw1}5Dhqg7sb@D3paF2Wmu}oJFk2WO_Ha>V><_I1p*d^!;b-@yDduo#b$a>uy?JJY^ z{azcsYY@!}(fg$?r?KcF_pvSUe9oTgkGph|R8pfyrh$TqETDEAURk1=q%j7DntAF28S!bZg;= zKc}NP*Sr;J(o3KF7W7I#yc$KgkqLPx>EEMj0$I_= z)TT@lmnQws_-)hx?yGz&fje7EXj#GK4k9tHNC1oukHP`gr9HHMWqFJpWs&W^MtXDcyYGq0m;4)%&6Eoh~1Dq4p?abEC*BSd;i zOgzzarr*CBfIi19#e%)VGQLR}UqY%=>xW80E_NBr>N;d#`*ce;Y9iiMkp)=?DlIQcv%O1VlcXRMG6>@@}{=WWr z?b$H|f@_V5s)SDcRT{2IzNg?K0DSTl7I%{+W7ScG--IF`<8TSdj%ETw-hS7)ko_TQByu$qnCnd01OO|bRx6~dA)n?4 z+~}kv%+Vbtk=p&GWv+xfhiKn#?JLMRM5L>1mn^W?c`=1g4>(s?tXn$pYk3ti>Y(h_ zTcG4Zg2+%VuRLMXIhU~mlJ0w}CEo=ZvO1xN49{0K_%)ICtKpeY1<>Dg!g!k2%5LPPzMI6II$9GCZl(!FyLE( zySD;kbMB>27mF<*Dv#XH#U8&84sALgi&C2zcgm5v<8b%{{;6z=gfpSIN)t+ia%>7cf5@tt z@+=AJYd%sS-UziclrhZzU^QHJ{ZW0t!6h`egw)1WYep35r zWVrRVH@|XI0z8yiS)mu-9yP=$o}gvMhMWR0XZE}H{tmdx1deLTPid%Wm6fOowund^ z3%lQA(r=;BXty-G->9pAQPIsnd-T;(04)FKi2o%>@Yz_pJyNcA+B|?? zPBCq5kHA8y*z6F^pZ}b~mMfuCwu>{5KAtDhao>+P3pl%jv%C?) zE13G0;>0P?3&T!)#lP_1NF@00(Q>niIEZ)hbI$UN@#(4HLA+^dB=zr=M9l(f&K)3a zJ-IK~I*1!s5H&$j`kaLbfjpO=2WYFUa(RsRbS=0mVVDKWSSs_6gf9Dckj)hFGe@9cfPtdTbyHo+7fj?T@hP zd{~hUUE=%b|6}T^ADV8zHa)t#QR$ZMPzh-PQ4tu3lyv9V2uTSMX_(U84clm>Q(|;? zcfRxa{__3<`|Q3?UFSOIK8J77;3q_MLkn1R-|mPlHXRs|1&~)?bh1q=UZPoxc6%Ni zFd%QufX16Vv^kdc3iY`Z*(Q9pu}s$b2Fko+B9la@J5cdLV7KBF5Q<1(DAAQm6{ntSs*m z3nsy7ovMFt-1}W@eB>+;%w)-l9EUa)Nld(WgU1>|D*qjgR5^#~?>))+i?KPI(@+y& zxzbWARKNYbfGaacs5*w7sqZZ3zb#GXX}(((P;6V8#FG!t^IJ0 zJv^EGr(UBi`%nP|Yvs>u=a%g{%G-#mtM`0#JtnLB@(QrxN{yAnMYRPW%Hb2kQ+vZ2 zpAARtIH$Wk8%#(J1OIyHC8Wlk?qis(U!!XdCMP*QqT7X;{%&d{iK&lBOblcTY1pih zVEfY8tu-QZZg9_-+#9}Ca5v&&pSJBG&`xoS@7P;S68-6QN*lDFyV&ZPP5_y5c+G2a zwEumtJX;{o6H@2^62ggmyjzRG*oDqtyoFDIs0U_`wt9J%WcNEI?;(R3^iPKo3TH`@4&)_oO?2ZeHhU39T)gntbpDySBXIg#O@BVO!#6<`g82 z6SdMs=_ma^Eqx<+$Y}fFO%{)$F@4bvw2Hi6kM`K*v7#=Dtw6tfcN>5%MiFhzmiCoY zXcX1|z$6sQ?kQIh!X5oOo{JhKM&*CkYM`A5V!(K$Cqv-B zv<)Q2d|Fs)3dnpWLWkHFX7VnNHN|D?4CIws_KPou=5K8`F(%WrU%ryk^&O33QP4+A zr724)t3nr<-K%(|lr)OxYv=m=9XSjo#Q(lF(ILUn*DPURltKupa`>az;%ksEACAEf$MV2;{+XB92BNH#^~Ec=_Kh3b7QaRI#8cv7p#(ybhvlWk;_=4m zElbdG)O+`4jJ1aXwcI=Si$e>hKJjpLnf`+|^wyW(-b}t}SPYS>`cEWt?IUM1-r(iiYNhq5e|IfFbkh);!oZ7Q{(CrZX@qYAjY^*25oeOt3>_ zqWB7xr+D>Xy~ZmbRhFIh*Ee3-1I08^naZT!00CjK5g$l0?vZDuBD9&3rp|_$8B2wq zU?P8+C~PL&B_K=j!vCyN^Pf-wWlRLnT zkn(SQSU3Ef3v_6mvmNQ~n1O6>vH}HcFYX@}15CmvIv2HwvKc)hCV}$dvELQ}Y@e(D z_WM)fXz$DCUw>TEhkfEHV6scOLFZCtV|Fvk`az3QC9!RYqOuN;4dqFTF z<{?~5CtrFCTK1$sa8sPw0`-=7MgCZ#fmQ-$8{MFv*UfTFkJTfDSvhCGVLqv|2;J_Z zwA*t=OD%0EUVPD2*>3$lnKneE`_ED|hRE{)1q-eTeuK;HKH`?K>U9250@=z9k7~j* z`gt8|*Ws*A5jB+E{ug7IWnlmrr==DD(l5Jdz_%&yj0rw46)x74u9)R-cT4dPp||U;#2kSGv&dSdjFG^C7;cQG@2_bJ zQ?x%Ei>}I<47xxyZZdx91Fx1V**T0LhH!hnnlD&FJfZ<=QeGcaJWtE)u}KSm9Qqz= z+~H7kIOrOmpYjMJhG~=J%0vnKCcl{WzmB_}iT*Tx3%Q=+j3jOr-z;0bUU%+pH`80K~IeEnSAY~-Mw42HtVNQLrnkjxGHRgr4tURu`V!g zmiTpzyG~LR{_MFI6h{2%*@dQEv78WuOm|InI3|M4hBdRQY}f|u8(6*1rxeXh^vrN% zkg%8Il*Z^GYTx`L&=TBP^d!!h#jrGQw#Mp7l$akmlc*$d<;vUqp*%2J2Rsro?jtv`h`j zJvzKTbB6I&68kqNf^THPmO4+{s|PKgmqK3u@(6~789tpVnFTSFnZn|wN^nb(8(`Bz ziVf$;nG_m0y0zmH>0=D=a{5&KOXSNS(!zK_GSV-XZj2LILst33(@RIAdd0tXBQKur zD&S*BZJHz(Gke#ip^f9ZV>9J!_zsiMQE-KLga5fjm&YiLo$ivrk#l#+%Lyl`b!y@x859DGy zAT`54DA*Q9^Qed-5$REn;vk`%{mj^WXa!L_3^$lzQk{SN?qA@!gk7iJbh&)hSn}Vcbnk}Hv3Sa^Fck#W9%Ll~I{L5s znR(<1HMKKV?xe6mOPY|}`iRsW)$SSTl) zyA^ID{oq*2Vws7_Wp zKkLQ-Jr7xVu=!XKNB}<;TB&@vMS=j@)U6s4nDjF-p14Q6W+PJp0b|r+Y^cAk_MeIz zi`h#5&MWjnoJL96_9-5;#Mbm}KtP|G-T4tL z6+nGx3@79wtx+i8PUhRt8=sMjt@^%g`WUA?XAXPmg0cLv(RdIxt`k&90~6;V?%OY2z{y0{Zrh z14IG#$uNfv7!6o`z=AGW*eZ#8LmSUI4f_P|-j-mTcqk2KK|TF2YSuM@V=_j!N$EyG z5PZe)Di)pXjmTo=gQ~i!kdU5{;rq6sm{#T_CLFKb^S8wTaok>C1;-PyMdpTTXcTL8 z*XLb=AnJ11C^QJ-{O6fb%>3S=hKc?>TEdX1sPR%LU+!vTA~-LF-ntBgKhRL&^aLL) z(#3r^;MOd~vKDfS#`)>t<<2HSZwDSH`5vqB@EzeA0Ut9dw!ZNoQ~e3aQS=$(^ZmBM zjhDOf2#LGCk3xrO>l_jzkvImB!Qlg0w|eqRm3`MS9!QFD%5n!qceAjRbqo6@9OqLKgI z`r|H2w3{XluFksv*nIIw3->3z?V7Zg=;?@7rM`m|F~-Fch6FL0TOlSKORoU3|?8K()ia!D^|1ThzMZYnFwJ>**`SPDZ)2qw+Znqnw#6wNIj;D~L68 z=2Il5LRcALOvt2J>7%{1mSoG>RdjW>;v_2QGA8@i)!oZ??Y8C)d1lU7V}kR!l|jiK zzUC2PRBTqWhL33hh(Ak@UjtR^pWV>yG(f&RLqiF<+}!7&y>{)$6agY z;cxdKmV^TqeDj&7DJp-tuq$F0aT*ZD5h+~mu#>!d!jI~JJltgMQMy-i!Ec=JWhnL) z;y&EF@9)Df6G<8_>(%YN3yhYcXOqBuXpiV51UkNo_aubUbZhYrbR?^H>#sze}^WhBx$7J%j(+ocJn{+Rsu7^}R9T3ng#bu2C zl75we;);9T2EV3ma=#v-iUNdSou8Mx;~PFlZs}6mT+VUX;>Z4UDhjhX(<>Y(uz>fU zgOYbr{JpysHi<7}mYR`AD@$fJverm!a?@g5^?)uEza08>5z}K_YPkl-5xLK(R{8wt z%Mav-nNrCYR$u?1o#D~Zw%}}Bns|O1*LUVMnU3h?f!6QFdT3W{+nX0Xgk45y*nP07 zqjzAyFgqcr2AWrXCJ=Y{x_fLb@KIBC{wEe6$rbvZSlWU-=YNOL5bbe^_yXPB`P_t` z>`s>PdqepeRIbI1q}o|5X}p=t0M4e;iOWfLxW5Vz_lZh-Rvb!tN#GMgtvn|OOZ-7S zk&Uk#M&E)#xTN3R7XISiuf_qlZT-3GXEhR83bVxomLJ(Mm0VrP?5MD88{yOyKp-Q9 z<@;kOFA3wR)7cZegLevEU3#@SFor9ZCEWZ+fD?Rzxq4fXMqkfP_G6>} zeY~;B(r^l|w!?dXKPfr+1mVD?RXx%Tp}wQU`ZAS#sr7N~$pjMxZ5g8nS^*^u(;=eg z)R!c1lQbvmXPKj#z7XdAOFw)A^~BKAKc8e!G?;0EMm*`t&?)xb@j~LGOH*YG#yH~6 zM$7;;3#1}lVS?*J_4`m#q2i9f=rc^Y2|ZtE^GRTG0{K-`%^;8mDX5r;Pe)CO4)8kM z^>@cCDTLXsJCamn$T6Z11FQe8>5N*Q!YP!V2}ALV&^!nw+f+C@ex$g?@ay<5vbk`s z4hP8>CT$-eM6Ied>oCGac_229!GERSYGDkQj}llcgtmN(s^y`?l;fxkXgK%+^qW1t zAl+)e`TD@!c=@#)FCWEN@w(!XE6@2XAWYh@-(tohlkD|z>B$?op(Ore6@drh_28@t z>{@h5`^8GkIef?%rAFn6;L8sy1QpreF^HRo9xPC=;V`TK(V^S#H?mB{h*vzjy|iqw zv}rcY?@?1XWBl*nT$7iM{70ff3MrlWL3cm0$@q4w4^o)EExo*b(W8BbVW&Eh1~Ec_ zfSbtT?{O5iKgz?j(&u~hMmEo%n^4&|g;x~pjm(c9t94YzIT>dPODSLvI}dZ{i7Y5&0#Gx?npi2g5CURjEaM;E>XFfdvbA^w~N z>EYPU`W5*Yb~qkNLPwzO!IXWg{4u2={EAno`XI|>3KV|@Yiq>_Mo4mG+pfPQen}Pp z0GYBeV}aE5Z47KP^fJ&Xn2osPNpj4Nj>^KS5KDjLs_JlEhKH*}F{pB53KZt~v7~x; z9J%AT#g)VT{$oC5dKj*XgYBy9@HnCZ2K{lQ-dZ_jd`3S@8_BgAF9E8m)W&cV7bSrV zvpkK|hFtYtv%jLJNfK2V7@sQJ_*ooQgIk3kHI}`R$38pXiEq)HPn||=z zHoF2PHTG#$eA@ayT-X>>DDA2206S+^jSFlh|;c_?xY_v zl?Q(rHlOBKobo0wwm*MG9NewX0J~7}T=S#kktX|r zfb9YFAELs=PBaZIM?njtCHoPvMEcI3X$>7tsIY6?pKMiu}S0tL`H~2-#`|!`_ zJ~7*d*W2cOSmvk8{6#)tnoKEii#V}{RBBq_Y`OVn?rfn}Obn;Pj{;gZ)82oPtrHhY zHmwQSm$+P$x&zqXTN(enuZA4_`WD0)lwy6S^}^PXV~lI@{*T0l6K-h%wx$Ru53k@9 z-TFSZJ>L_N=ee%LGP&xZ4&`N;EeEsEy&8TDZrWJ_>0r z?1eqg`q^h@38=AIv>Z=EE!v>)WM46HmX^X!&zhG@RF!0hz)2(ah#9O-!Hx_v1xyvqLhkk~Cd*NZf>EkK8W;m|V6w{O(-( z=x0{eIOU$&Eru32N_}-Sha0Mv@I7sg;~QRj$%&jOe;;i~ zHi++ZvzY5EsqWe~mB@4-HfUwFtZxWLvH$cIlF^LQB0PE;u_S&czZ?7FOH;>wn-Md- zk|w?C;fe}<;TPxA$FGOHoxub3-?J8EF5#so1pyK8Sk(3@w6B?mGQZA0^d2esGLd6? z#2SMaVe-nQP~{xzaaP^ZB}ux&v6hvl6a0Sv|JayPxS5e-`53KOf6@VyCzxn zK;?F)mv3?Iix)~6n$U;E9MzWuLwJL5Efjlpd3Z2|p1`dAjgo0kZl^SEF{yka-awf- z6&fKg7*_`t18Fa;oBygbY)3?z7YB%Q=Mb^z}oMs zsK3wP8bPLf=dqATGO3&RmR?ihHe((@XQlz?bY~<)&PiDB$|@E%P`PM8gs6UNW4!8p z&0%}N8Pd<7n8te{B|~bEu(TLl)e&!gYby7b=r85Wgv+I*S68e2B%=C{WL~BOuz@0? zdht3~3<{e#EV4lG{>YZpd~mt=xjqOUM7?b!E{eU0At4|B;w1nsv5c%4Ou`MX4wJ;Q z3o?b8Vcx!dxm_Ru?Rkg^rXPZ|fMQJt^{8d52etIc&Ytd+(BDeDJwcJWaJJYv6wNAQ zwnUai*-$WSz+i}FPjZ_ehZ|7lb(O6|)*EnIs6%juHmozsR!?^q7bd87U> zn7?-&hYwhy`Hc=#Y=W&ZX>MbK>3C^cnr?9BK+@tbKDs%-mAQB4@JfHjy|d6JaJP`C zCem9Xd<{0Vx0K*Zt$l9U|Dj=SdF{?^IEWb6o;;3a&!D-d@102e-|GWwm@tIuJNd#! zlq9FAQqw1rTe-96{&O{6VQ-DV_!GG@73zcfi)gXm6YRg!(kRbKx!R&6vgm_JVxncO z8->71IkA$IU4SE48ZVWnH1>-nrinI^j*xnZiU6tn49|nzA(xq3@YDI&P_?m)1%DiE zKlqHcczC%>v2Uk&GQIp|Z)B(9FG6;1jEg)ir>xds-bZ=V3DSTp8|==mTjx#GbJ7&@ zPfnf;EY{ZabU#Jp#DywhBT7W;_tUuRFx1$=YW-({VgUD^S?MepsSKw!O`@k&oT9T+ z(2tXcOV?XtZLf@j|9p~84Te6BWOx8wMNClDyyky+{TNQ8#`>TLI*Fs`RW)@*d+!}d zFLYNA%P@Y#Wusx)NvWisjy#rHDTnyJp}Sbv4W?O-yadNa7qljsUpl(rGq|S@)k*DXu18O&>tv zBiIvGKoWqI3r&nhH~^9*F?!FA0=b03-J)2v>`S(f(LyIz;D~)kuwyaY5OM@O+N7!rf-!U z`T%No>%q#gkJ0l%!-Pe5Ol^)*n=)jRnAPH?Gh(mVrG~FymyIg;XK;i_`HbG52qLzz znl)jF1RkcGj^Maq+eECloZT~7v$IK>%v}J{Lh<$MP)499(!GvOGTTEepeq11&}HEg zRfB>4J`cJ%mck;7ty^Xc-xQnixsHtlFDHCA13J zcCBBXW`v_#$<(jG`s`;5c`^PK< z4%b@*$`smW>6`M(VGgKT)eaIkM2Xp%wo3gdd2Ij0?iS1`^n`~;VM}-j%cQ-OwxQP$ z<+M5#j-LJi3XyTZ14w$Qo^zr`12i?B+zt*dw^t{f*AhVcZHn_C4xiu^$b;nuxx?!( z)=0U(E)*Epy+q>-gCy_7h*nhR@T0GY(hu)Bq_)A3=%su==XB+{SpQ2nmPI(WiJ`TA zKVmMDhiO$2@=52?+h4%FboypywixlYQV!KS__z4bJ%ch4&8z7$jP%LmzpB{^eA59Z zkGe3vh{yXP88}YpTGDU&v_I>}{5*59-kWBRB>qcwK6oML%dT;RU`>AG)&(K1vmXvF z+jpZ*iK@&D=m~e}1$yJE!s$fV;y{UGKMxv{ZJRNa`ZSFmuhRz;?B_qn5nE^u_rOeG zF<_d$JT@Qx<5_Xsp_O|khdQGb0SPm0e#i~1{21%E16vlW}{&$S;|BkVEdij$Pr@8BKtF0)$kHj+D z+XDF9`H$atY8E&Q^oQc1mqW;@lQ_m0+YSoSk$ZX?9eR}{tG*e^?cg^P3Jq4y#81cX zL9#G<-!Z*=9~iLAR17KpxcO6t^Dec}o5gU%zsuVy_(AJZZ#bB!qH7PB{K3g|sSj=G zsfo%V=4<5e6%{TkZ;B-^nDi0RT&q$$N@XA|RNhq^!GKHmMef9{4o4`*pq!mQt#MqT zXbgPLUtA@yc(*|4Xiq{X_4sHnw#!fUfuhEA zysF#Sr)>`($)E>FXV%uU#wY#c<*b-`k9RESqw%=!mzPNgpd@5udPig>+XQ{sQ4Ei0 zY!xgMl_YRC@?w04$1{2(j}LA2OVKjdAAU%`TW?IE&Nr^dYVS5vYk0$OwuG>F2yHX1 z5w2SbaKBTYBVjze7aq!7VwCJp@5#Ue5{Jq$USo^S%vBiG;_2p@{o#E@9b9NBFQRu) z^KEBmR&EaeS%~-2pX^4`mB-CPllNCav0Jz`6>_u(WgqRv+6rDA!p{$+o!{bQ;oD&n zN{9{81L6VtS;W;HU+cx0Q%i)>)lgdoM~2 zvzI}n2j7Yj6}%ua{i;509sAJ}hxU_&rk1W$fhrYiB(0+c`#+8HTKu+(VKiSVhV(Ew zN++oWlbBPAme*s(V)D(4Kn1_YA35KuZMP9k@@) z_Yy90261Kg7dzf#B|INEXz~AQ{ATeFBc_Sb=14KPtHffrRsQM`f&4aSFPhxBtEhDH zo#1Uti{p9Bw(~_dnOhV4)?FJ-@N6*u7gTNRO%q=ye62ZKRs8w?E!agH;{ zulKj<-ka>W{48&HZ1|E7_gxv#iz@KflACi8jpaO{sJxc{AKLxS%=qRb(HYr!GYDYs zXgm+XluNJE+93||&yAATvjHS?>xpj&ZIujV+a)%Ov8K}E-Jz_!#iV)vGlPW&L|@d| zUeOFU@Y;W!cNh3~MIou|8;)yyLJ80{RbtPG1koV4I83Fal8Gtz(P(0m^)9LRzF}hKmJYKo?_rOCg zhw2XATZ>Fvd4|m6-b8-LYi_zU_xduVusDojOtSv4qiXDDOF%_<0n@pRH%P2UQ;I8D z{_w}g^MRq~ z)L9>WKKDOsSPHa#tgVF-7pWIvPZMA8Hm{=7U#=rNT2l5Iv82Z%XN9=k|BCd#1?L+Z zZ%>^g#=V{jib(i@}09Ok`vbnnORq}Qv7BVm3lrVpknu@1XE zKReje#^871^r6_@VY-jRM^EFwNNMnmYwUZfG-K7Vq$ih7y^VNqM1{*^mPs353?J{1 zJ#KP5l#kFs8Q04XYXpB=Aqfv}r$)_zC#e@3LM`I!p&7ZvO7liL0zLt3$tmW`WcNz3 zo+nZY&tmz%Bh2Q=V2XT=Sn}U(me`&rFx%ubjZNR*yccMWC_$4T^MIFf`NejFY$awT zN4A5au=aw+byz?oL|7mV^EgFQP>P0CTfC|9kH&GM_$D3 zd4^+d@YDIJE~d5SW)&p=9=0{~v_%9k5MPlNf2fr3{hM!#FnJ#zcVd38u+ZRuH$$?& z!sWMPDpauIK*6E0Ckjs0zx3@bc#cqu3KT-X^>>>$`(b(x^4=TsW{~|4+nr{Yvx>&# zTZ-(NI-@0O;WBMBy}V9te`u+zaJWiSbpZqB!47CITNP6cu#HE&CPTqmU!_TX` zDACKXFY%=TA}aTz0a}usCCzd&2W-xnQ#2lcC9Tx)M^lzFv!$dODnyx>wZmIhiN;>y zYHI#FyM3_+ChyO;-~KLL-O`+w6I*V&6fLUqZo_N|zO^Am+&DM4WObt7SXv zcPbQs3_IrXVkGc%gctO};R%9m%zJ-l+os&}rF0hw#U&8iEO(Y8UP8YWAD8zdgFlpU z6n%}j{1P*p;Hc~fmFb>3lxKL#gX+=xPceQ!7XQ&*$rjLdVJhVW&sdKmsYmKO63U#Y z!^p{o1K+sfBwLYDWN$(aN@Z*V>n&Jq+26i>=*n1QNTRV^5G@8T(52=^1*as@h?)ct zSveYySa?`087h1VcGp{y`oxp^>Qaw&LnemJzYXiCf6sp<1TsTzD!fCHTnxoxCi-Z@AWMbbXFK z3b7B|Ubek%5?rQK#2JHJFGPz~Do&oQDt~R?`mJ!5DTN_^Hvi$vqKM+mh+Erx1fPhM zJzyL1hG8bQ$Yi>R z;CvVr;iJ)J!`hHYc>(4b#u8@JC}rM6YO~|36}a&i57T|D#Nb*-!T4atwa!*~8zAe8 zYvwZ^>nul{JeP?9q!w`Cr^}?3HW*Lex}~*&t>Vw41DqJ>Hmfs$O32b^Tc@&Q;+w8{ z4y$|>tTW!_g3xz3H8pIAS)2~$k2B`u%DioCoTY?R?MwJ^Q5C8bZ+U#SkXYG1f_Uny zZj9@VJB8om6ParpN|?9qEEB(pELq~!QNP(n}$ zao&>zQ+V-GuH(G`gvstyAKPZlXvj%Ov(7D2zzP4%3T+XbF#5i*81wX9`&U2b7OzNk zo^1&lEoS75F`h8lLqWa&Zk|np%ZB}27e7=Gz<2hDzQ?_rb#)jpoGRse`8v()TTcs- zJIQ+re+F?-xwXXa1^m?$!c5e=ji+z9*pLPW1PQ8VLYaMVZ|^@E9O1*gfNKMRIEY6EACU*X29 zptykW8id3~c?L+?0dU%|ZLX~xfvw{pAc^;3(Pp7}!>Z!Cz3LS)x^<3zcS_n7(4NF? zEKM;^E@VafST0!w)qEqAm5iB(r7L5prK^|BPft+FQLGV1Ol8gV(b`a z6opWh+HxW16x9J}JbTRYd1T&`Z0=TpfK0*)uASL?YLz6s+JbsN4?Ecb_y`)k0>MRPS);dYAUZ>t4YDmUnEvwD*cWB~ zQX7`{wDz9*UH<4hRUdMi)PBFlWkY%WH}#4bbFH-OZ#YFQbjy!Cw?;O zJj7@<)tTa-e^iLS_7VnPaH#C7`_0Q^_^JWr9*am(I=I6d+m=2QrBc4TePOpXsJ29L zGfoYAG`HxuhAZDqSE!IpDaBqOw~YvGURr;B4Q4+OGGhlz2$$m&Oc`q>UV8WhFb=${ zMpB3Qx-H6{_kGblp5);-^C!}TREWnnx4mDT`+Glc^@3(jE*RDPbb#YjVd?tLOTOg< z%bM_poLB)~zF#?PK7YsW;#cp@i)EoS_=cs}$h@c7kAZ2PAnmQAKyyB^uFwRQ0&!lf z6fjfW(bI<}Mu8hB*X}X|$t+No#JS5ns?0~zq?h$OsKQ4G-Hg*4$e1YQ0>mr6-Fq!x z9Z)%)3hPh}+fZP-=O|>GuOAUP?X{qDZZLr!*6eg8f@c9Y!AzDkGYnqGSBycpXw_Yo zb*1R=xD};)^FK+vfyn0=Lt$n&*R!%CZXSSrfL+#yU!bq^W=sWsE&L_)^-UdrOQFqZ&FueOO4BJu0P4KBv>7p~D%lvVy!HX-?v1wjn6LMEtoc>D# zZp^E(u9DerO7-o^P&JKicdTZkV|aETYqrFgKsk+U-0*7#aFK4YIMe3|e$=(|pzSP+ zU|>|hN&gx%7Oa#sqPHVa-@cB=gXnw%Pclor^11IVEMA4s>=|jg4hNrwEQC^hHaiSr z_NAXqHxaQ597~DLd*!-v5_25DtnCuy2CXW{qQ$K_r+n@P9Q!s? z{F4eBW{I1jLLV zZ!v5x-6Rs@fx+bBsr7B;s#{5I*+6gS#mG_(w1kwwo`au18%vzaRWoe&S{F6iUx$mn zLh%$i954W+AtzBM11i3A*#?TEOg^KX_cWik;d)o~vYmpiP5*hH!Uoz_en!uvr&pI~ zkQ$2U_L}+EHsh@PkG*0w?<_rC&NlC!!JdEn8JqbjDkIFWtN(zx0dSj^Cs=zbAq70h z>uUZRh#?V{mEqb*y!8tra@PZ%w=GA0bY%6kCP#xQK9A(GK&%O^+pl0=Y(Q}!ctX~z z-+RRQf(xFHW;iLJYlB)%B+xQ{@$4Tgxy(DYhqLk=OLyj9&_JmTeaP|z(r%HFjlk0o z>ll0dA^jnen6%zyk?zGdv{|E@$0jCAqhJuXw~4NYWb2Y{QUa)=s_zC*Mh4S(x`Ry! z84b6^&6JQcYg|P)9D~mWh3CQ@WN}nM$lLDtFVNV~m#De)tJYtpof3N9jjLa@=qsx@_gY*7wO zl+T!%duV*aTy@HlV0i&)^jQQwqi&MeF{smfD|Gr)K=m_bfbQ_9AcwpSQsm>0L^PMA z>y7R}OYP+6h=aJrprN+B&&CQ!W10(UIq##FGP>5}_qhUS zNkgWkKC939xSIDOh!)ZPlz9MwI93r6m11+9@7}!X&nUv0?i3&ns-C%iLxTg0<)L#U z;2=q!1ics1{Wir#;7Pcef}Or3N^^j4nJaJk^RjyO*)tqw!W_;)^UdCXMdn5fV}`>5 z4CS*9upY2Ah z-r$BRfZkq~B*8nQMETPVSig6sJWbL5y21VU)zapct=L04{si#=11Zi$-1SI_a}Va% zW;{b%e69l=v*FAsZY44arJK0sDR?mVCxx)sz-^|Jp-a*m?{G6+Rn*>I+cZ3bw-(bW z76T|M>OWqzPzhW=vp7!q3r$zGwM_#UJM#{|qesg3vr{eh^Skc>oi6|g7_*TC>`6hN zbQb<4EKC*}+1y1#dd)1kXvy{kESS#cE38SBj`UxDw}h9Or#E(n-^z3q7k`J5{*2pv zoo&d34V3bnG7OK#s^sH$T5qxFd8#Bjca{6>qJ8mN*@11DBeyGZT6nT|0`0Uot}UY| zo~Py_nOB9l{jFoYn>Sm5h#kXt+sEgzDFU_??cH7uDT7%h*qr&*>Qgv=k(hPfSJg^dd8QoOZ-nrXgaQ>ED;_9U`42Ct zR1F@+YhUfqFyR^_l1{RdD*Vd{WSC|1WGc}2jd4u+ZT{wbc!>ZpV5c9@b)jai9J8;n9Tjcp&uLsJwkoKXAi1ZP=m6tB)y(#`^UvI`@W= zU!YjCR)H-(pS7=rV*SPNAmEZq@~A6QS@kWrkBXea0F{F3Ph8wHq+xJy3Sr=(-DV87 z@ge{ZG?oF$^9Clv@7tU;aHc6rJ7FoIme+RNup6(mg zzu^dzIlMnS5v8)h9{LGx0?o6!-sZlZ;%ytiBv^RYDt8^5g3Q}ecqTL^DKj=yNu$K{ zcHDqh^8TPvP{1fGSEp2}nO_)bTSAWZ}cQvm^I@aV7`?K64e_SUaHX>R`1E|yK zhD`G#knRrX#i%!UbDtN6^Xbdd3WI~ds)PeLd(oAVN`xjcvbppi(?9q6nkwX&97Iwt-XEY%PA!NUV<~&0}^Bb zzk7n1a}=ho=g{_kM_*HTWeCO*JPQHp)=q}i0IX8KQe7cxHgHm>JVd;}^ga{0i2xFGLnlC}q_Ij+d9e{t$BAE>qyqF-A-iv$t(GC<(${3;^~Ug8WC`!yeNr>V8a$UrwI-#vsBL#<|PCb z8Rfo}Krpx7Tka|9y7(sh4ia5Ck+BVeQ1AM7VGrs1KWLY>McR0ScsgdfRWoJe@ZWwk zlW%n8Us z8&=NNx`&Ts$VoxSG)W7-i+b|fK2&7QbO_~c%&GGVpnDXy^+WM_0zD|-4cOH^5CsMn zhDsdUeDLLHgd8)7<_hx3*0e0=Z8%pBRgw&~0Ghl0OYvN5Zmb~HPje?>$lLm=~4?vMwe9s9~yWN4tTC}xvlp^OA(GDi-Q=dY7 zh4YlV)pm0PW78=4MAzf%YL0sz_P;BRs0TW8-J)IuV_Z6Mba?2}HLlJ9v=_cv<%=mK zd#hae4=jF{=*+Js9|G=Vs<*)wFBJElJOKh^!c7pS%u2dHERuS@64`TkwnY*d*t2Sd zpDmE(XdIeE{)ofEm~mU+6|tr~k$=F(CLcI-Gcm1iPRYp7nzkGcIB;XB7_`?|z@*np z`k?r_VM6`ogWL}^(izkku}8<^4NZ}Xy>2h!+H&KEcTfkpMkvu6&_W{0)0P)VZw@i0D zK$>ZX^s7L^&L`FH5o5rOqCziMA!ti-_428kw9dW}aYLA2YYX~<7T;4RFf7!*?%^Bc z-4BF~J#xl&iRFhY&{g5x`B_kQQfbfw3o(N{O#SHLc^jG+_>Z`UXL3YB+${|G#$eg^ z$moXYuCJo-e50m>BhJ)9H^RjSUJlbKjl083#@4m$8*x zWrgsS#+!0=I^wz-2YVSnMDfwxYph-v>3!=W^~1xdLge6y6F{H;smST;2FtU=&jOOn zjyJVKN@BB+Z!>Q8yx|^a3|Bsf^(|iWbwMDqCsmx=Pa}FCItRUP1aHJzb4knXQ`2&t z`}(OQn6j`gEyZAa-E6=FkuebsrIHWP(*#P@@WKJSg=6}wei#jryYG0~@)B~oR;ju# zbLPJOjs|uxn|%h=0UI~QM74>pDVZX_1(rLiN7JD;{}3sD)?SgM)eXFQK~V+l8gv^r zK`n4}$`#enM!#jb&CIy#xwTCySAbaL1WAogRQOC8iF+8Htd5*!Jmjiaw}1VXcJn!t zxN_#f_`wC(Gi%0O`vR|N&t7F@gX|EOn7~(LuAAs1e#T=OXl$hAaEjl!X@e0Hq@ggg zOFUpHpy9Q8r}z68+{BRt@-AXc@H>6`PBBfL*;~MkCavqEjs)iA38e#~#R~MC3e4y_ z4I|j}N<{ms`;~yLj_>bKIc`e1)gW?=3|3*nac-7%DgDOoSviKt$VY2=LY@j@=#|11 zEaHwyZ{3WDN1xd{jY1ONTP)MD525ib&B*Z#o$}D2#Kq1}XxE`g4zuNH<$&%J{k6rH zPM_oNl?>W1g|vEa5lxVDOEkIdejD%8^`Bvj^Elrf`CW7?rGPrUatbiq2%aGaT=58*#U!20L&IW^ zu{m^=?E(@Q3}+UH9EE60cB z%H6wfz<$f}xf^nSH>+4xz-RO%S2pV)2Ms{eL7NHSp>*yr+xtg@t)_`xM?rQsi*zgF zfUL_+vd=lfIN>i_7ohrY`sb|0Z>IQV+gWs$Rw+e3aEbBm97gQzRzRkNC#`*h^QZ0& zN2MS(d-2AFyp8)i&$MP{w|t-R7?L_bOL)}@_h$fPVsy9sh0}#dP)bqOzPj_Lj@gJwB;xb?+DOAg^bMHS zHjH>Yd(*pmJo(vp(l{x)^fpR+t{-;}oh&o5$P3BpShUdsp+vdo2*Z zJ?X#~6($R-Z67A*12chN`|DN-kObafnMP)q-8jD+P`cCF2_*jo=c?2~qDKWo%eIf8 zSqSQm=_4|gZl8%UoRg?#i>43Hm;+rrqrIHSIT6{#Hd$4GvL`3zrTdJu2CfgkN~D@> zgoLral^2(Df>!P?Il%2%NKBk|Mf_e0ID^Ji)k_g&6#@HBGX7?dB_Z-nk4*B*en-1k zBsX|I3Wxj(n-ihhiY74YTMy!Rt2;f+BKT8;@S~S+4WfS}Y0X$_)_0QXenmyx(~*7~;x!^b^r z7kYaffuAa3?}A%O92PxOZsliq2UqKcS-iYp4O1b%c+GFY-_D=&DBByhk4)Ul63m=>Kcl zSlKCD17Ua)1h~#S{0Y1ta*Y_xO+cwFBi7O=Cgq)an)H=kjepSl)l=Bp%wkZ55ZsYy zinFGJivXKu_#(N=f6j{-y#km1|7{iOnG0zg6iG)wr(1#@gC=2_lGuTgv`4+M^&bj&>2ZQM6l6&Ph23AWA6Jw-%! z*%^MX+$riB0y;_`<$y<-5_^zOJCF8&6%KLatC~@D; z`Xu4@u?GH0t>fxWago?}pcHdn$G4do^~G|@x6dXoCbKEr5)B@obgFJP*$%;auAQHG zFoIO-xU=+zaso9{K8dEfc4C>r++}t|2dX}(TqUsfc%}%SRYha5L=hv=(H@siK+%#MG*zueF zPWY^)UCKy#UKaCP8FV>lSKI5HEX`2ao->nu7)*k`FhII`u;2Wy@r+!vSo)3d&#>=` z!@<1zbis9j{O`VkdX7q(w2oE-s@;cxR-BZQv5S4h=T z@cMj_E2+tjwyNRqy*#-M)3zZGdqw%Bi#QM5vu5>mE9k?x_0I>{4HOY@w^w ztQTZ>#fDkI&%%2%yP8$+Nzl!TtFt8vbNLtz$8d*bM)Q!43XU7nzlvWMPsM)d?UT%Y z!OnH1HDK%4Q)EeSO+ZGZau@uS#_#YwU~ok985>>}Uj z*NF5}-}yIrO&mWJ_b^isZ#JzNsK?D-(4mCeDGyxv+LMLHDo6*><2WeZt={|<$!~|6 zW7GO!$DS38JpYoIA?h+LiY(Y5u7^^WX1lyL>vUp(NlZJ5@0+Z6*F6ls)1+#CVQl}o z1VG|DJLR|n_`#cBd0!;H$XAC zKQPCi=hSW8mi{9jV4-HWxcwj*A@*m!Sf+LlBb*>%7<*htA;6c)!I-(Cb=1Hn;;e8| zhPyylmy6kHYxuEcrVPKb?Dcq-+14F6 zU6=kAsn+?`4%dmZ$isG=2YF$=DFo@-TnYv&kce&T9e&y&r-UF+JcXx_y<^r#j3koh zm+|EwYYidL5KC=EZ{l2KP9#F1^}$M(ow$co=>ro3c+ zIf%QpW_P4dWZsS70WVW}ncp@t2{h;a-WrjJiC$PA8uF!RrK_+lE!ILj&@LcuzIhID zxfsuRLPOMrwaoCjtEdck&c|F3KpBYsga8heaim)V(#;*c|#1mnOQ(ZlKuIwH`C!iYelm}j|sT` zMa>@_9^eMIE+7iA0gN`4H?P4}(J;E-`Mfh~jtWIg{wh_acWik4-47IimoZzvP<>R- zzd_xQ*!Yg01|f2>zlx*?S7}L;=oCc5HUtIm?ci4dvrey5-srLKjQZbxEi?_U*>>tG z#mNq|33LQPaB)$4ROe;t1>d=bNI)VLoIBHROyCFCsD8*Bm#_){42GF3`=VbVFV)ZH zGF52=y?nZAd$j~~xKeD`ncQ6I;j$lMMuonvvC(n$8jcKVdY?Y3oD%Ib|6cLEv!`v7 zUJus)}fALGuzWnR{t; zF5KX|=xk-@=p)bcS%AW{MU&reo>O~ASk{+P3fqYUf?d80g?p=pK=VvXBDG~cgFAdX zAj3?RwxDJ^y&P4^i;pzoRfB%RqL7Z%5t(FP@f=~gMlirmP z9O&Q_&;GiZ#@%^QAm4t}reHTXTe*uv5=H%sHA3PjtJ8%NIf5?B#B&sHuka(l?m=TnY1B8MV>As{^Cs+oM#B8;!e zCdX&F$q5Nbgg#)t;JukOFW-7O(;->DnR21KasAnT#;N&vWtSO3hLr1gx*jcH$oLB~ zBIrD-*LmA&)w;cVC~Jq;6JVd7^Jbk4DJSkt&KT%v67{&h^CJUl%4U%l-~CjvSdPWt zsbw;ZqO_IQK80-0pfcy2|JYL6eJ*;v_WWmKrQ#F?(UB+(yg57PpQPp~*v@P|ZnvHl z<>9bjeeeYH#_mZJRmSZ~>QETJ^sAvLq^XpGu!lkqBC#yzsTS36gx0;s#X>r1`mNvW zm;zGHP-hIC9ciYwf|*s9nk`;lC>S}eEobl_Qf8X?bc9m1&)JBgtF33vOm*mU*#Ot5 z#JIx7PHavt2a(Ww>=plnhO6y-)*cbJpnnlYaPE#pMSA2tvtRg)e0u~u{zYvtoS0g= zuJUxC=aC5SkiE$7#dOfaEr*|R_fWqz@|8oVU)BBTsnQmj{s~;`kB}(uU&SHYR_ukt z^MFnB>=BhMq*wwZTCkK+l3`)b8nn=-&I*yWe}0cT6E&>wBN7lbkzFzr!RuFQBVDGN zY(NOyOqPhWCSzU(NK0j3TA$Tu68xmr!z8rh%BIZuGUfCujPf)q7T5>^Ld8%q*kG`pX`@!t7fm+(rv83Ek> zrPHe5Xs&6_Yd`(Vi;Pg}7x_~=iPUFW^eC^&UxewD4uEnIov#(KIz1#v} zGpWfkA5`IS_rn$Lk{Nom6Sv#Ci>!9(4X>y$>c8|K0{OrfzLR(TA=rTkyThx}+8S>Fp zFL{RAoNX3_p?0sD>!b`HQ|NN=WoI+By0kj=fk|NIHmP!#JAxa`TZ`suck_3}T6?cz zEOs=))&;G%UrTvY&;~0G2Qsu|4=S;AK#t?6wc#|DBDkKa)Gmo-kNpQx*f+Xn6En4^ ztF5VA1%Rmaw^!6E*vFy>$&shrjz!94fG}WNgh_kH*^e8M&A)Q=6?uZN8@E&2I;XhU z%ZBkR0U!>`PcPVpq@VRIa;rX}vk_Ao$Gw7B550+BV%3Xp9Koq&dk?N_jRjbCH_bG~ zP1@Grwa@rEP3{>ZUa23?b$SuiT=M*-t6Jv% z>1Z?Yje!0y!k>XwLo%k8tijF@*Y(+YdON{Qv7w=0;;G_!+?jTSVn8~i$f2Uzl;#te zz;|{J??*h@&y|Z5*5s_Qzx&R{pr!@t*WXyp5GOlFWGr_MvX|$#7Xd$pWN5M=ktMu_ z6Ohupbe(cMqULtWyb6S5fV~_i~7`KwPT<-&On?iXN-oLjU?QLhW+`=TU2Y684B|t z;PhZrQgfDrkEA6$lyQZQEtstKg2{)h!Sk@r0-9F#m9$maA|KU@JbN^G>a%rW7`=#- z&&9WXB*a3ahdP6rdDV`Y(sIJA)-UoY-p~DJ=gcJ!pG=P@3Wih*6zY#cPxpESB?a*c z-}EfyLeBD7`SN7M#n7QgZKNt_ZermawKp%l-%kJToAUZJC8G89WPMiU@}a03%;Z9@ z#lMGhceH@Qv1QJ)hK9&abOhIDzewbGpbLoK(NkUq^q@Bs_kB8ZJ@fBKEN34{!cN-r zy-ZhrqilVdGwT)8X7QI#DPGdxJdOmMxWDTQ6Q2&WOazI)p#y1sd;OHybLYL<&Wr*~ zK1$%YQvLgzv9&iU3z2X@#sVmEAyE5(+@bDu1sOq~Xh3wHomE_YH#9!BTiyYESWW3# zBKgRJhJOKMAh6H3e|OZI<&@>L?DScLJeBJETds?Y#TUJv%-ML;^&9VE_VjR8(w`-z zUk;{PM*M{7^C>jT>)&-hw?BeY0Qm-aDAxf#A40#d;t9!3$~*RDsjT15q|hl*2v^Tj z!@i1rgKhy7^B$#DHs-l2qLA(-_?bev+~e!_(*RF9KPQ$AR@^&lN2FfiapyjD5BaFf zW;3@x#bPk8{fp|Sq3CbQ98ag&VkGwB8g;qF*GKlBDZ~FpYL^>sIo+H^@9MZ+4SaOi zm0+>I^~EsF^CM$}JWJO7PQ5GrA2j`*(CTWXTKys2uCp=dsjLF~P?=vl!4sYa9;9-2 z?{-w~kfrNecLbf3A^i^Wv996JnGOe0&g1(ONfv#s$oF2cnP``OpRton!2;gBuD;WD zLQ+RehagK9VUoO%s_Kk!$jvcVc{4>Pf9JZV%EQ&U`kf=>$$<^FIy|tFJGAjLoBoy4 zqt~*`;erJMazOXT(v1eSyI(YfFy#d#cz`eMHu2PBVXl7Gr6WUhd3|d zuUMe<0^g1wsZ1SX-BZGf-L>nk>0ci+ejqO+u?)_^gtxBn`bH|74Q6uJ#x9KU3w1=$5!r`^kj58GOC~BgWQGq)$OX36neTs??$qwQHuc7Ebz76*g z`O$90*Fhn2&cU@y2<`@IQov^*nB)16L_4JQ*dp#{gRJZjZ%;Er zmIVeuFj0Kd>+bYq0@z*K$!X60-R+GesUPe0nQ2IQ>|Tk0SJ0_XpuK-iiERgkbvB{p z&Fn(g9vinY=a5dS-8N*&jDE6=Uy)VDHuDT~W&aJd1g@F6KD^UtcayOVxFNr4NcDi* z_Cwp{mC@edZ0$(h_^CoR&0?X8aomm6+enS=g4IzfoR`@fj8(wawquRlqX-!(!LWg= zijiV2k}^Q*1jtOgMAV14pt5)lX(-iwjELesHnm;MMnc+r_Mrh#Y3ty6htgtPzl1#G z8$rr0wf-w`jvDSmNPzbgHUx3HO{qSlS5%qyZ1~ezlNRFf)aCT#S4?QS2K_}a6V3xK zp*4evRb^WLaGKIZSdV!PX}=jUp4jAzU)@W7orC@r#Hua@KRfHl(xicZK4W(4SNwQM zuJvQ&a@%Ikh+|3BLI3FW&_A8nKCUQU#bMsY7Ll<6dwoD~K`7#hWRENgR+n#pG{kls z?g7-7Z;}Vpa+Hb?@fwW^O5y{4e05QAq=xAKXYA90vVyEkkA0QgOp+j7ju3hgvH0yrd{{_z2h1TGsB3HlCJ4}LPmQ8-d|cH z`)pmcP;VY3=Dm@oTuYc0tE~v@`|(Y$i#SfKDWGg(Ec4dZvOOlghb7p)mMpy*KvS2O zpvj(npNG{I_`_yUCBNN8dmdb*ZMN(I<{NR5lwUhR&T2vFSJK6V& z!Y9gH2S%oy@zyZT0;L}sh`Eg%HPka`rO;oTYC=PJO_*|v3rQxZbr~n^ALg#Tb4QwA z#_V-I6A7FX+A9x5P8Fxxs&@!yc8T;`Q4qd_nF3337Z52>1gS8x7@5#_#g?omux7-N zA+=9>;5?oll~Q@P@$hL26z`!ibtaW5$v5~qIeNCNj?cj%+#Sb0iHTyVekymLq9*^? zLGDx#cNB>&p*N-PpuoVe-{xe6j=IxHK2{_W@(-XN_p>&3ifR8u8yoafRu%;>&ZhngI^?2eYxh zfSRWhaS0v~zLpDNlnup_=32EsWG(0bV#S{ukNUG8G_eP`xX={0)7S6i-3bUIPbL}N znlcbskZioSU57$a6n(_SAH)&00+pI#tW4}rmBku+v*nkE7dm~iF>_j?v7C_3w+0h`1lI@_K@2Ct>kbhI<94bhA_n!}%4_pE%gY(by}H z_kURVuBeQG8HU_)o($r-TyI0yG1-lU7^#e86({LT-}){avbymw2I70WjPTsZMa~Ds zH=mM|P@TQpo`HcFP^#^`AbDwNV6S^5HE?lu`}^whBA=_HStWJp<30w9FP+3iG|HAO z1Yp&De&Jkr{z|QAOJfCm8=hxFC5@U7*5_6_jrh2$>mF%FBZpqR$+t69#ncqa2){`bsL|bL zW~4UJs?@03{Pd%mpMR68E{JZ9uJLLZCe}f=Nefk^CM9@C>1AZ3lLDPn1;%Mf7v!6c zao_%4FhJjI?jV~JwUKQU=0Dynb?gGbBoCX`U%uzAwG%%}qcz!y-l(GI6ua@6E_rvE zjgwgPoE;IFm64T}$CS2UUTIt+Bj;%@1;sodrIfc~ZpB;gm7PJON>Z0GU&F30G-|Ke zJ_6qP0KV3AV#^#?{&*f zd43lk!)$BS>V2BRSZ+g9-~8a`T;4Z}%kvuZlIEVn?Xr*}!d1}0#=)3@4$=dh0gX!@ zN7!)Nxg7cf9I3*IW_iHFGrbgbifm}WXjXGB0P}6wt)7_z=<@C1&JQ8&4msz<(g+xb z<9PTFKR3)?T~wsUK*zq}v1k{TVSZ(rEJf(X~rCk5slYV=(3eOUh`#|4?Pe5tgCdNa0yFDuw?@;y#m-Cs2g^tFi}ei zSn{qHC{-OURv-;^^`2BPIDV;eLCo6c=zRDgbRJUQ`{boaPjymSB9x_Rq*Nq}eR&Up z&JNOMFP|uR*}J+IbL#999Vm!jCs}xm;KHlKf&8)*=WCGbm%pK6Wj_-j1bM<;QW-nj z9T%hES>c?KEJi<>>O8*#U+G=h{GV3j1YDgvu>$EWVFBq5)S>_4EHV)akR2w)r7t;W zPOJMVA8*S~@e$d-b@=UOGI2*BdVxC@wbyrLf@}Xy>BGjwvzVk-hL;Nt))z zo%A6cB4Q^U891d!itUvN1fa)$1+(%D>Ns*8-%rBptwkG*>zhsv_)`iQOW*Jk7T*IxTb}<@uaP-3#q>x#7kgbTE2x#_ zqwA-9su-|SOyl_#!qJ4CZC9)3sU6OD1yk6(1*Qltk9g~l!Kgo2`+2qG+3w98{9HGC zgg*`s>1kRrb1LcLJy4JXX5*r?D*RV$r|e;{C!6LP!W-0P5M>UsU+ZI)^^PsbY^Un4>&i zD?&TYSj&%xcs&f?X{|!G2`{#NOPbC5%@NlZ`obAgEk)a9x?=9#-0IIkq_1R6i< zOmBZevu_rZmPuKfmt`LsfN57uImLUFLtHnjU~uw-+#P~t2My62mQp~j#n9CAH!bOm z2g|*xin+-Hzesi^AXeR#;;1U~G6Gxg33#>*XXb3beL|rx~c(@i^%K*c`+61sE{ewyx%6 zk8cEJdw;k{>v~S{P2{&8bDN@6!(dmkymzpk(IN4AH)uBB1%h$on%n*y0lr*OjK8yw zO%H@Zah-ZtuHcJ^6}-Dsbbp{2Rp|INaM#PKrJ`$g)WT3UJJ&3R;q6Z4sr9htJiC|s z$`WzAfBWDRP5>bjyuU^=%tpHZFc<5nw{=b z@^XEucS}V-vlX7CUOYY)6aQ)YLh_YZWq8RqyAx(&_KAhwEA9%?^hW2`nojt714_A% zdr8pU9~$%Dx>G;cXP=}$f2o6EW5VCZ@SF&9lYs9@O^lqR3IF@?fBEqLObE`f@#v7r zcgX}PFu7e$Qr6jCbMWR5lBWJ`uSUf>jtqz^2;yk(EAGLTmb(bL|0{s)pS^MAdFYV} z!3*1az9}jlQ4pvkB7qG%&6ybgPaDu!kLk*X9xZL(y-(ye1-LV7<13{-ogqgQ?n@hB z%tXxpbVN8=-O54lWsehEDZ`1mq#C}AIoxY1y1@d{g`V&-CFX_Rm8f_=f8NX1De*80lLn z*#J*3QKhjZf`^oC?Z3l}-{}yx-$#I&Q~W^)E`HV%KzYZ}Dp#@}u^!IPC4Y&OvG6a| z;{Am5Ll(NI&|ArR>OR=A`<#IB%MmZ_GyT3nLPL1kxtBaLjE!V9|JBeB_d4H>dQ?Mp zv&kei)RHT~{#d7nbO0>X_r-{`AE(h{G!$ zHpkfU5bnNT+dl%rvZUvG?T-!pQ}pKbr2dvfrm^S!g}WH~NpM7^un*WGH8!yP~m1SOe}nQ92X&nNo8~ zuCN}m+eC(+OJn=yvi#&UO2rciZx8x!m}eTj)*HK?SlaHYA z6GqhInQ3E-ywlu5AxRsRh4Mu09b^do#}Kf{*PfL0V=3Q*b7{twTgiR=C=GN6A)td2 z;M0wSqCL$Sv{Sw;?HccG8_Ra~gmC}QAA@akqKwr%D|0zDy`uw0dKClx`_|E?FTC3n!F##q`2*%b%$nX;_rcG(|0wyb)3^=IMf z0IMT7U7ibqy;ZO`Pw)d-f>T@fmyc0BYKL$Bn4n8;bKkX<2&DPQ9R-Y>e*sUHy_6k@F)n zv{6NU{?Di>xm~-4vbQhMbg#6Mw$Pj>7Rb07C658BE{z2|48vo@e9!EaX=7{ zgJ&TTQ(_-7l}6}almr~u9u;hivH{L|bX(Y4JjiOiu~=X3m-&oe1b4ZN=6Z{*RbcRF*xNhe9)y zNizF8NHG~I=!@kB^@pwqc&(0b-}-MUAVRJah=nDaE3w}s?Z55l9%abUenDj)Eod(t z5E1?tXCSgu**%>;Ki=c@=(JW1K)gPf&R(taPpUGVTfoxSNJOoRa^VRw`B za{|Cncb*K@J!VV62f+ijd8feib==8P%#}-hzXW5w@6}0*$orJRhI_9sQ8eE8PhHlC z+-dlS6hy-%gXSi1wc8fRF-zJ}ivG*6-?%XSEWydJ7D9309IT=E1r3p>U0;)Ky2ahc zozdF8I3N9-1*tok(<+_~h7JL_M>;QbV0>OeoG&qKSN7xzM8 zDQF^Wf;dnuNhXA#YSjr($e*n`0S~{v)@O@k_Mrf;>T-k$o)TRi{Kx8I+5}y~7ZE&7 z+?~s(Ag|RO1P#HV+c_K3e}8pHga7oQzaklHf-d{#2&g3v=5dcFXN1|oUk`f{xEB=L zvXF2#a{XVPKjqM&IB|Zt$b=k*+9x+MujV$|yJK8=)D%f|b`&P97uzZgui!+@FZwm% zBYtH*dH}Q5MjE%p%Q0?(bPlTX`AA{x>7bPf5b*Cz#ppjD)Z`pAr*?0&dLK1)cL$tA zN=y1L9O4!h52{Itb?oP0<)hIN!_#ID#F^^B_75Hvh2#RY%YCv|DdEA^qv592%x9}Q@2N5GA>{;;vNL3A zIFjevpRiIDPbM(f@A!D~Nclj>d#rmk-CKk4T-?tv`zHziQsjunQxJ>n2mJIl*{hjX z`6Mrmwfpcmprh}ocdPByhoBZbf`dr81{r`FFi+K>`;|2|iYQyg)lJWw&eM{;<*3Eg zG!i=J-}d3cf)GJ$knS;Lau_lw1mk>ofR$U!M7Y|bJaP3NH}U%*(RR*~Vmm~buEWjI zZa(HuU90)6KW zhx~}&d3`7IgBs%m?8TBbfS}vJ)g^zCL`~?BuztQaEn}rDk?gbhBF-6Ez;~N2K8Rxt z&H0~se444VI_;dhG`F}S0hyLoL=vBCyqix0%LAaw~t*44~v2jT|w5s6ffHpe{Qe--lc3>1qhGF z!%PTwjrG6u6RVv|H7-AFrqkZL0&35A5ZP zLv(poq867P#@#8>;Xze1tomvHm_03)t_D$rzzTx#qI)3>hk4)>zY~OYjGu^VTeY(Y zSdRzq)9tJd!a{(@2cppjE;BmIPnxSDQB8bn$I?ChF?Y=Rmk=|(8#M2aMQ5)5dre#! zo*g#+(cAnIuq<}G<-qCN;Ygel{&F8^NzxCv#NGGS)9SJh4wthL@@0tv8}tme)Cgnr z`qFsGI6-Ggx@WP8?jXcXWCSG4J8ZrFC;Oa;Yw$MzwVcNE1szt~;>ZM(`VcQJjLAS} z{3Fwkj8nmdf(FMARtNI!rN;rGc0Bkw6^&birrBT%m1H2qV~cyS>BzgI5+Kcu3Whu5 zoe6zzvz3?`GLNrG)iRwq%P$))?w#eaz{Z%?(0&?)+m~A=Z^6%$wq=ypl|UU|?T@+J zC?x$3ytuz4Mr;Vq6V5L<{t=lu+ciP(edwR`w$m`4Asx`EgnjaTilZ%+0?#UmUE=zH zbXY(z4@#}^$h%J5KG`r~&+882v|)c9LGum#(c-`|cD#)YQdM^}W9X|!zUMVeUE?P# zkQPRO6^zLFqjI<&pdGOxKnR76|G{(ar5Bg1V!F`6Lb^QvDs%K}b)AvyR!6RY_Rg&S zkX`?Qyw7_*!{ypcFL+^8`yUm(0dsEWdK(uT+cnMj1sj_LYS~El4bIq^-)wH}=~6PM zlin(n_6H?ICX5o${k_$`GvgY`1i|_QDCk8(X>3V;hjKjsl7%}hz*9VW zgHtx!xY9?ehTdr*7*qFgP~UWer;p+t;)}V|ztVQeJOR3%BR%3v7tJdfAw6HUOZ<8J zw@u5L;mE2;h{N8&_~kIZG(4*2(JavMl=us#Mz-(t^2`$=f4#$v{!-ONiXe`=%tfG2 z+v@SarMEu<+9eE>U*6*xY_Xp3(R%+54 zcTfa(4D&I965D_sO@5V}wZ3NlHIe6CqS`;>!nGybMEtC5z@ zC5bRD&9201e!jNy@?z-PHM8WWc<&LsV02Ygu@$wpIB2k* zr+n1Gj$GUazr)N&z`NfSnJsaB3L3z8;yXZk9 zL*vhf?Z9o~j$B(Z2tRA&<`~#t7GNlClXD2OJ=7>8d_JQ7o(p?cK0bJ_%3>un^mHzc zbY8%fPo32@XPCC}1QR!(#1b?A8Ggpl7mNyBQ0X$MsruwmqeFW&dH@L;5^ZlXD1V&I z;cEDnu@Q%fp0{mh4zoTof?)cMf^Qra6u=KCA~UqB)Ye0<|8PtF{>KzgMW#tcDr6+z zW>ntj0mVes7lfT%FKVj6KJdfXJTF1jpSAr(6}%$UOhcSZelp5hih%xh-b50tF zR)r~Q_I9a|KaB)Ul@l2BBT*i(FC{eW<`#1q^~;DapA%pP~Kmz)u=0Qs_p4$xpBn)pgQU@L~#s4*j@8H~1@w#ElXoipN7V+ z7I6K%HMR)jQUg;tcnfL=6R_<^ust=56B`?$()`Fae&F!5+31U)DsJ!u8jehDEt;OM zw*)6%_sGTuBx5fWp_qmlYUuPUm#T&dT?x|5dbolcaSdzv(*~zkE)T~>*=S@pofQ-S zVW91hLXe)2#D#IX6vruQbWq(QEc|e9PL{Y+lY-eB77coKnZQ5~-)ywG@k#^x0`>)4 zDpMSlVfMnMBu&A*(Sm{khB%sL%T&DQ@nRbshF7tHS=`O7SNbvjvmN)udyWo{Ti}KKZh~l_+BdE(JPH?|eI{svS(n4~l=GQ$| zk`zkbu%Q8q40h&-b@CmQ1-dPg!&jf9&#XHb8*PK#)^mH|%QkHnf;E>;zx2Kd>)!$4 z;n!6DR86xSP4L4{?jFkW!$4MrZJ-eMbncHDgJ&@$q94Ykf|BS*89SktTVefz$I~1f zhxxD&y>gF}I&3IxWW)v?09z%-SyF(fF5wK150CkQelN#zf}S7xmG7d50mb>p)yj-n&dq^3ZF$L1%(Ta^GPi{33l6jcRyx+Jym-*Ke!zo91(pmNp%rM6cpz= z<8R`&SK7W;g*Zq#*t>tq56;f$bXuiln?jyAYM=^8wGB+gNh)K0MrQ?L2U zI|2<@`uh8I(|M+Vm>9=qmPTxV8|9T6fbqULTB#phe(?dOQGzrO&YUR1ppWi(1QP{% zp8TCU7JZ;Hx4%M~7wtjKSwy(TkLQux)-UQ|NhoKe(O}H%tRdVSvIv>nka~viM%vfxM&z$7g zP%fV~VxfS-D#c!6iS3Uu%aFqM`w>(7^FEDvwf{`~dAfXn7Ep>Dra6{m)2}hMkTzC< ze#op1ovt(u(R+rj%XosEk?ga?i#{We7^TDfv4m7Oe@jjMimT`TcdEqTi%_prSkicf z5#Q!8K-K2j)Pvi{Bil6?^hTZ$Ie;|4Yp4Ti%-4W&`Ha|kyiE-J1P-UL3_C2_hc4kS zUvRh%24We%ao;J=fubJ&!-zF2f_^wRZRQ2Mn^4r03UUL_d1?Um=Se4?f7nzJkwWN& z-tW23Nj8yHIb+6ln*~bxTehQO5W)ssL$-fN;5*Hs4uIe)_E1~8|46Y%J3!NVRSlzy zH-{=rr3Wk&ki}ypEub)1)%1=Ag8v$rwr!j_TOO7?H-ihwz)G% z2Up@Y7bEqFhxMEk^-1lfG?y8AgJlc7YA|5JH7CI`{6+L@YEqH+=$8FY^zzdSJuFgH zFk}+pa`;p|%sbZPoc*tUhS(^CgOfBq-=78uAfg5Duq_KXWc?=-o!`xfbVj~sOjb;se|Np_y z97+go(x3uk59eh#L^Pz|RhCn2xtvd2X-QKs89c^=<~qY_qXHA;JG(=Enb`@7J_6jD z4$W7Ss(E0Ayg@3CAHVY%Dhbzu994Q$Xo(pKetl#EfZpRYmWot!hb*AF80)&lwlIjn zS%5w<>ge6^6U4)}1}uOn@%x9J0B0y_{=E~5{F#ivRyE_Q0LcdyBkmhr%eQ|JoKqZ=_o<-)oLj9$M8 zk7P2L6(Vbs%VzM^`tC(kV+VWlDua^Y=}S`CR-Xk-q%61KPj^Y-)qGQ&H;3+xL5Yn@itdr&R+>SK;HzqB4BZ7Km6SnRi?&viSv&B zEx5e+W1`>ui!!IVI_a0%I8ON|ov)cHrEZ_lad;RP`UZ&6`qv`nbRH$>^0_(QtE~uJ zxJ4y9nEonK(GRHUhg1={w`tB`oen0Go3*jm8kg~U7FBvD4G}pz@|fmnx4qxt$k%@L z2r2`!ri&_`5b5PI8=9Ol8a6Jj$Y=VyrmwFCOqeyr$wDP}p)%K-=?|~bkx-FVQckhQ zZ)eofOO1lK(G8O>Ulk~mvK{>?OmMBQP?568A{L00D+iUer9$r0=r&^Dx zCI#YFdsk4xQ0ilp#cu&$mB#$6&gO3=^yLa)W6x!-kJZl1-M}#yhh1s!YNw(rn13!n zz2#jH%8Ond zff~gLebn2QbavN^?)|+N=d?uq@S>5SJ9wXIz9QUGJ!Bmapz=xBPCy1buWN^PtBm z>{f!Vd6=RmtZ^0@Nmak$FL@jMdPL^JDX@B+~zk7*4$=GW3;H8^56|))lq9MGv#~tL)f!tJ*1DZv_W-s(cw}{Kux7C>}6dKd`Rq zAh+z^TM^;0uIfJ2`+DySe;QmOozc6>aMbWNV}w>)K#&kJrQw2EvH!qRZI)^0&kd!5 z%4XBcH>`3OMXOY&p1)|bnli~$+TMEOH$f4;94$*dwd)GW7E2=Yf#jZkAXTvT>9$NP zYpaWR%=*nuWnS*)Tp{vjh*W27)NX!dm{?Df3RLWb%By2W@oShJ;uSwmriyo96VDsb z{Jh_W_LI-vslVhX#uyN`G*gfN=B!U zAhhuE?G1O;tPG7IGOnA5srI?%v=psB%Dov6OEo7J8&o2fv}Vi;z8YuUB^=5BCOWq2)5%_}~-CJa%onf=|@538%? z3RN>{hSZwKYoixjsAdq08_V?FSI;6E@awn71S=w4ug)%A0fCkwMt2F{+P9l%64vFE zJWRli0v~nDMi{E2s*f%+SJrZoU!1sY-J#7__`PdvC#mM_+aYE1O0j}MD0-mY1Qhm) ze%8`BIXba7DPLTgW~)ZhwtR!hD=6gGs*8kHjqzw@Y^U>;`CN462sPnzKW@tVL^`)R z(>3aY*W;Rr8jg8d`LNrQ%|;fpFD}MN=xLfWPnS+da->~C|6YdsufbTeIM?E=5+J*_ zbb_18vL&QlV<^fL!!alWjE8}TQ_nzmL!ej@aHNp0AEq_M&gk6dcyOd^ymhtQB>92#}dF_2c zg+gb=_w4qrlH9UuXmPEsq3gJKLd4t%L*bs8xiN!M=VLbLI~henG|}D$z{eV=+_NDCch=N zE-}vpyAKj;CANN74+X$==GhQy#^_7y?~r}o8lwQnY=4pdsNx!}UrNN?c&W`w~x3>$}kHAxZv&b9F}jc9gHie87vaKpyWA(?4PSo6@p>rw(f8ROW!_*Fc6b-xGd^ zcvWS2CJlacEI9wBuErkaQMJ zpg^u}5VV8t(N%e=Pfe-elSNBt1+-ej##BhWdaks@YZgjfCE4GUcH%%tMC7or z4;f)QK+5E7O!=F6CHWqJ__iShSq9rpNq+Z6gQmzM7Ey1olY2x;)q#-wa2?N2>;4xT zIFcv9J%oLbV`H@ad&|&Nfd2Z*1K<{ftrQyQ)K5qfs=XuK6Da8JQ{C7d0jp0w^AreB zvPa>1@qRmOmT|bHMu6cMJI2~)Wg=So^v^-Jp5gC^c$y#C%Eoq{b+eavbEvKNC+=Mb z<07l?;guAqY=Blt=p3P^=sxI0GjcOJ?L7?$xnAR z!9nFuG;JTqGORb}zyozmkzDK^^Y?bm45}-SZZqbp!fO59lbdP_Q<+rsA`14MG<1`OJn z7wXPKm$>vzWq-LxRa@Vcce!A+GHr6p^H;m-?C^hhy2^$qzo!lC(kb03DP2oQmvn>D zh=71}cZ(7t0@AQ3-60)IcQ4)Dy>#ufzyFKp6U@2KJ#)=9ac0hx-y?g;Ovw%QTRbdY zjN`OYNB5Jy(QV{Neb^;!A)ZdOZ!Af%xYcI@2A=0MRmNM=Q&`DfxDG1UzKvo zuWrSUJSV{47gn$0*yJl$gF3P#&~grgu=UIr?uHgy=taa{d_LmrpK2)7VP*25c#F1l za{gE#0FitpX$h2#Kg+!-pma89LJJEFi&00qB3@B(94E%u77m?w{Jc1CRWDWKtq&aU zw1OH=Kkw+@S?_I(78*%!M+e}dj555RG_fa=5&DbO+a^RNdJ%YGa9!Kbzyy^;9{!J`5UCQ|&pmS4}*vkvO z%(!UkkZr#5I4HX7xHGYW!ULZ;n#0}UyOV{vYFgFH4aq$; zTawftd`ebi9d#+DYhXE`htaZ^2^7eiKT2PVNu9qocjD%nZUMAB2qqaN_eW>$v@6@3 z>8+}{tE8i)K@7?nmNb(hh_2-F(QMc3p#8%d)A6rf$x%wnP%DOi&oV9q?ye&%HJ6jd zo3mta^9sZ4)8Y~_TXnIPth{5R_W)u7yeaT(cJXdIRA(J$wpSmUH~g3&+UG1hF$S9+ zGX;UsCf{`AXsT8Vb0+KP?-GlhNM(*()pJT}@gD-0Zo9dypyF5iEY-#9uf^iU2c>_l z^f;$E(cCfJ8|dX`ig&H`Yp>fGPt}Jg{VJ@ZlcYsS1XyQ@cg_}M(IB;sf3#_Gz`xun z5tIo|$Yg!LU}lrp@uAGPg!}v|J=y!^hFZ;McT|IFQLdUlL7|&93@Te#Wc1UZle1<# z)c#%XmGrUNO@z4%YYPer{Ou~v&)Z-<2W|~~ld0VdzzvmFO3B&udp2KHJ^D2V-lJlC zakvS&&DrDUj^8)y^2IbIIKVfl!osgaM%aI~-pZ)F?D`=nn=8Ww+2hJM(8(Qk4XLA& zMhwr@_3nNu7ub!bMzenhP7nZy*zL{FI328=dOWcDJ_n&Et59Qtb3AvCN(jnG8W z0(;u}=N;K1qWCtI?zps`BCp-?A-x6sa}e(H9;u7g-Jm$1_i`pBrHlqwR|!&kRyYan zFDgF%x-RF{T#hla9vE~p_U1Bn*@H~;+w$<4#dB|vcviosCx!+#OU4uL`IgzMEPOfG z&Plvb4qoS(W^D95N#=E^+}OL@Z1|ZI`<%<|Zl{!(uIR)|pV@@wK3N^|qgU7X_hAdg z&4@>IuZTG*-?g%1jLF?;Cf8vZ62pvX1q<8xx#R3u6nV0@5aXMM;lMb$skM~#{2L=< z!mB9zHVz!s=rX68N6Nd4o#((m=3kY9&YEgm2|ecDAGxH(Gn^DyI6eY<<}@YKn{m~o z#8-c-)1|@cnz5&M4jrbJ$fl8I2tTinQr{h&Hn=Cfuj)P?zCo{|Iv60bfK-*AFo88o zcMs*hEoYxeuOn?Q(KL41p{%X8JXfscgkGSosx6&M1VDnk+liEP zdf!<|5kvo6N5JTO{--SfUG}8%EOL>9Nw&Og*?)0vZwrw?rga8M3B9k=Pv|fy;0I#S z#QHH`Qrubh&4s22OQ(75gy*vY;#qRu6=T?E_{mx?&YZ0Mn0_7&`B$QZi!rAD%$=p2e(eY zo;8M3ZSM-wfIBq7X6DV@S4)yb(qgCFh0v1F%@z8~y7LdAbPPg#KFfj;N&KBMHd1-l zxItEHsQw{NH}|nQg*O5zP6R$$bF(xI0iNp&rqo?VVsTg8BF}nfuXAVZ z=Wn=#c7@neih%?dQri$Egl zTv-~K{I-6azd)Y?gT>chw}h6jb7C$Z6kwXsx+^b_^KN$hES3Ou*GfU$*1J8=k5*}h zZvxSp)18Wf&|ss~WCWKpgBFa5KUb}hs^_h;O7|e0j z0_b;Vd#034Eu5E#@Lzuksardy@MT1kbZqtQ$Q?XazxrX-FO0HMG(hO>Z=QQ zIQr`q0l-zIUv>r7t{5y&8TrO_!c;BQxE3|wAXIwy)fL8~E+EtTkU1HtQ^qTmYxA_e zF_R1K;}hz&L6hm7d-o?SG(dsDyt_kerDw?tgi+iZK3gBMMYXl`IwdLsYw*of``y;C zYb|MsTvbZj3@MQ10wnC$;NwvssF0BIw1E@yAFG!S>Nkx!L<|B?XxCK=VYhVx8C%>B zrRdO>q0ap~5`G-oB3LFIExvl?pVbjKc5!8H+7jQrP$j~%VCsoPB^Lu6MS_(#iL`ac zKk!`w_K8;zK%t@e)_4*~AVt3LMwEHqst;J(UO68wI_5gO>3SjIA8w@?& z>qtt#t`#h^9Q#K9kpEFis*Pjp2nR(%Zd@C^6YcoqMxU4U7;6e%Hogt;<}=^*L*nlm zKiVb@As{0Tt~Qr^{(g$l=~nRPUaHY+F1dNf+eLkb%D{6TuM^5=-v5I4!!z4`HlNPc z*;UE!UMs@3+cUyH^quN*8j{fkm4C>6eZdI^K3q)5?=$jezx$aM&2*(>RSFQLoaM@bK`vXAKG)`r?bfv=rtN|#5|n=d4)k{=uKrt#Hw?7?j%$_Hxs z-gC84i5A8S==Z>5$G06y1g*nQALE;8p58?(7n@zI{TC!;_R!rsTal=Ct|~AY6Lt}G zM@1-fGf@?ex_VpFP-c>T!7agVXc?zde}&gfBSSd2;3M&ZBTMP}I?U|&ZLx#&c}t@W zrZKp4UYM0CIaG!Z6yLOqZES0hhATMDal+oEPLlf@_3F+0)pY3|sW^@#-1 z)bP&UorkV@&1)%mGI1?%tU`aALI)jjAbJONcvR-t13_xTsH;Ef^2KC_t#c-hkTHnL z;FbpCCf=Xk6?uPh%!S72b!x`}gqLp3T>f*Jv8a~jB-fR*g)KAATT@yaN%4)Wr9-(% zfWo4@1ZF`_niT{fq<^hN;x6C$;>#X!_+p-M3-~_nMbjbOIgsEL^L)S&W^q(l^cgVxa}L#J zwLImyy`t3tB8EHKG?zmAOOd6ShgxEmyWAF>!emWC{^PF!=b*{74h$zWki&~e5kE(C zAaC$ithk~Hvc1Bcl_hp4WJ$~`+PLGUD;$6WBx1n>L zEFH_Ng?%_JG?_}7Z?3Vb+Q@BeQF!=sl;NM;85w#+|0hWYDGI5`tmM0n1!+1DRD4L* zTp=#*3ogD>7QfXyiK;gmAWb8*=H!k6(! zgp!e8=j!aBMRdys<#THl?ZA;ln?y&XF~vO@Q%R;HhNuVu*=_d!cq6xntx9!4)8n1e z{-{0aJnz!bSQz`L;`kYiJPA^R7^4g5{G$5r069b~-@8a@x!2vv@s1j?L||x5ePVva zDSh1~FyV#v_*c(~vio{_7*P(52X!>g8;_cG`G!C1CM}fHpJzUh412T^Y-avv^X{F- z&lUbhZijC$@Nn9{T*_VV+ta+^{K{w7ZN6_xJ+j0H>d8W~4X~)HT`)av_&u6-2;A2D z00qt+G|Ze>{9tX*@SsRKcrQ_QY13%CvtQI+Y(ceve4{_1G_7Q>*Z1)qNbMIyMK+U2 z)Q(^K+j2id$?UsZ5{lWnj1Vo`JIzPHNGbnyi{%!>NACoiNH4i6`Kxcb5~0vgTn+Sw zg5XBu4W7auPqjnuh)m8-S$xdF5ST!!4PRxS&{u8auWepXa-Y)<2gek1;F9L4kt;op zhgOP?d1GXJP=jIS85x88Dt&c5L2y2CWlhc$-M*IvR(i%L{)BJPm;~-fJD0sXd0*0KlDDhG>Zena>J#lGlAT?CdL0S8btY%=|NsNN~EJ<>jt z`G7v*w$p9W%F((#xS6ljwZ1`85svGL}1TQUpFp~hx7D>&HhgxJ6PXA zsCMdsQ#&ea(b{CnPN-u<0u zbftsXE@(}Ml)b}nI)r?U7ctQLKT&BDPTq(9*O|?jYRb?BNi^%j2wNf0j^li!n4f(HJV#Q2rJ1VQ&?v_r0kb2(+r+FMD2S%5%9f9Z;MUHOQxAabX z$Lq~Js`>%l{!hEI{>Z-viH6w!sRqsoi%%VQAq3^o=i^JB_xg)YA{u@=dSni#o|GGQ zYQ~7#BT12DNu-;brNwJ`JbDC%EOaiNXjD$=dT3(=*$$-@=6={flQO#$$7#KorK^;} z*u6<*skU1`#(R5^hg^7qR-YY}{<4=&H}A8wQhM@0B!s5M>#C!}z$V_P_{h;>;ntl{ zd38_ng-U$+1=l0#MPK5zT^K?cwhfiP!6Sp?{m7pWHoaVOFCINkckq0!E)I;9zMx6) zuce&yq7I4Wh;@YUdYm;(3QFum2&V*ZSod8 z)Okrn?-P9Ppo{ClYAPMLKC8=HlL01JkV9lfUZ_4eJoJlK9*|magKE_TuY7mD`WaG3 zs5+ncxF4O-H=a#r-!XvW#kBn@T85qpAbXqa@ZkP&H<9w7ZO5t>ou#};xgOQtQ?4uE zTVg5e#gpey9YHWvk+ZM41S)YpulD~$$^1`LsFr#VqD09;c`UxmdL-Q$&qTHpjK8av z*=+xrsLCPHKkqG|BqBR^v88m=>RTcnr*0>G!)oZ3$luHp3#Zs1&Qr?$8=G-!LkX;t z_Ae`cHedv5yoTwT0{NIj2(R)q{-0MFKQF9m!+V#a*K%!TLHLD6oPtG4wB~aTvX-mM z$phI83QVr+A2cPD8=N>jd`j$fn5KW?>xw8KND)m$Do&$pHg^6%o-ID)pxt#$y;(ia zk#U}i@not3G!2g-)9y(ss-}Yp;MfT5yAx>jpLkHoGH=80d>rA>CE-5(urqi0cfEq^ z@5jfyko&vor^X?06q=v7R3p<0-JK{t=gng+{}k}=chu)5SQ>)!^~@LD8G|q8hm{2F zkO1{7S3UaPA->B`pO3=b=Y7rQB;KfNVO+2d<}fn65Cz#S)+GHQFFN~Bk&SFW`5XEC z+*a2C&lLHUe{`V9zG_wHG^HIT7{#6}=M&|@&;UFK24#y|8Md5|@IZbJ&0v{lI(WTI zCbY34$=heZ@MPjd8`u9$ZIb@&6{<}q~jpPDPjU#I(h71vCX8;aO zsi_%w(5R82;IUc5zhgR@_LVVJCWh@F_YRtS_>j}V9lShNuv3d6f9;x52v;rOV|QK- z_(>nJw8;@Cag}27Y&RM4g#G9k3LZXuei&49K=}^>;i*q0hz6)TrrYG!-hfKI6Hbg$ z+PjuS447p4>PLCL29FbY@ujwuXNuBL#EaY+6D=s*1Zqo)-hBP)Dxw2-jDxpDgDbie z-MbycXnvNf#Z`T&y7M*U1Ld-#QMglX*deYm5%K2uPlWFZ-W{WT$)3L7ho z^&Lpzcb8l;Yq0;Lp@pVy=B(4f&W=4YfpQSz>tWe%@QD9F9sAJqI;5FUO#(XJ4rGoe ziRZp#TyAj+h%kmibeGe6;=pqUwkryDc3uMFc^)TlP9}91suty7fith0kOK+U3W81gG z@$Plx2Ikd9>XDID_G-tDd*Sn+L`TW>&kABMUs4iSe17SIA+82TR17|hUbX@5pT#Op zzT0?rm%s53@R>ok*v-JL=N9qLLTxtal3D2f2n6r-Q_6%pHBN!S3#EWh8U zLhSsuzmdDx@6jcWBa3s1On*WB%^SCohBfsL>3mK^K)~v@$u7+B;ByWAY+$JsMXIEEsNV~*?S-bEUfzq_ z#j^)?J~351j>m=SrR0{Iv_3DU=7d&gKPK!QQI_cezl^$X|{d%q&oW^AqFb!G`I zgrIL#t z(Jp}fvt)^BmQ7-A@Cj|X*eFn7wCrDU=fc6;4TCQu?}&&Q#}OQQ8~4@ed;Ha1)KkDC zf#%X2{R9Y{`EtHb0(B;zM7zrrbwW-Pi@mge1g#TNuA6Okb2%I<2PrZg{eg@2dqgld+zM@DSmq4jo7_dQ%v#@iE}!_3(*KIC4^ z(s(Ld%hIpBVCJDSA|vYhP@fU%6jpb|4$2Zxm;x%SGSPV^wD_*n8~tG^F|erM-#T_< zt8Sbh>f-4h`AQTXo{ngs;N`DI-=Di)5#w)Ts)jT!-Py!)_C|KN!o=wpD!jdkj!8f7 zw4$@T=*`@r^4=^YL^*L|>vI>sZyu?$AVu>|B?Z4J2|u($fVgiALgl#0^gL@fO-9XtR)Kx_4Fge^Gm`HskwJGkgDPGWsyNq zqyoc{m1^9L-ANEn(*y6nrly6eW^DS#VL`#laLEF)qp!bM*e=m9k>pP|d1jAfm5h)* zo83Bz?zr%^arj%De1Q}cs$+hC z`ezuyouC%wZkv$f^0@-|rGm6HsDt%sB?w>b6A(1KshRL!rP+-PQV`r4q~3r8T~-4@ z9biww1^P#ulM$vh-zD$R!wKPZPNK^4*E!TrT-@i%vYSCOy9s!;!E zvX-w!WOcq&$X2>{|mYvLfgQ_7iELmA#MOvxYd|Hm;1GDTl+GU}pN$S&(BkF*rq}Kh6 z@-@wT+pHE9EyvrPUWP3O{)%l_FU~wJyO3^aXh|hj)o>Oe9t{r@yp`Ds)HxwMk-|1i zTE$Z+tXYnp5TjboV}Neso&Mfx0;x*ekwZwD#Nfi-u>cmK9Ejn%fynllr0TS#zkGi{ zG<+a@i8~DRS-eeOFPwS8A?QrJ(hRlW!^m|tbEmQkt;?U4e~6V_yBZWvg%~jy}=i!4<#Uv!W!`rJ9X?EjDGt8@8+_=}}s-HH3X;0Vv z#E>fIU)`8$-FHi39Y^_M-i}e3qONn+%V4`>ZLyS4<*%uq!DX_LFc3ZzAfN zT>>x6Uqk4dKdw=mr$X{?<%5f@xLb2=^bwj}31jNa*S2X+Ty|lbT`b?ZHoMljR&{Fi zg7s>*4-e^{8yq>``ANi-I>^YlUj*4T*D z+)oOmgj&?)!()mAV}}{+60&)(8@xwaHFN&@$8z`FX$dl}ibfi>1t=LS5AZt8EbpNs zjbw@ck_@h*m~LUjRw~b0YS>Yx(fHtjSwyYvech|Oep>m}4XVvMD_kcay#|gsB0=ao zw;IBPGr2}j9wzY*N~akx4EX+z2p6?f*~FA!TgtC6q}-BY?xv+GRIha08(aJ^ga&hE zSXbxVB_cu^P!+1joHSt1lXtLMVha-C3W=9o-2)X(H$8!MqB@>FW2L@;VWp$?^$5R? z9kYx=AesniED^;m-kH6D=+vRu3#^_-Dy4Z@`0!!O4}_r#0`YqS$U)TPr&p6l%L#CX zpp*m%LR2B<*U*x`U3a)6MC=N>kdQF%r1qA(rE}@D3+GiYf#s>=v2#&W8S}jG(^#km z)gk=Z80!}oy&Es0olF#g>gEUdp5nZ9qdv7{PWwxu@O*R%P zFY^*kJW+XDWD7l-M6vD#VoDt&KiWa{xL4v6pwni@iOnC1tPX9sommB;z9d%$&)+II zX&{Zf2qkwTg%m(`dCf!B|0cEJT&_`GylYoo-{6L3Q~j3g;z=-KI{|6sT*mpK7HyA` zzZ>;Rps7LRsqh1v@O&nw>uy7u8J=^VJLbsL+f2G&8Un} zg#|=}aqg`V^22NDN)RJkL|^2^^0UC!P=l1kfrLJ&#+ zgP@Z7XuXz>Ajex>9NJ^C;(_&M0)4Pr|7Lhc`|lbKPe4(9bEep?BaB1nx!0VFNu75l zE4Snib`gF@YevUGxzSyDXAArDcCc7}k{$EJandWBd!GUT# zv$*t)Gt>O4>r)z|#&ZtXfl~V|M~mYf9ZWX)DhRpxK^_N=YJ-s_fcK(g^~3?x-#TC z(NA4|7H;uWoOd_qvQVPozvvN`(d^Mwz49+Mjhoc~@+U(%9V`MtP>8*+YZq(f8AV(K zUp^J20<<1$D6ii*him(PRc|l;i^xj4FRQtb0#9A>T6D{D1*M7)c-;7<)Ok5P98^#A zu9K0wbR|{pF?Mm%r(C~9qO4rvk2C;|?frXx1NCEpv%_j3B2ox3!H6GZOmwK*ZQ29U zTES4W=8myg&9mddUqiAKE;0Q?K0jv11+51_ioAVfNguys%OeoG=%+rQu*?XvlWfZ{ zCkRl&B9t0DXhiP+`CLHaCS3I6n*}~_rMF6>T^QoM6T)2G-=QE~%pq(j>LC7##G)i! zdl%H`G?$ESG#W8B=fMSS=T9w4y=&}U&l8&yH*c{s5MSUy;8jOv@n^f>k5v0zKW3nv z2GQljQp7Bae3iFnXe1?wEbpa#!&E-MgiMx>d6DaXYQTk11M_aWrkqdMXW`}Q;^Ih* zDECfy5b|B2oS^RWcImD4ozAOQaHyIsu~v8(@xVNh^izCUgBRmpTxHL>T=>@9bN?n} z3%$%Nl*6;U{atTp6VJ}e^d5t~`hq7jX&1n;@3!4hYTi*eAqLS5tZi>t07Ecx5p={= zE*y;n9j*=p7eF=6kZT8ytGL#G&@@Oaofs9lmMI^JIm@2^Xsjfh3v2H^_)D~0hk}{; zJ0ZBf+Ll!FD@tkH(}=Uh z-G_#KH{$dK7(%-5gr31C?63r%A9TLl5b*CvTH(OXDGE2fXib zIn@ka(--1syse5uEJPj1!OZBj@Cyl~Z|pb0YPON2sz;-B;`JP#pb8D7-uCwHJ0^CO z#;=elT~8(mM!wg5QxgTjTKrq7Tc^)IKX+o}u-*w`S&_PvVEb3|rR`U-MULh{nj34; zX>&r0kyr?m&~t5q)MY&LSeACRef$GXm_D=_^{-`j&$U9sTfp+}7ia?#_Hi-}qmeTr^@ z1#zsbhL%5Vy>%OpAvtk)_ZfF4r-4?iV=r0Tax z#iwBdv@ZpQk?&mR%*yn%?Rm5~@@j|$~2dP+xRh`soLp|jr>P`qwcsQRa&!1 zKM5gJ2%dpaSpXM2%?tKZ>aILSn~|&2SFm{belY%n8mk1cr%YOA{ms%+`+foP%`T<0 zCXzC2IOs=9EFrA%em)5`S}}lRl0GJpokL7jN5v!vz+}oG)vi{o~ zgUD2wP~Eb?JEWgk2&z&L(mq{WJS*ek^wijcti@Hn@gv=TW6Uiabh8h%$>DNP3ZdPZ zhDv26v#>!}8J7?Y;zj%=C-*htoMyJ66{rP;zN<(Lt@Bpeg{)xf13YWvq|o*8!isof zOuvjDv))a*e<1EUh>Y8w=5z4KUKyH%y5@{RDEoIvb`ZIl=z|w*9D+*HiP;{W^4Ln! zu<5?e{v7U3ULY(D1PEW06}p78UzBd&+qC`6Xsbs(Yia3^<)YTM^{xB72YPQ z;>kAqrH6i{{{S{yr}h12r2~cYY;kQ0P^nobuDW`}wu0a(RqQYQ4#91>vjNpX53}VK z@Ob7{^fR-EgVD8rVW||4Qj)DmnPT^08yTIa)kCw%c&tm->O{x+R7HXy_4BEu7p;At zrifqI8=;_nX9^LDV=Aw#I&h_dkp9R2;l=o4{+pVG&8bS>2@xBJ*Rz|c5 zJi$B(p1O#IVf3x;cf*#$8+U&a=`tUHzwsXfdeZYdx(4u2(ZUbxNi#xj&$wvRZ-(Cy zJuRpcE$@wZ{pnPTr=Xf6cTzusyUYoGUTl=PP^}2H2!cY(ke~Cj^RN-2=>YBj&U@5x zjby4`9=Z;%^`3RrNpePlkBwYU=7+ps$N+o#=<`}$E9AYhBPP(w)7Dmg1(YW^Kw}U6 zd$E6dI<^&E>btgP%i6jHQ~&}`pD+8nk4KNk#!kmzt(pd)C~V}Wu$-pzf0&NObv~6h zK?DM_LtnGd{2a$KcQGdiDx>DDgJ@oXb)OBuBt*f#`}xe z^m#7L?(cIN!EOvZ`_2bC8EDmVo2{cCI?V9gs0|`2PFlF6GTExuj^@=SR3B|GACW)# z-bb1cnd^fa`+HI_jdJ`sPVmpl`FRZ0|Fll4^ruU~}9%ZMHINondL{H7oQ)%#4nw&vEmMT1#A}%g# zc4$q9SLI@jbve0di*QzQBgC`q(N48)lGh1}Q^}l=?btj?{qJGt6^@ylG;NVua$yGFwTS`kkj!+ET6&3r4~%YN{jZ8Wwt2h{$cd?A zgd|vv&W&hpnWp-G4SCJxZo(HpPrU=S3`$EW?z?!Q^?xpQ?1!bP6Ar8ec-w_lj%@YP zz?-L9Xd#=kuTKx8x{8X;(fJIhlbvObN^o1+pd@a#gE`mtDi)+z4wMTdSHg-^D@)A@ zkwnD?FSodcuUf8O9D82BLQ=ywIpeYPs!*T`GRMzd>W)#EMg3djDhJ2;BzV9^p3}ol z8sqW-`JY;P@yS<5=9^a6Mu9I`4c0T+I^ak&r`uaJK4YJl#S;DV!2aTj>LK85D0kfO zLqB~E?jz$zArFc*?uwV;pVcQs>`+p`D{i;pG4RO@iydxOuEvnG?lQv=lGZY1Lm|Z7 z>XmFOqrY_DFN(3kQM{GifSRUB>7V0~rf~yE54cttr`iP7Zmj6~nsD?!miij>tIg(0 zNpv63q0fjhFN2Lu8(2>on^FsPoBp0iz$qa@G-mBRpwFbOuHPjQwjFeUn`o8=yQmqI z=F55SjC>jWq<#9ml3y!3TzcgX2`I5h(%d;ec}gdgnv-nk&AIjISQ90FsNM;G!>9{k zPyeL&N1TbpeUg7yzc(AGvWk-7&%MQc1WLWI8tl($o^=Kl`Rm#vW)tBm_+t? zH7I8Sqo?p=^?*l=FHFOVQsABZx9H#ftm*Gls~tO!O2ZfqXRu2vJy8CJ-uADqp(qr| zQq8cQx5JeFa@kqKsiI;lV+jbl<(i{N!xRrF{n}vst-l1;N<|GrD42($=_kmJPOg#k zS&AA3l90iT6befS;R9?zNKDDqI+Yg8$auDgT-p7j z3`NZT!}?&uNvOT*`t~0IV{U_poey(r^ELSM#P65jM7(Q4WZzk{tdcQZ;4Z;RPI#mE z9$A#c>3Go+mf(!=|)S*eW{($#lzu$Hc< zhw9}nOqd7D8`M`RPw4W)(cm-+0g_Ik{7ApV zoHXH=i|)%vd>UoRlRp{tYiN*Rxo2cKkohkZ19sYgzm?(H`Z)!l>L0B=bwChH?{lxI zUH^L-N;Zzd_t$F@b&^Kx#xn* zFh4qeO5uP#0t_z(<(FbU3>FwSuAUiai@kBwHjl0TdZmV^c4STvbW+vmeV##}bLaQY zhlaA%`=f3itX6RaYRF7JRJJVtA3#IjJ{B{Ks7f73=# zj$Dnki>rG;TS?A@%nioYVd8BM;u^2mJXLwP(kyum?5Q%%jz#a;9@CREf$csMJc zt*8woo}FXFxj{c-Oi=lMg~O3M`+!UYJ_%26olkrb^VD7mc<(*-fB)r%^tlve>QN}_ zdCAL5B9$=g(V4QoMMx_?Jqgj@!>9flg3j%08_6z}6uxb54)ki6A$+)_z5mG z0$>?rL!oI*YB2-2emq;M61B;%$yFMS?%|lW*4*aFC);nwv4%kzt{^)2u_yA-Z%4*d&doK*ON=OuQr$O|gzm!e14 zCmO#R1YDN;D+y)UJ_mA=0I{#%JBr~9!M2_#vMl%i<@AqJAamY6&vJ+d7~CWtmG3pk zu_H9dCV+Z;DpBLJ#p{^6S8U`Uu?o@v(@PlMXibQ-T~696KxUP`oD(VYQ{oK03dNl= zp*7OmQxQ!2MSjPh2AJ{&7eAxvYn<-> zR3UvJx_IMW%G&PxAtL%xnh$Q--efrjiV41NqgpN^*Jt-*7-?(hFZMh8)hoNo9t;>%Q+n;B<-TJ{{~t7gS%{(g*`=I#eR)*n{By2QaZSj8d&puvX+irbW8nS7!I4eSbRgI&M)UQEOX86<$BaoW)ssX9|)PS81%K`%_3xFU45YH&C2F9iFDqp-kpv+)Uby-R<0!E^Ty5D zTb@br{ZI=hvW4EyKAxx8-Psbj>h;2uhMsKS#$_oZBmsSBmCmuetflX-uOJdmI;-zr zag~IS68j8E0lu6z758RyRyhuy+C_PXXm?`FiFfAW$CHS((HI0&`R&<^V~JVSm?A56 za5^q-`4gGjHmnB6$KI4R#s##GKlaFeyB%a5%a3U4{r%aYpQY%waw`e-1?mS6RuOr% zjC7J&AD7mFC^TU8jc4CmPUv=cyH(jLRAQEA?;v9^$9~HgdhIA0(^Q6JRbM^oLpDGt z$?S%thLhgrZHKx}QS%eCNP#)JD_$*AM2dX#(zKNBu!)we)y>!QUkP#ZMVkuN6VZir z*lz~#_3Y8-1?i;kB}aVcx>1r6pe>bsl9^ona5MVHfrCrp{gZ#uM$N!EUEh~qK!mC- zyIA?E`@~-wlwGIq@N-G~Vs(M_C0dOY!(Nil<|Ok&8Fqmiw(Lni1XWyG`H`GhRH%t#- z`c*U6H`O$NynH}TIM}i@c$pf-){vURe-kjl`WU#E0r+Gqs*tUw1v#VC7*;TvB>pFe zy!G^>tKP|2^EeQ--eaxl&Vp&;mqYFsU|UnR(i#@J5w)FH2@dBW$<^iJM)pz4TVV@O z>cQyl$2FR5>eu=R%{#FRd($dLStyNzw?Ms!D@ndOP-tG42_=LS`s+O0n)O zTth?}P&@KI=hfJm`11NE-wDto=sXT}VJUm>Md|njqhAEDC|q9i8~Kjk%klU%xm2Ld z0XXIDl1BmNIp_HK6@Ys9s2yI`y21B3)~!B@X%jXusD0L5b`7EVuq6r?LQZ>@MB&pZ zBNF98J+TtHbai9dR=h7Z!6Amx971VWPSRkTm$UT!gBBF1eKLVn2{ivM773b>=q`|F zEZ?8=NIgBI*)CC^^2Po;UKD8ua*J^llQi@R?FU;U(a6m5$|<0qQ_}E`!l|#0)`T2t zokQ5`ZNFxIg7O0*eZ$Ez`DJDf@2eFkkm9k;W~Khk{kzHpG|AKc4*gkXVDSo$zmaj) ztSIP!=H__yE0tj4>B`1P@(9g!W$5x&TVe%H=#6T!n(1`i0T-(B>@ckI7%Z_B#*Gw6 z9Var=DF+GiA+U6*8g$$k6n^= zO&2I!&Mw>Tt}fel7rWGDTV1wo+g6ut+qP{p%Q$&o&->vWWhz=ce4QbL-y01F^z!g1g z$8m9j`2Cdrbvm|j8ytyC8(0EsqEcV9g1p8WJP(;nu37IOO?i>k$@W(lcSa7tf2a#L z;2EdE-i16G69W$#-o>2AVv)D`{FtKY=fJ+cJf%&z#_)=OF*d0bT1I?P*xSl)_ZP*} z3-H{={&ru$4EYTPP;M-_7oUr{lv=t!XL=<=A!RPU_?DGpyc6lObkX}+< z!l|L&o5i{rDbO_B5nanecyqB|MhwCWJx1XWfLd8`L$dpPdf?J(@XVbvzvxIBzqq&0 z7>)b29DY#_5JZ0PR>9)@iiCI9q#2m^^G2S5+}Ue+7<@7)c13MakId(=j9g!`^I=$V zvh^tY;Lq(OUg_Ds=i~hWYE9`au^xxA68*w>Zv8@0+cI`KpJdq`m@ekfeI|IgbC`9OHsj=FN!2t6mnwulajtCo#S%fU0d)*R#bIigq>T!Rl?w5P)==&ogl z_T)z(pe#l{v|C{*1OY*skpNjotr3mRr_R znW4mD4S^Amx-P2Y`cF1_|o>%nTr&ZKAy~ZOETr9d{$A_jXc!cl4kkkYUF$|%>`6!dV6W=yF%N&jkgqaS#mDy+gd5f3-MQ{@zgnB9&sY~sXA^Kj5q_zs#HN5H2)^Y z_hlM#oyOxR8G|C0Ua0(17(9-7*-`m{bIH5jn5HuPa*-HhbL^?J*Ux#go$c&7=1o#P zs1uRDLEm>f}0-maTi4HUSu@=$e-$MB&o1^t{TbGOJu4#C#;pF;4d({EJ`al9l5Fj^uHb#zcbt zX3WAQn&eqH>`fl;dh93wrx zAuwfE%FhB?BqxMw{P;pQ8E_Ii!9W5g`r|fl#TXZ96c*I>T)!K}kZ(=t&#j*Exz$ot zXTNwFk(uFJrjWt!0zciK3;uWKNq;JeYmvT#P+6?m;@y;o?`?`WZbd1QC)$~dQmU|KmbV9+^jI?d`Baz15py5)@H8-oWsu!wwz z@L+zW9e!q1q7pgS4$?#n+6|%cuTn1KNsuKnaz<@k+n2*e#V0}CzjxRMd8?pDSb|Y! z&&$U#UaJMq{j#EkP+koRQ));ErVVTjQi#ZHY+>V2-HRE2-2@ZE z$51vA<}%0XNatBkR_nZ)U=RhJ6AKQ(XDBSR8--!ZxRug&3_+bUBDVJnF=|>PUflpo zDT-C%4sH))=C$4)MZU5|&%ydX#tb}uW08qOg9_Ol2lBNYJVQ}VArZoL3}%WD_ODKX zUe_1A9(rIE%H$w zLXgY+&>DHH=zoxc%58F1T$YfJ9zb&TleT*7@amBHMX5g(1p-O&i^1c(m37OU!1xQ; zob)_L(=Pohkb<}PI+wuk3*HOP`<_2pK0rgb(p*$|`bn)yuV43p$yOi))u7uG^MOi( zqmuDrqpf;>_N>OUC)_>*LTEkJQ*not(P1?&@rzgVu4W$(Lct#Ytyk@Aaj{+yrJx!* zs3{oP$A-5}1AJuppf&WO+V`cxj3V0iGfPLky#h3Pu@~eH6n0~XD=?$_)hr!nAS<#z zGmMDLyeqG&leU7egE1!F?WJS3VDV9Ep&w9(Tt6^rByYI&{~mrd4=nGm13#6Gy=T!! z4w~nm@Kfy#tXIO%^-LJs!xHs)Z3t%gXy&V*v%`FDJM2Ic1bPjNEkIW;x{TgKO2RzD z2GYc>#i=3;7M9kMg@|rT!~0m!d8uH`Qn6;%2Kji@oaeXWJ)Uq)R+RlpZ!|C5F|yQl z=TW&{V^Zpu!|$YCyS7yU*wNSljY;g7E0=D>Y?opJCgQd7yf4^Z2phxE>*^O8;+^4- zfouu6l-2z;`rVNk_oa(CCo($VR)s9Ilzq`oyL&7nQY~S||33@h}8wGJpZ$4^HDb0*L;9Ph>C~B=eccDPs zqf%MNjDy7SyG*cO1tAu?8{&iGE5j>`Ae(ydk0pvqnv_j}Ty#EM7%|!E?>g(GSCtkH z!VEnNN)G#=rA;>TiwcJq{}PH}O&AftcxIOuTDrEF+M0Rc{^}GMjd&$bV<)0kYR&mU z-giciF`LpQR=_`If1+Hr`7`c*8@)@&E*Ka846@eWL_eW%PJw!z%vyZ7e;6x%R=E3E z-CBk0^o0G8kxTJwq4}pD?5nC^7`TPCSNIauf*!DtMU*<{scQ){r074bw_AEx#NH6x z-|qa#g9FC}cWj-oX&9^3p}=~^dLn0TQK>Sz<(yXW9Tik7D7XN@CKyY{ey;Rnaw}q# z_1$wp`Kx*PE~9-mVm*@S&2Q zY+!r&Ev9X3pa3dF>Rx|w%}03{q#a}+}a0Ue*03~NCWr6F~Sv9#Fce9X*P0AFXhv_*f4Lz zrUU;g@Aq9V8(aNA{HsU#+MOTohDkR7)gW?NHy~BjU}`wqZ}x>kRqN!%!{RHd%So^a z`;SsRh7Wa&em*a_Pe6uJ=6G7|OzP1BOj(BJ64TIz<+YW$;njoCt4bF4XQQ{@YrqBvAMC!b^KH%iukK^m&gEBAFcfo{){ z%y>lPDj;1~3osA%L8;n`6j=nzR*?xV;Q4u8?*k=KNHTGHB+o*D(>T{42Lxx$dfLq- zO4==6O-QCs1q|u!D|@vye!rxR{|Z>PtFO@x*!3#=gO)mCnY+PJ8DQ>ChjK%3MkNO-x~Xl>dXIVKwaxyQ+VqDFPng;Z290`U@r0*`RB} z7F)y>%>#~LusUhMUX2US%3Qb+%Ew0uBiWJHmCz6Rw7KTNsY5Sx013n0i0N4HsL+iRKLtk_$h49mATf_y< z)|7%=29}`{2EPiTE(UvI$MKon)8MUGYrXU^Dj%>oxrL;CLHwe|c^wZhky4B&3{cmt zqJ{6H;KAG-9EBlNZqU30SNm3Dwol$ssC72zEx?Vx@K-9-esJ6{wW5Q8+t{H`NDEwV zmWQrRBqmXRsgEAp*JDl1WF7T+M$h2Bs(nZU*k)QS3B^x|v33C5uk84E-X-~euoKcZ z0GD5nB`6jYJZ&QsuCvT$e`h1JVILjF)UNTwXGhX#_1I>jVoH$(52TPs*u$RKX!B}NB~2enme+YiOtJPEI+ zC2^YUo*pMe*g=t~*H9w%%%r&FU-K(~yOPL+X<@xG-$-xbeh!-U?7u272WcnO2Hs$o zZI9_kFBpop{bTN+mi#rS9ZwF`Ft&zgMQ~F|CF+t|V{Y=6TkOa0m|weCTa_g~+p>uB z6bVVNn`qqgOOtS!NExksc|LRh&pWWQxcY|>EBcZpOl9{4AxAATSC|(i_n%%>zL6d zgbD1dZeYM?k&ZA=5jQhGHKp=x&Ccfz=y&M|$rUg_+yhuz%>X$Ff7#2Igho_egOsPO zq3hR+W-JnVPWF{&QV}zcGuei9)wjM7j>UdPjMFoJdjNiVdw2JZUIN63Ea1o2p}(5g z2<79BxnND;9a3FK&x&-E2f4pQHp;u=F0-#Yy@hisKOm0gO-x$91s{GE4OH{Xm&leL z!ynvwPTAAtsO{H^q$c+`6ucYxM0sSX-mzT@(T9zj;q7SCJ3V1Ui4jK5(WmFOgSB!WU=(-2_|cm?+=TRPYZvL$jUBxTg&Ee60AvMFdG$-6li8$BcBkC0WS5|sswU~=mVAyOHBFv zX`g~vBwS`Sl^=2fs7BKKh}K_JXreV|)Yg4xJ0lbGB=73DWcs_Y^t7 zeWJ9>(r;0+md;5Ck2x6)mX{4#QzW}EoCkf^EqwM{WRw_-7lY_ki`{o_15xMnq@rSuI@LnNy3>% zL%R{x(v?`Ta*~I|8}c|sUy?_4F1pfDnWC>(I!d$x1mBP#0;7E@ntv~yzrnjUy^`HN z5Cl{*)ZDj_aJcM+KioV7Eksnh0B|>GIpk)D6)iMI9Is3;4XVIwchXQPEUx<@@0B{^ z;|Ks>_~%bNM(~00J-4`ih4+xJ^Lmwc*kX>(m$FsmOh}l7uqDQpCAoQ%MBgknq)6^2 zyo2E*8kMOYag}Ld2|0~FpUV_q-*(B1js{XPNpzEx4@Ga-y?h=|VReibV= zpe$Ar{t3q;Gn66s^o!-zf49?2qsD+6ED&RcxCQiu?F{*NF-vBzKZ45>`G!Edv?Z56 zN8DjC_}NJjR~^Gp|7D}JN>bN8N>?PV;_vi{Y0tm?Nm%L&Jy$l)F&{Bx06>`_ccysu zTtG<-$pCw&gXEqo4G%l`7SZ!O;i`(>6-BUveI{Y0r z|NmPb?cM&`I=Y>&0=FHD^FY5Ox!RYc`ac*L$>xsNRHMOjqnr=q!jNv<7>|qo!(fj; zzArACRId%jmuo25&gLigj_(hfW8wb}3g6zKS-@BN*L$sC>8le!k}TDJ6Hean%(VQ> zostJZ3GzN4#R}FMp6Q#qW+0J^16X#$U>eI*Q~h4bG+$4G(*Ix9yWt>-TUd9?>|uTT12#vJNM5x znz=F<*6T(snh5F#-8=)(A!6|}0htwFzs<+dv#huVM=#$B(DkUB;d&%tFrop1G=Im1WOaRM$}=fC4mx!BjyZqK!v3F8 zS6fl8x!aR*xva^Hri-k}-oV=ty2Af?lh_tmwV%g97}KFJo_vnIUT3AK`4`cWir_=mcF(To3LUeq=!y(I zazlUoXOh(^Fu#7=W6DmJ7~Gokj~mo~Ah$fVH z?#}pO_<7{SYI<1RX+0h(8@e+QGX>8RzEuHI+H@=f6iPg_#7j|^7J?pLrj51ot;FMo z*;`(2kqHK`4KUi=-jL-!tRx!(_+O4LIjUBe=Spc3ryNP^ZSv6_@ers)1SNkaDgBZB zc`ZCdw&wg`X&IbBe0@zjqm3ZWpg0rv)$*6&7Tw$X-nsSI3b*m$2t6z#?Ich;#@8)_ zqvU^9|7UuLA@zriw-zU&=ic1L`}0i0M&NAU%e2}RYFC(!-tgr5V3vGu5dczDBlO|DUjUy zFDVaLzid%zhHgeXKIDA{{m7#7?$)h0cA_}y?qNbfFwLXe$n%aOJk2_BvL5eNF0p>e zLEm2{oc5K#`0mL zKz19xm6gxa^HN{XGPpdoKgG)54;%HBH%$=D`Ff{G5iBrkRbeXL!rW`(SE{xC&~5oH)14(fXV-sFM$$Erf!b{jylS9UB@+{)Y*M{YSO>> zq=UI)d>VrMb(wvYwq<;_Q0gG7{Bm==a;%+vbRQnqTYgnQMc+J?qH(?$uj|I9`m6fY z=UjPnwQW~HdQjK1E1>^lf>;N2v*Qfz;cPKkhtGYe9MJ5}b|!eY9tEM})NPREy8OpS zdjIn*;NuSgGBEri?cFgOPKVHYsl1!-P`Q%OX<@d#$n@0}n1H6^<;pdBx`TNu8V>s3 zitLP>SvRa}+-a#sthQX9W$Fs-obF6Fln&?MKfrvFJnw>8dWlG;CLkdAR4pu0@BB`# zQCu0#RRl?B%JvMaGA;0+UtM;w1Wf2GyF}t6Ipndd;qR$K8MEIl&V2gY+%d}FqJ3MY z(EsXtwFGZPH<`GHZKvf824bj-{K)`r^H)i7f=GEelY4=7mq3SX=og@{aI~Af? z*ds2^La#kKuhBo_4lxXeiw3nSj$I4WI&|D?Z8PEQV=_y%^EZS9SA3pyjRvmPH26Cl z8|7^GYV_WOG*L6GJ#CC@<#iE27%KQckU!@5okOe;VG|d(4xe=RxHj*=?3WwpCw4J6 z*SV2eH092Ac5H`h)>?542%qkxs)#GG5!&^Jqmj7zx&lOA3tEbjO?SRRjlmu~sOTM~ zoCyi$kRRoHvfdlA4N^|{-*v4WZEYodc*zvsU_sWd@ThnkPjSEiA#XUtV4R#A!<;ZZ zy}SHFOkhYzPfXF^wze%Xb_l)!{a%rVV4(922_ScDL2QyWKl|QW>3@zQiZZ4plVlqr z+oYrG70<3|o#i9Af%kVnp3{e5yf1cvE>kKE)@AaP=nIdS&y0TpS=UZLE9;wHvNand zXj({5?ALT%Z&Ld$0Ji~>OVyk7yCB`41SilAO3Gm~hx`it^guPV%s!V_&GWZ)nozRL zy6CLNPl8UKzmM~h3)~FL5x-hKU%Mi?Aa2z2ouao{oNomFISp-sdwG5Te06_`Q2SZ9 zqyrhdcmE6TnP)@6$w}7xeUfMx(pEy-a#>3~%hh+4HO_DVir%lRGQ<6S;er?-cY6)R zpj^saeWGGEQ@haY#vdSTQSX9$1qF`n>4GOtdga)MeMMx;{rb96vQ=|5+5bTg(?|Q2 z!;sYin?j6OP0X{nFB#hF${Y669j?gtJ`mLqktv>Ej(ZpcYiUFip2n~6Sj2;AgVLE? zPeXnUDFTZzXImfyZDc~xg+6a!y-?vmP2o5Cq`)d4uDtm8Hi z7#DHCIE2+)>(vmOgKPx8W`6aCXG$E5`jVqAoM&p=w-QA^667$pK7f+Irs^?B8E~i4 z%JK>_lO$KA;kzl;f9O3&YLOOBSqI?A(a2;R|$z8)`mN(3!RD^phi4UAOf zL<*N8zH6IA8p2CmzYEtB0slVCK3kf&60{3<3=B7sZ~x}taCrR_n$ra4ng30{ZyPpo zcIxr3Sc*ZBJa38>~J{ zAa_`CoUG(HIyxE<4iI}YSC0)ve%bH|9JGZjntx!83Kw+&xJIe+RHP6Rh6 zH-_@#DWx8HP`sPAtGNe9z+V%s^Nanym~!mx_4bV0U<}m}4@lAdnqP3|P@=&luAz2p z*ju!WDB!>K{$dA%rksZV2awO9@1fi(RE+QFAns~@Olr-_Jiv=1Sqm5G$Z~ys?HbXz zeG!yR+|t`FcSqvsi9Fnv4KV7~1@Hx2lDLc=5@p!#yDv08yPz>7Sp32=foSJ6A0nEg z0-38`p|_#68wl8CP#twQK{X@#E7WbL?WG~w2mh9{*vLnJr8jiLh0}U4T^GhxO76!K z2XoK*#fgF(ZoIcR!1UPlXj-(+FABQ*gh0fi+<(-R`|2u7j#_DRl=6NaSIU@{$DH-a=DuVmG| zJUYNqx?T%5EHG{}7~`xBMJ$;>t-c@OW_5plQw^bwD(gYM{`(cp5cw^MH4Amb=PwS~ ziDib)8|g&{`fumNe5_r7XHPR;YJ4!_nxTyj{vmvt=k?&8uB~vknz#Zj7{km|GI|lC zrxod{A2pokT^q;g6gtJ4=FQ%~$FD7O#9^>P4$p~!6b_#v!K%dl!TDT^(=B({NZw6d z$5a^b-ZcD>-+m$QM5PLzXdP{NnBR(R>6ro z1lUhX_m}3-WxcD0%MV$ipb7z)W?(h!ZA{y184Zd1-Xz{i{nKX#X^n2Pzk5EhoC4b3 zc#Do=3hDaZ&cDwj{ZEVbwwzZCBzC?pFExUZUIQ{yp^yCTyt&IauX$>aD{WeA-MVh< z<2;q6Y;&9is=EB@a#FZ&cHU-MC5r*+UhrpOH|BBK*;fUrDf`a-HTfSl&N$HOhII?y zPNB|Ff$`ap1|27qQmM1|>za5LKUaYE+FSePq44=+5j&TEBMuo}^snKI?R9+M>>o!` zr@uTxGxo=dRosIa+X{|bFC<0&edWeOanbdMbOYTg$lZ8I=Wdx85BGrxa+S5IRr~i;R`(oAY*lIIJ)m_s^GDqC4Qc!5q4pFc>^S>3J@TsVgMr$S_5biT0cO(%HiYH*$pIK;+; zcCxFgPA_-7HCZhrr>Ati0orcT>i8`ld1AWg;|5S)zP< z`eSi9z(ZGUFjPeEfIZL?5P8XOgHtT%h04y|f#j%|wcdmS{ZqizOgQgor|LSpFkc8M zK50OqKE!D|8Jg7+um#t4O3ockPf`{7C!6TavK`+vUpI(?LXNhE9Y3<9qhZCb3FXoK z;r6*A_HYn^<-JVs(V=%8B3Ss5s8<9sUHFj&^lmG-B7%kB#sYdb%>ag60>{hHttg-f zq?v6uzN{34ZllA8{sKKhkWVDwM_&x0#=mu&a|73t%7hlWQU?wr>sJ0E(t0mztRUMk z@LLi>hwO$MDFlv=5Z2xUEGnaQcxr)Om7Bv;VL4LfmB5#Xa}L)Bh;wA~OAQB;o3;Dw z{m{ww?0NSWhkBD}?pPzzD6>{UmAQ1`gC8kNCh0TB?4Lxv&lFw)OsYMJUmf)8a=okX z4u3bvG*?^REgFd$N_RDjlFj(2P3L#&UK)uy+7)K!gfs-I$CD^$ew`Dvv#>vX0R^_j zFVNgl-{N+)vTDG;=MKlpFLSWW z)1D{JJ8(PY-;kHzQ>u`H!jBnpJa`HI))-G`4xz~RUc-002=eB_l(3N0)ofNYu<(VD z*^o^H5|@R%ina>A0&Ec1kO9qCbdT%jH!Jf%RYz|^rNXiNwScm+w$p20_6I$qc+1|) zq3LigBSsn+l)+~|Ym)oXU<33Us>_mZ1jp2g z;1e4?Ud>oLKC%F36UZ%#)GC*~yl<$e2G}KDQm0jn)?cwZRWMM-Q_f7|T(;9~3JjKD zBY*i(htU7sKJ7o`6auwGQ6cZp4gEb)Htzdv#4175m(&7ZW(+5Dd6%oENIi+T^|G{7 z&|+AI{+WnZYA%`Ka&-;M-89QDa(k7*c-K*5>xeH)w4J{^vl|MZlO=kJNrq zXk$JPnDeV>q^te4lOAcOCv*=57eC_`yO9H~Out?W`2r4~KLu{QFXa<`2wI zBBU?4VXzIF6->7!G9tdXQg?8iY8>QI^&9VVmo?xBLPcJ^8JyBCB46)s_+)m|w^j4L z?ml*er3#^1!Duv~;9;maW;3L{5}iAl545YtxP|7r6O6Xv(?W!hPF%StvBk^PdK$T7 z3k~O&vUye_+sARF`JKLe)*?g}Dz}UE{B2s5e3NKni#^1KX+Mit7s4HnVN`_;`-FVo zm)Or7FYU;!Ng>9iw+@>D-&gjFgwUaxPOp?Py1zoVG{`1&sep~i&G|%_RmEh~HygwB zncb=#9N&g${m0QzRYi-g1b*q@B~+ZpOSZdyS1INSnAp(-Zw(eKGL zU*hp|J71XVU@Jt!-nWPef`ArbEt=kHa2qls%yhJ_2krd(6m7KIDm1TZGQH>kZFN!#ADSkK^y3FGGIR#4MCow4v39 zYO^GxSQ=jq!P{L7vc$)XKu%_=^gYO^bdMLt%_cS;;_ zPb?fFPQn<0 zJkj}jHDf6pvL0XvHizfz-9?_{ieWayl23kvs$27ItDCn%;)&$O97XASuD}V$rZpSJ zb9Su>V*BQfbqaXRHie%=zTgx)e?n2OHc7tR!XMW{siZ$Kh(S}pbp$h3z=B$%2sU8f z|EbNW9+q&9V2YBi64jJ@x*6-p)>QdVC#1|c--kNTTE5t36<02} zfwCQ@l`Akq^WZce%PA7T8n_Q$h*=R#17b|Zno+%3HYTl+>rwrb1MN}}!FTciceH%Z zd;URE6_)>##moKavFrwjIKytEzhg4;x2vD_40=6WOY zV9!DuS>%Wfx!2cCXCC`3dn_cH_X!Nx^FtF}uN~sSe6BJtPqjb{*%1DzIG4&LV{^kD z;P{Q+KgssOoG>ei{tpv0VbOU0S8~cg#T=Rd;uJ;?>{-zYFm-k#WPZUAbJ|Ya~S*?;lu=Nt@1^xZ-05B6r4j z9=U!d6Wq^#=U%=Ar7Jgz2Kf0>7$nWDalz_BBaWN$E`DLh!G{+rXpy^OY^?~6n(k*$ zywxo9>Pvm3%C-nSn?s*{az>P!6F+OQ&K5~{#_;wqJQ#wIeO(L zC1L%xKqP09!4V=Gv59o6``+Rp#*5E}OXSrgrPdmf+rOiNjn@PPj9x2@@U5Ws7I%#C4qli5IV(ExayDX7rJ$q3XKI)t)N! z_2 zOSX9t&ulnTByj|{=#wmsq~%+o zEpt{rzEepeAYCz=qI+N7N82GTwABcF9}=uyQN3^6Kt^t)tE2N#w?%fWR&f(*iftWq zr;u@NwnOO28mc-a{*i-r+^fB^De{3-)P}{N=nCt2y}IJnmdZ93$KYX}u%>D>(driY)+<4%xYxgdv=oE4dmqRF z=lDaY-e6f_du^yt7`Mbbs?g+#xa|4s?Sf5#^Hsz`7pTL}vsx1U?V10!3DYMMG|2wJ z_J@JB_Nme5KsD3wQq~bB^66Yg4Y&8vC~I6<%s?(MHVR?G{8&>Xq4_C|&b8G-xpeG6MgZ(XXH+AXco+s%UuHNP7%74pU?PNZ$G#D z2=dN)P$O4SD5mBBi9A3F=7afwC;NDmfJ<*?q^rBblW<`%L;E|DZ^hrlINc2TFC_0y zWUTq$>EsV1)%Iy8NYvc!W|r(DUYB{DL1H~Su{xXUT`=4!-Wono%+v7j(; z-g~F|qN8#rSJ%ZrSI9j+*VgD=(FllkT!X~LKhVjvB0Q%Ty-&7-T?nqZ37yV+DzTQ)B=QFkQ*}`5qT9we+b9kSvd8usxa}QK{Z~al z=~TcY5R&SRxomBexE96b53}y(rL}#V0@l2NmU8l#!pK1k5I<&8O^q1wd%UAJLJZdn z>tVh8@cTAOC5T-b?J)y=-_FKJ?kCvXnPz$wc$b^V$}EAEM+r!tDY%v5f;9D(uJA#6=XvE z=-#Enap!H2Y6<*j)3l=L1HHhj+B#jZ+~Xz0m&XgkDp3_D$3+9bNlyTI<5HVZu04Ov z-j%W_#HK`CqGpzJ93%rA774Oy>?(JK+<@=H7q0@i&9r>?$S_MF<(%`CG~}G&vA&t-ynr#cV}s1Bx#a)}5R&UC7aSF7OL$80=l!lW{_Zx;=F5 zJI;bUn_N!d?`7dF#3|&0R|NW*!*3@-v*?EB0R&XzW4e5Xsy0HAr!D^u(?8o~4AN&d zdPJ?6n?{Cqy3o2P>c|o`mG+y51p*&ibvV~{q~*O9n6n@w)eQ40E(&44=%T@&b!!VA zU`><-m?enN3WVOysogOUDuEiM&K9IkeIYuON+^lp-W=>HxR*LVUehy7-0j>y1%|UP zjBur1(rM|Q{IWsq??*bE){n`KEGZF*>Byh}13@QM;`0xZY|NsGhf;L(XK_%T_8DBe zlj@=$4-43-y7HFW^hJXwdavD4opI1_CZ&T9NJm*>$w$DU@%)FkM)2m5auqMz|K(GQ zSYS*!2-~Xj0C1vj)45O|VX0rK=!@yk4dSD2JWU{zQ4CVy3~pg&897P97NVQbwLMEifl#ReM$1J=J?W{1PI){9YFO*4GZAs4^Eh z7l*|*Z!p_F$Y}=byHGjVL&Uk>oiC09Tqo%3oo?qr@{a0xvTox6c>7y<;Qp~IOG9@UewxpF-*SnG) zz~S-<*6^K!P3V2fglRau_L)<}{|gfoESS#IUT8MiZLEzznjPXjj)7+U-)Br6iccDX zKUFI%utJM|>r=`vjM;3LB65GyKfb?$DI^X1?o*3lLo;o6$Lc~cN_dlNq^rv61+Ur) zf0KpG7Bol)5t#bNZQ|%_0hHMq>{|klaCJFn^|%*GJ_FC=l6JcOm6aChJ&$45MJJHI z>)Ig*N?oLT^Gr7PoRDFb$SnwIW4XIr%XgZyVnn!ks+NlPY;qciJ`|Ji;1L$CUkG(p zftGV$ynZVNSCxdHboESu?S9c&mUT*ASi^C=1rvsO&N_5XlNV4jMxE0B9z2!}vy#Xu zqW$TMLw(NPV`EU~ibdW;sM4mXjB-5ae9L|k_In;ae!-N}yzdJe)X5vDIu)S9icl5O zRz*HpCY4jGVp=`w(ahL7S?GeJ#QfA;C?FwbtQ$x6bM0i2S$e3}CtUa2t>Ex@Udo5T z%zH}-i1CiaZt8Bo-tG7D1s6(!6!*g`L@Kv8H#5!#%^W+2yjS5iu=`AZy$ZinvFVo7 zAnOn<9%y>x#_@P_1hC2h3;@)m`r_vxzWQLpQfcaxm0iwDbObP8iJv(_xNd&_YRSO z`t=RF7_PtWyfW4s44;vs4X65 z$`S`CqYjh~k`obmkp)XH1W`hT1w+ocP1f`EKtnLgi}z2vmpIRF8vTXwz!X?kf>V%Z7tes;5AVXWJm1X)x$cX{RDw$XHgHliQi95k3RX62n=s zi{@AthcMmnvzHa^G?qVwmX!&JK8obzqsFgTm9oh>W8^lCoAVr1O9~~YXLG2pV#(H7FcaowPnjJ zGS-IH9q`qyM>BHYfphu7ptAgj9?&1L(*+Ci2*B`71Mv#(ifSw?m=`Z&fHjZnApTn2 zye~k1vaecXo0_kz`4swBHf1W8oUFX!=25IzG8U@AzXbB%qaPMvf0iEbhwRnym7Lh5 zg8HNx*sq@#$VwKPr^ck}`G|UDTn6-Fj}Z=dOk(U;SuxB(baQkOPO7$Y%GnIBFFT4t z*!r8}g!JFhcTYa)41j$wYoIey6mknz#K^A$!N)HN_9Lu?*Am z3K4oNiW_55LQ$^FjUY@7Jq+^!SAdUnx&nkdF`o@E2oUO`EjZMY6PYRIHJo96g090a zfp0dY{P7RvS7a-s!cRHK)Ffm5ab-f^7+gu4nGnZ9dWiRn%`pp^xF}<1A2{q3f((x% zk62Ae@fQ!g8QV@Z-QNLxrl52Znnpfh9?6j}xQH-G=nbypT4Fq2j4TYy4Obl_0DEEr zhNd6mwv7_=25%AFZC-Eq!1P4VX%-dK1tKKr`i3vZoHgr7d~PAGC;4@BhI3GM5G|yg zMAi!Uw$LJnD}<^0^K9K0U)WvlcXQjY$$#YOR2K+tee)dpqSnf`^;}MKtEpRkJ>>y_ zIXq9z8@7$L^E;)06(pe24vQ=lrS_~`>nmI)A#yZBC!3~Xv|w-8lt5D#ytv%6gmC*j zwO+A0r`K>{QtjjRo$6^5wa}kOI4~+8@vYDi44BP|CpI@3XhL`NmUqO$gxI>Iy-kCy zuzg$_k=9~vSZ&rPGGLtRI(mWcG%mOKES*7=nCsJgZwp}RH_b#fUwpXkhVSKX-yKK| zK#wV+64Q@~D4%xMa^N>+m!70?h^Lcmo4WCi+ayd}2I_(~;py?Kk*N}`5g^C$<$H&| ze2c6S3(fq7k=s!Welqro+Xl&SL)*AhevIu^cO;ps@cVHEx%Y&eX1t)s**VR8O0+}a z1wRlK$vslX$PI23aX*V43Y0YPH=tfZ?1Y_Ro_24n<3e(UMK8TEmwO}bGYBhE07^V; z(rUZ_XC_esAn^%=$?h`Rp*4BFZ`xh3<}DSsg4JbrkPAR| zQXUCfO5-@W&TLG5kZ^wQ&+aK83Ml#=@RK?`Q>)EqKJY09yvE|yL6hx6Ravy;$^F+*frgegBiLWIVSx0Wp4Cl2 zL-@Vczwz^3lAL5x`(NR#`WoKJjRaFgr=RO18%X&BZx0`jF!58o_3v$3kaKC7l{4!ocuaG=MFb)8hD!|drk8`aQ@3EUBN843=9Pn9f8&Te)jRa8HSgq zqbabz+1%x20kmZF;Z%|ayic&F%U~lI>vq-5ucIXLh6~Qx1n$We+xe23lrMIJ{>E_r zZ?&PZC2%AmI5y)K|IYCwAG9xCDjBl3@~claNQ&Ry-Uvf7`lmX*xS+5wG^v+#L#{c# zaJmLrmWZx0wu_NUZqGcDpd;D4{P<%;JgY1~)6-u6*dl@V1~NP7?@vUB#cS`9rFGg& zsp1@S2|^}l;=CdSh6!?P+}#9Co(~QuT`_*c{sM5B0N8!B^tL-N20##$V<26zbGYul zzC$@73(`gKB0dNGwlc07?z_i~xo!KV)22Xr@ZoeoXmbW=`eM0_2pD zmi`lCD3ge_ZC-80=Y*38Vwa{WoKA9!qSDyy3Iznm3cU0M#*rn5aY?v4)InReq4Lsq zMn}c393DrQte*z13mUO~Eu?ShY#$z+iEwNmFkRWfWoKnEN(48*g8%t>=}UeR7c^@D zp1_s0ykH|@K2Mr|!Wab5H+DQ?;3!89A3($m$M5du9_x91Om1IuffxHvJGVY$ww_xP z)q+15zG8kX=1hDwbB*Hi8tzHk7qxEn3cAnW9Vxw9-)KzB8>Q~D2SbjZj*#hr1D&u_ z?;o4N%L@b##63Q(b1-t!TxyHKyW&ue)?f{qN*GumDL6-0$!LCTnxoAJ9-)kmSpH_6 z4@4A>2;TNpX^%Ybm6Q+&;W;N~ z$o1Tw>+VjbB;77upQU)F6uRz^DwR6h=B6SjMgBgB+(?e|!%p8O@H%g1&UAehIwUDj zY$CAwSdO~;*!n(mj%&0`7X>@34JMo*{xK3KzgF?rIDrL})KB2RU?UNH zd_JhF&7K!q@JzXCdCdwc1p(`Qyxnt%FRB|IW~)IAlxUvxH`FB@i%kDdV`mjqSJZ83 z+}#~Q2=4AK3GVLh5+pc;gS!QngS)#PEVyfMcb9`pbN^dieXFY<`h8W+s=e3Vwbq>D z8$)B{&h32-Vx8{n%UaYt5XxDSd^%@$P*^JFnAK%;dUXB72PJLT^kSqnp8O6Dh)?P% zJfi7zoP1{mfmP}E_%NKn&eMv|5CA4i-h4W0-9g^Qoq5;A<|&otLEF?vkC5^{1 zad`f8=~2~s9)v%84%UyC3R;B03)~e#vk=lG;|^%qeS}1;&v!$f`uA+1t4!X_3kHWV zltT->{(AC*PCd+K^toWr?)EeQJLIrEe7d84D;-*sm=F0d`N8gkP_Ouzgb+>nGuIw= zX(*%{e}gooN!!oiR1&CsK&Z1B7?PgSvg`?)zakkIQw8t;%~$5h7tOY=z528-nZ~L` z*PG09m8Ey-w%Z--<~Ph)n?A9%yCS==#LUedS*9;%vs9_%57V7!_Emp7bee{HiHh2 z@}FJ0)%z%X9rxP*>J>s=ri_uuYeN$bp?tU?rLpQtqCFcx#^|{ncE|%GCO#HiQ5|Fa zN(DcR0mS)Bhf*=>WZ!wpD`_eGFuSj<{dO^E*zq9dITg+@v)p5CgTP1P#<*N+%6;`w z)w_&Z++F&^%b1y*1LmNs{xQ=%C+EfO?B5Y1>*eYtdXT|3)ZTWPY zeli|dK6lckzR%jqvz|qIO*>4GtN*ipnL~femVWV0=}-?DImoueBNKHt)1qxPC(r=lfTbp4O4K3pgjfv? z$&DF&0r1QFU|3&i8Hb|RO`QdZai_NJJyXe*7d3EhcR4{+Hf>7cCJfERgL!P@4qtFO zx%yvwxLBJP^iCEoa&GIurm28ZYMv1>PoE%$vR03*KX_^d3w#>T1NA5iP^6DM>C@gdf35f}l4ECm6Nhde2hhpOk*Q_JmT=2TDA*)AVJ3+HxK7VIj z=~7d3Sl-s8ua)Zpbd&zNI#|pSf9P-FUFxToBsS@NK%v3hM_P1}Ywue_NBjvgVDX-J zy%=RL*NDCJh-Pcjjq5&?I66qU=1~y&%o1)hbLL?_ot#WG&}ulZxhxfo7~kdx@a^c= z-;~;{dBbd#BqoF1Mb!~|hpT3|sJmbVBK)z=e&o*E?GM+!qPYa+eLe=uo5%%9&*vqk<6c$snmc?{dC*FwnJb;G?P)L|4gD@*-AGeQXVG!f^Zca>M9udRgn<5U^JWJZT``);mRPXnN~%PEYvvwedl|1c>U ztzgG{-x=;Jj(|X)d~fYPoIbub)%LrDQP0}0usdRp&LI;(CatXA=a%4~K6 z&jn&h>;)-E$3VmCB^}(~hG(J1WxRCFnPOwTcZ&|&yEz;=MuPZ6`(E98*~b*R5uV## z8zk!746v@7<*c0@13D5zpKeAmLBOA3sHkzl+=vdNJl;^$hgmj^8%V3nXI?wb8u3ee z@;Z3x9t(zV#L$`2t-nx3{cO{1vIoucA_>2NC}aCyl)5=8WE2rRh4lW6li@c^#7OYu zLX19jT9a^IzV?jEBt@?N@bb<{yl5D`)dz)`qgKO-SQ@3cN=UVOzR3=r8U^Z8cE~Bk zt;qV7DN?!YSA_1^8>{AinVX^LphhJM#3Q3 ztKQIGpo@L@g*dLZ4F)KzV7nThQbIwp;oXBidb1}=+}szVpO-{|)|V$8CK_IoNHnfLXrC$e0MQ(Dq`4)7vZ)T2~OqM^n2AS@N3nM5y8BUG`)L8-N zYw)SA8O+^L`oNP4D-EWGUZw3ab^i?zKu9{LN4*=eOY7sifpe-WkFvp58Q7s8z7vvf za!)%4tTVl;KXZXZffnB6n;tpk!16UGcUB(W`;-+aux_a&;+nEH$SeywTVZMLlBU>f z4)Lu@SVeC;CRlB;PS#%-wVW_m7JAC1V_u%;8y|PUlFe4zdv%6HJk`*-wQLvXmHvk& zM?wOM%@*H#LOVZ=$h+lK*Xd^;y9c4d5`^(2BvcZOs~0>(T20w00fTQMsV!F3*vL>b z^d}Bh+%tH`QsEhs6v7*X2EG%7(Vg>kszP>-GeH+SdwtT!tAiUrn9;=H@_8+&Wc~Q? z-)+?h+s<7<&o(dp)+MIP>~#v445}`dfh4}Z0H?8k_jYnc_koDzKRFV)hq!p-hk%C< z3-~`e@GWQZ-Txoy_!~gc%bqxp;bRvS4Grx$OvD~Kp64%etku?5ynn604UTJoq*F&; zOFif8tdD05_GcB)miUdtQc?wB~N0Y^>v%AyOu;b&6yc6V>i{6m?0=K{l0i!O8T zWp*XLqPNrvHVL|}?&PdnBUw2>qJ7BYtt#TG&k*LaQwvS0Q83Ub(g!RHf7)li_;y-J ze6dS9|0&4VIg9np(~2gjIhpEeFZ&*OTJq4$TziOaCGTIkP8a)Mctv9g-Qu;g-nq5` z_+--C5LfD)V(Zk$H<{iT@N2X}*I`dX-i}u}Hi`2SK z$o4g~_V*rgPmUL`7BM!Zg&jZ4OTbW!F-?kkDiZ5`-cNir-A-NC6>^ViYr9qC_7bM+ zGGua}%tbW-&>vvh)S!2&z1cW_(^+QQCCK|!HxY?xcy1bVJvDV#u79SnFwoBW87Zmg zB7XOAdsyNAuVReZo6DmMyjJGG_DNUx&oUXldDUy_>7ojKtM`kerQ;Z)WIKMGod}TfR^4G(Kcr@_QUleP6yF|(3a=iI= zJl%D2{H%RDkw%~5xlI|i26i^|AQjap#H4?N4}*G62qnN~f|zbghkAva%};OeX=RUh-?%XonHs@+$53Gl@#~cO+6BOa=YpD$g_73kTHR*u9{xbb zyop-*za>haC#_@bRa5jP?%amRrw(OlJy;(W7n2`jShP`Wv!>%rf30K(u`)55r3en7 zY;;2R$nYRn{vU*LDPTKs0*v8dA=AJLwFBkkG@3U;oJ zQ1yu5lJ?s)Tkx=jCmDBE@$aIO5-+9c`y$HwfzIk>IEkSynywvlB5L%^ZoKnCbss0ZKNf4aO7U($iF9o;}}jC4d; zGQ6E`M$Wf?miAJC(xp`=eys$~OeY5@rJhZ-NUbQBl~rn$^R8F#IhQw=rzpD6I+F7+ z1{}d&-fxOpE+2cFyD-J7r3g3?XRzBChuXRMS)KbE>nepEmDGz6dc3_Br9?WFK9fxG zu0^?^5)rCgOd2+UZ(QtRsh~%HLPjb zl_mcXehkGvl_|P>kdU?49pYBVVHF!&$(iXlHPMg?qinxc{-VSQc%h*8MjpK^N3=Z8 zEtet8cp5r!h^?@aIe+hcm$(^bC?~b-9SXyI5;5SU^TK#ZyH0TZhn@6i;|fW=Yr)jH zrby`9RM7AU6hDMf-QVRV<#32sve#WNH$>x>9T==1P)sdr)Wn%c_M%ot@fG_6&-lQ$ zp)m)$YM4;g3__sS7*~DlG8ff4k@$}<<#9I}eu3IpEX)-&r>62SGC97=ozZq z+5!Z~$1y{$88B%Je!aO7C>1OZvW4m%@{8qtIb&Ou7&BKA}vr5 za|2rtsG{&!A~r(!n~*6*yG7sGUMH)^Yla6%9&T_tOSVUVQ600#BFPk8pG*kK+LFb; z0(R_~y+R*$(0{*RrAKt8z@nl#zQ9^JM_&zSJ;i=1*NL8O)wOZ{N8dP_&7({eNV*_y zF|&%dm*VP~Ks*3oGsHDz4ZjSgncK>CM+Su>gifC_oRU2wsv9+lp8sZ?^3rk@LFmR6 zifgrTrrMgd;^_tqMi_P0A9IqV5%aN>3x%JUa`^RV1BFZOBm!*X3@N`aCi$C&s1CRU zEy&^uXg#h2vt<9)2(}pe6{Z{NqY8?R%4d{U*+hN_OGo&*T_6fEXQPG`P@g14SJf&=p|}3-H*#xaLHZ?GmA?6~ zT1}SEGRx0tov(;QXi{HiX|C<#U?n_T)(?;0-uvOT<(s%X3VAK;2) zRm{VOP!>(u1>O(uM+VvBITjoQP_eq|a7YC)NWEPB1?wDHLpid@cOp!7EX@@-XGz&OMNZrrG4mh z``TU}fpe6!xD8HPc14;n6K8MNuQ*JaBSrP0sxS$uS;c={hL}j#K1BLNuqk%=e>baH zhIxtD6+qw=fu}cM^cuyX+xzLD)+G6hqjO+Ylv&_mFwxJYb zsC1u4`<=jL>*~?Wfed-APRWBf}(0`RMuL;n}jj0TkNLB4{K>6icJOipY;J zy-m!B)RAcQS_kw!?TlZ{Y80Uhj=@zk9AZ(fdU^YBI}6Ml4b&I;^qB-BClE4X)l1!p z`=U+JF`pWtFa6Jlwjuk=~(pcLs!^G@s`l^}ss<+$;?BV8Fa!uJ?ohxX|FwsHMTDu4^ zN;Z$uRn5u;zUzuppCPNR>VTstpqGuszTn)5z?4%!-s8M!s;h2vuGs1Yw~m_ec||k$S^t`hil)4lc4LR9DD*(HGJC`2B%*9Ka7k$ypId!Ky5Om+f8`<<%HDdi=-k zgSkmN;b>vLLQ|^}*L$-dB~=EDqCNcCrn7CH>I}u47ZLUeZb8wriVnmN(j@~G2Vmx(>Eiz=5x{5)Wt?nM=7aBDpcWo#?f;R1aT4x zF0iWy4v?28LfD2zu!E7Mvoiu>Xs)Lv+3p^=w!|-$5u^{h7iX+>P`@7md`+u#Ut?4T zxd}Qa8X5p} zs!r4?@{pVBm*pC8<1!?RAxxQw+R_pI(Y9ZL_rg0efOY7`-gG>9Bszt^&g96JETjk4 z4H>+;ztY_7#(^9}FpHvxTfsfI)A{li7I7R0k#ao$x^MY}bo3IlGl=5ZJ=0LYz#LSp zqo-c}3lC-UG=XO^NK=_3n-gpPi!1fSo2svE9kvXb`}A?t@Y9NOIPan6eMYeEL*j;PqLqeh*!K~hmOA6EtKh@vnhCe+RNA2(UI1#RKxvp< zO&jKRst~H{fI~B2RY!$P(`>{Nt5~n!-4q^v%)YCt9^OsaBw5h0@)Jg>YaXc|fn96H z0YAHPNsX>Cj;?1GKJ)DO^j;J-dC1RDO)v8HSBnW$(tLZ=s>@7#dzXBjQid(=uQl_J zooaXt&pG=CnjCkVU|74Op4p2D-HhhTG^3!D*$a zkb`>mO+N(+j0XtJu5V*BcRa1mW8+e)VvT#i;+pVAJV>sbACM)bCc~3^f|?hX!IKg6 zw7(KbJ%@@WW6??3o)CXh(ibtpP0|SzR8{_b1C!zlF`7yXq{u-*N94wL58g>e@Xq!iz%qWPk#4*Kb-Js-W;d}-D_`q)w zJ^!+Bpq>Haopl|A38%~4wlJ<%n8eCpO{S6eQ_$iY_1=&u-CM#ystlfPUP!ws3-c!q(+#_oFtLwqKI3PLr)Sn!_ER-VE-vZXG-Z(=>adkT9Mplo`$Vby1 zxZbH|2zDGfXJrf3j*n`3sz*9nHZ33YN7&EQs!%>gJ*sWk-$fOMHLI-?!-Zjz&Sc1y ze__4e#->P+OcWcdIZvGE88&HTyBBSsXK^oeL9^Act1W+i0ba&pu_23&RWBq~jC)(P zdBXo)1+Zd>avPJ(jXxMwTX0|kTevBsXBA;z9Pc6mtD0I!)?G1}r&`+u=n4Bm?bo_1 z@CVS_THkNnr#D=TcDqqMQ&R4rpE3F*t&FBzCeseDxsBQ_TNe>F5?4)jSSFp-6%!4L zh)Xx>RvjmUxBKCP-Lw&wi7kY7mLQ`K23eaBC1tKV+p^Y#9Qp>rWFQ1ea$~eTe)Cr( z)1wOKZ0rl-_YlJ#)UEBNnjGo1=oNQxB|!H%(^uEq*~P(Pn6s3x7neb40~~@5i|**^vWD8`#+xv0~X4Yl>^_)Drc% z@Pbk`EJAKwc)>B~x*u#YlMR$%f@n-Q$$AqX)AOG4%?w|I!g=jpr zhKQA53Po@mb1RKXtIiV8u-0HAy1v1&F$_HzTdHIlB@#}TyxKBAaJ4OGQ zJXh--;2E18w!M?JOJ*hen}po+FNnpL)$1&=2EDJhC5}v(6b0p>>>L;FL<1bL;t|#< zcEWlctv!|stmd=i)eW*5I!n;8?K{c<;Ca~FGZR*bs$mf8P>E0QggmBo4@nRy_&USX zI`!B#p!18qN0pHMcCCT z2U((U0*btYeUC+RQ7po!x03Y zvB7D-N?wB2AV9LBv-$G!PbNrS1!U6<4-UT z@B6GxU{TS|{hE%nm1x}Tq4n;P<(%d%Tz==r2QEHY<(Be0J+m2Dyt2T#ok zxD<0TmFLc4Y5_fm+w>ep1K}BO4X~Ts1%t_Tbu4ZnzNe-A6R@Eh*SmlF3$FT7w|QBo zWfiD7{Iy1piR0V)pzqSux_pbmo-I!Au}`u&ng~QxTOSue<}d3IW-hUuc*{GWH@mh1 z#NZ920lDwz?u#Cm6fVXmc$)X%sPtZF@)MhIlJhCV_B3T*sfr`;=&CD7d*?g)v1&kVdIoN>2j?=!OBV);94{e+8dmL^{; zjR}kX4V#Mp!IF?fR@v%hLTUTJ12RwX5mu+p5)+h6gy1NR9c;0Ue4Tyc_f;`>yDwW1 z^-F5xT*ltRcuG#QQ7CrXzx$v+54vu<&iU*GIx78&8*{$+SF_WJPjYyda;r$xQh@Ft z>Q{(YkwkGHl|Jb#|3}MVAq&R|qK?DQLw3dEfcol-keKyO;y;vU)q?EpyC33h0~Y@T zf68<~znDC}K8%JMh6R$eRX>4XY`_0xk@i4|VyU$?w3Opy^Ty4azQV!P>Nv7U(1$vHmw?v}StdM{^(x*;Nza||d1 zd~(r+sw{R4;{jo`8>usqIWJUtF0^ zS%_^ZTotst6KPk!j;GLsB+DQMWdFysV;ZfEo!()IS_qG*_K!4frg=kLU(n^@Z^K`@ z-LyBCa2o6xg`JrwzD6Eo6ksOvExplXP`t?T^1JcCB8V=HE-tii@s#-mfC;Vow&j~}L)2bKcd{F)Zu(jE?7DLC@{gX5h&FDbmiDU7N2`&}CbqhC`CEFL@bqF7 zI9AO<$JwGQP}t^!d~E53d%<({(5bC<$PNGGp2n0ZSCq4%Sx(!UgYkR`|Fz?9^K>&A zbF1i^X&zV3(fuD}d}a?5XV;Dm1mx2W=Nov(FK>Uya-C{BObL^{ zNn`10^@a?!gefIz%i8u(e{Gb~7bXwXz%X`k46HbTX=NQa=i&bAr}*B)`)#FZuNo1u z85wz+5$)6G-1ew-jGpW^2_G~D2btCjNn`;1>Rsd`Qo$;^yzk+b8k9Wq^9j3d4Y$F5 zt(vlux8=<}Fid3O0yfpn*=xFJ`({Y*mT2FX2?5$i{oHyy1{hZcsyNwdlLA%dK(A|q zx3POp?<=+iRW#;XoKU|vj~y^y{!GUuH%>nouVHAZ`O3o@awNB@#ijE@KjgI6b2|0J zNlMF+JSVThy0rYDI-7Q>-eNYo_+Q(%AZiPS`2_DZQLZhLC;}+STPR}Sp@4&-opE2I z_uF%m0lEr2k)NTR(DyI>PfE&F+C!c|7?H&fj>ysc3dPqj>~r2m^i8r}UH*l7#0b+XQIwu@ib;}8wz@uRg{S3fhEMH@o z(>OPDicl3n|#S)U1 z*<10b%0HEkjc*(eS zPIJtkl`3aK6eerb-n*M054r55{%L*NY*3*YGk4o4JRIkKImfKQc<}y$5_F33aMJS^H%E?rMZ@px;gXV}(<)I# z3#4shqwzesaGi_md>&*>C+u_R;0cE3CmNs76grh^HIq4PJBJfvl%TmcK+)XoM1}RJ zwX>1uMg!C>ag6XHEY7})!GcZJ-e!%CS_Ib`Nz=L}ycWHt=iIcKHWACaoqjzo ziFSja$}#0JuAt@!;cwvVen1Nu43(Q|U&ZM#(A+`am*>$#g(pwm0FzK13%=Gy;8OkO zyhrDn0`Qa_9LIwsZY~BghbAGPS%YAd19ohy1UjOUm5~Oe zb`{ofD+x|5#)4ExO=%vMkw8SQC7?MX))w4C91ZxcPcj-E+IR2gWSw=hfgRCAbe%Mw zcHYw*QoCrb0W_e1N4zF{ljPN1$%oiv-Odk6x^;3IFeY^IOxJ@=E3TeTR7nKjnw3p- zaGvYbeb10E_DHgkkoh1Uj?XW=O%nak5Xn0?olh=!MZfxDV-Nq{i%$Zfiz)4A{FxDl zC}>iovmGz^t3A2`J!hM&h7D!U18!7u3)Rp>8W#O^2FF-w&6)9N2*yvvNo7tnV;I7V z&~h?+&3o^wa*bMpy8==VQU``EJN*2Rcait-b(Xy%M7FgOGEmsP>|Fgqh8OYK!mQg7 z&GIxTc}HT}!+8n!yrVa*K|%@qLQ-kYAh8nY(&s59^T)^dkL)hIdf?{reE#8y;R#h5 z>cq_AAqH2G#bG$Qv2PO_acC#9rmx{d5Wv{ndxO&!61F}aWoVyRAVv5u;mujknPUQK z`7VjpaH@v`kcVi@O&}gVYBF2Iis8PjIBq<2Wx_Gb(3L~GMJH}V4`^Acy)e%;{woeq zD;~~4<~DLVp?Qtc)cUQvyW{o!Sx+luD*Mph`C`LgegO1xl&C)Dn9G}xLcMe9Ztj0F zLCIc7E3}K3pb>^g{=HF>d$2n}#3>>Cj`{KJo|&?nL&izYZ^{3{JgU(Y^CRsmv8s=N z4ZF`FUBVN~1TX75h`w-yPFlji1bYARuxM=iG67C5s}|tWuu((~F<1YrW5Wszs3B_E zL>1zA=IJ~&WPR9YVj_W&PIJkvgB{)`zUjSHxnkHz?=f0H>99AL-dRX)!P)|Ay>}dY zcMv?+uFL|pujaui-e*M#RQM4vyOmZYn6QgCuh$_C#=fAs2ULFuT|8-SBy{*&f7h~e zQSW@ml6!U9_G)G3n!tM73z8R4@`1wcHN=IWpfGqT@tgT$o!u4yPO9R490WL>-=;(? z`9u;Y&2@Zt(aiaE8QWp16OG38UMS@p5Dm|f>c<7a&8bjR*MN%y@;DnfesZQ|^I1m} zpr#@~xAPJAlHZ5Lhy&$_;09&Pk0WFwjywn_u{RS=|9O{(XbS(lTq~y#-IFy-D2$4YtoL$zwWQsW!P$;{ek-`_fj#7>C~lE zy_v{qe7zhMr;xcV7?$#6$~MTBrjJbcfF(5!GWAy?Z%#6mF=@y7omR$i)csP35BAPH z2Xc@8FO!GAjLO(4~#KiVd0#vBj=C~ zvc#~6QOmiGz}#cF;zqF9+2W!<9!jXhWm|U-J&9WJ&*}ybc_oW|487UNo2Ma=hEv}7 z_#VQEm$~eRojwdesgekQ_uN4Qem;E#-Dz#GQnZ7&$pZpMj8-^2x{UwOO z>lKJRx}1=~c0h6n|Id2oheyz_ck&(luAt+x%6J{^6b_jF6pnyqX-4^}M_#baI7#c&-&{JXPbQ*xs>JqnO%=g{gGEbO^<)?@)9 zJ*SRkJ`@|7C1j^28geDHvrBnnomJ1rO7@+hR=f0t z%gVlwvGVd`H|JqTg}bi>#BaSCD!=etQC`Q*_(a*Qu0r+V5uOy*OK;eu zNygi$``^YMomdR`YD&kkLw!5oyld@#z~Xe(pVMB|(@TpWyU&hHtNx=g6kl6bHb$nw zU^?POG`hIIaoR*{m>1o(Dd0|TOgF^IKKdI)hrtk8_yzQARQ9x8&}}=TxQ&?LQB&{b)R! z?*}Wfv4@)*)$*03iKT=fffP7WhVbIFt&I7HNk&JkX>@*os%BAqT^lSB zysY`G*(S$5)ec4ht_iO)(a254s=a_M$&@Qy?L|Xm=hgd;`+-}`zOKoRj5s^8==0-K z6^O-s*WF6HGQMSclo;EQvj<1gI}b-41*9!%lEWu^5|&~=+{PlAoN1k0sSl$aDS!NK z5L9@W^GjF%eoLrxP13Sj1%-Z-j2z~>iOhH8dZB2f4s1%77dV?MBB34;(v!dn3+3d| z&hA(pH>DKQaO|@|&TpURff6P)z)yzfv0InyE9pF*nJja8Jv8eO=q=~i8EMV+vfrX} zYHi!#An_aM@^h?NIW_qo|-*r#r0Yf{~PlsJb z{D^8;?K~j|3}^X0)w)2l=T*=~43QcZv|o8kT|7m0(33~-MXC!os1GA0RXDpEa&j9D zI6N3Qw)@p{m@%k4$4Y-|)a0IWPN6-giB+K{2h6%GkG{3_lniq?H^$pC@idx(G^I$+ z@?A&yL176~IxN>^po1&nO)GT1QGCV#$)$DqMtw$S;lBeHxk6{jyxk_SfcwO|QkG&RqJs(=VS5rtqr92`07pV$V-K)J z=&7{gB!_}HuSg!x=ifyd4u3LNfCz#yAiW`d8#m)MjZRS+<|}{MS^!4^^ZA!;0?Ymc z8=5^*pG#jLWmZgb+)Xoq68&K`GL=kg*(3HHs zO}b{gWe`gch+`6H!!zuws`>dMb^x^eoB>cl}fx%)?wHzf0^~2K-bC4xlKEweH z+@5c~U*fR&Auxk`x^%x)-pRE8V%QQAuf;}eMle&?6v#>SLwLgo26}xRp3aLf=s6Y} zVYLl2n8=LdU#1qvE}giOTo4+a=(2U|1!5%ned(2w=y#DdB50Jy-X{NImxNPF9#7DZ z+BrFxBBWNGzU~uv#=u}9r1KEc452pO_NA4z%-mN7i*g-JmmBj)|(*dWzsjFC9pdr ziz4%#2bO={MSD1S11s!5y^CCl@mQen#3&ULE+~KOviV#rg>T)^-NL6fF8lZt-{_uuP~!`YG1KAa%s`GSq-~K{=;Fb z=T~P@d+U0nd!l3~{fqzM(je=rybIkPk-X#Iy(lZ^uOGK>D726FzOqPR z@1Y*|ztV~y>780E%Ue9Z6L}ROD=%4z;h#^sT&B@W_-sieHmTU@K#O`DcFOb)!WVD5 zZCM*uhwg z4{tcH6kzVIHQLIQ8=!b+>n(eF?tAlVEbGwgmx+^ik5sRII2RF0KEQ3mW3!J+vt_Zc z{@8A~DvWjYH+lfB*8f{s55L89+nrv4TKnPQ2O`@wE5EK6nD;OqB%@GvMJP-3RBd@~ z`SQ~8wfSt*EUB75GvhO_F)0^|A#lpGn<=02`EC|&rd+{mlxME&HrIF5>^2u}1O+G0 zxcqZQS5%#;p5x3Ro*gKP8~%9e>V?Gpj+_%_#zP~m3 z;#A_5MdvR27i57OBcD9kL~vpGzw`Va8Pj6~FQwInn9cqCy`4g|rzz?hJ{L0OKn~en z-Vy$G7p@zTyeKy0tD!l!9;FoF(e%ZNR?*8T?Zh9u7j!1tzyj`?eW+8_3_m6ha00=El}Oo?0yWkwD+YS@I@i*_xbrG|e}NKKnLY4g|^R zn!q;C@iTH(2KN|l4C`9&gi;6g5f_HLw*8D}`ZbOXTWad&VdB*gy%*%*NCt7M^=wn! zyhi@rfs%wH$W9Y^*@t2_IX{mac$OmKx9HhMV%u8j9anB_oEe-8{c&s`!3(kG{Ic9~cUoWV zH|#CbJFbedbTox~DDc?Rr_}z0qt2^Cl*ROx0I5RAmNBpxeC9q`Td$#me z`7Y`_it1b&7w?BuZa46oYgB!UXD-}D;o?V(+w%VgktpBlv<}%Q7`NU*4=Bb0>_W|K`cd_gUO_pM^3vbhI+`q zQBD*xb8(?)S8G1}*o97Jp}d<_C3&j-#a^|?@qoZu=JE-F7L-I0n#kUIeRot2#BwA2FDqP z_hscJd|}bop#^sl+C6Nb*N$=+MDbJe6%(-Y6d&?((V;TeL(+^4c{HZU_MN9%MHT>F zDI1RW;xPZNThZ9%L9hf-;OFgE+kyGzVSoj!@XnHH#)JqDK<^&Ph8$E8J-@$XT9C*P*0tO zjl)`=Hg7XN%v3C>09@L-Z2E{qe%)GK&)*)AwPTCpl6e_56kkkltU&P;nS@nqrO3B6{5?uFq_4Q(@?uWGspmG6`D^B0U?;_Mhw*yLTrwzTTSM@ga)u z#?+VIy$lzTi|S7Ib&`LaX1LFyxye2oOLu6Zp* z3Hu);71mf0%6tOpQ+xIiN6QPFv)D_`u|(?mL*ScDTxLoi9$WIRZ(o2tcbK|1G|%JUV$z zpHvjSn2?$9S-KKBXVIC^u14lThx=Z?P1p|@h ztrseFT70N$OT#vLnTfg|Qy?Bkhudf5$*7 zbeAhze^&%Wc-~@Q`_(6r-Wsn(PW|F%th0P_{^w3I^6)sid=79*g*#IMjwT82>OeG7 zq2$8Ky(vNKg;qWlul60~6!Oybw{GnWbXD37?EZSN^DyVPz!{RyRP4v#(PU79`7Oj_ zen@^wX3CTy@Th-d)Z@u{jg8f~!{#K$JT1^4vzoKaYoEZG2*il;dVlvYYpvJ2H?OR8 zTgtbn@-z@g!_BN;s`%t1G3C34IaaSlF($imWl>L|W7$why!S8i;PK9={?nG?!VXVg z1=3RPpCbyjuFW!%&X%RIbq9xyS3?%lq>q;*`cEfIG`!;>#DKm9eR6KocAm*VYIw0A zvQ=N-UUo+r8}i3&DF%}YYQQz^lA4uR`kkyZhWX`wAf2yfZBU}&+?3YW)Mr{ef#Q@~ zRL~*Ey84d%LkA6R4!=XC?U!ojUz1;_ZHA5~ik_yE5d(c+6i;+yLa$=nj%S|R*E`(M0Jgbiq$zA2|2lX^JTWek4t)cfQJ6w79&v(o<3}Ixj_og~)^x z&aivt=CK9Z&t;Iz==u9G?Z#URQ^_oIlw?rFpGIUggL1|KOp=YlRaSC!8ul@n9Oyqq zi^U})0-?@5$Ne`vC29@vS@DOiiSAt)zQ7G}jN_7J21*F+4A_h%F^-57ed5P7_eF)A z*7)K^k?r-`mD)%Tm35j+iq8@@IWMd%`MlgZMUaE*l{oURNnAJofu^kk9Tu%Lcv$h) z{BZJSTY9gup%T%nLP_xm_oiA?ZvgcfT^UvM=O?zy;vaX=Lbeh0R`6l}~C$~Jb#rdhAvsW7V)BM5`T5pUVQZus;dOh4Fz zq?=eBy`U>{xBYoB9X8xGL%&sNTGWGA z%>*R#tL6hL4#$4zs~n*r*DC#yAVU)I>+ji^DgOH>SC<A8n>wr`4H zFoWz$`zrWNIG-iPo!uV0&+d1~*IL)Cv4C}Ot7iDb@h3K^tKiPqzW9mZfwUeP{XWZ?X_6L(o$ut7hxqi0GgAG$cV&@q} zhp#r<>>|V`BkkQGeF|AoxzIlA6}+}wV<5Tx`uD*<+AV`_z*y1s<{eSzg8%0Ks2vJi z59CvMP(I8?MJ96xA0%S>zpq_H5lK-fA~VJH%~H=-a@l%tN%`8?{jNZ-i&9zAr@WUF z?U$9$hZ}QO{vI-#%#UIaw(%dCu@l|@7-QKAMbgB>Z1Hy4Y*ABu^3%<@QCb_84Xf#! zcP_|&DYT^JhMJB$V!wKlT;s}+t67BGzTTnL7sFr73U(D-?^B}kjd{m}nIK4f3(D&Y z__)tPMH`=m=?Lf*kr*1apvF}`*&HaEz7=V2;>d*YMPboWlB7MtM5~7GqCbkvn2umL zsLn;%v+r|AzDK?IF}QW)>6!MCwv#P4n_ssMe3&5@J&Sr*#gDO7M6fx1__r_ZD}?f! zF_;;+^axy$lc83*+6pB`K%^99ke0$(^wUm#=C`q5XRD8nK4QRJLAk3GhexAS_kj81 z`>sd8w-B-iNnFQ$T;3hvJ1Z%GhwU@So4G7bh4hc45GDZt-NvP=x{T(e6UoO9BjHY= zeRoG|aw0D``i6-cW1LaySBjJD9smvScXJL8m?VSfD9C!rVr`e}ul%1eWF006A2buh zFr`tzD7!oa>cX3GUviGn5tbmZ}{?JLEVmqV;~X9-G~Bvb?bOKu#!H zM|xr}9#EO_`rHC-^5^JMx?5;c5=_#i64V13H3_6oW7)vhUnB_?a2~EBkdub?-iN)s zh;`2|2igsRwaX}uHJBvGp99IBqfD7av9#Qy{O5x)B$+Qd|NDzRcbceKLQR6>1$H`i z<1;5Idy&{Q_Q}uaBjphA7_vW=*XCLL0kzJeLgs}VoCZUZRi-_>~&!l z+~*a#=UB$B&xq>tt4wE~7fm^jAp{`$^h1Bj%uJFic2Q#%*#U?=%zN5Ogjj7a>oUEU z3iAsJP688|&&n7(!(FLv@_`x`gqTQQQ9YH<))8#z$Xls_A^bw9gun-VcuYI?WnIJ& z`4L~5RYiDwzZBw=GOi0%ULd~>tG-uu3u$K&VWMi|snh{wnw$e=9#XpITLhWdV9_-s ze>Rd|TP{!h7{1dVVX*|PqJ~zig(gQ?(HNZ*Q7w~%rzeB^yqp?~^)T7tXiM>pt4eU7KONHwQ^!wk+Q`0Dpi=jpBb2) zC=Y{km4pfoVa}JVS>opRf#N^oi#fun$R$d^o$6>aNPmCMHQbA4L0<6%(V%V{Kc^(! zlmSSyAkieqsYN=wjxFZ)DA3LFTZ3Sx<1?eo9-j=0kcc+masc=96G@Ocr z(z7q9OE%WI7pAS6kRxt|=|lCfyL|x$A4PtN_y_`;=7*Lb-e`4$Z`U<}GZaP!QGbSX z8Iy;c;lP~M^=S@5MY%UE#ubT`P5S)l>@TG09?0kk8KP_B`q|={Z2A0DbuVH2#lxq* z*eDjquFJxi%ffg{fCOK+QsOO1YfSwMa zhhm@bA+o>u=!?XYwu+~LmlI%;4vR#WPsh+YT%-j3$ckpfx0NE&_Zu*5ht@CtNz&E{ zj{HY5pTEm4!?6!YPG^O=^0V>N!BDtXGDfY$~fP3Ls zIKMQP}QxanhCzF_9|5KT3C$$P?HxgK}Nb?U=&ieXK%4U1R%~J79;6y7M=harEsSUKzRjQY494c# zAb;?kk)9~JzxvOB2;TN4n{cf8nN8{%*)eW#w+fzs@DeC$z=jYash{t)9590(!+1I_ z49-d{Dj&6qFuO@eRiD8Mn(F^v`V60OU<)zi+PD3>e#Y5ko6+9J#0sGe26(2$^NPiY z=Yz;{R#g^}3VOIr2=x?zm?$S|;-1bLB=l!wEt4v(6o~a_3G`%2eqjWSBBJcvSc?gr z++j;U$#OcuL!dui4v%}1-M8f$Lj>@^9BS#s+)+@wq%U>ihNdcQM55cjlje}kygh4= zBtSr~q7=?{;xNyf;no)edmB_jF2ke=)jGxqv_LeS%W;!q#Y`es>jJfX79QHj*0}u_ zsqr$;JF#g0g?D=klaY)wJ^sB$MeS?h9O#!R3GoWu$?~>q2JM z?8w>+7#`@N6Zllgwk9mpCMblDfCqb8OV%#rh!`9T`G}!3@q5W-TiHCc*$=@*<>3yn zb^cm?eOCh$K@rh705rnwCC}r<47h=zE1)8rm+i+JP?8kf!nkCDA{Idre=;yS3<8xo+k)gKYKh_}*$~JXmiiK_su9?j9 zDu;>q5=8t76+wqrq6@Vfq!xnbK)zj3bCW#J=$(%O_p1C|Zxk7t#pA4N$P6aMSa_8TyJ=X@0^rN;DTClQ&ax^*8bl2OIZlVnwXs6A4+Cq~Xf1subl}Au47xXo=Yg2iXG&bG z(*yQ>!A*&d_BmsSeHL35-iMe9B+-$k$5cIN10UMpJw1^@G9u_XYg0R`APS8}dd65x zYE;&9hU-+$(6+_tsIEr<$Xuh4JdfsEQ@rwjeReRGODDQi@gf zOcEz?FZg)w5jtnc@^Bf$admx8taZ~M5UN%MPebRHQ%8gABroA1Xa&{1xSLlBcA!g@ zQoSA&p2h!$`?3gQg5zQC*oA07!_zC$V$6+%>>yZc1ef#8c|`Og?+D}}N1Q&<FysWhyX+1WAC6Om3LlONs$Q{C=f*w+&n7w0J3|W` z(+&)pNTR3+rUa0q2qfj(t7p(sEIdH(j7pq#2z(|jBHoypad83MCW1KeZ^|`CU23&q zoeyq?T!ZN!uNq|Q!h&o30@uyPeI9g!%u8cu2ix5B3Septw4}{-?0PVfZsO@mr8Ur0 z28@S{@k||hbJr^!Q!$G`FJAQ5OyWJs<3@ygk+ma`b)f3hAY>3L9(U@d7rv^~D)kQ-` z^xAFA9=IVWV`k`k@=06L2%ZB8NRYH9o!+(sn%FN$ng2vtB46|c5T zMF#C$ei&4qibAKumI;h!4o?wqZ$K=LNHv!t0~U-aka~dE-0=LHId*Jhj?Hc079@dvL?&6 z?!dO+X@2yz=)9~9+MV_LZaV>djQ|DAhb12NJdp)W!X zQi}z;K6tojdl4>7E|f~{!iYl{hy6~l{{X7LA!XwZd;k{l>A>(I)sVEMx@n2hpc#3% z;_l=`f>cR8Z3SB$U*6u%Xf@H3uY>*+ZfQ7zypqnAG%#|`O0s74$&1H(b;18BYdyme zjVpF+N&2+dw(S`ueby{Umr*S&=sI^6Vr0^XSFeZo!?BN^1{RfXZ0P8-Q2^Wk;QU;J z-9{{fuE@>ET#qfkm5(X;gh`7sMpWj;N~!FvzmizHv_P<5tlc3DDfV|LJp^^&HYbUP z?Sam6*o(u~+bs6=LXgjNu@Pxd{d-X)(S;Os>r39%nX?iMy3o@?Wisws2CAywJH0Fv z+VUv!hdX7 z7jDJI%{y!Yg7tc+3@7B>sLjpvAmc{eWJD<3OLHm~ttU48Ue@jYC`u}XGy z9sWfY%JO+MCCL}}rcuAuZh;S+rd9#7fgv1%C9QDj1y#$*G#+<8nLWpV2CpuT1TWG;*6k9Eue01plA| z!3C}!)iaEzwG!7~>^sx}B@uCPcy{*PNQAPcXy>Et`MblvQdOj96r#Vi%`%CeGf5^* z(pTu3Q%#yhIiggimX@&n;& z7G0`+!$l6X96^uGUI+*WZXhur>IA^s#^D|>dZ(U9MGi;5V16!qN~&W1y~8y;jxN7? z@mkU7g^f1L`%AyJHwCuVnXxOQ7lI1Q=Ub=laXCLbhrW~$_Ku0DH{2!UafQgMH~j#L zscwjos59XlmMyLfmtq7R_Hsr#oUUw028lc2L`bZ}Gmw1XAVlhXtTta~yx_NHG&i5C z^7mpobcjRC;M~4bf*$pX7@I+iaF)2K-0G|JHVDmb5Z)j5hM42UOmf~$@zgVA!#PL& z3*4vS9WPgW8M2#D1k0~k9cj{6;N3aQ%Vcm0pM_q6gBFC5-hn)Wmz=yO)-J3Cj1*8+ zh$k91Z$G6*9SY4vl2LXKL^Azh-f$-4?8HOeI6l~QP;ImyH8ysL$7^fu?ll-zWHMj@ zjFh#-kC3I|btc!s)KXEZg!>AP`tv{C)VH`Wo8ZL=WMAE}I}WV}@-s0=HxzQ(CV9yu z!mmXEJ&zp6I4mg^T5hN_LU;~I*`lUbPG+tk1tprhsQSv%B#){)(lHUjm+~9qd#++$ z%5)Urp?iWmVv>7W*(je$Z!Q3wVY`~HA41W=AK<)puXqh!n%gJOUyX{t#W?}565#j% z;laNGa6|rz4dB_`Yy9-anm2U;Z3SGxsEyK5ZoY&~aKSCEUC`c6L6Sk22loreJj*!K z&Z=W@-`r-8j-)Ynmw=ZwU3MZIZAb7}L(1cmGkX2SRr7Gh$||W{;GWQg1L~|RxooLe z{GAG?*UyPzkRbAdjZHweO)GLcesSnXIQToBS2btrH6{GA@Md`q0ZVR}()BcWCNKR` z&YEfwYFIPiZm%7kL8bW^wo;rB&{*6mUo+RsM7=my+lF%i_GU6R8;ta_&(UIwN{ihx z-u#?jIJ_E1eGI)OaeR>hHCPOC&4;f-f_^rFS1ROXH3t(Mu2ZtsP?KmvMV;LZ72vMD zE}S~zhffCOywVsNBhvK?XYo6%u?fT zQ&G~8eV#kt(3vhY05Sp8v~lrT@@Yn|#QZ2sS3h?u=nXnPFIDCltTH-jvmx!Ip!P1x zYujg@ec@4}FpZwg%4;@m2KvcMI$ftWY^kDPKQs z;H;^?zBjSfse(EMB*=yeK~ya|?CIu!Yy=~VKU_*X@QbCe%<8RU2@?;Dc8eSqiMGIAgLy+7KjZ(>d7M`&k#I0w8?o<{!_r4u{eg-HWv!jzaIzsHo zYx`JhV&y-&IQ{gDd)L8Ob~p*}if5hf@Q#Gdz_GnTa@pINCqwRa#hkUphor!;OSH$_(j@QphQKrLem!TY%3Rdk zBIK;RyG-L%pja=csFeD%-#nM;N2$DhEXc+Ru_-BlcDWaMNr++*;LM^5rrX-o((SN}39<7#I#M%3P znq6VTZ=9G!tz)bOANdyuVmte^BcJmIp89pv^5gRGrG-APJPK!yq!kWC)4ZUw>8^Qmgqk!&G={AX5bMtW% zni5vXO1R=J^sO>_s(j`kcQ^L)2T(a*J=1rMjEf8XdRNaFGwZ}rQ> zlg%4)vpzl6c&2Abtf20L7N*~6-6;u>bxwGj|5i))_`87(Y>yqdCA_rx=N1p1Nvf~;)m_P6 zX(72UrCOpN9W9z04qs<|eA~3N4g`Yk*7witd>&~-B4J$9&o*i^_1r%Wm+b!0{WwF& zULekD_~?n{Z*Xe_~k#*zF0{iPe%Yl8D{$y6%&}Nk z?qg%pm1g)NfzAbo{O}yM<7&@72HpMB%42M48!zSwFNFGj0Jkam9XI}l`c{w}Di(~RZ%P4Ke$Vm-3dw{xgP(zq=F%oCpcD|*ABej&o$k&+{S#UU;6 zoZo2kcihm%^m5J9D&u+X zJnNC{x>CG1H5@#N7wVau2Y$TJ7k2J?9CvgnNL)oDjA5OXd(7Q8r&IW)p*0l*d0c~g zZOAjLz>#A*x^ZKVAG2j{t?%W|A=&fK4J=>H6yd%0Vc+pR4%)66vgJ;x9nfHv`;`!~ zC4$Gwxy^>(Tt7+f+3R&`Jzyy!q{XmXa3$kdr{Kx0H2Mj6;e{7_VK&9(6Y03})4*G` z1--TF-PK>jRr@Zq#2)f&WlyQAY20o*ek1f0SpBpt>2KV(!QxUmiH0T_?XBfbq9LAK zb+2|kcs!S5?nDdwaq{{d3^Ow6Ur0?@6xTK!+O)fh<=6*a{XBIxjG?l?p)8l1B;ou3 z_=H#2<%HD}n#vD5PkWb~0R1j8oVBOy${wH-Nj#Om(DbvOOdMQn>>YVO{m*`h6r)#y$kASnPO zRihV=km7qBXXXmqvkYn@t;&)!9&D1ras^9UM2#n)d&;|8@0dd#cd4Xye~EjIJPW_Q z@#B|gZnyW!27c%4jgFShR8vnr12wP-)b*hH(psO2;nw8ST?KJQydOH>7hJHdj#&Fevv#vq}na9 zW%7`dbkq-BBvFFuz37!v6qfb81`m$bmkzdP>4*he4F+=Y^Z z{Cglu;^i{N88%a#W5xp$x%iv>1Dn5W68JV2{X?W`ETcPB`ldFGPEW@pNvC{(U565LlXWl%1C|r@T8su z-$r(RM?r>rQPK89T!`!JZ|r{NQe8Fi&(LyxM;_DxlzI{``een6!%pp}b}edd_!7Lg z1G#c=J(K2iciLv@jrq#+iFfjE`27Cb)pf7z3Fu&)M@z~w5LvOe6Q|0Ws9C>$3`1w{uLMIX#C4; zYxy#oDZFiOP`*9Z1#X~=yHqxNyB?}d#8fWG+-H!0Lv&TPRc9Fn&vf_0Q?B=tDK5Nt?SiLUAGhC7Q{Pqf{n1NxcIRvzA1e)3w9YLMLocZwu25oVYb3wn3*UC9Bi+p`$vy^clM0P#1B61Ku~ zqkc0ny(fb!79j>4ZvGbZn+EglwkhN7zeB7mL?zV|0^l4l25<|pW9jwSX4X4m7?BI#lg^F^tmSMk0xt#Km#L zY9vEJJ-NP$t3jsf4?R~D`H4}hNDtk$>u|3tYBv~};CU>V79)R`tk~RoIuPP_rP|K2 zmOuPQaMiF%z#kd@L%%VlLiOr=3Ye^6%D22@DPJnWXhLv+uNXatms#MS5p){iUk*HX zg6}Swz_SJTqPI9an1}bLC|?`G{CC@bRq|gi0U!AP9USJTc|&mb0aVhU40ChtGPKO# zpV5iKd4Bfjr!EL@9&?-SJx2wW=Fp3h)@g9*I)b;RnIh{0|%IplZUskyCDYiGT4NFj;$-+G>HL0>i(FN zVTRGkl%F#j^vN<{iJMB4EP<@xomcOe+{*EZ%w&)*5dM;Uo|wFkaz+Ny3BCY%bN z>axS_3@j*NV(xpDg14P{(Us!WzBM#+;KZ_Nvtt65jEC=aV{BFbi52(lc>akUyyHu` zqGn;(wi>KR5BxL}rmv*n@S2wy-juVOA}fRRdp?M1R%_l-cBhnzV z*J@FtH$RUj{D+~~XefnVnXe;W?aLot%}!_Z(-(c8x~`try~1hA+~8Td@dIWssmFQ4 zf4ozy4e4r)EOvi~evqn8-oL(|MLuMOCW{kad0>ADk z`giT(S0z!H$N4;+HNqP%v6;qS3MJc#jW&+&gz1Xwmn`}UUp*-Z&6DJca!#2Os4hUi z7UDa7kth6?_4Zm|PM+vTlEkcQ86!+vf1O-wZXFVrXkBnhZO)8O`#lqZL_D@)&l7&b zPR(l{GFZUh@_6q;*Mi7|YHJ#cf95KD0xz6a+jAh#yrM)G4?u*n&0vf2LWRIu`r=}9 z$&B@JfgnLpDbXS@d26n?NL*rAQB$seW5!%X0Kk*FyNp`fWrymV?bQ6a%=ac5)$Ca~ zhVWRZrbTKvRQ<`eBY&C^-I@ITDw@6AnDnWjIUut$z_jX*(8o11)smRB=q-C#t4rbs z6$QQLPRb~@@2(wQ;w(TXBYNy&-YM)QJ$8zQdU@SJFx;!B((5KC_pBe5d3P+9+s3o# zxOnD3%3n2Pd+SYme;<3_IJ{{dbHnc5)3a;n2Vii=wj4>sjQ55XhEMTkRmE4z{oUrd zkO8aba=AvF8iO5qbH%p0Yi%ogZW=R?L@nc9ZxM4Us~HFd*bP z?G$evuv23*hY?P`gdTh7thu2Lvn2mPKP8yz$o+CF^5LO8(Y89Uz*JKTFkL5UM2mII z@60r_kmQ>4bk7WQK#)&gczw0w2_KORDUnOSUSetRRAPT}@;9<}itj_IY*7md2~(~p zHLIPg74h?Nd;eKs3p(H-y{?({u(;UXktcjTGoB{y3~aG2sJT<~U=I*i1_z;z(rDA# z&+CDxyFZoYyBr+9dLpZae!iG&&sHtD3x3c5goz=)4Ey?J&G_*PQeno)os#G`4R*ds z{EosGj-{r>M$gN1%~kMl6s6n&!ku`=UGFhYwUs!pis3l;LYJ`^nlI6mO}jn0B1YrS(8o$l{7S zwd;`r8>vUvya*gG|M1zUv~fQTSdyuz%#2rRkU8n{!_e$&$*_>&*b(NlCKemllEo1t zx%`rR&O`2pvPGp#O&`B9m$b21D(?6QLK6}j3-8`{nbq-1&T5FnrXzofxuYHV%#P=t zrA>!)ePn{8vsd6A%ZbYfkrcmVppl$~)?9IZePjuweKU@pb^*u|7K7IME5~OqhgGm3 zW02n#e;Uq`5Q3G1e~wc}j$XYlqAabsY)7_ebBSV*8fsra;bQ`)TXNEpp3@p{_*lc- z>z<=WRO(H1ywy3W$h~u}JmCe(6XUnBX6E$Vy^r3Kug07JHu~PaOD1HjGet%*NXVB? zdwB(|PT~Auq3)2-#Akr8bmZf2mxFL<2nz(_ibx%RSFWiGN5|lu7Bmz&mj?Bpbd3zE?>Rom6Fv=*g!$iyZNo$#Gu~i!L)FrI$9&fdx=XL= z!JkIyQaek`wNb}*p_IP3S+uc|4wa4a51G`p@Urex{8okJsFHOZu<=bhyDv;Pa}I5S z$swtHu^%P0Xw6_~q08C9+Ct;fg{A>|4kQO7H0EBqQ?6k`xDsSGaEz+kg9EGDb1MRS z6@P@QXGN8tJu>e469&e?%NJ(EQAt=i4D$tnpfRGKhai@4Kn*Y_5)ak0Uz7|+M*1Ck zq{Hw9BPmtN{X9^#N{;jFwGWp;qIfjWoeEehg2hLmqJ;keZUF3H#jhoW{u=QXPWaup zf8};bzq^|XDEA6a+dG^W&Nk5(1Fv$);<qz{p_-wq4IIbRp_x9tH%85WBj( zNw-P)lCX%S5C9D`i@rMsorpTElAi&ys*x+FdDN>JTc_f{AV}ZD4RvxVuF$}bFLk*q z4g#_i7t1zzYGiF^P6i#k$86L990ts-FVhq?~!>UFW-Ef8YlGib5@3a%06a zxcu?t1AMN7#Z_C&H3u|v9s}dci#S0HY>N2gnvv(M*r!JEEZXRv>O~U_A|{|o&i?ID zP1_e!U%RkB=_kx7@tSuSPed~ti^-Y(S7_Z@!mpB(TYm}Pt@ci{1758-bl2p8+fm8b zGei6eqwCLHJ=R`Qa?|Lb50lOO(LYT!>Hg2A;Nw34gUVy0@llE{Pi6Dz~`(krDFd^I|I2Lo30@uHmdmc!icg9tz^Pn{LW+i;fvT#lob|O z-1ySTwT$c7i|;3=cn8+8++hsA%DHC#^iq5a%1TGJ))emSj(lJ(s|!kaIC1oVI;}(% ze4=-W4ZfJV+^Z9A>JAl=WSs;f#CiGRm3+UzK^puq3h=ld4~I88$0~$q4`+S=XO_uo z$J1%`tbQd1_BDzXe4O@N7Kd0L=WhvmQU3bCc+7F%ajrad>6N{C=*NYS*B=ajSi&n# z7=If1?PSZ?NK>U`r=W=6(_U*<(4rdsGGR@?*L7@mPND#<&NjSLWEyfzhshy6ZB|+Zao}7_J=E%8z8Z@IhEH5(XDMl z`D-&Qw|1%QNw)Jyp36RJ8mMeC_P`_ib%0(F5Vt15>V7sq zGDGZHH5WMvSf%nIr4!w@jrGm=tB*u27oU~1rIYJ$YB)w;=I(9>$0D8_BC!GI+@;zj{koCVP8ozHa)BkHscik=CJU zRRM8o3yhDt;GjCYl0ok^gA9gt}9%_nas*{(HYF(<)rbW`u`&+iV7!6n`lIb)c!`@&LGwu4plkZT=(rb+N+<%7#||Njdn ZaZ7@1E+l@Br;y!APlzGR{{TBNC=&nx literal 0 HcmV?d00001 diff --git a/packages/firecamp-electron/assets/icons/mac/256.png b/packages/firecamp-electron/assets/icons/mac/256.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8c0e95d1118201c6b0f510bc71465ee4e99e2b GIT binary patch literal 3470 zcmb_fcU03!yPjVN8i_PnnxLX62+~DFYC;tOL2O`_PysN!WN^FTEsewgeyb2mt^o^Q%JO{zHXdkPtU}D^T61JR=;yFQc8& z06fV=uKS1znN%HY(5E7yxzE`2ho=?)p5HtOmz}ZNvwNLpm>_?*=X!y+NTPHwYuR?aS*^N4_56MA-^e{qIVfp3XMjm2L&c zF70mj`{}nEp&MgP2H!%)T@5Zx@pqc1tB-pd^yw?eD%%&Y9n6q$%*MODm0=*X*ft zR5kF;%@?sM0kmU64;HC`a~Tc?;e9E7tt%k3mudy-n>7{l_Kp*cr|Mt|E?qiMmR$wW z1ONIm@aH{J18?7DKXFy&{<*5J;}lOO-8Z&SWgP&+VnnSoY1S6G;7~xW06Z<*Hy(y> zvlrD<1Do)f#$&1=7ePdS+LN)0Al?TG9d7s=0I)-rgCAx(w}rsGU5`(d*BGe)5d={2 zg##&l7)ViofK568d+Y#^Rt3ZqX@KhZzb*5g1H1Ff-7c@k0_`Tg>w0R_vG_8rqx{Cn z)v}1m$%ek3FES;Qy%GEauao5y+m!QHnOJVr+UOmnug+Y<{+)u7tE7!&xkp@4eGL$Sv6m+UIf&)(2!odrVFpRS&CTzrN85XSqSiQY; zEh&2FPiAay3fU9}ytMq47g{`fP@qT^ux@_m=Uvo?vi<->`AQm2i0}L;*ub)OK|pu( zfIe7U1EKbS>@$;RU+iR}K`V!OS%ldQ?0`Vo`G_1gqsd{|Ird~v=tM_=h6t3E0f?2Y z5mBmeqiYIzw`n>#Pp^{VoIOp~88bx;Ru|b2j+zJ^yXK(Q`nH?;y?OF96rGqkyR=p# z(I|N@OB&oBdEvA4g5YKP#O(^*Yv0AS$q<6f+4vRu$y>88h3qLGBHg%|%x2$F>X4>4 zo#N~!*V0An-1}a9yjRl;H9gwQehXY+Y> z2Y|UpO6`*^?r3`wbN8dPASrsRxwe9a5j04O*UZyjlf||FI02n<8pKiK{gJszVxVQF z%ky3~c2I7sk}S%0YxJP~U~ZMCZXJOo=apOvvZ_lL_>BYtBLTe!Xp&zGO%g(79EoE4 zW5#vGap)3v7|SZEdhPm6ig#owfIXHGuufun;lx7i>8-M0DkN^yQj(G2QvgHU(#;$Svf+;(qU#UhH8Sw)GBB}tgpf-y@g5j zN8Yy+m6DoOB77c@)7mPFV#ktJ`X9|7Gcbbp7Qzr6(}n%rgI^<#mHHzkZi%T}irK|0 zyOFNhrUp|1xqZB^wwM96T+roV#v#e$+6!voDYrZSv8Fy*tgTjRBz|K+?u~Gx5k|dY z<5;>VF4%R~C}+Wd`Ly2>}wVOnxz;l|H}??bKUaM_lMV zr|mJpDpz4$sF8Smr+DFsmYTrY%92Ccd^Yv6ov3SA!7t7DRDaQt`~nq_Uivah@WLO- zwFU}g8S1xxoWex|g<7MJh_t04s_g+{`Oes<>CUMB^2kw3T}Fbr(7Co(iTU=J+E_Tz z{K1QQ7{;K5L~~vBf0p1#8TJIgD(hFO--@A!Fbu2V)LN5{GU;5bsn@4Ot#$Bz%_w z`vy{}ovS4RHj;w<3MF&Oi7-3(TGI%gh6ct1tBZ$Q=S#vl9|`S& zO_?p%_oURVoPs)4fHGq8g`joAUS~DJWUYksNq2ZqPHPk7TI<@!3*-={P%GyJ_eAXX z!s|to?ZI!QPtdZjqXb?L;YmGZ+~asQ$8%No8JQF7D*ffGsB27>+_)8FQG0 zN^$uQ2>Fz`SUW4!ztfeZm1~D{e6A-4tC58dA|8%{ej#;cvkAkQn;IU8y-o)EQAg$D z*pA_RUXDOJ+R*qeZ`B_;Wev7!6y36X#_MK(-B6-|@fCRe5JhE^aK2zLsj0tfgYOYO z7qi44y6{nVfMfb>JYc@6QJUuFEd_6rs(iRYS8eh5Yl2o+RziKuG(b_idcN#tBqZ(z z*Pn)tVlx*nH4gY`UJk5b4zgzU##Vanx55PL!BNMB?Yr0Sgz99{c_>c7WNV@Y%f@;q5%63aEFLFakjJ3rVHFa+fu{7teB8ZTO zDTitCBxa5w+5CX8f0EuGYIefk=b-DL+?ynzkX1|}*K zvz4cydQqM#*yKI;g3wU$qB-ZwL0&SmfD>-`e8c2P6!!828{pdc!V}z0IV7V&1}(U1 zTe$q<1uV})B!Bv##)FKLNjvuzYJX6IvIal=G_aVjG1g0VqNROSdVV@m#nTvcp ztM;XK(Fqm9v0R#sK83ItkYi_n=~rWcEtd_<9#_bOZcN!1`*Y*!%+xBgna3Q3_Oie4 z(O@3gl0vytX+BH6I>}YhnH^YKX|Ca)sT}CJ_+_qQuQ2J-ltoF(aaQ`>;xRsRX9~K8 z9>{p^VFX=q}9!Q`r*!kiv?Eqr}qau}j}J zFqf*X3{t%37{NjK>#1P+<+s2VVVG#wMK-Xiac1h|X&CS!BLUg{|2?<+@66Bw#!3eY zH|ma91F-zQQ+gK^d=zXQ3&VHVgAY+2W>QHW_>R9veh=(6)&Nh>?a#=CEHsHt#!iN0 z-+JHbG}TrHaR{c8rh$L`_cpR^9&`xGdaTp?lc`AB{Cle^h`#sR-#T)HZ{5$$6dRDl zrrOFo;Xl1QH+KL4 literal 0 HcmV?d00001 diff --git a/packages/firecamp-electron/assets/icons/mac/512.png b/packages/firecamp-electron/assets/icons/mac/512.png new file mode 100644 index 0000000000000000000000000000000000000000..faa8fa5179cc560640d6cd74404c859fb73cb0e7 GIT binary patch literal 7015 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 Date: Sun, 26 Nov 2023 14:40:56 +0530 Subject: [PATCH 35/71] feat: image improvements --- .../assets/icons/mac/128.png | Bin 1793 -> 1864 bytes .../assets/icons/mac/256.png | Bin 3470 -> 3768 bytes .../assets/icons/mac/512.png | Bin 7015 -> 7959 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/firecamp-electron/assets/icons/mac/128.png b/packages/firecamp-electron/assets/icons/mac/128.png index 66e794e6b0e29679c2be4b0a70eda61165086564..28dbaa22bae5a431a693aa89065bb9def5e5ddf8 100644 GIT binary patch delta 1798 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 VnDuF#1abfX002ovPDHLkV1oPVARGVy diff --git a/packages/firecamp-electron/assets/icons/mac/256.png b/packages/firecamp-electron/assets/icons/mac/256.png index 5e8c0e95d1118201c6b0f510bc71465ee4e99e2b..20ecfeefd26cfbe7dc3243c77c0f41e6d514258b 100644 GIT binary patch literal 3768 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 HBPIMBgv-)C literal 3470 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 diff --git a/packages/firecamp-electron/assets/icons/mac/512.png b/packages/firecamp-electron/assets/icons/mac/512.png index faa8fa5179cc560640d6cd74404c859fb73cb0e7..ce239ef24f24670bcd4765f3313854c0591b5787 100644 GIT binary patch literal 7959 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 PMGb#jAJ~&;MZWew*+QY5 literal 7015 zcmd^Ec|6ozxIZ(-Iz(jOMrA3IA_|#FZ>3Va$x_HNEhMI77c)vyO`4>#Wr?zeskaCj zg+XQMtx%S+MOhkC%*ZUid%W-c+`sQX_x^FO&&OxZ@0{m6&vTyTd!BR7Rp*0yON9e!X= z?KrRl0Qya=z)u_i4Z+?&b{vjE%?^^w2T#OF&Ru!2Axk5EgTcw<7k^k}Cg3Yi^cDqZ{|tUA&}A*;Uu%uh5nXssbMIwyCMGxhUVyoT15U zG`}sw)#zTX-A&0WcuY)V1KZvq4 zNdlmFz3GZC3W{!DlnM2`u8P}Al&i6^9v71BG!$JAiTfIu*a^i5N~5lg;`@DWyTBgP z^aaVhZRc#~KG6b{^U`D*9p~od3BOVwqtl*9pCtmyM9bAD_w{x>#89+R;0q_8mZw+& zPG0e{ac>UpK24dPYS3?f`DE}2S;g?uK^&`rN;J| zwQ3`-=YGLQcLtNYxc}s=XsW5r$ES(W(zJ=*Na+n__;ob?(qv*bK_TUkGxPN zugoEH?x7wXfS$+c{3OS>JJu`-Col6BR*0U)uykByQTVN#&>Dnq_?odj+FwtrvGD%N zpS+_WpzVZe!-fIDNI2FfE3`NA<`vJIc7s@PL$SU4ryP|5*xk*1#rU$OOJL$fo{aQf zS-2m3Q$vB`8NtwfQ7Nm!heZrfA@M7+F};~ zQr9Cz-s|}Cij`t^zw&vQfQvAgHrjbd=8uq8(NZ#CE4 z15=8C@?dblMlgoGa7fV@y#0W3z5^#35B+ZaNxn9k`XJE6Xtge!R-RTjH8zsFkA)tD zLAmRi6XMNY^0~eqgi8U!t>?$Al@6)OBTfb}mtW0G1H!q{R~b`-$Z6eZBpOw!04Sq{ z$CmJ}0(v(2N0u0MKLFRxho5xnaQ7*cXHh0K61U&#&CT6 zN#x}Dhp)z=ls`iU3Ua>~?5u_OeJyo*pnf-jsSkD8Hq9ejjT`mqs?M&2Gsl+-&#b|X z{b#Z`r`;njWC1wc?^wG9kh1(o_RpV{@!FyDg6j+^vlS>{^hW+*y;i7FuE-Ur-2TNy47s9A?+2w(XtO~j5 zUT?LCkUE3$nUNyIW_(;^NY?Q6f^Njw34M51%T(fHTe%zjCbUWNFJi_saxZ%|PgAqw zZ5>kpFo~MWdC^O@Ifi-{$62D4Mfuug?ENedv2&%IFT?FEM_{$#FgW-u`omYhG0EO5 zUSC7c4lN9hE!#HlEGLlMd!TngNUXDq3~u{`x1A6B`2n1Ju;X`bDFzq~q|EkabLSZ* zZooerw}&&wSolUxN*nyyC@*$6e0Liw2=&caN6=*#(c6um95=?xt9sRjj|7E`YR>Dh z7H+L&6{_ZntlkajeoHItJgf|iJhb?p`|DS?g`1eUp+cgEOK1;niU!{=2ZM8QN0w=9 z+ze^MwwvNZOWhyZ2Mfp#RgdPx!c3il+B%}>@NVeZ^<3lTCZF%Q zkD%1_zD27aACM>6t>}W9!$sHi8b_QosVMs$yVaqpoy3H<&yQ_Z5-ky@Z8quDcyS{a z4PU9@x(`UQ7Y`L1LzXA#idCGulE)jgWNXa6y${>==pzVObwFpe0i-ExwRbQe2lx#{1vP_nr+M5kRQw`L7pOl z?ULloRBIP;U__W1Vr?J3j1Tvse`TJXe^1O`MYkIMr5jH&-htB*oNHjcjY~BEVN^hP zpBW&~gb=U^lQ!`L%X+RLQ4x3BohT|2SEAbKn#oQ%0%a9VSvL&3$D;zxfSh-%JYPu-4;Bd`$~BvN*RP* zftBb!j@cF!slnBN;O{@?Q+j^^PP2h@jxsmMm(;L{KNJ8?&-)9{=MJ6lO#;e#{|w4f z$0mlrftB6^{|uzt!GWsy!Maops3x6|-e7JoI)AYl=8iXV71SoPeRyqafvi1B5*rQr-qjzc5#k z`k)8D?tIjTD>ZNelok7;S!89-T(5%E?Gv&J)<(T_#xphS+H*{hFcsPdm0J&%aZCHq zzA+Y#iS`SH@@O?|#{9{x!~`>SGzk0S!cte@zshX3K-up}`?A>E)$SgzV_Fk7{o36j z*?{0{yN%7SeC>hz%SjwOGSLyp51AW+c|Q|cb1?t~#>;Cd1>HKzApJqqTx%U!!bKdX zw;nVGjP~g^L0d&g0W*C%r>l?k1;&?+7pgH$jjws1PEZ_?0csWF(4x@P6VkxU537mT zRm|fn7E=-zrcGrD<`|G()wekLoss$C^R!qugmHtm1|+6_gFy5gKfG%4TfW ztQgQq*}mXNNpVJjAzv0b7U~y{27f^j5m50dh#c3c!e?C`IPFmxAm!J}4bl=R`I;z{ z{)wWfsPVH*hzVhdG9V4+M*C(JsWB)qNu8gS;~~CPbXyhecomMB+!bY{#KnfJXbixB z09qXK;e?68?nxP-p~%kHMS6nKjcMxG-{}$zW9Y^8X54$re3NCs_>W<2ADO}?4_x*^K-tt1hb-@q4sSbyJzu}G@%r4j z83mYsO+T7O2f_uC6o9WRom$S>=*>ir$Ylb*KQxe^XJ<-Iy-qT&mJCQRAhg|zL!y&~ znoRT#aj@H;MLtFq|65TRwB3OHSBVKW)g@?WOBCo)XcbwAzMkrxtT0z`c#i>Ut91lS z(a#emv{V=hiI5uhw_BiI1E%PWuL(^e5S^$sljWjgnm{M)(+31yI>#xnMvLCH=AZ;& zFAVLSV?IZy;)hnFfE%67aAcy_-7p|*z071h(T^i#x{Wd;s60O9To|5WP4NzxokvwbCKJ9uHKcd>P?I(F@@OwgXf z#6KEYE>Sc^$7BD=gcfM`5B@Ct2Y(aVM=5Z;sR3CUbusxAJQVh#T0B)2MLFX&{hje# zGcwLws<<6WQ~+)Ea2twUs?^sJTv>tF;toZS@~nvoh4ui4 z!T}oeQPw81FJ~AJH%GVrp5rF8RZ?KB6U2xzc_BaM6PV&WC)6GUxInJZiYRIvQDzOX z$|M3L%3D2f-iClye)$Gj*L{ifS|n!77LJXOVPK;d)UbtbF(4H>)K=IVIp5#96jGTb zoVt)_2ebbUAf(RlNu2^p1=6Q9tnpu+I`yYayQw>OYKSJ-c3Q<7ElV}9g+Y)Hkwrew z)!k}4zYgiXwFkY>f*iXc{`VF%*n8FKPo^l-ob0>!cW#tio_du!L@o^!rEsP%{zeg! zM6I1`JxDoelISj%5S9!Go1x&IVo82ZKce4F?W;L$LaR^!4oPuHhsJ{M&FyG6F{?ew zl;ysQ%Y7Dnd~y(F0XFB(Jo1a!!09?Yd{P}-h{XVFXsTcS;=Wp(Id}1Z6gr`n z0P;Sl#ODjX7G!BuP2K$Oj}L{U0nazz(( zisYa0p2v!HY*J~nkOpBruWTAt1-K2KYbdyBw=&@FdhlU2=-zwI@wBiOE7noUzs6F- z&0qrD%E6hTuxQF&$Xkmq>R%bTo9> zj$dohevlFY5i%8WA%<|12*2Pu^Vf7({%C0;i+(gEEQ>e<2lY~ffr6ktp1g%CDHfit zzPIQEgRfK?qZfT&MP4My&QJnJpNzbj#jc?QM}6PJ`dHI*(c{@wJgMSH>g|sirRc_w zpLwhtST%(&?r{^VhKPF`2h3c#!s@b;&&Uog>%+`J;8ah7*wc>zkKQyOccv<)ydN(Q zPBnN1Z1I#}K^S~44ICkq8n-ls@p`#d+*KD?x2|a37wRr{1%B&J@jEeDQCWu0hWmA} zB1qTZi`+BuRa@P9KfYWN)fqm0VpSm#GTNQPm`vupwu8{Df})fpGl~NRo`KP=@k*5g z!9*^Z78TGNY(XX8+`0cw;v>GyA?R;dYddDgAw}1}vcHDLLBjj<6{6agSk9bJ#p-6W z5pOZ$Xir?Q0!ZJ=7dcrmrb?=Ryo~7|M9MyS%h@ufIF%PZ|K(d_4(+Q z)h$d9l)+d{xE8FpAx?Lt}FE5j{({9G>nQnC~ntpHDEvi2^7e+_t$qH7JAOMEOCAsN%pWw8R#lQ}jhCNbaHGU_$W-CxjaA(p+gU3~Da?S5eK2cBI ztOS3ZL?n-to!<1LbkxO1rFmZ|I1Giz@I{hkq3LqdNxDUuW_vHa;kvpjvt7l%z4gGk zN&|}!VQr*3Uvu=M73&7E`{mMwJwCZM-<~mDD~+j`6(>z->oGthaxP_~q(s@5$E?aa zyZG2I(803SRnuPX1Cttg8;J>r^+2}~Uv#DH!(&F3lJBRH&kM1fPm&RX)7Pv?d*8wJ zz>9-!HNL3Vtvd1Ll1{xbr|rPrAm5ol>GM}~9~nt?&9>fR_tz(Tx>E63DRjJ66)3x_fQ-BUrpj zK`AQaKSLgPl7CA_v1bEqr8kl`pP8!lAK=NQoebeFfdT~(kmwWE)ALcS|L39XK*n#< z;kP!Z%=(IS;pu7>-SDe)!ft)w?0H7eU;q7Qfu_o?%v8eGXfqB?)35SwG|tu_a4!Dys9e6JiiI|Z)c`; z8Cm_tKO8nE!^^N4zOMKBw=suQ#N1?$%0kb^V*t~ig+zrRPRx3PxA~(;bsgz%g|>ZY zK>SRf)o?=Al=3HRcB@ve(U8`H*-use? zfm2_ts7!}pcs2-KkD}aaX5xwDg6r4GX@!Pw`KaBn!acF~WnImKURapJ!>z0M|HmuW z|MsnOaUwXo831E=bM4IH(9#vrjdXaOZLOo|VhZN)GI!`s5Q;eb5Cr3xh~C6)GTyoKiviz7oWpdh|A4))WCz9zx0lg&&UF^ z+9) Date: Wed, 27 Dec 2023 19:03:06 +0530 Subject: [PATCH 36/71] chore: ssl disabled temporary --- packages/firecamp-electron/src/main.ts | 9 ++++++++- webpack.dev.js | 12 ++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index c7341d938..59c7dc40b 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -24,10 +24,17 @@ const createWindow = () => { win.loadFile(path.join(__dirname, '../app', 'index.html')); } else { // win.loadURL(`file://${__dirname}/../../../build/dev/index.html`); - win.loadURL('https://localhost:3000'); + win.loadURL('http://localhost:3000'); win.webContents.openDevTools(); + win.webContents.on( + 'did-fail-load', + (event, errorCode, errorDescription) => { + console.log('Failed to load:', errorCode, errorDescription); + } + ); + // Hot Reloading on 'node_modules/.bin/electronPath' // require('electron-reload')(__dirname, { // electron: path.join( diff --git a/webpack.dev.js b/webpack.dev.js index e7893a142..648327a83 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -33,12 +33,12 @@ module.exports = merge(base, { ], }, devServer: { - server: 'https', - https: { - key: readFileSync('x-dev-certs/localhost.key.pem'), - cert: readFileSync('x-dev-certs/localhost.cert.pem'), - ca: readFileSync('x-dev-certs/ca/rootCA.pem'), - }, + // server: 'https', + // https: { + // key: readFileSync('x-dev-certs/localhost.key.pem'), + // cert: readFileSync('x-dev-certs/localhost.cert.pem'), + // ca: readFileSync('x-dev-certs/ca/rootCA.pem'), + // }, static: path.join(__dirname, './build/development'), compress: true, port: 3000, From fd3957bda8a9cbb715c0fedd22c00ebc88c40bab Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 28 Dec 2023 16:55:27 +0530 Subject: [PATCH 37/71] feat: eciesjs installed --- package.json | 1 + pnpm-lock.yaml | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/package.json b/package.json index f68280e09..9e4adefb2 100644 --- a/package.json +++ b/package.json @@ -106,6 +106,7 @@ "@react-icons/all-files": "^4.1.0", "dotenv": "^16.0.1", "dotenv-vault-core": "^0.7.0", + "eciesjs": "^0.4.6", "lucide-react": "^0.264.0" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 40ad598fa..b4bab36eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: dotenv-vault-core: specifier: ^0.7.0 version: 0.7.0 + eciesjs: + specifier: ^0.4.6 + version: 0.4.6 lucide-react: specifier: ^0.264.0 version: 0.264.0(react@18.2.0) @@ -6215,6 +6218,21 @@ packages: eslint-scope: 5.1.1 dev: true + /@noble/ciphers@0.4.1: + resolution: {integrity: sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==} + dev: false + + /@noble/curves@1.3.0: + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + dependencies: + '@noble/hashes': 1.3.3 + dev: false + + /@noble/hashes@1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -15002,6 +15020,15 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /eciesjs@0.4.6: + resolution: {integrity: sha512-t0qLzGVKeATAA6X19hIeToxBVG8yvn/be/4XyJvTCBD53m2CK22cgzk+WW+pNYjEw5FGWZLNFoJte8lyZS/A/w==} + engines: {node: '>=16.0.0'} + dependencies: + '@noble/ciphers': 0.4.1 + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + dev: false + /ee-first@1.1.1: resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} From 988b7a23e735db22a4f00a5225201698a5e02a81 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 28 Dec 2023 17:01:55 +0530 Subject: [PATCH 38/71] feat: eciesjs and idb-keyval installed --- package.json | 1 - platform/firecamp-platform/package.json | 2 + pnpm-lock.yaml | 143 +++++++++++++++++++++--- 3 files changed, 128 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 9e4adefb2..f68280e09 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,6 @@ "@react-icons/all-files": "^4.1.0", "dotenv": "^16.0.1", "dotenv-vault-core": "^0.7.0", - "eciesjs": "^0.4.6", "lucide-react": "^0.264.0" }, "engines": { diff --git a/platform/firecamp-platform/package.json b/platform/firecamp-platform/package.json index 109b71bcc..54e9638b3 100644 --- a/platform/firecamp-platform/package.json +++ b/platform/firecamp-platform/package.json @@ -68,7 +68,9 @@ "classnames": "^2.1.3", "clean-deep": "^3.0.2", "deepdash": "^5.3.9", + "eciesjs": "^0.4.6", "fuzzysort": "^2.0.1", + "idb-keyval": "^6.2.1", "javascript-stringify": "^2.0.0", "js-yaml": "^4.1.0", "json-templates": "^4.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4bab36eb..6b989a632 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,6 @@ importers: dotenv-vault-core: specifier: ^0.7.0 version: 0.7.0 - eciesjs: - specifier: ^0.4.6 - version: 0.4.6 lucide-react: specifier: ^0.264.0 version: 0.264.0(react@18.2.0) @@ -101,7 +98,7 @@ importers: version: 19.0.4(eslint-plugin-import@2.27.5)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.32.1)(eslint@8.32.0) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) + version: 2.27.5(eslint@8.32.0) eslint-plugin-jest: specifier: ^27.2.1 version: 27.2.1(eslint@8.32.0)(typescript@5.0.2) @@ -176,7 +173,7 @@ importers: version: 9.4.2(typescript@5.0.2)(webpack@5.75.0) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@16.18.40)(typescript@5.0.2) + version: 10.9.1(@types/node@20.8.9)(typescript@5.0.2) typescript: specifier: ^5.0.2 version: 5.0.2 @@ -969,9 +966,15 @@ importers: deepdash: specifier: ^5.3.9 version: 5.3.9 + eciesjs: + specifier: ^0.4.6 + version: 0.4.6 fuzzysort: specifier: ^2.0.1 version: 2.0.4 + idb-keyval: + specifier: ^6.2.1 + version: 6.2.1 javascript-stringify: specifier: ^2.0.0 version: 2.1.0 @@ -2236,7 +2239,7 @@ packages: '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -2410,7 +2413,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.4 semver: 6.3.1 @@ -3849,7 +3852,7 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.20.13 '@babel/types': 7.20.7 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4727,7 +4730,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 espree: 9.4.1 globals: 13.19.0 ignore: 5.2.4 @@ -4957,7 +4960,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -10397,7 +10400,7 @@ packages: dependencies: '@typescript-eslint/types': 5.48.2 '@typescript-eslint/visitor-keys': 5.48.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -14425,6 +14428,17 @@ packages: supports-color: 8.1.1 dev: true + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -15709,7 +15723,7 @@ packages: dependencies: confusing-browser-globals: 1.0.11 eslint: 8.32.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) + eslint-plugin-import: 2.27.5(eslint@8.32.0) object.assign: 4.1.4 object.entries: 1.1.6 semver: 6.3.1 @@ -15727,7 +15741,7 @@ packages: dependencies: eslint: 8.32.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.27.5)(eslint@8.32.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) + eslint-plugin-import: 2.27.5(eslint@8.32.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.32.0) eslint-plugin-react: 7.32.1(eslint@8.32.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.32.0) @@ -15919,6 +15933,34 @@ packages: - supports-color dev: true + /eslint-module-utils@2.7.4(eslint-import-resolver-node@0.3.7)(eslint@8.32.0): + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + debug: 3.2.7 + eslint: 8.32.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-es@3.0.1(eslint@7.32.0): resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} @@ -16105,6 +16147,38 @@ packages: - supports-color dev: true + /eslint-plugin-import@2.27.5(eslint@8.32.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.32.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(eslint-import-resolver-node@0.3.7)(eslint@8.32.0) + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.2 + semver: 6.3.0 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-plugin-jest@27.2.1(eslint@8.32.0)(typescript@5.0.2): resolution: {integrity: sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -16439,7 +16513,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 @@ -18833,6 +18907,10 @@ packages: postcss: 8.4.27 dev: true + /idb-keyval@6.2.1: + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + dev: false + /identity-obj-proxy@3.0.0: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} engines: {node: '>=4'} @@ -21999,7 +22077,7 @@ packages: cli-truncate: 3.1.0 colorette: 2.0.19 commander: 9.5.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 execa: 6.1.0 lilconfig: 2.0.6 listr2: 5.0.7 @@ -27692,7 +27770,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -27705,7 +27783,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -29382,6 +29460,37 @@ packages: yn: 3.1.1 dev: true + /ts-node@10.9.1(@types/node@20.8.9)(typescript@5.0.2): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 20.8.9 + acorn: 8.8.2 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.0.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /ts-pnp@1.2.0(typescript@5.0.2): resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} From 121f1bfd22386f6667956180b23028043557ac03 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 28 Dec 2023 18:02:28 +0530 Subject: [PATCH 39/71] feat: idb service developed --- .../firecamp-platform/src/services/idb/idb.ts | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 platform/firecamp-platform/src/services/idb/idb.ts diff --git a/platform/firecamp-platform/src/services/idb/idb.ts b/platform/firecamp-platform/src/services/idb/idb.ts new file mode 100644 index 000000000..e10473e4d --- /dev/null +++ b/platform/firecamp-platform/src/services/idb/idb.ts @@ -0,0 +1,33 @@ +import { + get, + getMany, + set, + setMany, + update, + del, + delMany, + clear, + createStore, +} from 'idb-keyval'; + +class Idb { + private db: any; + private dbName: string; + private storeName: string; + constructor(db: string, store: string = 'kv') { + this.dbName = db; + this.storeName = store; + this.db = createStore(this.dbName, this.storeName); + } + public get: typeof get = (key) => get(key, this.db); + public getMany: typeof getMany = (keys) => getMany(keys, this.db); + public set: typeof set = (key, value) => set(key, value, this.db); + public setMany: typeof setMany = (key) => setMany(key, this.db); + public update: typeof update = (key, cb) => update(key, cb, this.db); + public del: typeof del = (key) => del(key, this.db); + public delMany: typeof delMany = (keys) => del(keys, this.db); + public clear: typeof clear = () => clear(this.db); +} + +const fcEncryptedIdb = new Idb('fce-kv-db'); +export { fcEncryptedIdb }; From 65cd349330cdaa004d3cb36444dcef8797c4b264 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 28 Dec 2023 19:05:26 +0530 Subject: [PATCH 40/71] feat: ecies encryption service created --- .../src/services/ecies/ecies.ts | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 platform/firecamp-platform/src/services/ecies/ecies.ts diff --git a/platform/firecamp-platform/src/services/ecies/ecies.ts b/platform/firecamp-platform/src/services/ecies/ecies.ts new file mode 100644 index 000000000..3142e4d7c --- /dev/null +++ b/platform/firecamp-platform/src/services/ecies/ecies.ts @@ -0,0 +1,57 @@ +import { encrypt, decrypt, PrivateKey, PublicKey } from 'eciesjs'; +import { fcEncryptedIdb } from '../idb/idb'; + +class Ecies { + private db: typeof fcEncryptedIdb; + constructor() { + this.db = fcEncryptedIdb; + this.init(); + } + private async init() { + let [s, pbk] = await this.db.getMany(['s', 'pbk']); + if (!s || !pbk) { + const sk = new PrivateKey(); + this.db.setMany([ + ['s', sk.secret], + ['pbk', sk.publicKey], + ]); + } + } + + private async encrypt(data: string) { + const _pb = await this.db.get('pbk'); + const pb = new PublicKey(_pb.data); + return encrypt(pb.toHex(), Buffer.from(data)); + } + + private async decrypt(data: Uint8Array) { + const _s = await this.db.get('s'); + return decrypt(_s, data).toString(); + } + + public async setTokens(at: string, rt: string) { + const _at = await this.encrypt(at); + const _rt = await this.encrypt(rt); + this.db.setMany([ + ['at', _at], + ['rt', _rt], + ]); + } + + public async getAccessToken() { + const at = await this.db.get('at'); + return this.decrypt(at); + } + + public async getRefreshToken() { + const rt = await this.db.get('rt'); + return this.decrypt(rt); + } + + public clear() { + this.db.clear(); + } +} + +const ecies = new Ecies(); +export { ecies }; From d10e9b3b9c47138820aa34468be8ae5d67547557 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Fri, 29 Dec 2023 12:14:42 +0530 Subject: [PATCH 41/71] chore --- platform/firecamp-platform/src/containers/App.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/platform/firecamp-platform/src/containers/App.tsx b/platform/firecamp-platform/src/containers/App.tsx index f7a75f84b..6cc284f94 100644 --- a/platform/firecamp-platform/src/containers/App.tsx +++ b/platform/firecamp-platform/src/containers/App.tsx @@ -38,7 +38,6 @@ const App: FC = () => { const init = async () => { setTimeout(async () => { await platformContext.app.initApp(); - // await initApp(); }, 100); }; init(); From 6968bb74cbd322fe82be86cff34b88d20dffa982 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Fri, 29 Dec 2023 18:58:59 +0530 Subject: [PATCH 42/71] feat: token encryption, decryption and set headers on signin/signout functionality has been implemented --- packages/firecamp-agent-manager/src/index.ts | 8 ++--- .../modals/auth/SignInWithEmail.tsx | 1 - .../src/services/app.service.ts | 11 ++++--- .../src/services/auth/sign-in.ts | 18 +++++++---- .../src/services/ecies/ecies.ts | 30 +++++++++++-------- 5 files changed, 42 insertions(+), 26 deletions(-) diff --git a/packages/firecamp-agent-manager/src/index.ts b/packages/firecamp-agent-manager/src/index.ts index 41ee7eac6..7b1bef710 100644 --- a/packages/firecamp-agent-manager/src/index.ts +++ b/packages/firecamp-agent-manager/src/index.ts @@ -10,7 +10,7 @@ import { import RestExecutor from '@firecamp/rest-executor'; import parseBody from '@firecamp/rest-executor/dist/helpers/body'; import { _object } from '@firecamp/utils'; -// import * as extension from './chrome'; +import * as extension from './chrome'; const restExecutors: { [key: TId]: RestExecutor } = {}; @@ -97,6 +97,6 @@ export const cancel = async ( } }; -// export const pingExtension = (): Promise => { -// // return extension.ping(); -// }; +export const pingExtension = (): Promise => { + return extension.ping(); +}; diff --git a/platform/firecamp-platform/src/components/modals/auth/SignInWithEmail.tsx b/platform/firecamp-platform/src/components/modals/auth/SignInWithEmail.tsx index a3cb0a26a..477f716e4 100644 --- a/platform/firecamp-platform/src/components/modals/auth/SignInWithEmail.tsx +++ b/platform/firecamp-platform/src/components/modals/auth/SignInWithEmail.tsx @@ -45,7 +45,6 @@ const SignInWithEmail: FC = ({ opened, onClose }) => { .signIn(EProvider.LOCAL, { username, password }) .then(({ response }) => { // console.log(response.accessToken, response.user, response.workspace, "sign in response") - localStorage.setItem('socketId', response.__meta.accessToken); // localStorage.setItem('workspace', response.workspace.__ref.id); //handled at initWorkspace fn platformContext.app.initApp(); platformContext.app.modals.close(); diff --git a/platform/firecamp-platform/src/services/app.service.ts b/platform/firecamp-platform/src/services/app.service.ts index fb0f9334e..cbf834e9b 100644 --- a/platform/firecamp-platform/src/services/app.service.ts +++ b/platform/firecamp-platform/src/services/app.service.ts @@ -13,6 +13,7 @@ import { platformEmitter } from './platform-emitter'; import { useExplorerStore } from '../store/explorer'; import _auth from '../services/auth'; import { EProvider } from '../services/auth/types'; +import { ecies } from './ecies/ecies'; const userService = { isLoggedIn: () => { @@ -87,13 +88,15 @@ const initApp = async () => { const initSession = async () => { const { fetchExplorer } = useExplorerStore.getState(); - const socketId = localStorage.getItem('socketId'); + const accessToken = await ecies.getAccessToken(); //.catch(console.log); + if (!accessToken) return; //1/ check if user is logged in or not const wrsId = localStorage.getItem('workspace'); - // if (!socketId) return AppService.modals.openSignIn() + // if (!accessToken) return AppService.modals.openSignIn() CloudApiGlobal.setGlobalHeaders({ [ECloudApiHeaders.WorkspaceId]: wrsId, + [ECloudApiHeaders.Authorization]: `bearer ${accessToken}`, }); Rest.auth .session(wrsId) @@ -111,7 +114,7 @@ const initSession = async () => { Realtime.connect({ endpoint: process.env.FIRECAMP_API_HOST, auth: { - token: socketId, + token: accessToken, workspace: wrsId, }, userId: user.__ref.id, @@ -176,7 +179,7 @@ const logout = () => { Rest.auth .logout() .then((res) => { - localStorage.removeItem('socketId'); + ecies.clear(); localStorage.removeItem('switchToOrg'); localStorage.removeItem('workspace'); localStorage.removeItem('org'); diff --git a/platform/firecamp-platform/src/services/auth/sign-in.ts b/platform/firecamp-platform/src/services/auth/sign-in.ts index f2d54ce62..211355273 100644 --- a/platform/firecamp-platform/src/services/auth/sign-in.ts +++ b/platform/firecamp-platform/src/services/auth/sign-in.ts @@ -1,8 +1,9 @@ import { Rest } from '@firecamp/cloud-apis'; import { _misc } from '@firecamp/utils'; +import { EFirecampAgent } from '@firecamp/types'; import { EProvider, IAuthResponse } from './types'; import { githubAuth, googleAuth } from './oauth2'; -import { EFirecampAgent } from '@firecamp/types'; +import { ecies } from '../ecies/ecies'; /** credentials require while sign-in using Firecamp domain */ export interface ICredentials { @@ -22,10 +23,14 @@ export default async ( case EProvider.LOCAL: { // request to sign-in via email/password try { - const response = await Rest.auth.signIn(username, password); + const { data } = await Rest.auth.signIn(username, password); + const { + __meta: { accessToken, refreshToken }, + } = data; + await ecies.setTokens(accessToken, refreshToken); // validate auth response return Promise.resolve({ - response: response.data, + response: data, provider: EProvider.LOCAL, }); } catch (e) { @@ -59,9 +64,12 @@ export default async ( return Rest.auth .viaGithub(oAuthCode) - .then(({ data }) => { + .then(async ({ data }) => { if (data) { - localStorage.setItem('socketId', data.__meta.accessToken); + const { + __meta: { accessToken, refreshToken }, + } = data; + await ecies.setTokens(accessToken, refreshToken); return Promise.resolve({ response: data, provider: EProvider.GITHUB, diff --git a/platform/firecamp-platform/src/services/ecies/ecies.ts b/platform/firecamp-platform/src/services/ecies/ecies.ts index 3142e4d7c..39ed76bd7 100644 --- a/platform/firecamp-platform/src/services/ecies/ecies.ts +++ b/platform/firecamp-platform/src/services/ecies/ecies.ts @@ -7,32 +7,36 @@ class Ecies { this.db = fcEncryptedIdb; this.init(); } - private async init() { + private async init(): Promise<{ secret: any; publicKey: any }> { let [s, pbk] = await this.db.getMany(['s', 'pbk']); - if (!s || !pbk) { - const sk = new PrivateKey(); - this.db.setMany([ - ['s', sk.secret], - ['pbk', sk.publicKey], - ]); - } + if (s && pbk) return { secret: s, publicKey: pbk }; + + const sk = new PrivateKey(); + await this.db.setMany([ + ['s', sk.secret], + ['pbk', sk.publicKey], + ]); + return { secret: sk.secret, publicKey: sk.publicKey }; } private async encrypt(data: string) { - const _pb = await this.db.get('pbk'); - const pb = new PublicKey(_pb.data); + const { publicKey } = await this.init(); + const pb = new PublicKey(publicKey.data); return encrypt(pb.toHex(), Buffer.from(data)); } private async decrypt(data: Uint8Array) { - const _s = await this.db.get('s'); + const _s = await this.db.get('s').catch(console.log); + if (!_s) return Promise.reject('secret not found'); return decrypt(_s, data).toString(); } public async setTokens(at: string, rt: string) { const _at = await this.encrypt(at); const _rt = await this.encrypt(rt); - this.db.setMany([ + if (!_at) return Promise.reject('error in access token encryptio'); + if (!_rt) return Promise.reject('error in refresh token encryptio'); + return this.db.setMany([ ['at', _at], ['rt', _rt], ]); @@ -40,11 +44,13 @@ class Ecies { public async getAccessToken() { const at = await this.db.get('at'); + if (!at) return Promise.reject('access token not found'); return this.decrypt(at); } public async getRefreshToken() { const rt = await this.db.get('rt'); + if (!rt) return Promise.reject('refresh token not found'); return this.decrypt(rt); } From d9b8cbfd4b2be13b376f13c4c600c820a3757dbf Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 1 Jan 2024 16:22:23 +0530 Subject: [PATCH 43/71] chore: valut updated --- .env.vault | 6 ++- pnpm-lock.yaml | 130 ++++++------------------------------------------- 2 files changed, 19 insertions(+), 117 deletions(-) diff --git a/.env.vault b/.env.vault index 80d8f73b5..8a9617f7f 100644 --- a/.env.vault +++ b/.env.vault @@ -2,7 +2,6 @@ #/ cloud-agnostic vaulting standard / #/ [how it works](https://dotenv.org/env-vault) / #/--------------------------------------------------/ -DOTENV_VAULT=vlt_a7698f74e5365a7834b9f3a62cc555169343e436f2cde5d317afa8c4adfa4eda # development DOTENV_VAULT_DEVELOPMENT="Yhme4DuEh1lu1ysCEEfwHtP+Qbxfa8RWkV3lTacXbO9PYbAVGm3jKDTt5i7D/xNp17s18Vqe4S8iqa3mdE0odWBpUuZG8JhvdCw2elMoLFq2uKU0zeeWIP2camdOogxKa6hmCJni58Re3d0OfIMDpCew28MzrSRSnGYLDqEKadhDkf8k5Ei06V/yUy4NQZ6Xj9wzKWRTC6eU4i9O/+puWHJCg0HUrx6eb2/m8tb1A0WSuaMIIjmk7zpzpeviyD+9J+4jlzxRkGP43W2mmBpHyQveBBe13OYIxH3rjL1a13fn2nHLvrOk3N6LLak/ITLekw3NeHakuMv7BmL8l+J5Msua89wqJuMIN8DxXaUJYFysxMBfuWQYcVOBnWoEW/XCZwptOgV/xK3EpcanAH+YdjNa1LALVxrlGNICNflfvzmKbVtp6yCiimaHKHy50Z+mCV2FGBHYKR1R+LONWvftKBOgOvlMhaqTDGAsGMe7ocyBYKYocr5NwBwwSbUXsTWhV6G2mRwQ/V7D7nvHot8QLBNbW6aPUjroUkQkcUjvmeKtZkmGIWMw0i1cdSwQjpiGTgKYqu0p6i5gb3Dgf6ffLI3ZuMg+URNvpOyVFIEBfR24s5Q6cw7tVsJv6FyH52KJJNQf9A3MiiHTLhh51NaQNSso/FG8v+rKKhU64fhKLw0Xlx+wuIPS7WoygbdtjAQ0IwwsMsGOmrCAcWo20NUe6s2x6BXHqiuvyYZBrekSIKK0JXrr8w94Mum8Ov6k6J9yVubgjyozQCP4MNnFrl4q7GiBDnoNBrZozVhtqDWOj7hFMwTMek13+EE4LW9Lg037anQqLcaqi2ut4JDaPaLPfQOTkksRZIsPeAv3Kx40bZbcOyMl0FH4szPZ6acoS0/CodAr+srg8KiRb0y8onLjV1cHQUjCeezhK9mu04mQ47WbFQXDrY2VUFhU6dOfTu+AI8MS1WtWSBy+nVlUysqud6pLV1/IWbZABfXU4eRk5JPp3/MfgYmzlTeDgbSwEBxRs3sdZ3FoT6ianSZoOzbe9zoPTjbmqIr/49VqAZjUxDt4UoM1G56xVlq/cWb/P/KhkykGlI9QO9H+cchwbXid/hvNoOIlP2yHoK5kEMWC10fkgbKUjBxAd33bpRgW8D43i0WUzZcrE/n0XTNd9JMahMflsdQNPY546l+6Dp27vz7QwRrkpMqCumQnZ2ncKQ94Gu79IOwvU8h4fLLYi97mppqUFV+mQhUBjy4NJUsgL+1dAYk0zKcAS6u8vUD8CIPc6U4lPfMzqIztGfzVfr4NpLs+/JGpyMNlMQJnJrhgQqrcqYxe2mGXLypG7z1nnT9s64bEVjC/L9sAXkvi+3QV144vOwtmlwuxqMb63c6TKwbtPVt70LygFjbL4WQK5EawAMrSlQecfjCfrnaSGzo06y6TdtysCZs7JMeq43TLM8RuTKy4qAXx3Z2D6ahVh3u0Bw/1SV8CU9kgB1YRWJV1VUwZtHSE7gHnXobH/Y318j8EU+EJBLiSSwLS/tzZCsFb38+jHkt2scYJAAPwjC8WR26TId7LLskAMwMSWZ8LD/WnXpmY6f8S4t7qRh338A==" @@ -19,3 +18,8 @@ DOTENV_VAULT_STAGING_VERSION=5 # production DOTENV_VAULT_PRODUCTION="fLx8FGdykYJ+GsdgQdn2df42Azv6lBP9KBGItwplX2sO6nYSZJSJifOWLMV4Wl8R8JRrrDjDzwr6lQTHfsvz36p3hF0JeXJbgFa1MptMXm8n/KucJx7bRFwyouPcFE+aoRHq8HpjsI4koG1PRHg8u/BwglBIAV9VJ6UhkGxYxek6X+v/u1OxpHfXj18WPQJ/adsEaG0UAZ0PqkP+9a6UX6meMdcSs0faWGTpJ4OOP5vm4lDbRE+55ekGBO1/D5kFvpfyXdM4GyvejRZIDMOQ3n7xPiHZxCVmMu4x2RUPdAf3Zmeq0HTnbjfXInCFaBtguFwYTcbLsEOhIczW9hVU/jMv8a8DBdF2PRJAHmvAhFD+UGwcsjlzF0oq8jCwwAlXJXLd3I/SyWTUWyLRoI9H6iT4Q78MUa3ZGldU/FKB9gMMawLOfk3Bit2kPrb4UDwCw/hjRG1e8RQJJbB5ExKj9tkL7xalk1HHsr8dAKfv1eSkYQ49XYcg3JX/CgAbRhUoOlyLHMdFG5JjxRHp19urlaRHfXn77ByyganeOKqMjybaAv5B032BGc1m4K2arwPnnnTJsHXo2z4y1QvS0xCG+igHYF3cS1mHPIcFE+qc07SupkzCyrilFdqLIIPQEquqDWm4tBSIQdudS6tWsr4dyS9IJIFpANTVhf24w4AfBRqKaqQAD9e1mFzKpgBlOXmSMMNw/8jFQqSQdEBaknuoLcku4WJCxGqAjm520XC44EUXxpNI5MLx+mNQLW91OveR4p3jbbgkhj5E2PGVjLFBPMQDom7xGYpyQvo2o3j1ko+z4kIOkRClmbiifzJ1MONXAJEcczhMkye5eWfYPp9mSZBbfmXP212XS6c1toW1gFDHvMLc0xM8rQ5xshY473qGGz5QNfsDgEv6+LVAMWXk835NHwZr50P3MBxhBDIjtFWKghfX65GHFdCFHEYiO2pPqQ0FT3+al1KCHZ9SK7Vo951r1a4YOzSGcNpTYrsIyMZ4I18upEQUq8AM5FahjowcaZhSmwsz0fp7VaE6pPkgejHqzYvKcIuLMn379y1MydhR5W1VFwd6sAyHWP6NVXyWmA6sLl7i3nbzM83EkIRhZBXVk+MBQVO26lBWFe+8EiNSJMBcodmB8sibh/G9XJ4PXCVu5x7aErqNSEHpvPsqdUQOgrqJux7F8CdtiQF23xVlOw0ZFybhB2yPhLH8EAk1voAyo5KrHgv59o/e3keqzJIPIIkzaRyaRXRB9FF29HlJBF70af7ymOLgO9WnWE+RwPacxEPc3zEuEHNtOMXsDM2cpCZQmwFduoyCvelyULjaQK/MjW058DvvsT3Lw02yXiE1nWluLcSDe2j/QXx+s5Lr395i4LhHW9f/qlEhZVD3fJNr610UuAYe5OH9XOXW1/0g9VwEbHJ7I1hL6MLFx8h5c/JkuI62CnQYPVMKnQmR44jwR3cRseXRi/MJ44BjFxwLijEGu3cNgG4UIUH3X5VpvDZkjMiJ47hn2e8vpn1u/XNOTWeY1PruVlwhmXOVe8vVZybOARXm/1q9DT0fcHB5OQ==" DOTENV_VAULT_PRODUCTION_VERSION=13 + +#/----------------settings/metadata-----------------/ +DOTENV_VAULT="vlt_a7698f74e5365a7834b9f3a62cc555169343e436f2cde5d317afa8c4adfa4eda" +DOTENV_API_URL="https://vault.dotenv.org" +DOTENV_CLI="npx dotenv-vault@latest" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b989a632..1db366fa3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,7 +98,7 @@ importers: version: 19.0.4(eslint-plugin-import@2.27.5)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.32.1)(eslint@8.32.0) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(eslint@8.32.0) + version: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) eslint-plugin-jest: specifier: ^27.2.1 version: 27.2.1(eslint@8.32.0)(typescript@5.0.2) @@ -173,7 +173,7 @@ importers: version: 9.4.2(typescript@5.0.2)(webpack@5.75.0) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.8.9)(typescript@5.0.2) + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.2) typescript: specifier: ^5.0.2 version: 5.0.2 @@ -2239,7 +2239,7 @@ packages: '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -2413,7 +2413,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.4 semver: 6.3.1 @@ -3852,7 +3852,7 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.20.13 '@babel/types': 7.20.7 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4730,7 +4730,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) espree: 9.4.1 globals: 13.19.0 ignore: 5.2.4 @@ -4960,7 +4960,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -10400,7 +10400,7 @@ packages: dependencies: '@typescript-eslint/types': 5.48.2 '@typescript-eslint/visitor-keys': 5.48.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -14428,17 +14428,6 @@ packages: supports-color: 8.1.1 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -15723,7 +15712,7 @@ packages: dependencies: confusing-browser-globals: 1.0.11 eslint: 8.32.0 - eslint-plugin-import: 2.27.5(eslint@8.32.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) object.assign: 4.1.4 object.entries: 1.1.6 semver: 6.3.1 @@ -15741,7 +15730,7 @@ packages: dependencies: eslint: 8.32.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.27.5)(eslint@8.32.0) - eslint-plugin-import: 2.27.5(eslint@8.32.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.48.2)(eslint@8.32.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.32.0) eslint-plugin-react: 7.32.1(eslint@8.32.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.32.0) @@ -15933,34 +15922,6 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(eslint-import-resolver-node@0.3.7)(eslint@8.32.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - debug: 3.2.7 - eslint: 8.32.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - /eslint-plugin-es@3.0.1(eslint@7.32.0): resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} @@ -16147,38 +16108,6 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(eslint@8.32.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.32.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(eslint-import-resolver-node@0.3.7)(eslint@8.32.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.2 - semver: 6.3.0 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-jest@27.2.1(eslint@8.32.0)(typescript@5.0.2): resolution: {integrity: sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -16513,7 +16442,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 @@ -22077,7 +22006,7 @@ packages: cli-truncate: 3.1.0 colorette: 2.0.19 commander: 9.5.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) execa: 6.1.0 lilconfig: 2.0.6 listr2: 5.0.7 @@ -27770,7 +27699,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -27783,7 +27712,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -29460,37 +29389,6 @@ packages: yn: 3.1.1 dev: true - /ts-node@10.9.1(@types/node@20.8.9)(typescript@5.0.2): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 20.8.9 - acorn: 8.8.2 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.0.2 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - /ts-pnp@1.2.0(typescript@5.0.2): resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} From 61dad6f860dfe25a3f480e5d5f2afc5e37a0e89f Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Tue, 2 Jan 2024 15:18:41 +0530 Subject: [PATCH 44/71] feat: mac app build and publish configuration has been setup #62 --- packages/firecamp-electron/package.json | 37 ++++++++++++------- .../firecamp-electron/scripts/notarize.js | 26 +++++++++---- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index f3e44f0c1..e20e2e310 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -6,11 +6,11 @@ "main": "build/main.js", "private": true, "scripts": { - "afterSign": "scripts/notarize.js", "start": "tsc && electron .", "test": "echo \"Error: no test specified\" && exit 1", "pack": "tsc && electron-builder --dir -c.compression=store -c.mac.identity=null", - "build": "electron-builder -c.mac.identity=null", + "build": "electron-builder", + "build:release": "electron-builder --publish always", "postinstall": "electron-builder install-app-deps" }, "keywords": [], @@ -33,11 +33,12 @@ "appId": "com.firecamp.electron", "generateUpdatesFilesForAllChannels": true, "productName": "Firecamp", + "afterSign": "scripts/notarize.js", "files": [ "./build/**/*", "package.json", { - "from": "../../build/development", + "from": "../../build/production", "to": "app" } ], @@ -48,22 +49,30 @@ "artifactName": "firecamp-${version}.${arch}.${ext}", "executableName": "Firecamp", "target": { - "target": "dmg" + "target": "dmg", + "arch": ["x64", "arm64"] }, "category": "public.app-category.developer-tools", - "entitlements": "entitlements.mac.plist", - "entitlementsInherit": "entitlements.mac.plist", + "entitlements": "assets/entitlements.mac.plist", + "entitlementsInherit": "assets/entitlements.mac.plist", "icon": "icons/mac/512.png", "hardenedRuntime": true, "gatekeeperAssess": false, - "publish": { - "provider": "spaces", - "name": "firecamp", - "region": "ams3", - "channel": "latest", - "path": "/desktop-apps/mac-dmg", - "acl": "public-read" - } + "publish": [ + { + "provider": "github", + "owner": "firecamp-dev", + "repo": "website" + }, + { + "provider": "spaces", + "name": "firecamp", + "region": "ams3", + "channel": "latest", + "path": "/desktop-apps/mac-dmg", + "acl": "public-read" + } + ] }, "dmg": { "sign": false diff --git a/packages/firecamp-electron/scripts/notarize.js b/packages/firecamp-electron/scripts/notarize.js index ca3538f84..d59785f3b 100644 --- a/packages/firecamp-electron/scripts/notarize.js +++ b/packages/firecamp-electron/scripts/notarize.js @@ -1,17 +1,29 @@ const { notarize } = require('electron-notarize'); exports.default = async function notarizing(context) { + console.log('notarisation started manually.'); const { electronPlatformName, appOutDir } = context; - if (electronPlatformName !== 'darwin') { + if ( + electronPlatformName !== 'darwin' || + !process.env.AID || + !process.env.APASS + ) { + console.log( + 'not running notarize. platform is not macos or environment not set up.' + ); return; } const appName = context.packager.appInfo.productFilename; - return notarize({ - appBundleId: process.env.appBundleId, - appPath: `${appOutDir}/${appName}.app`, - appleId: process.env.AID, - appleIdPassword: process.env.APASS, - }); + try { + return await notarize({ + appBundleId: process.env.appBundleId, + appPath: `${appOutDir}/${appName}.app`, + appleId: process.env.AID, + appleIdPassword: process.env.APASS, + }); + } catch (e) { + console.log('notarize error', e); + } }; From fdf0e435e8bb372033fb3401187136ce862c5410 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 4 Jan 2024 15:49:29 +0530 Subject: [PATCH 45/71] feat: win logo added and builder config updates --- .../assets/icons/win/logo.ico | Bin 0 -> 106983 bytes packages/firecamp-electron/package.json | 70 ++++++++++++------ 2 files changed, 46 insertions(+), 24 deletions(-) create mode 100644 packages/firecamp-electron/assets/icons/win/logo.ico diff --git a/packages/firecamp-electron/assets/icons/win/logo.ico b/packages/firecamp-electron/assets/icons/win/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..5ab46c1ee50cccedbf7058648e6b597c5354ff09 GIT binary patch literal 106983 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 literal 0 HcmV?d00001 diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index e20e2e310..c3f3275b6 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -1,16 +1,20 @@ { "name": "@firecamp/electron", - "productName": "Firecamp", "version": "3.0.0", "description": "The Firecamp Desktop Application", "main": "build/main.js", "private": true, + "repository": { + "type": "git", + "url": "https://github.com/firecamp-dev/website.git", + "__directory": "packages/firecamp-electron" + }, "scripts": { "start": "tsc && electron .", "test": "echo \"Error: no test specified\" && exit 1", "pack": "tsc && electron-builder --dir -c.compression=store -c.mac.identity=null", - "build": "electron-builder", - "build:release": "electron-builder --publish always", + "build": "electron-builder -c.mac.identity=null", + "build:release": "electron-builder --linux --x64 --publish always", "postinstall": "electron-builder install-app-deps" }, "keywords": [], @@ -45,37 +49,55 @@ "directories": { "buildResources": "assets" }, + "dmg": { + "sign": false + }, "mac": { - "artifactName": "firecamp-${version}.${arch}.${ext}", + "artifactName": "firecamp-${version}.electron.${arch}.${ext}", "executableName": "Firecamp", + "type": "distribution", "target": { "target": "dmg", - "arch": ["x64", "arm64"] + "arch": ["x64"] }, "category": "public.app-category.developer-tools", "entitlements": "assets/entitlements.mac.plist", "entitlementsInherit": "assets/entitlements.mac.plist", "icon": "icons/mac/512.png", "hardenedRuntime": true, - "gatekeeperAssess": false, - "publish": [ - { - "provider": "github", - "owner": "firecamp-dev", - "repo": "website" - }, - { - "provider": "spaces", - "name": "firecamp", - "region": "ams3", - "channel": "latest", - "path": "/desktop-apps/mac-dmg", - "acl": "public-read" - } - ] + "gatekeeperAssess": false }, - "dmg": { - "sign": false - } + "linux": { + "icon": "icons/mac/512.png", + "category": "Development", + "target": { + "target": "AppImage", + "arch": ["x64", "arm64"] + } + }, + "nsis": { + "oneClick": false, + "allowToChangeInstallationDirectory": true + }, + "win": { + "icon": "icons/win/logo.ico", + "target": ["nsis"], + "verifyUpdateCodeSignature": false + }, + "publish": [ + { + "provider": "github", + "owner": "firecamp-dev", + "repo": "website" + }, + { + "provider": "spaces", + "name": "firecamp", + "region": "ams3", + "channel": "latest", + "path": "/desktop-apps/mac-dmg", + "acl": "public-read" + } + ] } } From a163e0370e75047972080b9241ad1c89fc37ebf6 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 4 Jan 2024 17:40:38 +0530 Subject: [PATCH 46/71] feat: icns set and updater in progress --- packages/firecamp-electron/.gitignore | 3 +- .../assets/icons/mac/icon.icns | Bin 0 -> 26073 bytes packages/firecamp-electron/package.json | 23 ++++++------ packages/firecamp-electron/src/icon.ts | 33 ++++++++++++++++++ packages/firecamp-electron/src/main.ts | 6 +++- packages/firecamp-electron/src/updater.ts | 1 + pnpm-lock.yaml | 7 ++++ 7 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 packages/firecamp-electron/assets/icons/mac/icon.icns create mode 100644 packages/firecamp-electron/src/icon.ts diff --git a/packages/firecamp-electron/.gitignore b/packages/firecamp-electron/.gitignore index 868298401..5924b0e69 100644 --- a/packages/firecamp-electron/.gitignore +++ b/packages/firecamp-electron/.gitignore @@ -7,4 +7,5 @@ test src/**.js coverage *.log -!src/declarations.d.ts \ No newline at end of file +!src/declarations.d.ts +dev-app-update.yml \ No newline at end of file diff --git a/packages/firecamp-electron/assets/icons/mac/icon.icns b/packages/firecamp-electron/assets/icons/mac/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..1b492923b7d1ff5f88e7711ac228de3e29e7e89a GIT binary patch literal 26073 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�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 literal 0 HcmV?d00001 diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index c3f3275b6..292100e23 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -1,6 +1,7 @@ { "name": "@firecamp/electron", - "version": "3.0.0", + "productName": "Firecamp", + "version": "3.0.1", "description": "The Firecamp Desktop Application", "main": "build/main.js", "private": true, @@ -14,7 +15,7 @@ "test": "echo \"Error: no test specified\" && exit 1", "pack": "tsc && electron-builder --dir -c.compression=store -c.mac.identity=null", "build": "electron-builder -c.mac.identity=null", - "build:release": "electron-builder --linux --x64 --publish always", + "build:release": "electron-builder -m --publish always", "postinstall": "electron-builder install-app-deps" }, "keywords": [], @@ -23,6 +24,7 @@ "dependencies": { "@firecamp/rest-executor": "workspace:*", "@firecamp/scripts": "workspace:*", + "electron-is-dev": "^2.0.0", "electron-log": "^5.0.0", "electron-notarize": "^1.2.2", "electron-updater": "^6.1.4", @@ -58,7 +60,9 @@ "type": "distribution", "target": { "target": "dmg", - "arch": ["x64"] + "arch": [ + "x64" + ] }, "category": "public.app-category.developer-tools", "entitlements": "assets/entitlements.mac.plist", @@ -72,7 +76,9 @@ "category": "Development", "target": { "target": "AppImage", - "arch": ["x64", "arm64"] + "arch": [ + "x64" + ] } }, "nsis": { @@ -81,15 +87,12 @@ }, "win": { "icon": "icons/win/logo.ico", - "target": ["nsis"], + "target": [ + "nsis" + ], "verifyUpdateCodeSignature": false }, "publish": [ - { - "provider": "github", - "owner": "firecamp-dev", - "repo": "website" - }, { "provider": "spaces", "name": "firecamp", diff --git a/packages/firecamp-electron/src/icon.ts b/packages/firecamp-electron/src/icon.ts new file mode 100644 index 000000000..e078c7ae5 --- /dev/null +++ b/packages/firecamp-electron/src/icon.ts @@ -0,0 +1,33 @@ +const path = require('path'); +const isDev = require('electron-is-dev'); + +let trayIcon: string; +let appIcon: string; + +// dev environment tray icon paths +if (isDev) { + if (process.platform === 'linux') + trayIcon = path.join(__dirname, '../assets/icons/mac/64.png'); //22x22 + else if (process.platform === 'darwin') + trayIcon = path.join(__dirname, '../assets/icons/mac/64.png'); // 16x16 + else if (process.platform === 'win32') + trayIcon = path.join(__dirname, '.../assets/icons/mac/64.png'); //32x32 +} else if (process.platform === 'linux') + // prod. environment tray icon paths + trayIcon = path.join(process.resourcesPath, 'assets/icons/mac/64.png'); +// 22x22 +else if (process.platform === 'darwin') + trayIcon = path.join(process.resourcesPath, 'assets/icons/images/16x16.png'); +// 16x16 +else if (process.platform === 'win32') + trayIcon = path.join(process.resourcesPath, 'assets/icons/mac/64.png'); // 32x32 + +// App icon paths +if (process.platform === 'linux') + appIcon = path.join(__dirname, '../assets/icons/mac/512x512.png'); +else if (process.platform === 'darwin') + appIcon = path.join(__dirname, '../assets/mac/icon.icns'); +else if (process.platform === 'win32') + appIcon = path.join(__dirname, '../assets/icons/win/icon.ico'); + +export { appIcon, trayIcon }; diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 59c7dc40b..abb8bc365 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -1,6 +1,8 @@ -import { app, BrowserWindow, ipcMain, screen } from 'electron'; +import { app, BrowserWindow, ipcMain, nativeImage, screen } from 'electron'; import RestExecutor from '@firecamp/rest-executor/dist/index'; import * as path from 'node:path'; +import { appIcon, trayIcon } from './icon'; +import AppUpdater from './updater'; const createWindow = () => { const { width, height } = screen.getPrimaryDisplay().workAreaSize; @@ -8,6 +10,7 @@ const createWindow = () => { frame: false, width, height, + icon: nativeImage.createFromPath(appIcon), titleBarStyle: 'customButtonsOnHover', // titleBarStyle: 'hiddenInset', // titleBarStyle: 'hidden', @@ -53,6 +56,7 @@ const createWindow = () => { app.whenReady().then(() => { createWindow(); + const appUpdater = new AppUpdater(); const reMap: Record = {}; ipcMain.handle('http:send', async (event, request, variables) => { diff --git a/packages/firecamp-electron/src/updater.ts b/packages/firecamp-electron/src/updater.ts index e88063351..34394436d 100644 --- a/packages/firecamp-electron/src/updater.ts +++ b/packages/firecamp-electron/src/updater.ts @@ -5,6 +5,7 @@ export default class AppUpdater { const log = require('electron-log'); log.transports.file.level = 'debug'; autoUpdater.logger = log; + autoUpdater.forceDevUpdateConfig = true; autoUpdater.allowDowngrade = true; this.checkUpdateAndNotify(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1db366fa3..042eea930 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -653,6 +653,9 @@ importers: '@firecamp/scripts': specifier: workspace:* version: link:../firecamp-scripts + electron-is-dev: + specifier: ^2.0.0 + version: 2.0.0 electron-log: specifier: ^5.0.0 version: 5.0.0 @@ -15062,6 +15065,10 @@ packages: - supports-color dev: true + /electron-is-dev@2.0.0: + resolution: {integrity: sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==} + dev: false + /electron-log@5.0.0: resolution: {integrity: sha512-vB3akupmQvA8jAyNL9rULZtf6WoP8vsabjXsRtiqXS6/D37SwN/4LEyj4JD+9Bv6xoTcx/LrVnsIKEEWdq5ClQ==} engines: {electron: '>= 13', node: '>= 14'} From 70f5775985691ee5e73166f3ad48d7cfd8772499 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 4 Jan 2024 19:25:11 +0530 Subject: [PATCH 47/71] feat: updater and dialog services are improved --- packages/firecamp-electron/package.json | 4 +- packages/firecamp-electron/src/main.ts | 15 ++++- packages/firecamp-electron/src/updater.ts | 17 ----- .../firecamp-electron/src/updater/dialogs.ts | 50 ++++++++++++++ .../firecamp-electron/src/updater/updater.ts | 67 +++++++++++++++++++ 5 files changed, 132 insertions(+), 21 deletions(-) delete mode 100644 packages/firecamp-electron/src/updater.ts create mode 100644 packages/firecamp-electron/src/updater/dialogs.ts create mode 100644 packages/firecamp-electron/src/updater/updater.ts diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 292100e23..324580abc 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -1,7 +1,7 @@ { "name": "@firecamp/electron", "productName": "Firecamp", - "version": "3.0.1", + "version": "3.0.0", "description": "The Firecamp Desktop Application", "main": "build/main.js", "private": true, @@ -15,7 +15,7 @@ "test": "echo \"Error: no test specified\" && exit 1", "pack": "tsc && electron-builder --dir -c.compression=store -c.mac.identity=null", "build": "electron-builder -c.mac.identity=null", - "build:release": "electron-builder -m --publish always", + "build:release": "electron-builder -l --publish always", "postinstall": "electron-builder install-app-deps" }, "keywords": [], diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index abb8bc365..516ad21f9 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -2,8 +2,9 @@ import { app, BrowserWindow, ipcMain, nativeImage, screen } from 'electron'; import RestExecutor from '@firecamp/rest-executor/dist/index'; import * as path from 'node:path'; import { appIcon, trayIcon } from './icon'; -import AppUpdater from './updater'; +import { AppUpdate } from './updater/updater'; +const appUpdater = new AppUpdate(); const createWindow = () => { const { width, height } = screen.getPrimaryDisplay().workAreaSize; const win = new BrowserWindow({ @@ -52,11 +53,21 @@ const createWindow = () => { // hardResetMethod: 'exit', // }); } + win.on('ready-to-show', () => { + win.maximize(); + win.show(); + win.focus(); + + if (!appUpdater.winEventsRegistered) { + appUpdater.registerEvents(win); + appUpdater.showMsg = false; + appUpdater.checkForUpdate(); + } + }); }; app.whenReady().then(() => { createWindow(); - const appUpdater = new AppUpdater(); const reMap: Record = {}; ipcMain.handle('http:send', async (event, request, variables) => { diff --git a/packages/firecamp-electron/src/updater.ts b/packages/firecamp-electron/src/updater.ts deleted file mode 100644 index 34394436d..000000000 --- a/packages/firecamp-electron/src/updater.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { autoUpdater } from 'electron-updater'; - -export default class AppUpdater { - constructor() { - const log = require('electron-log'); - log.transports.file.level = 'debug'; - autoUpdater.logger = log; - autoUpdater.forceDevUpdateConfig = true; - - autoUpdater.allowDowngrade = true; - this.checkUpdateAndNotify(); - } - - private checkUpdateAndNotify() { - autoUpdater.checkForUpdatesAndNotify(); - } -} diff --git a/packages/firecamp-electron/src/updater/dialogs.ts b/packages/firecamp-electron/src/updater/dialogs.ts new file mode 100644 index 000000000..c3f2d408e --- /dev/null +++ b/packages/firecamp-electron/src/updater/dialogs.ts @@ -0,0 +1,50 @@ +const { app, dialog } = require('electron'); + +const showUpdateDownloadedWinDialog = (win: any) => { + dialog.showMessageBoxSync(win, { + type: 'question', + title: '👏️Install updates', + message: + 'New updates are installed successfully, It will get reflected after app relaunch', + detail: + 'Please save your unsaved tabs first if you are in-between your work.', + buttons: ['Cancel', 'Relaunch'], + }); +}; + +const showUpdateDownloadedMacDialog = (win: any) => { + dialog.showMessageBoxSync(win, { + type: 'question', + title: '👏️Install updates', + message: 'Updates downloaded, It’ll get auto-installed on the restart.', + detail: + 'New updates are installed successfully, It will get reflected after app relaunch', + buttons: ['Cancel', 'Relaunch'], + noLink: true, + }); +}; + +const showUpdateAvailable = (win: any) => { + dialog.showMessageBoxSync(win, { + type: 'info', + title: 'Found Updates', + message: 'Found updates, do you want to update now?', + buttons: ['Sure', 'No'], + }); +}; + +const showNoUpdateAvailable = (win: any) => { + dialog.showMessageBoxSync(win, { + type: 'info', + title: 'No Updates Available', + message: 'The current app version is up-to-date', + buttons: ['Ok'], + }); +}; + +export { + showUpdateAvailable, + showNoUpdateAvailable, + showUpdateDownloadedWinDialog, + showUpdateDownloadedMacDialog, +}; diff --git a/packages/firecamp-electron/src/updater/updater.ts b/packages/firecamp-electron/src/updater/updater.ts new file mode 100644 index 000000000..3caba541a --- /dev/null +++ b/packages/firecamp-electron/src/updater/updater.ts @@ -0,0 +1,67 @@ +const { app, dialog } = require('electron'); +import { autoUpdater, UpdaterEvents } from 'electron-updater'; +import log from 'electron-log'; +const isDev = require('electron-is-dev'); +import { showNoUpdateAvailable } from './dialogs'; + +export class AppUpdate { + newVersion: number | null; + showMsg: boolean; + autoUpdate: boolean; + winEventsRegistered: boolean; + notifyUpdateDownloaded: boolean; + constructor() { + this.newVersion = null; + this.showMsg = true; + this.autoUpdate = false; + this.notifyUpdateDownloaded = true; + this.winEventsRegistered = false; + + log.transports.file.level = 'debug'; + autoUpdater.logger = log; + autoUpdater.forceDevUpdateConfig = isDev; + autoUpdater.autoDownload = false; + autoUpdater.allowDowngrade = false; + } + + registerEvents(win: any) { + this.winEventsRegistered = true; + autoUpdater.on('update-available', (info: any) => { + this.newVersion = info.version; + // Auto start downloading if found update + autoUpdater.downloadUpdate(); + }); + + autoUpdater.on('download-progress', (progress: any) => { + win.webContents.send('download-progress', { + version: this.newVersion || 'New Version', + percentage: `${Math.floor(progress.percent)}%`, + }); + }); + + autoUpdater.on('update-not-available', () => { + win.webContents.send('app_update_timeline', 'Update-Not-Available'); + if (this.showMsg) { + console.log(app.getVersion()); + showNoUpdateAvailable(win); + } + }); + + autoUpdater.on('update-downloaded', (info: any) => { + win.webContents.send('update-downloaded', { + version: info.version, + }); + }); + + autoUpdater.on('error', (error: any) => { + win.webContents.send( + 'app_update_timeline', + `Error on update: ${error.message.toString()}` + ); + }); + } + + checkForUpdate() { + autoUpdater.checkForUpdatesAndNotify(); + } +} From f0967135fb7b36e9e54851a3c3a3293b796cb709 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Fri, 5 Jan 2024 15:56:25 +0530 Subject: [PATCH 48/71] feat: app menus are set and auto updater has been optomised and tested with mac dmg and ubuntu AppImage --- packages/firecamp-electron/package.json | 67 ++++++--- packages/firecamp-electron/src/main.ts | 20 ++- packages/firecamp-electron/src/menu.ts | 130 ++++++++++++++++++ .../firecamp-electron/src/updater/dialogs.ts | 23 ++-- .../firecamp-electron/src/updater/updater.ts | 58 +++++--- 5 files changed, 241 insertions(+), 57 deletions(-) create mode 100644 packages/firecamp-electron/src/menu.ts diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 324580abc..c3a2dcc8f 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -1,21 +1,21 @@ { "name": "@firecamp/electron", "productName": "Firecamp", - "version": "3.0.0", + "version": "3.0.2", "description": "The Firecamp Desktop Application", "main": "build/main.js", "private": true, "repository": { "type": "git", - "url": "https://github.com/firecamp-dev/website.git", - "__directory": "packages/firecamp-electron" + "url": "https://github.com/firecamp-dev/firecamp.git", + "directory": "packages/firecamp-electron" }, "scripts": { "start": "tsc && electron .", "test": "echo \"Error: no test specified\" && exit 1", "pack": "tsc && electron-builder --dir -c.compression=store -c.mac.identity=null", "build": "electron-builder -c.mac.identity=null", - "build:release": "electron-builder -l --publish always", + "build:release": "electron-builder -ml --publish always", "postinstall": "electron-builder install-app-deps" }, "keywords": [], @@ -55,13 +55,14 @@ "sign": false }, "mac": { - "artifactName": "firecamp-${version}.electron.${arch}.${ext}", + "artifactName": "Firecamp-${version}.${arch}.${ext}", "executableName": "Firecamp", "type": "distribution", "target": { - "target": "dmg", + "target": "default", "arch": [ - "x64" + "x64", + "arm64" ] }, "category": "public.app-category.developer-tools", @@ -69,9 +70,21 @@ "entitlementsInherit": "assets/entitlements.mac.plist", "icon": "icons/mac/512.png", "hardenedRuntime": true, - "gatekeeperAssess": false + "gatekeeperAssess": false, + "publish": [ + { + "provider": "spaces", + "name": "firecamp", + "region": "ams3", + "channel": "latest", + "path": "/electron-apps/mac", + "acl": "public-read" + } + ] }, "linux": { + "artifactName": "Firecamp-${version}.${arch}.${ext}", + "executableName": "Firecamp", "icon": "icons/mac/512.png", "category": "Development", "target": { @@ -79,28 +92,40 @@ "arch": [ "x64" ] - } + }, + "publish": [ + { + "provider": "spaces", + "name": "firecamp", + "region": "ams3", + "channel": "latest", + "path": "/electron-apps/linux", + "acl": "public-read" + } + ] }, "nsis": { "oneClick": false, "allowToChangeInstallationDirectory": true }, "win": { + "artifactName": "Firecamp-${version}.${arch}.${ext}", + "executableName": "Firecamp", "icon": "icons/win/logo.ico", "target": [ "nsis" ], - "verifyUpdateCodeSignature": false - }, - "publish": [ - { - "provider": "spaces", - "name": "firecamp", - "region": "ams3", - "channel": "latest", - "path": "/desktop-apps/mac-dmg", - "acl": "public-read" - } - ] + "verifyUpdateCodeSignature": false, + "publish": [ + { + "provider": "spaces", + "name": "firecamp", + "region": "ams3", + "channel": "latest", + "path": "/electron-apps/win", + "acl": "public-read" + } + ] + } } } diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 516ad21f9..1b2d0fb6e 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -1,10 +1,18 @@ -import { app, BrowserWindow, ipcMain, nativeImage, screen } from 'electron'; +import { + app, + BrowserWindow, + ipcMain, + Menu, + nativeImage, + screen, +} from 'electron'; import RestExecutor from '@firecamp/rest-executor/dist/index'; import * as path from 'node:path'; import { appIcon, trayIcon } from './icon'; -import { AppUpdate } from './updater/updater'; +import { AppUpdater } from './updater/updater'; +import { prepareAppMenus } from './menu'; -const appUpdater = new AppUpdate(); +const appUpdater = new AppUpdater(); const createWindow = () => { const { width, height } = screen.getPrimaryDisplay().workAreaSize; const win = new BrowserWindow({ @@ -53,6 +61,9 @@ const createWindow = () => { // hardResetMethod: 'exit', // }); } + + Menu.setApplicationMenu(prepareAppMenus(win, appUpdater)); + win.on('ready-to-show', () => { win.maximize(); win.show(); @@ -60,8 +71,7 @@ const createWindow = () => { if (!appUpdater.winEventsRegistered) { appUpdater.registerEvents(win); - appUpdater.showMsg = false; - appUpdater.checkForUpdate(); + appUpdater.checkForUpdate(false); } }); }; diff --git a/packages/firecamp-electron/src/menu.ts b/packages/firecamp-electron/src/menu.ts new file mode 100644 index 000000000..2d2d517fb --- /dev/null +++ b/packages/firecamp-electron/src/menu.ts @@ -0,0 +1,130 @@ +import { Menu, app, shell } from 'electron'; +import * as isDev from 'electron-is-dev'; +const { execFile } = require('child_process'); +import { AppUpdater } from './updater/updater'; + +const prepareAppMenus = (win: any, appUpdater: AppUpdater) => { + return Menu.buildFromTemplate([ + { + label: '&Menu', + submenu: [ + { + role: 'minimize', + }, + { + type: 'separator', + }, + { + label: 'Restart', + click() { + const options = { + args: process.argv.slice(1).concat(['--relaunch']), + execPath: process.execPath, + }; + + // Fix for .AppImage + if (app.isPackaged && process.env.APPIMAGE) { + execFile(process.env.APPIMAGE, options.args); + app.quit(); + return; + } + + app.relaunch(options); + app.quit(); + }, + }, + { + type: 'separator', + }, + { + label: 'Quit', + role: 'quit', + }, + ], + }, + { + role: 'editMenu', + }, + { + label: '&View', + submenu: [ + { + role: 'reload', + }, + { + type: 'separator', + }, + { + role: 'zoomIn', + }, + { + role: 'zoomOut', + }, + { + role: 'resetZoom', + }, + { + type: 'separator', + }, + { + role: 'toggleDevTools', + // accelerator: isDev + // ? 'CmdOrCtrl+Shift+<' + // : process.platform === 'darwin' + // ? 'Cmd+Shift+!' + // : 'Ctrl+Shift+#', + }, + { + type: 'separator', + }, + { + role: 'togglefullscreen', + }, + ], + }, + { + label: '&Info', + submenu: [ + { + label: 'Follow us @Firecamp', + click() { + shell.openExternal('https://twitter.com/firecamp-dev'); + }, + }, + { + type: 'separator', + }, + { + label: 'Release Notes', + click() { + shell.openExternal( + `https://github.com/firecamp-dev/firecamp/releases/tag/v${app.getVersion()}` + ); + }, + }, + { + label: 'About Firecamp', + click() { + shell.openExternal('https://firecamp.io'); + }, + }, + { + label: 'Check for updates', + visible: true, + click() { + appUpdater.checkForUpdate(true); + }, + }, + { + type: 'separator', + }, + { + label: `Version ${app.getVersion()}`, + enabled: false, + }, + ], + }, + ]); +}; + +export { prepareAppMenus }; diff --git a/packages/firecamp-electron/src/updater/dialogs.ts b/packages/firecamp-electron/src/updater/dialogs.ts index c3f2d408e..6f45ef126 100644 --- a/packages/firecamp-electron/src/updater/dialogs.ts +++ b/packages/firecamp-electron/src/updater/dialogs.ts @@ -1,24 +1,27 @@ -const { app, dialog } = require('electron'); +import { app, dialog } from 'electron'; +import { UpdateInfo } from 'electron-updater'; const showUpdateDownloadedWinDialog = (win: any) => { dialog.showMessageBoxSync(win, { type: 'question', - title: '👏️Install updates', + title: '👏️ Installed New Version', message: - 'New updates are installed successfully, It will get reflected after app relaunch', + 'New version has been installed successfully, You can restart the app', detail: 'Please save your unsaved tabs first if you are in-between your work.', - buttons: ['Cancel', 'Relaunch'], + buttons: ['Cancel', 'Restart'], }); }; const showUpdateDownloadedMacDialog = (win: any) => { dialog.showMessageBoxSync(win, { type: 'question', - title: '👏️Install updates', - message: 'Updates downloaded, It’ll get auto-installed on the restart.', + title: '👏️ Installed New Version', + message: + 'New version has been installed successfully, You can restart the app', detail: - 'New updates are installed successfully, It will get reflected after app relaunch', + // 'New updates are installed successfully, It will get reflected after app relaunch', + 'Please save your unsaved tabs first if you are in-between your work.', buttons: ['Cancel', 'Relaunch'], noLink: true, }); @@ -27,17 +30,17 @@ const showUpdateDownloadedMacDialog = (win: any) => { const showUpdateAvailable = (win: any) => { dialog.showMessageBoxSync(win, { type: 'info', - title: 'Found Updates', + title: 'Update Found', message: 'Found updates, do you want to update now?', buttons: ['Sure', 'No'], }); }; -const showNoUpdateAvailable = (win: any) => { +const showNoUpdateAvailable = (win: any, info: UpdateInfo) => { dialog.showMessageBoxSync(win, { type: 'info', title: 'No Updates Available', - message: 'The current app version is up-to-date', + message: `No updates available. \n\n You're using the latest version Firecamp v${info.version}.`, buttons: ['Ok'], }); }; diff --git a/packages/firecamp-electron/src/updater/updater.ts b/packages/firecamp-electron/src/updater/updater.ts index 3caba541a..9da17376e 100644 --- a/packages/firecamp-electron/src/updater/updater.ts +++ b/packages/firecamp-electron/src/updater/updater.ts @@ -1,20 +1,29 @@ const { app, dialog } = require('electron'); -import { autoUpdater, UpdaterEvents } from 'electron-updater'; +import { + autoUpdater, + ProgressInfo, + UpdateInfo, + UpdaterEvents, +} from 'electron-updater'; import log from 'electron-log'; -const isDev = require('electron-is-dev'); -import { showNoUpdateAvailable } from './dialogs'; +import * as isDev from 'electron-is-dev'; +import { + showNoUpdateAvailable, + showUpdateDownloadedWinDialog, + showUpdateDownloadedMacDialog, +} from './dialogs'; -export class AppUpdate { +export class AppUpdater { newVersion: number | null; - showMsg: boolean; - autoUpdate: boolean; + showDialog: boolean; + // autoUpdate: boolean; winEventsRegistered: boolean; - notifyUpdateDownloaded: boolean; + // notifyUpdateDownloaded: boolean; constructor() { this.newVersion = null; - this.showMsg = true; - this.autoUpdate = false; - this.notifyUpdateDownloaded = true; + this.showDialog = false; + // this.autoUpdate = false; + // this.notifyUpdateDownloaded = true; this.winEventsRegistered = false; log.transports.file.level = 'debug'; @@ -27,33 +36,38 @@ export class AppUpdate { registerEvents(win: any) { this.winEventsRegistered = true; autoUpdater.on('update-available', (info: any) => { + console.log('the update is available'); this.newVersion = info.version; - // Auto start downloading if found update + // auto start downloading if found update autoUpdater.downloadUpdate(); }); - autoUpdater.on('download-progress', (progress: any) => { + autoUpdater.on('download-progress', (progress: ProgressInfo) => { + console.log('the update download progress is ', progress); win.webContents.send('download-progress', { version: this.newVersion || 'New Version', percentage: `${Math.floor(progress.percent)}%`, }); }); - autoUpdater.on('update-not-available', () => { + autoUpdater.on('update-not-available', (info: UpdateInfo) => { + console.log('the update is bot available ', info); win.webContents.send('app_update_timeline', 'Update-Not-Available'); - if (this.showMsg) { - console.log(app.getVersion()); - showNoUpdateAvailable(win); + if (this.showDialog) { + this.showDialog = false; + showNoUpdateAvailable(win, info); } }); - autoUpdater.on('update-downloaded', (info: any) => { - win.webContents.send('update-downloaded', { - version: info.version, - }); + autoUpdater.on('update-downloaded', (info: UpdateInfo) => { + console.log('the update has been downloaded ', info); + win.webContents.send('update-downloaded', { version: info.version }); + showUpdateDownloadedWinDialog(win); // currently the win and mac both have the same dialog modal + // showUpdateDownloadedMacDialog(win); }); autoUpdater.on('error', (error: any) => { + console.log('the update has an error ', error); win.webContents.send( 'app_update_timeline', `Error on update: ${error.message.toString()}` @@ -61,7 +75,9 @@ export class AppUpdate { }); } - checkForUpdate() { + checkForUpdate(showDialog: boolean) { + console.log('checking updates...'); + if (showDialog) this.showDialog = true; autoUpdater.checkForUpdatesAndNotify(); } } From 5484fa2ce8d56492d4f94d722674a8c9e8ccdcfc Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 8 Jan 2024 16:37:53 +0530 Subject: [PATCH 49/71] feat: pacakge upgraded --- platform/firecamp-platform/package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/platform/firecamp-platform/package.json b/platform/firecamp-platform/package.json index 54e9638b3..f6202017c 100644 --- a/platform/firecamp-platform/package.json +++ b/platform/firecamp-platform/package.json @@ -50,7 +50,7 @@ }, "dependencies": { "@firecamp/agent-manager": "workspace:*", - "@firecamp/cloud-apis": "0.2.11", + "@firecamp/cloud-apis": "0.2.12", "@firecamp/cookie-manager": "^0.0.0", "@firecamp/graphql": "workspace:*", "@firecamp/rest": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 042eea930..e9775fca4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -916,8 +916,8 @@ importers: specifier: workspace:* version: link:../../packages/firecamp-agent-manager '@firecamp/cloud-apis': - specifier: 0.2.11 - version: 0.2.11 + specifier: 0.2.12 + version: 0.2.12 '@firecamp/cookie-manager': specifier: ^0.0.0 version: link:../../packages/firecamp-cookie-manager @@ -4745,8 +4745,8 @@ packages: - supports-color dev: true - /@firecamp/cloud-apis@0.2.11: - resolution: {integrity: sha512-t3VYuQiMChC2ZYFluw9a1pXfPtG7VhMdr64hY96OsQBWapRX3ClmiZPUpRgxytOhRUlZH3P1fgtp2T3aMAQQKg==} + /@firecamp/cloud-apis@0.2.12: + resolution: {integrity: sha512-L72eo3C10it0dJ5kVd36DdJAQUNyiyI7/JhluTar+pCR8Jwum8d4/hFLO6QwyAiIojeWs/XQ+RZM2vn0KxS2Iw==} engines: {node: '>=10'} dependencies: axios: 0.21.4 From 87e223620a9c29667c6cff6e9756686a12625dcb Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 8 Jan 2024 18:39:36 +0530 Subject: [PATCH 50/71] feat: rotate token implemented --- .../src/services/app.service.ts | 1 + .../src/services/ecies/ecies.ts | 44 +++++++++++++++++-- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/platform/firecamp-platform/src/services/app.service.ts b/platform/firecamp-platform/src/services/app.service.ts index cbf834e9b..0b3ac320e 100644 --- a/platform/firecamp-platform/src/services/app.service.ts +++ b/platform/firecamp-platform/src/services/app.service.ts @@ -88,6 +88,7 @@ const initApp = async () => { const initSession = async () => { const { fetchExplorer } = useExplorerStore.getState(); + await ecies.rotateTokens(); const accessToken = await ecies.getAccessToken(); //.catch(console.log); if (!accessToken) return; diff --git a/platform/firecamp-platform/src/services/ecies/ecies.ts b/platform/firecamp-platform/src/services/ecies/ecies.ts index 39ed76bd7..70138dc59 100644 --- a/platform/firecamp-platform/src/services/ecies/ecies.ts +++ b/platform/firecamp-platform/src/services/ecies/ecies.ts @@ -1,22 +1,30 @@ import { encrypt, decrypt, PrivateKey, PublicKey } from 'eciesjs'; +import CloudApiGlobal, { Rest } from '@firecamp/cloud-apis'; import { fcEncryptedIdb } from '../idb/idb'; +import { ECloudApiHeaders } from '../../types'; class Ecies { private db: typeof fcEncryptedIdb; constructor() { this.db = fcEncryptedIdb; this.init(); + + setInterval(() => { + this.rotateTokens(); + }, 5 * 60 * 1000); // check for token rotation on every 5min } - private async init(): Promise<{ secret: any; publicKey: any }> { - let [s, pbk] = await this.db.getMany(['s', 'pbk']); - if (s && pbk) return { secret: s, publicKey: pbk }; + private async init(): Promise<{ secret: any; publicKey: any; ts: number }> { + let [s, pbk, ts] = await this.db.getMany(['s', 'pbk', 'ts']); + if (s && pbk && ts) return { secret: s, publicKey: pbk, ts }; const sk = new PrivateKey(); + const _ts = new Date().valueOf(); await this.db.setMany([ ['s', sk.secret], ['pbk', sk.publicKey], + ['ts', _ts], ]); - return { secret: sk.secret, publicKey: sk.publicKey }; + return { secret: sk.secret, publicKey: sk.publicKey, ts: _ts }; } private async encrypt(data: string) { @@ -31,6 +39,33 @@ class Ecies { return decrypt(_s, data).toString(); } + // silently rotate access and refresh tokens if the last timestamp is 30min old + public async rotateTokens() { + let ts = await this.db.get('ts'); + if (!ts) ts = 0; + const cts = new Date().valueOf(); + // if the ts diff is less than 30min then don't rotate token + if (Math.abs(cts - ts) < 30 * 60 * 1000) return false; + + try { + const at = await this.getAccessToken(); + const rt = await this.getRefreshToken(); + if (!at || !rt) return false; + const { data } = await Rest.auth.rotateTokens(at, rt); + if (!data?.data) return false; + const { accessToken, refreshToken } = data.data; + await this.setTokens(accessToken, refreshToken); + CloudApiGlobal.setGlobalHeader( + ECloudApiHeaders.Authorization, + `bearer ${accessToken}` + ); + return true; + } catch (e) { + // console.log('error while rotating tokens', e); + return false; + } + } + public async setTokens(at: string, rt: string) { const _at = await this.encrypt(at); const _rt = await this.encrypt(rt); @@ -39,6 +74,7 @@ class Ecies { return this.db.setMany([ ['at', _at], ['rt', _rt], + ['ts', new Date().valueOf()], ]); } From 0ffcd983750134e75abd9133f4695aa8fa2b46dd Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Tue, 9 Jan 2024 17:29:41 +0530 Subject: [PATCH 51/71] chore: rest playground, default tab set to param --- playgrounds/firecamp-rest/src/services/request.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playgrounds/firecamp-rest/src/services/request.service.ts b/playgrounds/firecamp-rest/src/services/request.service.ts index 3bf116e62..f7740609e 100644 --- a/playgrounds/firecamp-rest/src/services/request.service.ts +++ b/playgrounds/firecamp-rest/src/services/request.service.ts @@ -289,7 +289,7 @@ export const initialiseStoreFromRequest = ( isCodeSnippetOpen: false, requestPanel: { ...requestPanel, - activeTab: ERequestPanelTabs.Body, + activeTab: ERequestPanelTabs.Params, }, }, runtime: { From 4cc98c36e956ffbc9e7ed4f974f8334107943869 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Tue, 9 Jan 2024 17:44:48 +0530 Subject: [PATCH 52/71] chore: console commented --- packages/firecamp-electron/src/updater/updater.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/firecamp-electron/src/updater/updater.ts b/packages/firecamp-electron/src/updater/updater.ts index 9da17376e..727480cc2 100644 --- a/packages/firecamp-electron/src/updater/updater.ts +++ b/packages/firecamp-electron/src/updater/updater.ts @@ -43,7 +43,7 @@ export class AppUpdater { }); autoUpdater.on('download-progress', (progress: ProgressInfo) => { - console.log('the update download progress is ', progress); + // console.log('the update download progress is ', progress); win.webContents.send('download-progress', { version: this.newVersion || 'New Version', percentage: `${Math.floor(progress.percent)}%`, @@ -51,7 +51,7 @@ export class AppUpdater { }); autoUpdater.on('update-not-available', (info: UpdateInfo) => { - console.log('the update is bot available ', info); + // console.log('the update is bot available ', info); win.webContents.send('app_update_timeline', 'Update-Not-Available'); if (this.showDialog) { this.showDialog = false; @@ -60,7 +60,7 @@ export class AppUpdater { }); autoUpdater.on('update-downloaded', (info: UpdateInfo) => { - console.log('the update has been downloaded ', info); + // console.log('the update has been downloaded ', info); win.webContents.send('update-downloaded', { version: info.version }); showUpdateDownloadedWinDialog(win); // currently the win and mac both have the same dialog modal // showUpdateDownloadedMacDialog(win); From 23d34f38c40a80f6f1ba48854ad12fae0902f06c Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Tue, 9 Jan 2024 18:33:31 +0530 Subject: [PATCH 53/71] feat: firecamp desktop is ready to rock --- packages/firecamp-electron/package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index c3a2dcc8f..273c90e4c 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -1,7 +1,7 @@ { "name": "@firecamp/electron", "productName": "Firecamp", - "version": "3.0.2", + "version": "3.3.0-beta.1", "description": "The Firecamp Desktop Application", "main": "build/main.js", "private": true, @@ -11,11 +11,11 @@ "directory": "packages/firecamp-electron" }, "scripts": { - "start": "tsc && electron .", "test": "echo \"Error: no test specified\" && exit 1", - "pack": "tsc && electron-builder --dir -c.compression=store -c.mac.identity=null", - "build": "electron-builder -c.mac.identity=null", - "build:release": "electron-builder -ml --publish always", + "start": "pnpm build && electron .", + "build": "tsc", + "release": "pnpm build && electron-builder -ml --publish always", + "pack": "pnpm build && electron-builder --dir -c.compression=store -c.mac.identity=null", "postinstall": "electron-builder install-app-deps" }, "keywords": [], From d2165e7f734696325556a46f9e7c45436d1842e3 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Tue, 9 Jan 2024 22:50:06 +0530 Subject: [PATCH 54/71] chore: package upgraded --- platform/firecamp-platform/package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/platform/firecamp-platform/package.json b/platform/firecamp-platform/package.json index f6202017c..517712a02 100644 --- a/platform/firecamp-platform/package.json +++ b/platform/firecamp-platform/package.json @@ -50,7 +50,7 @@ }, "dependencies": { "@firecamp/agent-manager": "workspace:*", - "@firecamp/cloud-apis": "0.2.12", + "@firecamp/cloud-apis": "0.2.13", "@firecamp/cookie-manager": "^0.0.0", "@firecamp/graphql": "workspace:*", "@firecamp/rest": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9775fca4..95c3aef74 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -916,8 +916,8 @@ importers: specifier: workspace:* version: link:../../packages/firecamp-agent-manager '@firecamp/cloud-apis': - specifier: 0.2.12 - version: 0.2.12 + specifier: 0.2.13 + version: 0.2.13 '@firecamp/cookie-manager': specifier: ^0.0.0 version: link:../../packages/firecamp-cookie-manager @@ -4745,8 +4745,8 @@ packages: - supports-color dev: true - /@firecamp/cloud-apis@0.2.12: - resolution: {integrity: sha512-L72eo3C10it0dJ5kVd36DdJAQUNyiyI7/JhluTar+pCR8Jwum8d4/hFLO6QwyAiIojeWs/XQ+RZM2vn0KxS2Iw==} + /@firecamp/cloud-apis@0.2.13: + resolution: {integrity: sha512-2zVWK/DszAgrHwJs9SCtOJtY0FGMn2rF/G8F4m+iZ3ngSkARQYXZP+YbeOUWj5mARFXAk6AIMX/2sD+Z0GV8Uw==} engines: {node: '>=10'} dependencies: axios: 0.21.4 From 1237e60b4ea14ed123bb57e47d0849772601d909 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Tue, 20 Feb 2024 19:58:40 +0530 Subject: [PATCH 55/71] feat: win nsis build added in release --- packages/firecamp-electron/package.json | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 273c90e4c..d88277cfa 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -14,7 +14,7 @@ "test": "echo \"Error: no test specified\" && exit 1", "start": "pnpm build && electron .", "build": "tsc", - "release": "pnpm build && electron-builder -ml --publish always", + "release": "pnpm build && electron-builder -mlw --publish always", "pack": "pnpm build && electron-builder --dir -c.compression=store -c.mac.identity=null", "postinstall": "electron-builder install-app-deps" }, @@ -112,9 +112,12 @@ "artifactName": "Firecamp-${version}.${arch}.${ext}", "executableName": "Firecamp", "icon": "icons/win/logo.ico", - "target": [ - "nsis" - ], + "target": { + "target": "nsis", + "arch": [ + "x64" + ] + }, "verifyUpdateCodeSignature": false, "publish": [ { From e9fb328cce4793b508eb2d9f7414dec5547cd92c Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 29 Feb 2024 22:07:11 +0530 Subject: [PATCH 56/71] feat: ws electron issue fixed --- packages/firecamp-electron/package.json | 1 + packages/firecamp-electron/src/main.ts | 1 + packages/firecamp-electron/src/preload.ts | 2 + packages/firecamp-electron/src/preload/ws.ts | 67 +++++++++++++++++++ .../slices/handleConnectionExecutor.slice.ts | 5 +- .../firecamp-ws-executor/src/executor.ts | 2 +- pnpm-lock.yaml | 3 + 7 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 packages/firecamp-electron/src/preload/ws.ts diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index d88277cfa..d1a083ebb 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -24,6 +24,7 @@ "dependencies": { "@firecamp/rest-executor": "workspace:*", "@firecamp/scripts": "workspace:*", + "@firecamp/ws-executor": "workspace:*", "electron-is-dev": "^2.0.0", "electron-log": "^5.0.0", "electron-notarize": "^1.2.2", diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 1b2d0fb6e..82b4e0042 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -25,6 +25,7 @@ const createWindow = () => { // titleBarStyle: 'hidden', // transparent: true, webPreferences: { + sandbox: false, preload: path.join(__dirname, 'preload.js'), }, }); diff --git a/packages/firecamp-electron/src/preload.ts b/packages/firecamp-electron/src/preload.ts index 60e0972dd..9aaecbde5 100644 --- a/packages/firecamp-electron/src/preload.ts +++ b/packages/firecamp-electron/src/preload.ts @@ -1,4 +1,5 @@ const { contextBridge, ipcRenderer } = require('electron'); +import { PreloadWS } from './preload/ws'; contextBridge.exposeInMainWorld('__electron__', { http: { @@ -18,6 +19,7 @@ contextBridge.exposeInMainWorld('__electron__', { return ipcRenderer.invoke('auth:github:code', clientId, scope); }, }, + webSocket: PreloadWS, }); /* electron has limitation that we can not send DOM elements like files over ipc, thus we need to send only file meta including name, path and type */ diff --git a/packages/firecamp-electron/src/preload/ws.ts b/packages/firecamp-electron/src/preload/ws.ts new file mode 100644 index 000000000..3e14dea49 --- /dev/null +++ b/packages/firecamp-electron/src/preload/ws.ts @@ -0,0 +1,67 @@ +import * as WebSocket from 'ws'; +import WebSocketExecutor, { + IExecutor, + TExecutorOptions, +} from '@firecamp/ws-executor/dist/cjs'; +import { EOAuth2Types, IRest, IWebSocketMessage, TId } from '@firecamp/types'; + +// holds the WebSocket and Socket.IO connections +const Executors = new Map(); +export const PreloadWS = (options: TExecutorOptions): IExecutor => { + Executors.set( + options.connection.id, + new WebSocketExecutor({ ...options, WebSocket }) + ); + + return { + connect() { + const executor: IExecutor = Executors.get(options.connection.id); + executor.connect(); + Executors.set(options.connection.id, executor); + }, + connected() { + const executor: IExecutor = Executors.get(options.connection.id); + return executor?.connected(); + }, + readyState() { + const executor: IExecutor = Executors.get(options.connection.id); + return executor.readyState(); + }, + async send(message: IWebSocketMessage) { + const executor: IExecutor = Executors.get(options.connection.id); + await executor.send(message); + return Promise.resolve(); + }, + ping(interval: number) { + const executor: IExecutor = Executors.get(options.connection.id); + executor.ping(interval); + Executors.set(options.connection.id, executor); + }, + stopPinging() { + const executor: IExecutor = Executors.get(options.connection.id); + executor.stopPinging(); + Executors.set(options.connection.id, executor); + }, + logs(cb) { + const executor: IExecutor = Executors.get(options.connection.id); + executor.logs(cb); + }, + onClose(cb) { + const executor: IExecutor = Executors.get(options.connection.id); + executor.onClose(cb); + }, + onConnecting(cb) { + const executor: IExecutor = Executors.get(options.connection.id); + executor.onConnecting(cb); + }, + onOpen(cb) { + const executor: IExecutor = Executors.get(options.connection.id); + executor.onOpen(cb); + }, + disconnect(code: number, reason: string) { + const executor: IExecutor = Executors.get(options.connection.id); + executor.disconnect(code, reason); + Executors.delete(options.connection.id); + }, + }; +}; diff --git a/playgrounds/firecamp-websocket/src/store/slices/handleConnectionExecutor.slice.ts b/playgrounds/firecamp-websocket/src/store/slices/handleConnectionExecutor.slice.ts index faaccf6da..55ddd2434 100644 --- a/playgrounds/firecamp-websocket/src/store/slices/handleConnectionExecutor.slice.ts +++ b/playgrounds/firecamp-websocket/src/store/slices/handleConnectionExecutor.slice.ts @@ -44,13 +44,14 @@ const createHandleConnectionExecutor: TStoreSlice< const executor: IExecutor = _misc.firecampAgent() === EFirecampAgent.Desktop ? // @ts-ignore - window.fc.websocket(_ops) + window.__electron__.webSocket(_ops) : new Executor(_ops); // console.log(_misc.firecampAgent(), executor); // on open executor.onOpen(() => { + console.log('The connection is now open...'); state.changePlaygroundConnectionState(EConnectionState.Open); }); @@ -76,6 +77,7 @@ const createHandleConnectionExecutor: TStoreSlice< // set executor in playground state.setPlaygroundExecutor(executor); } catch (error) { + console.log(error); console.info({ API: 'websocket.connect', error, @@ -115,6 +117,7 @@ const createHandleConnectionExecutor: TStoreSlice< */ const state = get(); const { playground } = state; + console.log(playground, 'playground...'); if ( playground && playground.executor && diff --git a/playgrounds/firecamp-ws-executor/src/executor.ts b/playgrounds/firecamp-ws-executor/src/executor.ts index 5b4a5a7ad..94290ac45 100644 --- a/playgrounds/firecamp-ws-executor/src/executor.ts +++ b/playgrounds/firecamp-ws-executor/src/executor.ts @@ -94,7 +94,7 @@ export default class Executor implements IExecutor { // Send log to set cookie const logH = this.#log.success(Upgrade, '', Upgrade, { - value: response.headers, + value: JSON.stringify(response.headers, null, 4), type: EMessageBodyType.Json, }); this.#emitLog(logH); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95c3aef74..b6906eae8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -653,6 +653,9 @@ importers: '@firecamp/scripts': specifier: workspace:* version: link:../firecamp-scripts + '@firecamp/ws-executor': + specifier: workspace:* + version: link:../../playgrounds/firecamp-ws-executor electron-is-dev: specifier: ^2.0.0 version: 2.0.0 From 4dbfacb11eb59fce9585f02d8b0aaabf25204fb3 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 29 Feb 2024 22:07:36 +0530 Subject: [PATCH 57/71] feat: ws electron issue fixed --- .../src/store/slices/handleConnectionExecutor.slice.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/playgrounds/firecamp-websocket/src/store/slices/handleConnectionExecutor.slice.ts b/playgrounds/firecamp-websocket/src/store/slices/handleConnectionExecutor.slice.ts index 55ddd2434..901383281 100644 --- a/playgrounds/firecamp-websocket/src/store/slices/handleConnectionExecutor.slice.ts +++ b/playgrounds/firecamp-websocket/src/store/slices/handleConnectionExecutor.slice.ts @@ -51,7 +51,6 @@ const createHandleConnectionExecutor: TStoreSlice< // on open executor.onOpen(() => { - console.log('The connection is now open...'); state.changePlaygroundConnectionState(EConnectionState.Open); }); @@ -77,7 +76,6 @@ const createHandleConnectionExecutor: TStoreSlice< // set executor in playground state.setPlaygroundExecutor(executor); } catch (error) { - console.log(error); console.info({ API: 'websocket.connect', error, @@ -117,7 +115,6 @@ const createHandleConnectionExecutor: TStoreSlice< */ const state = get(); const { playground } = state; - console.log(playground, 'playground...'); if ( playground && playground.executor && From 47ed474673fc8f4a73643787ce9d1212ec415d18 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 29 Feb 2024 22:22:21 +0530 Subject: [PATCH 58/71] feat: ws headers are enabled --- packages/firecamp-electron/src/main.ts | 2 +- playgrounds/firecamp-rest-executor/src/index.ts | 4 ++-- .../src/components/connection-panel/ConnectionPanel.tsx | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/firecamp-electron/src/main.ts b/packages/firecamp-electron/src/main.ts index 82b4e0042..a043dea1e 100644 --- a/packages/firecamp-electron/src/main.ts +++ b/packages/firecamp-electron/src/main.ts @@ -6,7 +6,7 @@ import { nativeImage, screen, } from 'electron'; -import RestExecutor from '@firecamp/rest-executor/dist/index'; +import RestExecutor from '@firecamp/rest-executor/dist'; import * as path from 'node:path'; import { appIcon, trayIcon } from './icon'; import { AppUpdater } from './updater/updater'; diff --git a/playgrounds/firecamp-rest-executor/src/index.ts b/playgrounds/firecamp-rest-executor/src/index.ts index 532001bc5..5472b2c9e 100644 --- a/playgrounds/firecamp-rest-executor/src/index.ts +++ b/playgrounds/firecamp-rest-executor/src/index.ts @@ -145,9 +145,9 @@ export default class RestExecutor implements IRestExecutor { // TODO: Check sending file without serialize in desktop environment // parse body payload - console.log(body, 555); + // console.log(body, 555); if (body?.value) { - console.log(body, 7777); + // console.log(body, 7777); axiosRequest.data = await parseBody(body); } return axiosRequest; diff --git a/playgrounds/firecamp-websocket/src/components/connection-panel/ConnectionPanel.tsx b/playgrounds/firecamp-websocket/src/components/connection-panel/ConnectionPanel.tsx index 04cc57cfe..5bbebb867 100644 --- a/playgrounds/firecamp-websocket/src/components/connection-panel/ConnectionPanel.tsx +++ b/playgrounds/firecamp-websocket/src/components/connection-panel/ConnectionPanel.tsx @@ -49,6 +49,11 @@ const ConnectionPanel = () => { name: 'Params', count: cPanelUi.params, }, + { + id: 'headers', + name: 'Headers', + count: cPanelUi.headers, + }, // { // id: 'config', // name: 'Config', From ac652bec56eaa246c53b410f6102e375df8bcd10 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Thu, 29 Feb 2024 23:17:12 +0530 Subject: [PATCH 59/71] feat: socket-io issue fixed with desktop 3.1 beta --- packages/firecamp-electron/package.json | 1 + packages/firecamp-electron/src/preload.ts | 2 + .../src/preload/socket-io.ts | 122 ++++++++++++++++++ .../firecamp-socket-io-executor/src/index.ts | 6 + .../slices/handleConnectionExecutor.slice.ts | 3 +- pnpm-lock.yaml | 3 + 6 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 packages/firecamp-electron/src/preload/socket-io.ts diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index d1a083ebb..1214c3607 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -24,6 +24,7 @@ "dependencies": { "@firecamp/rest-executor": "workspace:*", "@firecamp/scripts": "workspace:*", + "@firecamp/socket.io-executor": "workspace:*", "@firecamp/ws-executor": "workspace:*", "electron-is-dev": "^2.0.0", "electron-log": "^5.0.0", diff --git a/packages/firecamp-electron/src/preload.ts b/packages/firecamp-electron/src/preload.ts index 9aaecbde5..c16668fee 100644 --- a/packages/firecamp-electron/src/preload.ts +++ b/packages/firecamp-electron/src/preload.ts @@ -1,4 +1,5 @@ const { contextBridge, ipcRenderer } = require('electron'); +import { PreloadSocketIO } from './preload/socket-io'; import { PreloadWS } from './preload/ws'; contextBridge.exposeInMainWorld('__electron__', { @@ -20,6 +21,7 @@ contextBridge.exposeInMainWorld('__electron__', { }, }, webSocket: PreloadWS, + io: PreloadSocketIO, }); /* electron has limitation that we can not send DOM elements like files over ipc, thus we need to send only file meta including name, path and type */ diff --git a/packages/firecamp-electron/src/preload/socket-io.ts b/packages/firecamp-electron/src/preload/socket-io.ts new file mode 100644 index 000000000..1c5a45ed9 --- /dev/null +++ b/packages/firecamp-electron/src/preload/socket-io.ts @@ -0,0 +1,122 @@ +import SocketIOExecutor, { + SocketIOv2, + SocketIOv3, + SocketIOv4, + TExecutorOptions, + IExecutorInterface, +} from '@firecamp/socket.io-executor/dist/cjs'; + +// holds the WebSocket and Socket.IO connections +const Executors = new Map(); +export const PreloadSocketIO = ( + config: TExecutorOptions +): Omit< + IExecutorInterface, + 'log' | 'emitLog' | 'prepareEmitPayload' | 'unsubscribe' +> => { + const { id } = config.connection; + Executors.set( + id, + new SocketIOExecutor({ + ...config, + io: { v2: SocketIOv2, v3: SocketIOv3, v4: SocketIOv4 }, + }) + ); + + return { + connect() { + const executor = Executors.get(id); + if (!executor) return; + executor.connect(); + Executors.set(id, executor); + }, + socketID() { + const executor = Executors.get(id); + if (!executor) return; + return executor.socketID(); + }, + addListener(eventName: string) { + const executor = Executors.get(id); + if (!executor) return; + executor.addListener(eventName); + Executors.set(id, executor); + }, + addListeners(eventNames: string[]) { + const executor = Executors.get(id); + if (!executor) return; + executor.addListeners(eventNames); + Executors.set(id, executor); + }, + removeListener(eventName: string) { + const executor = Executors.get(id); + if (!executor) return; + executor.removeListener(eventName); + Executors.set(id, executor); + }, + removeListeners(eventNames: string[]) { + const executor = Executors.get(id); + if (!executor) return; + executor.removeListeners(eventNames); + Executors.set(id, executor); + }, + removeAllListeners() { + const executor = Executors.get(id); + if (!executor) return; + executor.removeAllListeners(); + Executors.set(id, executor); + }, + connected() { + const executor = Executors.get(id); + if (!executor) return; + return executor?.connected(); + }, + async emit(eventName: string, args: any[]) { + const executor = Executors.get(id); + if (!executor) return; + await executor.emit(eventName, args); + }, + async emitWithAck(eventName: string, args: any[]) { + const executor = Executors.get(id); + if (!executor) return Promise.resolve(); + await executor.emitWithAck(eventName, args); + }, + ping(interval: number) { + const executor = Executors.get(id); + if (!executor) return; + executor.ping(interval); + Executors.set(id, executor); + }, + stopPinging() { + const executor = Executors.get(id); + if (!executor) return; + executor.stopPinging(); + Executors.set(id, executor); + }, + close() { + const executor = Executors.get(id); + if (!executor) return; + executor.close(); + Executors.delete(id); + }, + onOpen(cb: any) { + const executor: IExecutorInterface = Executors.get(id); + if (!executor) return; + executor.onOpen(cb); + }, + onClose(cb: any) { + const executor: IExecutorInterface = Executors.get(id); + if (!executor) return; + executor.onClose(cb); + }, + onConnecting(cb: any) { + const executor: IExecutorInterface = Executors.get(id); + if (!executor) return; + executor.onConnecting(cb); + }, + logs(cb: any) { + const executor: IExecutorInterface = Executors.get(id); + if (!executor) return; + executor.logs(cb); + }, + }; +}; diff --git a/playgrounds/firecamp-socket-io-executor/src/index.ts b/playgrounds/firecamp-socket-io-executor/src/index.ts index 5522cf738..514b84b34 100644 --- a/playgrounds/firecamp-socket-io-executor/src/index.ts +++ b/playgrounds/firecamp-socket-io-executor/src/index.ts @@ -1,5 +1,11 @@ +import v2 from 'socket.io-client-v2'; +import v3 from 'socket.io-client-v3'; +import v4 from 'socket.io-client-v4'; + import Executor from './executor'; export default Executor; export * from './executor.interface'; export * from './types'; + +export { v2 as SocketIOv2, v3 as SocketIOv3, v4 as SocketIOv4 }; diff --git a/playgrounds/firecamp-socket-io/src/store/slices/handleConnectionExecutor.slice.ts b/playgrounds/firecamp-socket-io/src/store/slices/handleConnectionExecutor.slice.ts index 75a40fbe1..18d47e32e 100644 --- a/playgrounds/firecamp-socket-io/src/store/slices/handleConnectionExecutor.slice.ts +++ b/playgrounds/firecamp-socket-io/src/store/slices/handleConnectionExecutor.slice.ts @@ -60,7 +60,8 @@ const createHandleConnectionExecutor: TStoreSlice< const executor: IExecutorInterface = _misc.firecampAgent() === EFirecampAgent.Desktop - ? window.fc.io(_ops) + ? //@ts-ignore + window.__electron__.io(_ops) : new Executor(_ops); // on open diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6906eae8..8a29f03af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -653,6 +653,9 @@ importers: '@firecamp/scripts': specifier: workspace:* version: link:../firecamp-scripts + '@firecamp/socket.io-executor': + specifier: workspace:* + version: link:../../playgrounds/firecamp-socket-io-executor '@firecamp/ws-executor': specifier: workspace:* version: link:../../playgrounds/firecamp-ws-executor From 349b1acb2cdd08cb0c4233c362578f5d2290fc55 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 4 Mar 2024 14:39:24 +0530 Subject: [PATCH 60/71] fix: spell allowed tauri --- .github/actions/spelling/allow.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt index 61567618d..04773e277 100644 --- a/.github/actions/spelling/allow.txt +++ b/.github/actions/spelling/allow.txt @@ -3,3 +3,4 @@ https ssh ubuntu workarounds +tauri From 50e020466c61f18be34f7d291ddfb6381a357f55 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 4 Mar 2024 14:49:47 +0530 Subject: [PATCH 61/71] fix: spell allowed --- .github/actions/spelling/allow.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt index 04773e277..1e00d8d7f 100644 --- a/.github/actions/spelling/allow.txt +++ b/.github/actions/spelling/allow.txt @@ -4,3 +4,26 @@ ssh ubuntu workarounds tauri +portpicker +Avenir +osx +serde +Enume +OPPT +Yirfjyjaujc +heroku +nel +tne +cloudflare +vegur +nosniff +ratelimit +icns +notarisation +Ecies +ecies +pbk +encryptio +keyval +fce + From 8232dad000ae5c706a8b9c5651853eba27bf75b9 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 4 Mar 2024 15:08:58 +0530 Subject: [PATCH 62/71] faet: 3.3.0-beta.2 released --- packages/firecamp-electron/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 1214c3607..4a50a3207 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -1,7 +1,7 @@ { "name": "@firecamp/electron", "productName": "Firecamp", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "The Firecamp Desktop Application", "main": "build/main.js", "private": true, From 778b6e690dbba5370ae05e47df296e2eb2ad84fd Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 4 Mar 2024 15:54:56 +0530 Subject: [PATCH 63/71] chore: deprecated files removed --- scripts/deprecated/build.js | 132 ----------------- scripts/deprecated/constants.js | 16 -- scripts/deprecated/release.js | 254 -------------------------------- 3 files changed, 402 deletions(-) delete mode 100644 scripts/deprecated/build.js delete mode 100644 scripts/deprecated/constants.js delete mode 100644 scripts/deprecated/release.js diff --git a/scripts/deprecated/build.js b/scripts/deprecated/build.js deleted file mode 100644 index d563580c1..000000000 --- a/scripts/deprecated/build.js +++ /dev/null @@ -1,132 +0,0 @@ -/* eslint-disable no-console */ -require('dotenv').config(); -const fs = require('fs'); -const path = require('path'); -// const colors = require('colors'); -const { Environment, AppFormat } = require('./constants'); -const build = require('../webpack.prod'); -require('shelljs/global'); - -const env = process.env.NODE_ENV; - -module.exports = async () => { - try { - // hold the build path as per the environment mode - const buildPath = path.join(`${__dirname}/../build/${env}`); - // copy project assets and generate config. - const directoryPaths = [path.join(`${__dirname}/../build`), buildPath]; - if (env === Environment.Development) { - directoryPaths.push( - path.join(`${__dirname}/../build/${env}/build-scripts`) - ); - } - if (env === Environment.Production) { - directoryPaths.push( - path.join(`${__dirname}/../build/${env}/build-scripts`), - path.join(`${__dirname}/../build/${env}/services`), - path.join(`${__dirname}/../build/${env}/packages-executors`) - ); - } - - // Remove build before start bundle - rm('-rf', buildPath); - - // Create build directories - directoryPaths.forEach((directoryPath) => { - if (!fs.existsSync(directoryPath)) mkdir(directoryPath); - }); - - // Copy build-scripts to generate build - // cp( - // '-R', - // path.join( - // `${__dirname}/../packages/firecamp-desktop-app/src/build-scripts/*` - // ), - // `${buildPath}/build-scripts` - // ); - - // Copy react app assets - cp( - '-R', - path.join(`${__dirname}/../platform/firecamp-platform/public/assets/*`), - buildPath - ); - - // generate package.json and manifest based on app environment - // exec(`node ${buildPath}/build-scripts/init-package.js`); - - // Generate .html - // exec( - // `pug -O "{ env: '${env}' }" -o ${buildPath} ${path.join( - // __dirname, - // '../platform/firecamp-platform/public/views/' - // )}` - // ); - - // cp( - // '-R', - // path.join( - // `${__dirname}/../packages/firecamp-desktop-app/public/splashscreen.html` - // ), - // `${buildPath}` - // ); - - // Copy electron agent assets, config and services - if ( - env === Environment.Production && - process.env.AppFormat !== AppFormat.WebApp - ) { - // Copy electron agent services - cp( - '-R', - path.join( - `${__dirname}/../packages/firecamp-desktop-app/dist/services/*` - ), - `${buildPath}/services` - ); - - // Copy http executor - cp( - '-R', - path.join(`${__dirname}/../packages-executors/*`), - `${buildPath}/packages-executors` - ); - - // Copy dmg app assets - if (process.env.AppFormat === AppFormat.Dmg) { - mkdir(`${buildPath}/build`); - - cp( - '-R', - path.join( - `${__dirname}/../packages/firecamp-desktop-app/public/assets/${env}/mac/*` - ), - `${buildPath}/build` - ); - } - - // Copy common assets - cp( - '-R', - path.join( - `${__dirname}/../packages/firecamp-desktop-app/public/assets/${ - [...Object.values(Environment)].includes(env) - ? 'production' - : 'canary' - }` - ), - `${buildPath}/assets` - ); - } - - if (env === Environment.Production || env === Environment.Staging) { - await build(); - } - - return Promise.resolve(); - } catch (error) { - return Promise.reject(error); - } -}; - -if (env === Environment.Development) module.exports(); diff --git a/scripts/deprecated/constants.js b/scripts/deprecated/constants.js deleted file mode 100644 index 92b418f7c..000000000 --- a/scripts/deprecated/constants.js +++ /dev/null @@ -1,16 +0,0 @@ -const Environment = { - Development: 'development', - Staging: 'staging', // staging will be for testing purpose - Production: 'production', - Canary: 'canary', // Canary is production but for early adopter -}; - -const AppFormat = { - WebApp: 'webapp', - Dmg: 'dmg', - AppImage: 'appImage', - Snap: 'snap', - NSIS: 'nsis', -}; - -module.exports = { Environment, AppFormat }; diff --git a/scripts/deprecated/release.js b/scripts/deprecated/release.js deleted file mode 100644 index 0f11d4085..000000000 --- a/scripts/deprecated/release.js +++ /dev/null @@ -1,254 +0,0 @@ -/* eslint-disable no-console */ -require('dotenv-vault-core').config(); -const { red, yellow } = require('colors'); -const semver = require('semver'); -require('shelljs/global'); -const build = require('./build'); -const { version } = require('../package.json'); -const { Environment, AppFormat } = require('./constants'); - -const env = process.env.NODE_ENV; - -/** - * 1. test variables - */ - -const validator = { - /** validate project version */ - version: () => { - if (!semver.valid(version)) { - console.log( - `${red('Error:')} invalid project version(${yellow(version)})` - ); - process.exit(); - } - }, - - /** validate env variables */ - variables: () => { - const variables = [ - 'FIRECAMP_API_HOST', - 'CSC_KEY_PASSWORD', - 'CSC_LINK', - 'DO_KEY_ID', - 'DO_SECRET_KEY', - ]; - - // Check if environment variables set - variables.forEach((variable) => { - if ( - !process.env.variable || - typeof process.env[variable] === 'undefined' || - process.env[variable].length < 5 - ) { - console.log( - `${red('Error:')} Env. variable ${yellow(variable)} not set` - ); - process.exit(); - } - }); - }, -}; - -const helper = { - buildWebApp: async () => { - process.env.NODE_OPTIONS = '--max-old-space-size=4096'; - - await build(); - - // Finished the process if build=chrome - if (process.env.AppFormat === AppFormat.WebApp) { - // remove unused packages - rm('-rf', `build/${env}/build-scripts`); - rm('-rf', `build/${env}/packages-executors`); - rm('-rf', `build/${env}/services`); - - // remove chrome extension app files // TODO: remove it later - rm('-rf', `build/${env}/splashscreen.html`); - rm('-rf', `build/${env}/manifest.json`); - rm('-rf', `build/${env}/background.html`); - rm('-rf', `build/${env}/window.html`); - - process.exit(); - } - }, -}; - -// set app version in the environment -process.env.APP_VERSION = version; - -// check FIRECAMP_API_HOST env. variable value does not contains invalid value -if ( - env !== Environment.Staging && - (process.env.FIRECAMP_API_HOST.includes('localhost') || - process.env.FIRECAMP_API_HOST.includes('testing') || - process.env.FIRECAMP_API_HOST.includes('127.0.0.1')) -) { - console.log( - `${red( - 'Error:' - )} invalid value set for env. variable (FIRECAMP_API_HOST ${yellow( - process.env.FIRECAMP_API_HOST - )})` - ); - process.exit(); -} - -const _exec = (command) => - new Promise((resolve) => { - let result; - - const _command = exec(command, { async: true, silent: true }); - - _command.stdout.on('data', (data) => { - result = data.toString(); - }); - - _command.on('close', (code) => { - if (code !== 0) { - console.error( - ` -${red('Error: ')}Failed to execute command: ${command}` - ); - - process.exit(); - } else { - console.log(` -✅ ${command} executed successfully`); - - resolve(result); - } - }); - }); - -const preBuildCliCommands = async () => { - // Prevent check git tag while staging build - if (env === Environment.Staging) return Promise.resolve(); - - // Check is tag was checked out or not - // await _exec('git describe --tags', { async: true }) - // .then((result) => { - // console.log(result); - // if (result.replace(/\n/g, '') !== `v${version}`) { - // console.log( - // `${red('Error:')} Please checkout tag '${yellow( - // `v${version}` - // )}' for release` - // ); - // process.exit(); - // } else return Promise.resolve(); - // }) - // .catch((e) => { - // console.log(e, 'this is the error'); - // }); -}; - -if (env === Environment.Staging) { - helper.buildWebApp(); -} -if (env === Environment.Production) { - try { - preBuildCliCommands().then(async () => { - await helper.buildWebApp(); - - // Set bundle id for electron app - if (env === Environment.Production) - process.env.appBundleId = 'com.firecamp.app'; - else if (env === Environment.Canary) - process.env.appBundleId = 'com.firecamp.canary'; - - // Copy release note and post build checks - // cp( - // '-R', - // 'packages/firecamp-desktop-app/public/release-notes.md', - // 'build/production' - // ); - - // Remove chrome extension app files - rm('-rf', 'build/production/background.html'); - rm('-rf', 'build/production/window.html'); - rm('-rf', 'build/production/js/background.bundle.js'); - - // Add library: electron - // cd('build/production'); - // exec( - // 'export NODE_ENV=development && pnpm install && pnpm add_electron && export NODE_ENV=production' - // ); - - // Add library: electron-oauth-helper - // exec('pnpm add ../../../firecamp-forks/electron-oauth-helper -W'); - - // Prepare linux os 'AppImage' build - if (process.env.AppFormat === AppFormat.AppImage) { - // do not publish the app - if (process.argv[3] === 'l') exec('electron-builder --linux AppImage'); - - // publish the app - if (process.argv[3] === 'p') { - exec( - 'electron-builder --linux AppImage -p always -c.releaseInfo.releaseNotesFile=release-notes.md' - ); - - // Get the hash value of the AppImage build - const shasum = await _exec( - `shasum -a 256 ./dist/Firecamp-${process.env.APP_VERSION}.AppImage` - ); - - console.log(`${yellow('shasum:')} ${shasum}`); - } - } - - // Prepare linux os 'Snap' build - if (process.env.AppFormat === AppFormat.Snap) { - // do not publish the app - if (process.argv[3] === 'l') exec('electron-builder --linux Snap'); - - // publish the app - if (process.argv[3] === 'p') - exec('electron-builder --linux Snap -p always'); - } - - // Prepare windows os 'nsis' build - if (process.env.AppFormat === AppFormat.NSIS) { - // do not publish the app - if (process.argv[3] === 'l') exec('electron-builder --win'); - - // publish the app - if (process.argv[3] === 'p') { - exec( - 'electron-builder --win -p always -c.releaseInfo.releaseNotesFile=release-notes.md' - ); - - // Get the hash value of the nsis build - const shasum = await _exec( - `shasum -a 256 ./dist/Firecamp-${process.env.APP_VERSION}.exe` - ); - - console.log(`${yellow('shasum:')} ${shasum}`); - } - } - - // Prepare mac os 'dmg' build - if (process.env.AppFormat === AppFormat.Dmg) { - // do not publish the app - if (process.argv[3] === 'l') exec('electron-builder --mac'); - - // publish the app - if (process.argv[3] === 'p') { - exec( - 'electron-builder --mac -p always -c.releaseInfo.releaseNotesFile=release-notes.md' - ); - - // Get the hash value of the nsis build - const shasum = await _exec( - `shasum -a 256 ./dist/Firecamp-${process.env.APP_VERSION}.dmg` - ); - - console.log(`${yellow('shasum:')} ${shasum}`); - } - } - }); - } catch (error) { - console.error(error); - } -} From e13e2b5d0987c913c078da68b5dd4bb423789cbd Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 4 Mar 2024 15:55:19 +0530 Subject: [PATCH 64/71] chore: electronbuilder upgraded --- packages/firecamp-electron/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 4a50a3207..45e8ba70f 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -35,7 +35,7 @@ "devDependencies": { "@types/node": "^20.8.9", "electron": "^27.1.2", - "electron-builder": "^24.9.1" + "electron-builder": "^24.13.3" }, "build": { "appId": "com.firecamp.electron", From a29ab6c011588be0de567f642f8f3825322b3bf1 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 4 Mar 2024 16:14:01 +0530 Subject: [PATCH 65/71] chore: frozen lock file fix --- pnpm-lock.yaml | 190 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 155 insertions(+), 35 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8a29f03af..3199c3312 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -682,8 +682,8 @@ importers: specifier: ^27.1.2 version: 27.1.2 electron-builder: - specifier: ^24.9.1 - version: 24.9.1 + specifier: ^24.13.3 + version: 24.13.3(electron-builder-squirrel-windows@24.13.3) packages/firecamp-har: dependencies: @@ -4191,8 +4191,8 @@ packages: - supports-color dev: true - /@electron/notarize@2.1.0: - resolution: {integrity: sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==} + /@electron/notarize@2.2.1: + resolution: {integrity: sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==} engines: {node: '>= 10.0.0'} dependencies: debug: 4.3.4(supports-color@8.1.1) @@ -4217,8 +4217,8 @@ packages: - supports-color dev: true - /@electron/universal@1.4.1: - resolution: {integrity: sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ==} + /@electron/universal@1.5.1: + resolution: {integrity: sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==} engines: {node: '>=8.6'} dependencies: '@electron/asar': 3.2.8 @@ -11254,25 +11254,29 @@ packages: resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} dev: true - /app-builder-lib@24.9.1: - resolution: {integrity: sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g==} + /app-builder-lib@24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3): + resolution: {integrity: sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==} engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 24.13.3 + electron-builder-squirrel-windows: 24.13.3 dependencies: - 7zip-bin: 5.2.0 '@develar/schema-utils': 2.6.5 - '@electron/notarize': 2.1.0 + '@electron/notarize': 2.2.1 '@electron/osx-sign': 1.0.5 - '@electron/universal': 1.4.1 + '@electron/universal': 1.5.1 '@malept/flatpak-bundler': 0.4.0 '@types/fs-extra': 9.0.13 async-exit-hook: 2.0.1 bluebird-lst: 1.0.9 - builder-util: 24.8.1 - builder-util-runtime: 9.2.3 + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 chromium-pickle-js: 0.2.0 debug: 4.3.4(supports-color@8.1.1) + dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3) ejs: 3.1.9 - electron-publish: 24.8.1 + electron-builder-squirrel-windows: 24.13.3(dmg-builder@24.13.3) + electron-publish: 24.13.1 form-data: 4.0.0 fs-extra: 10.1.0 hosted-git-info: 4.1.0 @@ -11312,6 +11316,51 @@ packages: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} dev: true + /archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.7 + dev: true + + /archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 3.6.0 + dev: true + + /archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} + dependencies: + archiver-utils: 2.1.0 + async: 3.2.4 + buffer-crc32: 0.2.13 + readable-stream: 3.6.0 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.1 + dev: true + /archy@1.0.0: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} dev: true @@ -12507,8 +12556,8 @@ packages: - supports-color dev: false - /builder-util-runtime@9.2.3: - resolution: {integrity: sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==} + /builder-util-runtime@9.2.4: + resolution: {integrity: sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==} engines: {node: '>=12.0.0'} dependencies: debug: 4.3.4(supports-color@8.1.1) @@ -12517,14 +12566,14 @@ packages: - supports-color dev: true - /builder-util@24.8.1: - resolution: {integrity: sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw==} + /builder-util@24.13.1: + resolution: {integrity: sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==} dependencies: 7zip-bin: 5.2.0 '@types/debug': 4.1.12 app-builder-bin: 4.0.0 bluebird-lst: 1.0.9 - builder-util-runtime: 9.2.3 + builder-util-runtime: 9.2.4 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4(supports-color@8.1.1) @@ -13526,6 +13575,16 @@ packages: resolution: {integrity: sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==} dev: false + /compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.3 + normalize-path: 3.0.0 + readable-stream: 3.6.0 + dev: true + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -13988,6 +14047,20 @@ packages: - supports-color dev: true + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: true + + /crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.0 + dev: true + /crc@3.8.0: resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} requiresBuild: true @@ -14817,18 +14890,19 @@ packages: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true - /dmg-builder@24.9.1: - resolution: {integrity: sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ==} + /dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3): + resolution: {integrity: sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==} dependencies: - app-builder-lib: 24.9.1 - builder-util: 24.8.1 - builder-util-runtime: 9.2.3 + app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 fs-extra: 10.1.0 iconv-lite: 0.6.3 js-yaml: 4.1.0 optionalDependencies: dmg-license: 1.0.11 transitivePeerDependencies: + - electron-builder-squirrel-windows - supports-color dev: true @@ -15051,16 +15125,28 @@ packages: dependencies: jake: 10.8.7 - /electron-builder@24.9.1: - resolution: {integrity: sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg==} + /electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3): + resolution: {integrity: sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==} + dependencies: + app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) + archiver: 5.3.2 + builder-util: 24.13.1 + fs-extra: 10.1.0 + transitivePeerDependencies: + - dmg-builder + - supports-color + dev: true + + /electron-builder@24.13.3(electron-builder-squirrel-windows@24.13.3): + resolution: {integrity: sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==} engines: {node: '>=14.0.0'} hasBin: true dependencies: - app-builder-lib: 24.9.1 - builder-util: 24.8.1 - builder-util-runtime: 9.2.3 + app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 chalk: 4.1.2 - dmg-builder: 24.9.1 + dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3) fs-extra: 10.1.0 is-ci: 3.0.1 lazy-val: 1.0.5 @@ -15068,6 +15154,7 @@ packages: simple-update-notifier: 2.0.0 yargs: 17.6.2 transitivePeerDependencies: + - electron-builder-squirrel-windows - supports-color dev: true @@ -15091,12 +15178,12 @@ packages: - supports-color dev: false - /electron-publish@24.8.1: - resolution: {integrity: sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw==} + /electron-publish@24.13.1: + resolution: {integrity: sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==} dependencies: '@types/fs-extra': 9.0.13 - builder-util: 24.8.1 - builder-util-runtime: 9.2.3 + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 chalk: 4.1.2 fs-extra: 10.1.0 lazy-val: 1.0.5 @@ -21968,6 +22055,13 @@ packages: /lazy-val@1.0.5: resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} + /lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + dependencies: + readable-stream: 2.3.7 + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -22191,6 +22285,14 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true + /lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + dev: true + + /lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + dev: true + /lodash.escaperegexp@4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} dev: false @@ -22203,6 +22305,10 @@ packages: resolution: {integrity: sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==} dev: true + /lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + dev: true + /lodash.flattendeep@4.4.0: resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} dev: true @@ -22231,7 +22337,6 @@ packages: /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: false /lodash.isundefined@3.0.1: resolution: {integrity: sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==} @@ -26213,6 +26318,12 @@ packages: resolution: {integrity: sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA==} dev: true + /readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + dependencies: + minimatch: 5.1.6 + dev: true + /readdir-scoped-modules@1.1.0: resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==} deprecated: This functionality has been moved to @npmcli/fs @@ -31605,6 +31716,15 @@ packages: wrap-ansi: 2.1.0 dev: true + /zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} + dependencies: + archiver-utils: 3.0.4 + compress-commons: 4.1.2 + readable-stream: 3.6.0 + dev: true + /zustand@4.3.9(react@18.2.0): resolution: {integrity: sha512-Tat5r8jOMG1Vcsj8uldMyqYKC5IZvQif8zetmLHs9WoZlntTHmIoNM8TpLRY31ExncuUvUOXehd0kvahkuHjDw==} engines: {node: '>=12.7.0'} From 4c0453eae953b15f7416d0620a8b1071c44867a8 Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 4 Mar 2024 16:24:22 +0530 Subject: [PATCH 66/71] chore: message improved --- packages/firecamp-electron/package.json | 15 +++++++++++++++ packages/firecamp-electron/src/updater/dialogs.ts | 3 +-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/firecamp-electron/package.json b/packages/firecamp-electron/package.json index 45e8ba70f..54a025308 100644 --- a/packages/firecamp-electron/package.json +++ b/packages/firecamp-electron/package.json @@ -74,6 +74,11 @@ "hardenedRuntime": true, "gatekeeperAssess": false, "publish": [ + { + "provider": "github", + "owner": "firecamp-dev", + "repo": "firecamp" + }, { "provider": "spaces", "name": "firecamp", @@ -96,6 +101,11 @@ ] }, "publish": [ + { + "provider": "github", + "owner": "firecamp-dev", + "repo": "firecamp" + }, { "provider": "spaces", "name": "firecamp", @@ -122,6 +132,11 @@ }, "verifyUpdateCodeSignature": false, "publish": [ + { + "provider": "github", + "owner": "firecamp-dev", + "repo": "firecamp" + }, { "provider": "spaces", "name": "firecamp", diff --git a/packages/firecamp-electron/src/updater/dialogs.ts b/packages/firecamp-electron/src/updater/dialogs.ts index 6f45ef126..76157d8d9 100644 --- a/packages/firecamp-electron/src/updater/dialogs.ts +++ b/packages/firecamp-electron/src/updater/dialogs.ts @@ -7,8 +7,7 @@ const showUpdateDownloadedWinDialog = (win: any) => { title: '👏️ Installed New Version', message: 'New version has been installed successfully, You can restart the app', - detail: - 'Please save your unsaved tabs first if you are in-between your work.', + detail: 'Please ensure you save any open, unsaved work before proceeding.', buttons: ['Cancel', 'Restart'], }); }; From db67bb3ba978bdc03ac6a52df6dbf2538248ec1c Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 4 Mar 2024 16:28:27 +0530 Subject: [PATCH 67/71] chore: message improved --- packages/firecamp-electron/src/updater/dialogs.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/firecamp-electron/src/updater/dialogs.ts b/packages/firecamp-electron/src/updater/dialogs.ts index 76157d8d9..2a91e8ed8 100644 --- a/packages/firecamp-electron/src/updater/dialogs.ts +++ b/packages/firecamp-electron/src/updater/dialogs.ts @@ -5,8 +5,7 @@ const showUpdateDownloadedWinDialog = (win: any) => { dialog.showMessageBoxSync(win, { type: 'question', title: '👏️ Installed New Version', - message: - 'New version has been installed successfully, You can restart the app', + message: 'The new version is installed. You may now restart the app.', detail: 'Please ensure you save any open, unsaved work before proceeding.', buttons: ['Cancel', 'Restart'], }); From 64e38c3dbc53e3e929ab72d85c982cf1a1f3636d Mon Sep 17 00:00:00 2001 From: Nishchit14 Date: Mon, 4 Mar 2024 16:46:25 +0530 Subject: [PATCH 68/71] chore: message improved --- packages/firecamp-electron/src/updater/dialogs.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/firecamp-electron/src/updater/dialogs.ts b/packages/firecamp-electron/src/updater/dialogs.ts index 2a91e8ed8..668b66f92 100644 --- a/packages/firecamp-electron/src/updater/dialogs.ts +++ b/packages/firecamp-electron/src/updater/dialogs.ts @@ -15,11 +15,8 @@ const showUpdateDownloadedMacDialog = (win: any) => { dialog.showMessageBoxSync(win, { type: 'question', title: '👏️ Installed New Version', - message: - 'New version has been installed successfully, You can restart the app', - detail: - // 'New updates are installed successfully, It will get reflected after app relaunch', - 'Please save your unsaved tabs first if you are in-between your work.', + message: 'The new version is installed. You may now restart the app.', + detail: 'Please ensure you save any open, unsaved work before proceeding.', buttons: ['Cancel', 'Relaunch'], noLink: true, }); From 37aa3b8c6a830c77a22a0013da0ccd9d530a26ef Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 4 Mar 2024 07:06:41 -0500 Subject: [PATCH 69/71] spelling: typescript Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- packages/firecamp-tauri/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/firecamp-tauri/README.md b/packages/firecamp-tauri/README.md index 102e36689..f14528988 100644 --- a/packages/firecamp-tauri/README.md +++ b/packages/firecamp-tauri/README.md @@ -1,6 +1,6 @@ -# Tauri + React + Typescript +# Tauri + React + TypeScript -This template should help get you started developing with Tauri, React and Typescript in Vite. +This template should help get you started developing with Tauri, React and TypeScript in Vite. ## Recommended IDE Setup From 576a35c48b65e3e2e84f085579e3b78512d15a10 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 4 Mar 2024 07:16:11 -0500 Subject: [PATCH 70/71] chore: delete stray log files --- .../src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt | 0 .../src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/firecamp-tauri/src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt delete mode 100644 packages/firecamp-tauri/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt diff --git a/packages/firecamp-tauri/src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt b/packages/firecamp-tauri/src-tauri/rustc-ice-2023-08-29T12:21:32.539513Z-24344.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/firecamp-tauri/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt b/packages/firecamp-tauri/src-tauri/rustc-ice-2023-09-01T10:38:16.464703Z-21654.txt deleted file mode 100644 index e69de29bb..000000000 From aeb400ed92273c20c2793684c5a5cb7f243d43d3 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 4 Mar 2024 07:16:45 -0500 Subject: [PATCH 71/71] ci: update check-spelling --- .github/actions/spelling/expect.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt index e17c1598f..47dec2ad8 100644 --- a/.github/actions/spelling/expect.txt +++ b/.github/actions/spelling/expect.txt @@ -1,6 +1,7 @@ abksi adpcm ajv +APPIMAGE applixware arraybufferview asds @@ -52,6 +53,7 @@ dssc dts duplicat eamodio +eciesjs ecmascript edt EGraph @@ -229,6 +231,7 @@ ROfb Rpbjpvc rsd rtls +rustc saf salesforce salesforcecli @@ -268,6 +271,7 @@ timestamptz TItem tocstop TODOs +togglefullscreen Tokenfrom TOODs tooltiptext