diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..31e2758 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx lint-staged --concurrent false --relative diff --git a/README.md b/README.md index 34589b1..685fd24 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,1327 @@ A platform that provides unique DIY (Do It Yourself) project suggestions using O 1. Clone the repository. 2. Set up both the client and server by following their respective READMEs. + +``` +make-me-project +├─ .git +│ ├─ COMMIT_EDITMSG +│ ├─ config +│ ├─ description +│ ├─ FETCH_HEAD +│ ├─ HEAD +│ ├─ hooks +│ │ ├─ applypatch-msg.sample +│ │ ├─ commit-msg.sample +│ │ ├─ fsmonitor-watchman.sample +│ │ ├─ post-update.sample +│ │ ├─ pre-applypatch.sample +│ │ ├─ pre-commit.sample +│ │ ├─ pre-merge-commit.sample +│ │ ├─ pre-push.sample +│ │ ├─ pre-rebase.sample +│ │ ├─ pre-receive.sample +│ │ ├─ prepare-commit-msg.sample +│ │ ├─ push-to-checkout.sample +│ │ └─ update.sample +│ ├─ index +│ ├─ info +│ │ └─ exclude +│ ├─ objects +│ │ ├─ 00 +│ │ │ └─ 1d19326971447c709df941337e87f5f1ccdb06 +│ │ ├─ 01 +│ │ │ ├─ 09207ded1cfcfd75e641adb4123ac7b26b22e6 +│ │ │ ├─ 3eb7276a52a1f8beff156442766c124b17125f +│ │ │ ├─ 3ebbfe1c7ce6c9c2484d7799990f246614d7b3 +│ │ │ ├─ 50b76e10be10093c838d6bf22a5cf726ed7e0c +│ │ │ ├─ 693bc33bc0f4097e336e0790c8b94efed9f22f +│ │ │ └─ 7f53116a9e2805ccb12efc3c7fcd7e4384735d +│ │ ├─ 02 +│ │ │ ├─ 3568e08ea0396305c7f7dfc3a36db6c2feafba +│ │ │ ├─ 42c0e25b2dde085c34b8e6354c1afd4ff5f1f4 +│ │ │ ├─ b1f890cd55599f15f317160b0c0059cfa47b98 +│ │ │ └─ fa31f70284a65cf42719f754b436bb0180bf26 +│ │ ├─ 03 +│ │ │ ├─ 452b9f43725cd15f8cb09ffe9b7a2a334d1540 +│ │ │ └─ 8cd7ecda21bd685091c20d0e7333031a55fa54 +│ │ ├─ 04 +│ │ │ ├─ 3857dc98f624056bc8f78d40241e4a16ace95f +│ │ │ └─ 3ce81b50a206c461ff970839027b0ab7143068 +│ │ ├─ 05 +│ │ │ ├─ 46b08e56d7052bd93bf3141dfc735a9e7603db +│ │ │ └─ 8c6cdea710b53e83593075a6badad3d3260cfe +│ │ ├─ 06 +│ │ │ ├─ 1f420a8a18d9cef406d04e70b1143250bacff1 +│ │ │ ├─ 39a65504cca5caf04eb6f41d792eadc9735d3e +│ │ │ ├─ 41c76da07c8981d65f9080ce34e2ed51c4fdd1 +│ │ │ ├─ 55ba1ad5eb8436ff2299568669a5bd24699959 +│ │ │ ├─ 7635341a505d993e96aaacfa067065d7ff7259 +│ │ │ └─ d4a6bcb4b5036bdb8c332e4f037d2633d517ea +│ │ ├─ 07 +│ │ │ ├─ 01421e88a7d9248303e8c639cecf5e9ba8b639 +│ │ │ ├─ 05d5fc46be67e097cd5c498c23a8d0ffa40d7d +│ │ │ ├─ 91af2f72e9559ba8379c2e53916b8391fd90cf +│ │ │ ├─ 95e82c83b76286a8c21825b25def5fb554cd96 +│ │ │ ├─ ab9b4c5a00579d523a737c4485b5ed495bd53f +│ │ │ └─ f777df6bb549455f44f2cbb1f23d3598c609ea +│ │ ├─ 08 +│ │ │ ├─ 01b064e5171c97ac5fc656ed472ecd98003beb +│ │ │ ├─ 45b873b065939feb06e4a18711cc524be73e7e +│ │ │ ├─ 46ab839b8b1780947ffbbd3e8d38aa461fdca0 +│ │ │ └─ aab587fa78649d6734146485ae47b7aa77bc6a +│ │ ├─ 09 +│ │ │ ├─ 39c6fe7eb172e310625b8efb11559abd814293 +│ │ │ ├─ 8ed30900ec1e1caf5ceacc9869913bca3adc66 +│ │ │ └─ e93304f970e7a68972ecf67bc0eda8c3eba9d4 +│ │ ├─ 0a +│ │ │ ├─ 38be4ee0e268b21ae72a7e81b0bf7cb30d86f8 +│ │ │ ├─ 7bce4fd570ab5f2f7ad89f8456ee0ad26de1f5 +│ │ │ └─ eac2cc68c3a22469f2b97eb63aa4d78b6fcd16 +│ │ ├─ 0b +│ │ │ ├─ 0a0eacf58913e3048a00ea18d4e09b1e0cacf4 +│ │ │ ├─ 4b899a219aa9d9e438664b1d9c86d6d0b306a1 +│ │ │ ├─ 58cf944c95267e31f7c9096666e5dee09e0f9c +│ │ │ ├─ 66e7db4cbb049ba2418fa4d7cf6bfa5735bd10 +│ │ │ ├─ 791f34ecfad4492986af1cd95c59a5f61a0516 +│ │ │ ├─ 9ef69dbab6b2684afb038b9bbeacb4cb125e3d +│ │ │ ├─ d7b988ec100af5fd3cea5fad9a5cf2b7799aae +│ │ │ └─ ff9c9c293c5c187305845df9de4994d93a858d +│ │ ├─ 0c +│ │ │ ├─ 0017d6e7b4c98e65d9465a98b8eea019fc79de +│ │ │ ├─ 04128a6068de068e3cc1486026f8e27c43a188 +│ │ │ ├─ 6f61a3c496d26fe47902de01d67fc886ada1bb +│ │ │ └─ f5aabbc79049984801d221cfa2e2a404b36a0d +│ │ ├─ 0d +│ │ │ ├─ 013299b7d8add57054e01316b962d4d31b5eef +│ │ │ ├─ 40cd1072877068a247f8ed21ecc3abdc20ed11 +│ │ │ └─ cbb1d98cf0eaaa3268a336a159ed6180795424 +│ │ ├─ 0e +│ │ │ ├─ 6686c6cdb2f77e2b7c9d5d6984ef4dd8d74799 +│ │ │ ├─ 91d88fc83f5c1f74aa86187f5e3e9f6bbf8fa5 +│ │ │ └─ f34b8d7147c9b9cfceea506ba3859da52e708e +│ │ ├─ 0f +│ │ │ ├─ 1092780b0a8121d3be47663739a0138db4441e +│ │ │ ├─ 263904e49426ca01fc127018e079f86ab84d62 +│ │ │ ├─ 45b9da5deb45a3a717b940a628639fbe449dd5 +│ │ │ ├─ 6ffa8e25a810f63efc98092038e2c16434cb0c +│ │ │ ├─ cc93b3ee6b4d36a77562599f7b7988d3701faf +│ │ │ └─ ccb1279dfa2d2d34a62daecfd30d69f9a9302b +│ │ ├─ 10 +│ │ │ ├─ 1676fca292ab2d2aafffb105641f62021812f6 +│ │ │ ├─ 79ac39c584ce16321961c0317e36d5a64d696d +│ │ │ └─ 8e50c6e6d66b6c48f3b383601198ef47a71417 +│ │ ├─ 11 +│ │ │ └─ f02fe2a0061d6e6e1f271b21da95423b448b32 +│ │ ├─ 13 +│ │ │ ├─ 1689870daf379e7c61b544d651c1a8507d9f29 +│ │ │ ├─ 51aa1c3868a8bffdc0f05b4bf5326da975d9ad +│ │ │ └─ 60a78ad2a33faae1baa6b28169d493684614fa +│ │ ├─ 14 +│ │ │ └─ e19e88e28be52273bbf7f2670621fbe07cfa81 +│ │ ├─ 15 +│ │ │ ├─ 6bcd1d327542ac67049fef6a059c59a9966c89 +│ │ │ └─ 6ef7707fc3b9ab71bf2ed8a3ac8649c7ee1074 +│ │ ├─ 16 +│ │ │ ├─ 6e40e5e76ae3565fc3e75eb4f5c502febf61f3 +│ │ │ ├─ a7b29deb1e672448d85f18b2389b837ee63c74 +│ │ │ └─ b43343b7d14f36717a787aaa654ea293162cec +│ │ ├─ 17 +│ │ │ ├─ 01c44a5f1051c27fb009616858d23fc3a781bd +│ │ │ ├─ 516777ccc502c57b84d37a6a8036667d7324d4 +│ │ │ └─ db67f1b0530f6c660145c9775cbc1ee83f3196 +│ │ ├─ 18 +│ │ │ ├─ 023630f9ead548ec7bbb143a8af0e7cb2caee3 +│ │ │ ├─ 0c13ad7c834b359d6799d02a6a2bf0b042645b +│ │ │ ├─ 2456149492e01e7df24b697d0598484db08191 +│ │ │ ├─ 2e3c047e0282faeb8981918998ce29a8206920 +│ │ │ ├─ b95ec9a122e59a9a16ad2fb3d225f0a47cb296 +│ │ │ └─ d129159cfd253ef957e2c92d6351aae409cd7f +│ │ ├─ 19 +│ │ │ ├─ 1a3b7cc45f15126b7305df08f205f774dd1efd +│ │ │ ├─ 36da4894500aeef6cf446a7677d7ace5873a4a +│ │ │ ├─ a60c938c9f89a92fe415e9c279d0b9a0350ae1 +│ │ │ └─ b6f141b196882ecb4fdab34ac1902cd1c5ca1f +│ │ ├─ 1a +│ │ │ ├─ 08521b5a001793a0a2c705d442a29949b1f051 +│ │ │ ├─ 21b79d3e61b44fef89f3efaf35ab203b0186c7 +│ │ │ ├─ 3571734241ddfddf9d40b14d65a408f312563e +│ │ │ ├─ 38fb3dcce0209ec04029b5f92384c294de0548 +│ │ │ ├─ 8d71bad4e34af464981ac7469d92bf135ce7ad +│ │ │ ├─ 93744b9c172a927ade3297847da5bb27d23ea2 +│ │ │ ├─ adbd0ac88cd6788a5765216f215c2b90900e4b +│ │ │ └─ b0e7a21a856f07017c70fb0c7364d3f35cb7a9 +│ │ ├─ 1b +│ │ │ ├─ 0c86021d0d54ff0bb25578e7031e3a257731df +│ │ │ ├─ 12d489b080f3dd9e45ee2457daa12a09abaf5d +│ │ │ ├─ bfd346581a35788c25942f8e622d7452604d48 +│ │ │ ├─ dee6ab5fed9ae897c511d562527d092452d97c +│ │ │ └─ e28b95cfa62b12aa7b2e97e0cd87c6e4a3556f +│ │ ├─ 1c +│ │ │ └─ f4fc598cf2cf40bb57e954a728d4b7502f26cf +│ │ ├─ 1d +│ │ │ ├─ 111a8f32fd996d040121e6753c058e78da6e74 +│ │ │ ├─ 51f106b6eaf741503e49f3fbfaafc6169284e6 +│ │ │ ├─ 5adc8adc9d29adbbb4d11100101339fe88ffa1 +│ │ │ └─ de24df3c4b23479c7f6d3503d59411762513aa +│ │ ├─ 1e +│ │ │ ├─ 6c310a032352fbdf4e87331a4d832df2d291c5 +│ │ │ └─ 8ed7bb761885c41ee39b962351d5bdc1ec3302 +│ │ ├─ 1f +│ │ │ ├─ 8fcf4b5da1681281bacf5574357a043ceeaf61 +│ │ │ └─ eab203b427a54b7d65ff1b76cb06c7801b20b9 +│ │ ├─ 20 +│ │ │ ├─ 1dcdf4f3f9487cf743879b4627face4ddbc436 +│ │ │ ├─ 49a7f3041718ac0f5a644138b5ca75898018d1 +│ │ │ ├─ a820fe6ffddf471e11c406a242b341f2e9b8bf +│ │ │ └─ bbbee423e0e517699a4df7bb0cbcc44a7772ae +│ │ ├─ 21 +│ │ │ ├─ 93ef331cc7ce2df30c05f4be50347c19458d4a +│ │ │ └─ a2621843228ec272ca4c01ab0eb2f7e78ce4b2 +│ │ ├─ 22 +│ │ │ ├─ 53dd84f0f58867dba2455e2e3622c2db3be23a +│ │ │ └─ c75ef256cd5d130b95da62bfb0515bcc0f1455 +│ │ ├─ 23 +│ │ │ ├─ 3203b13e7950fed6d9e2f8b513a5b315893c75 +│ │ │ └─ 9f1126506c9673ec79f08c7cc2deb4de5ddc5b +│ │ ├─ 24 +│ │ │ ├─ 883de808be6a7480542114a86034312c026dec +│ │ │ └─ a011bf3a2600d5aa7a028f1dacb16b794abb79 +│ │ ├─ 25 +│ │ │ ├─ 1b859584364bfc558dfba8726345a99381d2ba +│ │ │ └─ bc8afbfbd5bce19ae83ce08ff60fc6d83e4835 +│ │ ├─ 26 +│ │ │ ├─ 225aeeb82167289ac8185551900590c3a7a77f +│ │ │ ├─ 2593a191c6c9744963e0c2594e00a691de4355 +│ │ │ ├─ 32dc697fa4335d39ffc33ba54d7398e544be5e +│ │ │ ├─ 57f265c9e1022ed06a232f4da4db578d3d3fb0 +│ │ │ ├─ 71778bfb27059c18af95497064c094f2183ba8 +│ │ │ └─ fdea084dc5c11bb39cc51feebc391bd04a9e8e +│ │ ├─ 27 +│ │ │ ├─ 4386971fc4483e2c74dc703b2f4ceeae3deebe +│ │ │ └─ 9ec17253363abc4841872d26981dd844137fa6 +│ │ ├─ 28 +│ │ │ ├─ 694874d2ceb99304db8cc46e91e09c848b8cfc +│ │ │ └─ 94bd6fb8f5b71a0c0b9a2e736edc5ad0446161 +│ │ ├─ 29 +│ │ │ └─ c6e85fd3248d26520354a84ee70e961f3475d1 +│ │ ├─ 2a +│ │ │ ├─ 5ebb2e140b1ef8e4069e30117e48ff8a76df77 +│ │ │ ├─ cce884d1b8eba7bfcc9ae20ebd88dc00391da0 +│ │ │ └─ e5124439427e2d94716f8f265e701a5b0e5dd7 +│ │ ├─ 2b +│ │ │ ├─ 0d57cc2245f3fd7c3d78387bcacafcd8359a1f +│ │ │ ├─ 2df89e154670d7371084efc5b72ec4ddd11de0 +│ │ │ ├─ 5641d8ba48d85263691bd316f09cfb059b2898 +│ │ │ ├─ 5680b7157b924cb9a5c6d258ea850bc7f33bc4 +│ │ │ └─ baf3a7a46949b610f8060ea2f3573054b7727e +│ │ ├─ 2d +│ │ │ ├─ 6fab916dbeaa399eda911d75bc162db9d1a360 +│ │ │ ├─ 878919b4d8f5f41586daf3a709a0560f510d6e +│ │ │ ├─ a3c43de9cd717ed8f11ed0c908897f854ce0ae +│ │ │ ├─ bf6af2b6f3b5701c83caaea7ed2210192023a8 +│ │ │ └─ c0b542fabafb3db4a07d73f535db9dec69648f +│ │ ├─ 2e +│ │ │ ├─ 068af4552d7c14f728ab65b332e6ce4bd9eead +│ │ │ ├─ 597dec47271beb631e590e5918dfce78af5a57 +│ │ │ ├─ 7b4455282343167cfaf1e5ad601313982f97bc +│ │ │ └─ 84c3b5ce56c5ceda6c4b3285548fdf51bf5d7f +│ │ ├─ 2f +│ │ │ ├─ 1738a3d6f611d10e63321e785bb07aa4dbf239 +│ │ │ ├─ 247afde7286bb1c0d0a03ed572655b3340d505 +│ │ │ ├─ 3368ef58e938d8016e762d4ca91aad338e6f50 +│ │ │ ├─ 6d2239c94a0e4d3645fb72ee2567e0d37eb1c4 +│ │ │ ├─ a2e22dec12895e2901ce8b914a3479aa9f6fdd +│ │ │ └─ f83fcd49cdc7a39be5a568216a17c6e53ee172 +│ │ ├─ 30 +│ │ │ └─ 71131bd24e5ace8e3ea5816296e6b00dd23f84 +│ │ ├─ 31 +│ │ │ ├─ 064767b24215b38dc461981161eb05d3cd8c81 +│ │ │ ├─ 828122b3af631cd59ef274ea469869b8da5875 +│ │ │ ├─ a520a32c3938c5e7f51c3a964e090a0e0015f7 +│ │ │ └─ d2b6613b040f3cfa7dd310fc5245934d8ca537 +│ │ ├─ 32 +│ │ │ ├─ 0bb2b9d77eaab6fbaee024ccc4a18d5f6636b3 +│ │ │ ├─ 7086269e4ffa61c09fd8df9b8e7c074571063a +│ │ │ └─ d27d215911f1c73407c3dbbaf6c8821a1d7ad5 +│ │ ├─ 33 +│ │ │ ├─ 289ac9ffc85eab57098263700598b7bf1f2cb2 +│ │ │ ├─ 6187a2b3102b333de73f62a52432a0fc70b276 +│ │ │ └─ f7e6a0a074350d87da092bea9d72b6a0222611 +│ │ ├─ 34 +│ │ │ ├─ 1410a59602163c7c79cb318203a814806bf370 +│ │ │ ├─ 1443f67b64bf677013b42a4b0be4cf33dea374 +│ │ │ ├─ 48767716bf8cdfe05ae1083a36f203c4325325 +│ │ │ ├─ 589b10917f1843fe52271e567a20f4b8923cec +│ │ │ └─ 8768432a29dd553961e731ca90f67a3c38aa13 +│ │ ├─ 35 +│ │ │ ├─ 03dc0a17204e86e5e94ce87dc79ddeee37eb97 +│ │ │ ├─ 332e01c86b5eea5c8fd62b792e8efbc5449b18 +│ │ │ ├─ 65dd9471a2ae5caa7a8ba58c27d111117c64ac +│ │ │ ├─ a1585391214e96bdb19c4725c0b1e01731f8bf +│ │ │ ├─ b9bcd6a5352de0798613a771273a86d111b983 +│ │ │ └─ cd69a8c001a6247792649ed045aee68f21d126 +│ │ ├─ 36 +│ │ │ ├─ 11a6b523fe851a404b82b38d38ffb22921d2f4 +│ │ │ ├─ 542285863330887923979b4c00579738907d49 +│ │ │ ├─ 804a39bacad6e8145f52f90bd384249b22e324 +│ │ │ ├─ 865401957aafa10b30717834d17467b6bac857 +│ │ │ └─ db38cad9aa1e51d54109cdec0482b4021d14e5 +│ │ ├─ 37 +│ │ │ ├─ 5081a8786d2f813f06d9511629a84adfcf7794 +│ │ │ ├─ 65dcc72dc9d6ad945e9a4fd8cb056a2e737e11 +│ │ │ ├─ ab79504136f67a8f9795d0db4fe93001c9a2fe +│ │ │ └─ be7d8b6597858cba39d923e8d706e6eb9a0694 +│ │ ├─ 38 +│ │ │ ├─ 60bdd07e331fe3c2ddea09a00eed08f18b5dad +│ │ │ ├─ 93dda5bb54eee5fa34e14c00e9cf024651a9ba +│ │ │ └─ fd78fb1a81de0d775727fadd7d9f5a8eae8249 +│ │ ├─ 39 +│ │ │ ├─ 41874e854ba51975c321f38de648128f5ec6b3 +│ │ │ └─ 668cd83237e11ecfca7f3c96cd09746337db20 +│ │ ├─ 3a +│ │ │ ├─ 457086349217097a282316f093aca351d84a7c +│ │ │ └─ 7ee5ab6ca6776749d073cf5efa20e52579badd +│ │ ├─ 3b +│ │ │ ├─ 1af2c653a14c2b5c904979f17d06f115f921f1 +│ │ │ ├─ 32410c2be4bcd5b89a5cc1f08e357cbac88a80 +│ │ │ └─ f6fba120e34cb9c3205d70c0c439f5b7175f73 +│ │ ├─ 3c +│ │ │ ├─ 1fe3dcafc0ba90f0845000170ddd1313f2e93f +│ │ │ └─ 65a9db60e27ab93210f9da97c150ec1e3c69c6 +│ │ ├─ 3d +│ │ │ ├─ 3c232dcb226892cdf6181c6f4f4f40f2325fcc +│ │ │ ├─ cb9e405da0fc44f1e5d9b3b63d5067deb2d178 +│ │ │ └─ d882467bc711438f7eb1d07bbc8f3456ff67bb +│ │ ├─ 3e +│ │ │ ├─ 5c4ce504b33ef44d9a14adeb67bf2ba2206276 +│ │ │ ├─ bfed87c48203a04aa3bd2db7446225df40973f +│ │ │ ├─ f98b1898a75df235681a4a068a2859774499dc +│ │ │ └─ fb8013460619d4496e9ac705d895525eaed524 +│ │ ├─ 3f +│ │ │ ├─ 066e08d7ac5576b59accde049a89c5cfc552d6 +│ │ │ ├─ 0f8e71f75f8ecdc6b486c371ac21377067f45b +│ │ │ ├─ 1e6212e4769532bb9a051af588955057819ad5 +│ │ │ ├─ 2b7e39f8a50a19b4fb881cb7b477d56f0a1893 +│ │ │ ├─ 2f803a0a5a01a6e295618053bc6763089e5757 +│ │ │ ├─ 79a764b5e5a905789e7cbdc3b1c14b7f5c51a6 +│ │ │ ├─ cf23f04315e39bf8d1aabff0284a7b7f20e287 +│ │ │ └─ ee4be7f376f9cb111e95df4e4956ac9f3288d8 +│ │ ├─ 40 +│ │ │ ├─ 8429ee0384a6841a18106af9d7dbb14fcafe61 +│ │ │ └─ c689b232a972eb7e50edf6aa478da907a7101e +│ │ ├─ 41 +│ │ │ └─ 1a9fead3b546ece8a716879b7adb9715e340a9 +│ │ ├─ 42 +│ │ │ ├─ 7cc887f3e3a250981cfdc94d1bf19f54128ec0 +│ │ │ ├─ 872c59f5b01c9155864572bc2fbd5833a7406c +│ │ │ ├─ 9b270d637f5ffebd874a831f7beed687d1179e +│ │ │ ├─ b90da368f75604aada0d3d52a6214145b76fda +│ │ │ ├─ bd76aeed487f8c65adc834e69212c03951b935 +│ │ │ ├─ c087cee550b709d12ec8780348ffa61ad898e2 +│ │ │ └─ f5a18797b763567179b1e00695f835f0350201 +│ │ ├─ 43 +│ │ │ └─ d0ded7a351c34cdaa9ed34207dbd81c2dadb38 +│ │ ├─ 44 +│ │ │ ├─ a56bfe0f31a1b562836709064383abc6beedde +│ │ │ └─ a907e580f1055a36d44111fda9463ed1cd2d26 +│ │ ├─ 45 +│ │ │ ├─ 67f945e81a73dc2e589f153913910fa2f5fea9 +│ │ │ ├─ 7741fba37a6884c50edf123a49672ccd7e7709 +│ │ │ ├─ ac99324648b71a3a3993d634b3fe2c8c7d51ef +│ │ │ └─ c24696c14675637d70ddb6a3bf83189d12394a +│ │ ├─ 46 +│ │ │ ├─ d40c5d65bf58c8a029c9d5ad473afc15b7e22e +│ │ │ └─ eea93ac6b9d467401ba5c14488218a28c78463 +│ │ ├─ 47 +│ │ │ ├─ 0086846e1eb14f7fb490870d36d19eb2b491d0 +│ │ │ ├─ 43774c898b0eb6e63fa9783b2f33227c7a49b6 +│ │ │ ├─ 5fddbf0f269fa59c6b7b70cfbae8a5633925f1 +│ │ │ ├─ b5986d2d57d48eee1e9944893377216eb4f9cf +│ │ │ ├─ b8718333617a581dec1410778567454ba820a5 +│ │ │ ├─ c23f29068caa951b6f9d2a748fbfc291b6b492 +│ │ │ └─ d977f52555e46974c4b3b0e1db780edb5a1708 +│ │ ├─ 48 +│ │ │ ├─ 1862d4fb9d4491bafb0b12d5b0ad307b273445 +│ │ │ ├─ 6a25bcd4fabb0144d7bf5852c741077c25613e +│ │ │ └─ a95521cff8b139c2ee034aa6c4acbf6c57cfb1 +│ │ ├─ 49 +│ │ │ ├─ 922603cd4c398176a5b7e252a19ac39fe29f67 +│ │ │ └─ c9e21b5825f24419af942c503e1be5776ed9b5 +│ │ ├─ 4a +│ │ │ └─ e2478b7df554ba2b80510807dbb987cff0fe42 +│ │ ├─ 4b +│ │ │ ├─ 0be6a73d0a94d7eab45488932f543593740d24 +│ │ │ ├─ 308bde5e9fe94b864e11efa2b138a0be3216f3 +│ │ │ ├─ 87453a66f717e934e6af1147efb53e347868e2 +│ │ │ └─ b136a8af34bd3be74c268ca1c7f24c03285b33 +│ │ ├─ 4c +│ │ │ ├─ 0e679bcb4b9ba9b2910492ffb9d2935ea4a5fe +│ │ │ ├─ a0e5d14bc214585d56a6fbc5c16dc825be57ce +│ │ │ ├─ abd494a6f779ebfe47365aa89707f57cbe3d55 +│ │ │ ├─ ef899876d9eab979438b2b59e13b12dc265604 +│ │ │ └─ f892a1ac22f9d8691030f6c709bd1cab9039db +│ │ ├─ 4d +│ │ │ ├─ 848bc36f6b862e5db3effa59ebed515730284e +│ │ │ ├─ 9802a89e299942d0ddef0240077019c5676ea7 +│ │ │ └─ e510c11f97fc5ab32537d78c587545ad399506 +│ │ ├─ 4e +│ │ │ ├─ 6ba55559464d5f6fe14edbf69a17462f78175f +│ │ │ ├─ 82cda261aa3e771df73d2f3c9932cadac1b76b +│ │ │ └─ ea13d923774977341cbe13f2b4d7e154a90bf4 +│ │ ├─ 4f +│ │ │ ├─ 214db403ea992f1c247f4aa9603e53f0ad1619 +│ │ │ ├─ 3b9fa020acbed2e10d2c32e2566991c00ba47b +│ │ │ ├─ 9ade778195f9f8e8494cbc3990bb9d7296f252 +│ │ │ └─ cf252dfbb6a5425b18e76382b6e57b722842e6 +│ │ ├─ 51 +│ │ │ ├─ 37e85f2ab1aabe7f29724ba34e898c3b66f97a +│ │ │ ├─ a7460ba9ae862d89e061ac7b2ae128bcc35fb0 +│ │ │ └─ d8161e633ed73f8b08073250ab295b0d2b2851 +│ │ ├─ 52 +│ │ │ ├─ 08dd254b4d4afa24f2fc2a71d9cd25ae72f7c3 +│ │ │ ├─ 0d091f8c8340c1e339f1ebe196a5e87f1126ef +│ │ │ ├─ 204a67bd672ccdba8b05e2a374bbd7844df253 +│ │ │ ├─ 37e18fdc8aa344a56444b5e423065befe2bcf0 +│ │ │ ├─ 728e8170ed82d94dbeac8c42cb1759d8d91abd +│ │ │ ├─ 754b12732162e622618ada57eca4df2d0b8153 +│ │ │ ├─ c2fd0ccb3d591f6731847dbe6017bb1f9d81e4 +│ │ │ ├─ cf7608e8f002d446d3ebdfef22bf7535ef10a4 +│ │ │ ├─ d921058cb7dd9c0e77ae9a180cccd751c4b2f9 +│ │ │ └─ eef0a2975d9cd9bd232ab6da076bab5a42944d +│ │ ├─ 53 +│ │ │ ├─ 0ab8b5f69651474a46c6d24251cac078fe3cc9 +│ │ │ ├─ 208d01c53a4d0c9846d439ecb35ae3158b9eae +│ │ │ ├─ 2ea87399fba95b3a4c2b0bea44d526336227de +│ │ │ ├─ 4b61aac13176ba2550013a146b72d7d0da1daa +│ │ │ └─ cd1379cbbf203dcfc218415288df1bee8b1ab1 +│ │ ├─ 54 +│ │ │ ├─ 0ef81bba74be9d4388e043f637b979418cb9ae +│ │ │ ├─ 51129e9f4ecc29cf623b1395ef0e232d2dacfc +│ │ │ └─ 7c6c444d06b4f2e3c1773ac52d87ffbe453ccb +│ │ ├─ 55 +│ │ │ └─ 63794407cecff94be06a2afe1f2342d2f6210d +│ │ ├─ 56 +│ │ │ ├─ 0be726e80608cd05030dcd86e41b34b530e64c +│ │ │ ├─ 466d993303e0e368564c632e42ecedf5116f95 +│ │ │ ├─ 82ed556ef0c65cb0f0b3eed1feb051f24f391c +│ │ │ ├─ 8d04e8f9b32971739a272540fdd5cd5443bac0 +│ │ │ ├─ c06a2508e21a125c9398fd937374effd5e510e +│ │ │ └─ df089a80aaed86f9ff485dd9c033c542ab12b0 +│ │ ├─ 57 +│ │ │ └─ 60bc4cf0aeed81b363a84b96d80b65069a5376 +│ │ ├─ 58 +│ │ │ ├─ 1e1a9449fb60f38340e338f2db80387515d87c +│ │ │ ├─ 81357364f41aea98c1c01ab2b9056adc79689f +│ │ │ └─ d0853cca6ca71dbcd2e51540cf30329ce14be1 +│ │ ├─ 5a +│ │ │ └─ 2f51d56513f279eb42c324d0af6b8803f3114d +│ │ ├─ 5b +│ │ │ ├─ 2b9b52fa91e75ac2699107f8f9e46f4909bc58 +│ │ │ ├─ 405e00a7846d15adaaff4ea1645532d109f9bd +│ │ │ ├─ 4c386f9269b30a21f15145cd966c50017c2a3f +│ │ │ ├─ 65efecee8fc9b77d22c53aa905fe0c4d70e89b +│ │ │ ├─ 7e5ac020eef518463f1072b7d180b5f7d97691 +│ │ │ └─ e554704d26d85f366ede82f71379bc5e816553 +│ │ ├─ 5c +│ │ │ ├─ 2767e9e9160b08ff0e3708dc449014d7dc839b +│ │ │ ├─ 5773877d795586321bc29d3cba68c4f0abf295 +│ │ │ ├─ 7b812101de671a255ba6b7935753de08bb0faa +│ │ │ ├─ 808c2e8a3ae46a2f1a3ee073b9007f05f5a0b0 +│ │ │ ├─ 8245fae7da17b711cb4c5ac73b090f54823559 +│ │ │ ├─ aadc7ee9b249ec14fcc301bad579fae357fb2f +│ │ │ └─ bbf1bffd0368c80903b0ae6185197a4d3756e2 +│ │ ├─ 5d +│ │ │ ├─ 0009759b28a2a5d765e979ed5bf5d2cae247a8 +│ │ │ └─ 82581a13f9900f9dc653b2df9f0027ee8bdda1 +│ │ ├─ 5e +│ │ │ └─ 0e0f190078522d600929e2822dfacf2c11d8cd +│ │ ├─ 5f +│ │ │ ├─ 83e4a24d534c3dc3e52fb497ccd0dec06f8881 +│ │ │ └─ b368c25b8e6d0a88f049dde1c1a658b11eba5b +│ │ ├─ 60 +│ │ │ ├─ 5724d78a3147c0d024d2f63ef9f49b3850a70a +│ │ │ └─ d2371640287b782065c95e0f4d0e56acbbaa94 +│ │ ├─ 61 +│ │ │ ├─ 14a8a6f9073dcfee4d492664e940cc296d62b2 +│ │ │ ├─ 45f58307750f080bc2f21ed9ea81aa3dfde971 +│ │ │ ├─ 6ff837d3ff01e028c208062fc699c7f1c8d418 +│ │ │ ├─ 8200b92bffe3fdf4346f7529b809ed2a19f4b9 +│ │ │ ├─ 84080708ea6e698819a84968f46dd3276302cd +│ │ │ ├─ aebb398049d543c61630d84ef6d7cedbf7438c +│ │ │ ├─ bc81f6b4114b6f85f2c820c771d9daf8202b19 +│ │ │ ├─ d62ddb872c747d7a558201992f3ca717198995 +│ │ │ └─ f06c3fc27201fb43c43fe25701288e3be9332d +│ │ ├─ 62 +│ │ │ ├─ 28cb6f51f64131a47f8d1b65a481081f52399b +│ │ │ └─ afa3a7425dc6a1eeafd1333afc15d429c5d10d +│ │ ├─ 63 +│ │ │ ├─ 0f64180aade3565b3ffef9f3b85522a89f2458 +│ │ │ ├─ 5b76836cbcb4440f69bc446ff4e2a6dc95753a +│ │ │ ├─ 6018af5d0d2048bcf19359ac1ed49f23a56106 +│ │ │ ├─ 7e8550cf9929a6f39420a8acc4c33521a55969 +│ │ │ ├─ 9cae37961afa4bc9deffdbdad62bf20962a4e4 +│ │ │ ├─ d890227e80c704e3f0c0d9952a124641279afa +│ │ │ └─ dbdc33f647275b48e10f5163bd598ea5800478 +│ │ ├─ 64 +│ │ │ ├─ a8ecf73d9c0789dc878ba125b6ae1a5390b16d +│ │ │ └─ bd00a351e938f4b569cf22710ea7ec77fcd013 +│ │ ├─ 65 +│ │ │ ├─ 1fec56b74a7a551839b85277b7d49ac677c80b +│ │ │ ├─ 21cce38bb8a02b2ef627789d323fe06278d823 +│ │ │ ├─ 5f643146a2566185629fd5927c4a2156382453 +│ │ │ ├─ b5672235e8209a2cbd5983684bd68424845550 +│ │ │ ├─ cda810690eddec64c09c4157e28a4c5cd99ea8 +│ │ │ └─ e5c51fc0aae682d645a3fbdab25e94840ac242 +│ │ ├─ 66 +│ │ │ ├─ 37a0e08ba86084211a90672830f43d8a8c1a3e +│ │ │ └─ 499052ffdeb9f940563589b96d8d83166d8144 +│ │ ├─ 67 +│ │ │ ├─ 0e692ff64c6505151432d8ce7edf82f702654c +│ │ │ ├─ 5cd863d43d97e3ea145772fae8cd40cce2f033 +│ │ │ ├─ 8df037ffbcc4b322fd006da137c5610eb312a1 +│ │ │ └─ f835b37199c845e60bfd7262d0189d3732ddac +│ │ ├─ 68 +│ │ │ ├─ 684f2385092575701cdfb2b7eed428095a984c +│ │ │ ├─ 9313bc99bdbbd3e121767f5e684c769e5f66e4 +│ │ │ ├─ 9aec910f806ba91cd2f44611085a38dce36915 +│ │ │ ├─ c4b03ab40c38ef4c8479561758947ebb09a04d +│ │ │ └─ f1ccf548ffd85f7de39f7e55e4796fe466ad70 +│ │ ├─ 69 +│ │ │ ├─ 200d149f4dfc96712a65ec33d15d9f45565456 +│ │ │ ├─ b0d13befdda88edea5eda78533cc38ca453c64 +│ │ │ └─ ea2b5188754a96b8f27a88641438478fc281b7 +│ │ ├─ 6a +│ │ │ ├─ 250cd31ea8698f66996ec591a850057aac85aa +│ │ │ ├─ 8436dabcd9bbfe1d090ccc06f00085c30c1458 +│ │ │ ├─ 8d3e49ac6a274aff3aafecf992a9ecd6f8563d +│ │ │ └─ c66c95a4ce86386d68ab7125f811082b22a5d0 +│ │ ├─ 6b +│ │ │ ├─ 4e73f02d3ebac002244f9aed76d96f5fa19943 +│ │ │ ├─ 68efda015fa5897fc11cf66ab2989f03691c66 +│ │ │ ├─ 9697af17d606fa413dd378af23abe8adb4fb7b +│ │ │ └─ f51cb88088bfde4f8ed254f35977d28a0fe76c +│ │ ├─ 6c +│ │ │ ├─ 916de8971894bcfa01f10022734737fb5bc07e +│ │ │ └─ f5acde3873d90f7fba0e147d8a18df3fa68a4c +│ │ ├─ 6d +│ │ │ ├─ 4b76deba3f6bd60345e565e9a4e67fa93fde50 +│ │ │ ├─ 76b98af7e48f853eb2b4709ade084304f96eed +│ │ │ ├─ b9408c0ebeec4ce39f9c8de9426dff9d70d888 +│ │ │ └─ f9d3d144765263adbeef535a757ec403a8ddc4 +│ │ ├─ 6e +│ │ │ ├─ 48000c7c98fd844af784fb2fdf7060f13ed0b1 +│ │ │ ├─ 784f1a39e6d448c6e29cde4a8467766766dfaf +│ │ │ ├─ c63091e3730c3f950bf33555a8f0abad4e5b38 +│ │ │ └─ c6c6545999947bd0f7447621e41165a2eefce7 +│ │ ├─ 6f +│ │ │ ├─ 01d117795bc13c38c0ac363c6f6e1d179d3422 +│ │ │ ├─ 27bb66a3469f5c7b71b7abe8b47636dc0fcefb +│ │ │ ├─ 4e68b8d39782c1db894fc8ba6bea79402bca13 +│ │ │ ├─ 7d3e652d32e1ca7fa861547b61f52f10ed10d5 +│ │ │ ├─ ada390fb88d8e1dae3454216aa3995141a1785 +│ │ │ ├─ e064acb7787e78d74bb6f8fe605bcc30970aa2 +│ │ │ └─ e396d692ec46c46c3d2a8b9d8b62075d8972e6 +│ │ ├─ 70 +│ │ │ └─ 3b82dbcb0bfda7500e614f8002559be4a6fd78 +│ │ ├─ 71 +│ │ │ ├─ 04d5baeccdab39288c201c738844033afc612a +│ │ │ ├─ 487e574e8c2f88183f5fa1069aa45291ef3a5c +│ │ │ ├─ 6a9bf620cf5aeb2eef0a8c3563c80bbe281493 +│ │ │ ├─ 8a5b15e3fc2423d7bce9d92f46c1034ee6eecb +│ │ │ ├─ 92b4c7b26a958c4bfb7e2d437236d3e00160cc +│ │ │ ├─ b5c823f6488885f7e5a5262257b4223ee8b658 +│ │ │ └─ bbf1df4102d2463e71719d4e75e1657aeb3817 +│ │ ├─ 72 +│ │ │ ├─ 3b2ddacdf4bf8d2fa54bc1d0a639e41c2741ec +│ │ │ ├─ 4acebbb3429946ccffc1a259d23cb869603eb8 +│ │ │ ├─ 560e6607e030d921a5ce8aa9896afd07dfd9be +│ │ │ ├─ 7e9e9b8f9fe9d9a9097a70a2697caf9ad10ae2 +│ │ │ └─ d5ec10b39f96ed65adb00dc4c5b3ff33392471 +│ │ ├─ 73 +│ │ │ ├─ 4aaafa05b7d54ee5b47469558e6a79af561624 +│ │ │ └─ 5d8d519c1e611973b4657f8227311dc745b51b +│ │ ├─ 74 +│ │ │ └─ 0c0418a6ed0aec159bf30712016e61171e3d19 +│ │ ├─ 75 +│ │ │ ├─ 38de72b9737f238816818d8341fe95a51ec818 +│ │ │ ├─ 393284d7e474de2c7fb1ee7d09169a6790c7da +│ │ │ ├─ 63a9737c54262d34b7fa8e5095d2f2ebe03e04 +│ │ │ └─ ec66350527a8f4040671c72760238e6d80b976 +│ │ ├─ 76 +│ │ │ ├─ 81c2dfd35ac9e86fd05ae011349bebc060c578 +│ │ │ ├─ 88bf79dd9ee4c883fc6caa9a2612d2b070a47a +│ │ │ └─ c552fd9fec85c0d239d7b81832d63f088e813f +│ │ ├─ 77 +│ │ │ ├─ 3d9095ac6dd3b4a175fac941fbfa362dab54c3 +│ │ │ ├─ 51450e36a8341f1b98bcdd1a3a5715136f95dd +│ │ │ ├─ 56a3e31e81c175fc527e5f9e06269d404011d2 +│ │ │ ├─ 99291469cd3eb1c9512f9c8a74364c1868cfea +│ │ │ ├─ afcfb1876921dcf9eb5385e4a2e83ce7d7892a +│ │ │ └─ b2dd09dea676e8bc0112df52ddd86d905cd51e +│ │ ├─ 78 +│ │ │ ├─ 072b4555adcb29652f5c32976ebfafbc7513e4 +│ │ │ ├─ 44fde7d27afa59da7e164de5cc2685052d2220 +│ │ │ ├─ 6397831ee35305b43395144f0b57b44e6ff429 +│ │ │ ├─ e7a42494da56ba04fe8ccc0b64eabedd771fe5 +│ │ │ └─ f91682523981d2b323e3783c38d0adb685285a +│ │ ├─ 79 +│ │ │ ├─ 131ce309b76df1628b75c8a081303ff901380a +│ │ │ ├─ 75a019409a4ab6388f7a715f774dc3e17b0995 +│ │ │ └─ aa4bf0a11a4c6e7b767c888bba3165f7cb1b7a +│ │ ├─ 7a +│ │ │ ├─ 201f87f78f582cb6feafbc34eae1c24a5ae370 +│ │ │ ├─ 28c387cd79aa0fd8da8de89436500c293d029f +│ │ │ ├─ cc90285c96fbbe8b6f12ef32cd2384a72e6f62 +│ │ │ ├─ ea63046cb21115d797eb12272599738bc8a4a8 +│ │ │ └─ f6201cbc998b8ca778477150cd7e20d9e4be4e +│ │ ├─ 7b +│ │ │ ├─ 1bc821f760d145c90cc8c7c91f9303dea72646 +│ │ │ ├─ 29a54148062f183b24c10f3970229ae6f5bbcf +│ │ │ ├─ 40b0dad6c35b076eb2b4e0228c22a231628ab2 +│ │ │ └─ d9eeb4de09cbca1fd4d0119ae7346810d73ecc +│ │ ├─ 7c +│ │ │ ├─ 8b99d0f8626fbb522dd6df30b65d41a2f799e7 +│ │ │ └─ 962976302d984324f0c48ec20206f8f3339995 +│ │ ├─ 7d +│ │ │ ├─ 0d7fdee41d3b6f05e6c34155c5386cbabcb993 +│ │ │ ├─ 3b6a2e72708ae4674421580933679c51cc713a +│ │ │ └─ d82dc79af0019d147df8d7191d170db80ab566 +│ │ ├─ 7e +│ │ │ └─ 154687b63ab4c46c97f8987b677703b4b4fe08 +│ │ ├─ 7f +│ │ │ ├─ 35d5038e7152925b199e65daf807a18b0b9e38 +│ │ │ ├─ a3ea88d9f282f67589cb328eef535747dfbe50 +│ │ │ ├─ bbf0947b970cb0861b2a6217e2b95bf3f4e9f6 +│ │ │ └─ ff3fc0d8c5f633fe71d30b058e8a03d8d177f8 +│ │ ├─ 80 +│ │ │ ├─ 2dbd03f383d57aa774876831e410eb3f96d2ae +│ │ │ └─ 399b551c2e61a942a17aa8f29f598db85929a0 +│ │ ├─ 81 +│ │ │ ├─ 024208679f78e44ab655dec85704dac2a5b157 +│ │ │ ├─ 47342c4bb1acf11506aa2d48332f827f81cf16 +│ │ │ ├─ 4e6551bf8226822072b12311e56098b82b0df4 +│ │ │ ├─ 7a135f0bce755d814d97df1aebbfd4c526610d +│ │ │ └─ e35531c241c4ed33e3ea49fd1cef079bfb5758 +│ │ ├─ 82 +│ │ │ ├─ 126b6b98cf2e0c05a18431b4f135ad9b85d3f3 +│ │ │ ├─ 278a4b62f3257327614a21fd24cff76050d656 +│ │ │ ├─ d829614248b566782e2b59f01bf2870de1d054 +│ │ │ └─ eb2c3b40e72b8028f76162282d8a9c53836a66 +│ │ ├─ 84 +│ │ │ ├─ 62bf214baf83cf755bf900c718f7bb0afff13b +│ │ │ ├─ a61a4822404225d01b7aad69ec37abd33f307b +│ │ │ └─ c6298a9b9f7611dafc08709464885f19223d7a +│ │ ├─ 85 +│ │ │ ├─ 4335cef11107b7ee4340e128fd76a2eaa85785 +│ │ │ ├─ 94968edc4f3e0c90095105f210ee4855af9f33 +│ │ │ ├─ ac89eb25846ca61802809ff84038718f122cd4 +│ │ │ └─ b1bfa75f3f2150066b75ae976fcfe2784ff7bd +│ │ ├─ 86 +│ │ │ ├─ 641e9c085154507d55170afa1116c6329433c5 +│ │ │ ├─ 7be445daae54420e35dda6965e99d1b03a3a40 +│ │ │ ├─ f6911853e391cdf2f2909cc9c18ce2d2084342 +│ │ │ └─ f858511d6c7d7043238199d441f49cc6d24a0e +│ │ ├─ 87 +│ │ │ ├─ 62046da39901b039b0b503229eb82e23a1edbc +│ │ │ ├─ 7882442b65ea457207e3557a7df51eba74688c +│ │ │ ├─ 9a6997dbf7276d4f6f99ab9b2f4e1e37dd1248 +│ │ │ ├─ c2dd8fc7ef43d68feef4667999c1270af01028 +│ │ │ └─ d3ee69a4db4025256721548bb8cfbe5ef72798 +│ │ ├─ 88 +│ │ │ ├─ 8218b91ace5184be328a92736d5c954074b500 +│ │ │ ├─ 96d3cb6bf76d0e48b3931fdaba657c79cdb6dd +│ │ │ └─ b5ac14ee6fa0babda3487760baf5037ecc4a71 +│ │ ├─ 89 +│ │ │ ├─ 129884c1fad8d4ac9269391b75d255b4d6a2e1 +│ │ │ ├─ 366f6202026a1367b3d14f47f0e4d665bdb1ae +│ │ │ ├─ 438cb67b9276dc4ba66a80474e01fa7a42d531 +│ │ │ ├─ 607526d498add4d11288c08bdcc0e53a90472f +│ │ │ ├─ 63f5d4f96a714fc92a46e176dd65dee7963e01 +│ │ │ └─ eeb091a289e57aa1aaf2868449b8dfe882f4ae +│ │ ├─ 8a +│ │ │ ├─ 9222034cc9e43e15c71e6485ac7e7b28ba0047 +│ │ │ ├─ 9fad8ab1198f309d3dd17bae277690829ed8c6 +│ │ │ ├─ c639593b9332e4fdb25be3ae2d57fcd0696439 +│ │ │ └─ db204cea8fa63d989f8b664f02548af3cfb2b8 +│ │ ├─ 8b +│ │ │ ├─ 59ccf882dc106369ea5b19624dcdc46505f972 +│ │ │ ├─ 94f412dd29221cb3637facca190dd3eb78978b +│ │ │ └─ e4aaade553def241df383d9be4a2da356d0d8b +│ │ ├─ 8c +│ │ │ ├─ 43b71787f5af926ae98cb50c9be3a0f5e8151c +│ │ │ ├─ 8c2ca495afa8110f807aacac3eef14a3150627 +│ │ │ ├─ c3ff7e4737e5a196bece96ddbeee1eb79760d5 +│ │ │ ├─ cd7732baa6f5a8521bbc5f70b98a499479b9ff +│ │ │ └─ ceb7e3acdc241d8d26b3675ee43f70ed79ad1c +│ │ ├─ 8d +│ │ │ ├─ 1dcc5d35c2e952bb102ecdc3022e2b1d42d03c +│ │ │ ├─ 223c011aff56fe04f170667b08c8aff0eef2f4 +│ │ │ └─ 859ea01ade02a3b011dce115536dbb08e2a1f4 +│ │ ├─ 8e +│ │ │ └─ ac6dd3be999dea932b6791a9fb073029d1329f +│ │ ├─ 8f +│ │ │ ├─ 59d4a891c5641ebf535dc4cec202167ab5acf4 +│ │ │ ├─ 9da50d411d2a9762b6d59adb2a4110203dac27 +│ │ │ ├─ c7210301f106ad08a5ad10334d13afc6c5209a +│ │ │ ├─ ccff499d7120be7293c1fe98ceb18b0654fe85 +│ │ │ └─ fd003c254877e68572a2fdac0551d666c66c56 +│ │ ├─ 90 +│ │ │ ├─ 091548d938e81a16cfd836230499afe11a1512 +│ │ │ ├─ 4e1a7d0945a40c3b29dbfa57f896a36017d6d6 +│ │ │ ├─ 5a429992127c70a40724b1529b1c804888dfc1 +│ │ │ ├─ 5e13c0d343ad3d5c9f6a57133ae38103733737 +│ │ │ └─ bb796576136241daf0141505a34ab96100ed90 +│ │ ├─ 91 +│ │ │ ├─ 27458d5a03a41ceaec126f5be0168dab5699d7 +│ │ │ ├─ 52ca90d1afe5b28693432289c5ecfa0466f8d3 +│ │ │ ├─ 70bd45d8a5a0e73481f61362258a5defcbb231 +│ │ │ ├─ 782a668104a0bccfd4e2b4fe6f0831cf5984ef +│ │ │ ├─ d8f4bc2d91e0dd75bba090f3cbfba13d150091 +│ │ │ └─ f831154f608bffa99d299441e1931c6efb48b6 +│ │ ├─ 92 +│ │ │ └─ d5b1650e8954318a81570d928555feed019dc0 +│ │ ├─ 93 +│ │ │ ├─ 2348c5da96a95aec97336ef0e932aafc5a1beb +│ │ │ ├─ 30fd2d42dd601ab2bc3b41fd80ddfdef82460e +│ │ │ ├─ b377881b47233cca0564245c6095f2481ec0e8 +│ │ │ └─ bb5b0cbf1ce45192460bf35cccc438bff138a8 +│ │ ├─ 94 +│ │ │ ├─ 4030a61742df37dcccd4673b044693f123633b +│ │ │ ├─ 536dee044e81da81c530ca9de91572aff60fbd +│ │ │ └─ e1fa1fbcc4feb95fbe2be0890f577f79726a07 +│ │ ├─ 95 +│ │ │ ├─ 265ba32fd124ca4a999b99c16f743e0ff1ef94 +│ │ │ └─ d4b306a03526e72b52b16343afd1ddac3d9eb5 +│ │ ├─ 96 +│ │ │ ├─ 106075c6cfd02dfb18b069da034d7bccffe68b +│ │ │ ├─ 2e74038b63f8253dfe7c6eaeace23d95cb0c80 +│ │ │ └─ 83e0df511202e2c19ab520afb13e5cd6eaec5b +│ │ ├─ 97 +│ │ │ ├─ 1a52419736db08e4bf53c130be41fea800d90d +│ │ │ ├─ 359a69201b8f66747680bd06c8d54bfa5e2450 +│ │ │ ├─ 6b74be2efb703e6bb25b0f9b790788c29695aa +│ │ │ └─ a2364326f419c1ea20fdaefc41e45968830a57 +│ │ ├─ 98 +│ │ │ ├─ 810d6177c1834e837c5199b1dfc3449243faad +│ │ │ └─ e55ad29efbaf2d2aec1c8b6f5009d1f7b16aff +│ │ ├─ 99 +│ │ │ ├─ 0140366625c949a8ffee1da66ee3112d7fc711 +│ │ │ ├─ 0d5e438e90471f7e68f9ae0d8d19c428c3321f +│ │ │ ├─ a6720313537591711624d311c21eaadc7bb834 +│ │ │ ├─ a93fe64c18526b6c1978fdccc82a54d2f0b046 +│ │ │ ├─ ad384013be5d1ca5d89f4633b0023b752cf293 +│ │ │ ├─ d0b417ee2cd6a8adae68b8fd28aa5dee160e6a +│ │ │ └─ e01c3caa7cd23771fe594eef281200f2a209a4 +│ │ ├─ 9a +│ │ │ ├─ 3ee756261de5bbc58c4c2557ccf01088138648 +│ │ │ ├─ 623626519262ef5830832b60cb3e622f5382a9 +│ │ │ └─ b4c8855f0d88baec41d4a9ae9f2086f80d8a80 +│ │ ├─ 9b +│ │ │ ├─ 44d2fbcbff7262800867b04cfccb8f66972ae5 +│ │ │ ├─ 48af5fbd7c8e4395ab7cc447d2b1edb370472b +│ │ │ ├─ 6aa09bc762714d642aa06a4bf256d725fe5e3d +│ │ │ └─ ae3a3d5849d78fd5982ddfb65b0322b6638089 +│ │ ├─ 9c +│ │ │ ├─ 01fc769732bd30071067c78db9eab0c2cba832 +│ │ │ ├─ 0c95cfceddbffca7913b5ba3668824f7971801 +│ │ │ ├─ 680c8d4940eace1dd8df6fbeadf50b0b4ccc7e +│ │ │ ├─ 8879d12a1bc2b0548e9fc85621705e783a6054 +│ │ │ ├─ 93ee83e22466acb43d029a1a0bf622ef07bc88 +│ │ │ ├─ c36e2532600aeeae263b2dec784ccc3b79de8c +│ │ │ └─ d88f38beea8708b25ee3f797ebc453dffa4fb0 +│ │ ├─ 9d +│ │ │ ├─ 0c8388739679e24fb577b02be359d91872b7de +│ │ │ ├─ 78b052b42660da4e1faac503c0305603d9355c +│ │ │ ├─ c7ca2d867d85ce98d20512aaeeb40991e557d9 +│ │ │ ├─ ca1ed09edbef8d31cb4fe726814b47377458af +│ │ │ └─ fb545fb874011895faa280b0b23209e37ec861 +│ │ ├─ 9e +│ │ │ ├─ 058c1a899bb5a0f2680a84a41aee5b7f684cc7 +│ │ │ ├─ 475066e8179251e67e5684075fe83f9eeb15b0 +│ │ │ ├─ 49fa0639baaaaad41631689ab4df199890903a +│ │ │ ├─ 59e9a8845a815f8bb475dbb1f979f3700bf1a2 +│ │ │ └─ 76fb6cc9ecaed02ff429996e6e7c4be5c86ae8 +│ │ ├─ 9f +│ │ │ ├─ 3791bf066935187b4157674d3517d1073c7495 +│ │ │ ├─ 84697a8a5bd7bc12448e1f06cf2ec82e8b437a +│ │ │ ├─ 8e4416db31b3d27d65acaa75a658adcba9d294 +│ │ │ └─ cba323fe8afde1a1ff3070e5436049bc74c670 +│ │ ├─ a0 +│ │ │ ├─ 375fc0ea89099844077ca03427e6036d74f0fa +│ │ │ ├─ 4e6028777fadbf72bd444012685a5b6ac74e89 +│ │ │ └─ 55d21c97ed7625e06912442db51160c6731329 +│ │ ├─ a1 +│ │ │ ├─ 0703bfa76c03fd29c68eab0d75d7435ea2685b +│ │ │ ├─ 4774c3f6d3850e8759e3d388de6a2bc38f3eaf +│ │ │ └─ e7e4cda8d8db38b0552e597c62e112d65bad04 +│ │ ├─ a2 +│ │ │ ├─ 1a412cdd183a6ef43c2102b3b4cb611b1cacf7 +│ │ │ ├─ 34d7b5162f20e8986ca10d631b358031ad5189 +│ │ │ └─ 52a4631f731b2714c93b3e764eb1334ccb5467 +│ │ ├─ a4 +│ │ │ ├─ 019cb950c067e298b2b180157908efdb8877a8 +│ │ │ ├─ 4fd785361f883482634803b03124a84d1e950c +│ │ │ ├─ e05e5694bb8c8832e0265653dd161d96123b1d +│ │ │ └─ ed4fb544955ed1983bf9245b12bb0dcda36316 +│ │ ├─ a5 +│ │ │ ├─ dcddd7ee27db21b14df84c46c135dff82cd2bc +│ │ │ ├─ f190c5381cf8393be5511a8f203018994e67fe +│ │ │ └─ f548547f13afcba8af51cdad95c4bded8cf06e +│ │ ├─ a6 +│ │ │ ├─ 015d33fe114b007c3a6a6f3832eb539614f47e +│ │ │ ├─ 2dcf028271234a9f7c306ac2b77fa0282d3686 +│ │ │ ├─ 7951e1a912c86b5e6427ba9579589df2b72251 +│ │ │ └─ 9fa36a927833e0c0cecbfbfeb0741abce979aa +│ │ ├─ a7 +│ │ │ ├─ 32a3dee0f33402f59a71309632b9c03e86375d +│ │ │ ├─ 44eb08e29118ed487d251e8dfe143e5ced91dd +│ │ │ ├─ ae8cd092cd9a9c2bc740a02c55e64e3b0631a8 +│ │ │ ├─ fc6fbf23de2a53e36754bc4a2c306d0291d7b2 +│ │ │ └─ fd6c38ce04645bd221ec5f54cca9d219412d33 +│ │ ├─ a8 +│ │ │ ├─ 4770730a00a9c3f50e3a5d1e11b184284d1b73 +│ │ │ ├─ 4a750740c4c37ff9e2ea209288d0015fdd10a4 +│ │ │ └─ f1936e4fd6ca6ed4fa106148f171549d06bcee +│ │ ├─ a9 +│ │ │ ├─ 0134b74f0d4e4902c2f87fb3aa120ad48a2f70 +│ │ │ ├─ 6c7f7d66dd0c3068835556ba48a35242de2191 +│ │ │ └─ be53d283ce55d8938157103ed3621176dca32d +│ │ ├─ aa +│ │ │ ├─ 27392936fdbdf4c5886ac802c35f11ec30763b +│ │ │ ├─ 834d1d098d497b350e4b6ca06692b78fe333e9 +│ │ │ └─ e96e0032e3d500d770ba46b42da85063c14080 +│ │ ├─ ab +│ │ │ ├─ 17131f66cb80cb235b8ec074cfd88d80fa0f2e +│ │ │ ├─ 34c5eaec2d0394753b5a383e3f4f3022bf6f39 +│ │ │ ├─ 93081a1f38f91219ba68c21cf79000e4b1d497 +│ │ │ ├─ ac437b1c2070e56a0695a2c805586d4feec79e +│ │ │ └─ cbc98e951b56d5b7269b66afb1e53300baee9d +│ │ ├─ ad +│ │ │ ├─ 0cc6b9423cffa8b6e9c182fc2eb2e4a85a2240 +│ │ │ ├─ 3b7cce5b694e4a4a0b59e1b48e6ca47a5f7217 +│ │ │ ├─ 5703304ac22c61ba7203ee766af2a88eb0f057 +│ │ │ ├─ 7c871a54b0a68526a0508fd898507a89ac47e7 +│ │ │ ├─ 91be4408dfd66d93b82fc3facdc836b0d8c003 +│ │ │ ├─ a0274dfe1d412fca045988dbaf866a410edf6a +│ │ │ └─ f63bb5f1e46cd835ac00889ef21c48e6265a57 +│ │ ├─ ae +│ │ │ ├─ a5546eb84af66eda7412b34fba735ff40a0ce3 +│ │ │ ├─ ad43de364cd1cc107d5fc3a4ea6fea7d7bd01c +│ │ │ └─ b3ea459bb0e1e5dd7dbacd5133d48d89fc72dc +│ │ ├─ af +│ │ │ └─ 3555da48d3f31828744e9b00de570ac96522d6 +│ │ ├─ b0 +│ │ │ ├─ 2e4c018ca5f7e59d33661476191fd581e8720b +│ │ │ ├─ 707ebe4787fc7b84635a0f13aec80162cef8ae +│ │ │ ├─ 9b34e76183266c6cca14affec6bbaf091f3975 +│ │ │ ├─ b0cc64443d4887084baedada8a4cb2e5b62b1e +│ │ │ ├─ bd2deb9d9209340bd4738f58bee00a5a2d83a9 +│ │ │ └─ f5450124394b73492f923325a72b5fad24cf6f +│ │ ├─ b1 +│ │ │ ├─ 046638e0762269b34625c39d501be6acd73604 +│ │ │ ├─ 30949d646fdad3f5bb493b74dc69baa7eb5d92 +│ │ │ ├─ 79b857fa0c5342f350e6fc988030d94337c1db +│ │ │ ├─ 989b48976d0130cc2f654d6b3fc9125443dd1e +│ │ │ ├─ c1519fe4606bc36f1e21ad6444e5bc59a49c48 +│ │ │ ├─ cb84ca89622c8ee1fb29280c12e558cdfc0144 +│ │ │ └─ dbcbe987bc888358a4ecfae3d6d4a50289d12b +│ │ ├─ b2 +│ │ │ ├─ 424b000497786d193afcfdf3d0e734134734f6 +│ │ │ ├─ 5f7c44f4df5cf1018fea4525503760872b28af +│ │ │ ├─ 9838b50420ef983dffc976562c9c95c31a0f4c +│ │ │ └─ da239aebccf7b2d642e509e871235c0c6541ba +│ │ ├─ b3 +│ │ │ ├─ 034164ecda0e8241bb957410d6fb8ddd5652e7 +│ │ │ ├─ 49d006cd22422127fe12e4ae9f0501b7a3045b +│ │ │ ├─ d546f1ceed5a568d1100dd94d2e9a3598f327f +│ │ │ └─ d98ad63ff1757a63e5032526a5c0df614ea0e2 +│ │ ├─ b4 +│ │ │ ├─ 1f645438a1b17e38cf58b1591620d3bf28e1b1 +│ │ │ ├─ 72ea6627a6e8de00f2553c6a1d4e1b93537201 +│ │ │ ├─ ca4825ed91c256d381ed5881229226cd20870f +│ │ │ └─ df6d302f59b22bac408b9bcc8eb52320e56f3c +│ │ ├─ b5 +│ │ │ ├─ 0a9fcecaad194f47231fbe646df2f2f7a81263 +│ │ │ └─ 18aad1928272931fe834f73ba07e2c9169fcfa +│ │ ├─ b6 +│ │ │ ├─ 48e5737be6168bff5137cb1a5a897e55ce193d +│ │ │ ├─ a591478f2baa6280da35a2f5c37bd1ae488f71 +│ │ │ ├─ ea60c64d28b0aa957f85618025fba2d66d278e +│ │ │ └─ eb0544222e61d14d3dc37b62982e369bff8d0b +│ │ ├─ b7 +│ │ │ ├─ 43755fd252e24808561b98bc0ca7a1a82a55fa +│ │ │ ├─ 77ae264c03652b13cc8ca102428ae07ac91e3b +│ │ │ ├─ 988016daa5bf0b3d4fcdccaba52780a9983d9d +│ │ │ ├─ d18c6a25a5f56238d4d0f50048ad1f4bc9f887 +│ │ │ └─ ff48505c70b3abe885676ce410f1be7c6aa296 +│ │ ├─ b8 +│ │ │ ├─ 8b022395fdb1d1f7d5747386de7c72d410644b +│ │ │ ├─ 978355becd275af9440a2bb07e4f5242147700 +│ │ │ ├─ eb550776fa5820cd69c4546ca5725a276a934f +│ │ │ ├─ ecc16870ed6deb50c3e058b73079739f13af10 +│ │ │ └─ f69c60df06c5dbfd5a6ffca460e790720156bd +│ │ ├─ b9 +│ │ │ ├─ 37d15e6ae88cd78e81657b9f1c94e85345ce9f +│ │ │ ├─ 89dfa2ee69281a8af32a76a8206495db2df738 +│ │ │ └─ a6f8d4489717709a97cb1582730f1c2c1908b4 +│ │ ├─ ba +│ │ │ ├─ 104a9f77e2ff78bc805832b2978f27f3cfd866 +│ │ │ ├─ 14439969a6d6fc4e35f080eb49180bd5083310 +│ │ │ ├─ 59abe1b521b334d67981f5e199eabb4b674777 +│ │ │ ├─ 5c035b77bb30f7b839b991fa125e3da2dcaba8 +│ │ │ └─ 8c551958d294c728a0514c99307644b3101b8d +│ │ ├─ bb +│ │ │ ├─ 1116077931f0c64c4f4525e21a327c1fe98b5c +│ │ │ ├─ 16c0bcecfac3f167f00460700e6b1e3fd2a3b8 +│ │ │ ├─ 18b1b9ee79a371f62d7299092989c355d14b31 +│ │ │ ├─ 287b7d5c36d079048156090bfe03d8746fe481 +│ │ │ ├─ 2e86f1ae67d19202cd8f572060a12be48dc8a5 +│ │ │ ├─ 7f4b5cc743f2feae6cd90a30bfb665ad3b5595 +│ │ │ ├─ 80082b3a349d3bcc413059be4a9b2cce56cf26 +│ │ │ └─ acdfec2a3d6e5ef3ad9fe34d428d3942994d1b +│ │ ├─ bc +│ │ │ ├─ 33b259dfe358bf4893ec3e3c177edc806e9b50 +│ │ │ ├─ 3d9e7f9b11df2be191af6076e9e01b63840ef7 +│ │ │ ├─ 7a022b8df912458d259e14fc7aff3fd4c8e874 +│ │ │ └─ ad823f6cfcdcb45197f67c4af1b3b4108798cf +│ │ ├─ bd +│ │ │ ├─ 72679c4337b966622a602728631f0bbaceffa3 +│ │ │ ├─ 912855927dcf7490ae2432ed866a04d9b8ff73 +│ │ │ ├─ b9391236e226d6a68fa765b7594c005bead6d2 +│ │ │ └─ f0457cac0670f4bf421d9faf004a9d493612a6 +│ │ ├─ be +│ │ │ ├─ 734fc38621e44fc547619a85ee1fba97d01fae +│ │ │ └─ ca9a7922db9c97a5188ca69a69f5da43acff06 +│ │ ├─ bf +│ │ │ ├─ 6e762363ecfc1f6524834f1f26f3d4a3db3c0d +│ │ │ ├─ a2e3158c614123cac93be6200f5c290333919c +│ │ │ └─ e00c67f0a6f7bd1181eeba898e6d968dd63081 +│ │ ├─ c0 +│ │ │ ├─ aea8f88f1c03e060690e3c5ec3c30a492b9df2 +│ │ │ ├─ db76e2d7f9b137f4c1af25b07dc1980dde7d3e +│ │ │ ├─ dce510f01304062e4cdebec003b0a6b42f876c +│ │ │ └─ f63bd5a84420beee7d9019ffe56f6142703822 +│ │ ├─ c1 +│ │ │ ├─ 6772392d71038697bbf6264ccb3b8b119840ea +│ │ │ └─ e451d9707d198ff45b78f375288dffea46405d +│ │ ├─ c2 +│ │ │ └─ df7b64147f94e368f31fc8879e140ad1fc0fa4 +│ │ ├─ c3 +│ │ │ ├─ 6cce31d30cbf68bdd023e347a22f6eb052cc56 +│ │ │ ├─ 7aa2c7ac8f091c81e3f6b2717db986cd449035 +│ │ │ └─ dbcf5038aa7a86d0214f67e19b42fb919dd318 +│ │ ├─ c4 +│ │ │ └─ 5fc3257dedc0f3a4414b9148435f667ff51dff +│ │ ├─ c5 +│ │ │ ├─ 0a26664df4452669a999e8126a6134f5f4c715 +│ │ │ ├─ 5cc1e59583d8b4c5201523ff518a23ec71ae3c +│ │ │ └─ abfdc550c26a98f92c5a750759c43670b69a7b +│ │ ├─ c6 +│ │ │ ├─ 12d18409591b015af31c6039b81c936e7a6ccd +│ │ │ ├─ 6c6f29d51fdc9170805df85c38be9cdf26154c +│ │ │ └─ f2e667af9196148f6e59e2774343fcbfbcc91d +│ │ ├─ c7 +│ │ │ ├─ 36a3f99183447bf5f385b0c19f900be944ac17 +│ │ │ ├─ e27478a3eff8862ca150f10d1b93a5ac866af2 +│ │ │ └─ e3d66871726de3d13f3c1786edd8845f6c065d +│ │ ├─ c8 +│ │ │ ├─ 0c7b71b3b42ad7ed608cef17ae53b890c1bb66 +│ │ │ ├─ 8e7314eb7c639788a1f39d919ef0f333c4b0a2 +│ │ │ ├─ ad2e549bdc6801e0d1c80b0308d4b9bd4985ce +│ │ │ └─ dfd66e65b6b16b7466b93e053c7a493725fb74 +│ │ ├─ c9 +│ │ │ ├─ 71a56437ce59480ad12f913903a3d871dfbbc0 +│ │ │ ├─ b444d8335891201efa45efe30f501b1503e822 +│ │ │ └─ ee6c724e82d309a38a43b8cff90221881f4487 +│ │ ├─ ca +│ │ │ ├─ 0655905084adae235a83c28958c21d6e1a1346 +│ │ │ ├─ 269aad3bc242a9aca2d9921b6152802bc07be4 +│ │ │ ├─ 466fd466c07f5b0be80ed7a99207813e8f765c +│ │ │ ├─ 7e841e6e5dafac061a3a939abbcf35fcb6baa7 +│ │ │ ├─ 890a16443190cfc810a3890db1c20c2eb97e8b +│ │ │ └─ dd9bb5bf0c3d8c6da76f807866dd6bfee93f91 +│ │ ├─ cb +│ │ │ ├─ 0e9446802a8df4647c711789eba7914fe5b507 +│ │ │ ├─ 159449b6ab12d0b988db6c2f9bfa8975d0343b +│ │ │ ├─ 5ca764506322e7970fa8637828ac2752f59fe8 +│ │ │ ├─ 939de704aa29d5804be972453ffcbafd43229e +│ │ │ ├─ b5ffe1fe8acf765ede6058c3962291b97b79f2 +│ │ │ ├─ bb13bb01ac5c1ca38d633317e74adf5547045a +│ │ │ ├─ d1b4e1bacfa8e98971991190e929e61c9eb48a +│ │ │ └─ fabb7fbe009c8b9eea8219e541cf0b0660cb53 +│ │ ├─ cc +│ │ │ ├─ 458be89d23112f4c00e6d346e5f33ad3d8d07e +│ │ │ ├─ 5f41350c6feb43e1ae61364edd7aef36f07b78 +│ │ │ ├─ 668650a12f274facbbf6b98a984bb22a39947e +│ │ │ └─ 9b6316bd216df23f25022a1520056fc3187dee +│ │ ├─ cd +│ │ │ ├─ 051523bde762bf565a38f0efd9cd9b7c6a6021 +│ │ │ ├─ 7bca542eeeeb13c3e50783d74e6e1d76ec478b +│ │ │ ├─ 8f039662e703e41ae63879f53e5c75214bf1dd +│ │ │ └─ d6d9c7912fb700a343dcaa2a5bc197fba5b8a5 +│ │ ├─ ce +│ │ │ └─ 3c7d4c94f6daeee05421cc11beb9aa9f29fdab +│ │ ├─ cf +│ │ │ ├─ 526bc8940aae79eed2051431b98738b791db09 +│ │ │ └─ e9fbd3bf9e1f28b371aacf88c5e1e8eedf0626 +│ │ ├─ d0 +│ │ │ └─ ca0722ac8ce2350023e4f5cfc4756fa8e318f4 +│ │ ├─ d1 +│ │ │ ├─ 5cb8e27265b4992b26ba618bb6840e870f4e38 +│ │ │ └─ 60c1e42025d3ed20faba101d43f86fe29e9d7e +│ │ ├─ d2 +│ │ │ ├─ 4fdfc601b9ffe8ccc3fca5d3b873109dc56c4a +│ │ │ └─ 53d31198ae6b71fb35ca8a9650b797fdafed14 +│ │ ├─ d3 +│ │ │ ├─ 013c2e2756da2a8e24e302816a5bdc58cd8658 +│ │ │ ├─ 5fc97e5ad4dbb105b31887939aba4edea55721 +│ │ │ ├─ bb9968e548cec754983b8e430aa41ed6b8aca0 +│ │ │ └─ bdaa709dd54c9bd398369ef8613a84143ea6d2 +│ │ ├─ d4 +│ │ │ ├─ 35a5754185242a3ee5d99eeeb5df5a6479a76a +│ │ │ ├─ 3c8b3f8f9bf3a57bc31a079ce7110b1bf5f80c +│ │ │ ├─ 50147fc781245869067a05ab9189bcc6ca5703 +│ │ │ ├─ 5f6ada96e882b803e70ffaa2c3e046f678236c +│ │ │ ├─ b08fc369948daacc146dcde0f63c3a79039852 +│ │ │ └─ bb5c4398661928786d69a6f337ff769fa5462d +│ │ ├─ d5 +│ │ │ ├─ ab60a970b8bc3bcf5af92f726477451053710c +│ │ │ ├─ c9a50d9ada9c08ba16ce207d0ee50bd6a7db29 +│ │ │ ├─ d0adc8a613cefdf76706f94b805e6fa38076fe +│ │ │ ├─ e4f6ba5080b45a8ceb004e20cf5b9547729626 +│ │ │ └─ fd377c075b96b488411f98a5daa8bb7265204b +│ │ ├─ d6 +│ │ │ ├─ 7e7497df5f900c43b4d7e11eef75cc7ac62be6 +│ │ │ ├─ 89c99b9d82f47b8803978057072a295282810d +│ │ │ ├─ c953795300e4256c76542d6bb0fe06f08b5ad6 +│ │ │ └─ cd8643775c1111581cfe3b9cc7cc0ac234fe1f +│ │ ├─ d7 +│ │ │ ├─ 06694cf2cd00b05806c1d7304eafdfb94e07d5 +│ │ │ ├─ 186a506b81d5b5363970fdaa50f54a11034f5c +│ │ │ └─ a83392ca622e64a6af94b180f9733199c932fb +│ │ ├─ d8 +│ │ │ ├─ 6d5afb88482b6fe014f937681b5e9eb254fe99 +│ │ │ └─ fa05fcfac9451c42fd1bc5004702848e101533 +│ │ ├─ d9 +│ │ │ ├─ 34abf5ad49588984be8ab900090de8f354f586 +│ │ │ └─ 673ae544f3b5c7c54788d5090f826a069c1237 +│ │ ├─ da +│ │ │ ├─ 65a1cdf1770e6a6dcc8c4b439070e371ff8226 +│ │ │ └─ 8c8b73283c8266a66cc3c9a936690c768f57c3 +│ │ ├─ db +│ │ │ └─ 1387186299dd4d9a9353e81d080c6f0b083a12 +│ │ ├─ dc +│ │ │ ├─ 065f01a850f4caec74ae3b2d9caf2891676610 +│ │ │ ├─ 9aaf2055d4d0e977608417762f2abce242d22b +│ │ │ ├─ b1a8ad1deec8879a660809c01fbe48f3c1dd66 +│ │ │ └─ b9aa69d414681ca2899c4744a32f9dff0d2669 +│ │ ├─ dd +│ │ │ ├─ 0e4e977c3d752602239de25b6ace1b3fdfe95f +│ │ │ ├─ 2e5e2769ae15ee83b070ce301d0abce814f7ac +│ │ │ └─ tmp_obj_qIPXff +│ │ ├─ de +│ │ │ ├─ 068a8213109c84c33263089f9ea15037bb1910 +│ │ │ ├─ 11fdc9439c788331e45c959fb9319806ca6508 +│ │ │ ├─ 32f889ca9fb4ae3d36444a041211293ce9eba4 +│ │ │ └─ 34f55ae2c0fd13ea4e862561f18e121218cc98 +│ │ ├─ df +│ │ │ ├─ 0b86e2101abda4e600d92749a5c5240745b8bc +│ │ │ ├─ 5d698991d5f6c5023bdaf51ccf991d67fca902 +│ │ │ ├─ 7c98349912bf265dc647bdefd528d24e3b51ac +│ │ │ └─ d4fd99d16ec297885d8140b791b573f7dceea1 +│ │ ├─ e0 +│ │ │ ├─ 8c34fd89bfcae4d87abbdcfd6ee20afb2d8ca2 +│ │ │ └─ d8b5183bdb31acd2eb77ba01c2696c5f585b64 +│ │ ├─ e1 +│ │ │ ├─ 0cf01cd5bba8c3d16b6ef1671b7a4b74d96c2b +│ │ │ ├─ 356241b8a3ff9a39736927f3b7bac69015b93b +│ │ │ ├─ 89447dfd2df23aafb77cf0daefd4996046b379 +│ │ │ ├─ baddeebae8299976c5115ce3a1e87365aa89db +│ │ │ └─ ccf64e18c8fb589e9855f1f20f2280f48460c7 +│ │ ├─ e2 +│ │ │ ├─ 583ef9d3a4c91e3b948c964eb73a80f222d814 +│ │ │ └─ 8ba4468c1823d40e623e5db2d1f24cfbf89170 +│ │ ├─ e3 +│ │ │ ├─ 0bbb9d4ea6cfe1d588a5940efe50c1638f084a +│ │ │ └─ e00f92337bed352370d5db0fc46c3e790b187b +│ │ ├─ e4 +│ │ │ ├─ 2aa68a542d9e176b5fd050c35b1af11659b2a3 +│ │ │ ├─ 3a029389e54385a939ae233404518bed3dba08 +│ │ │ ├─ b78eae12304a075fa19675c4047061d6ab920d +│ │ │ └─ df322d47fe18be3281c38dd9a2ccf80e35c728 +│ │ ├─ e5 +│ │ │ ├─ 11dfe6e4eb3c7582f643d3bbd759b8340bc856 +│ │ │ ├─ 5873a12483ebbac471596c9e6d7dbb3c87ba31 +│ │ │ └─ b81c1dd5c429f1095f51c06514c41f542b774c +│ │ ├─ e6 +│ │ │ ├─ 9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +│ │ │ └─ f4725a2d010b2c1a9f3e026ae9d10942b33321 +│ │ ├─ e7 +│ │ │ ├─ 02e694e3964e87233dba76949eeec2f63c2364 +│ │ │ ├─ 6bbb1d67f08de4c71b853b460ae7a15dbe0ca2 +│ │ │ ├─ 979bf74d64b7adf05734e4e01d9d6d99ac9533 +│ │ │ ├─ af2f77107d73046421ef56c4684cbfdd3c1e89 +│ │ │ └─ fad81f60d181cdbd8b53aa698b3055c4af6b71 +│ │ ├─ e8 +│ │ │ ├─ dea8ba5ede15a6c57e144dbad91081d9f95a98 +│ │ │ ├─ e295f439774d9766aa223de42ada48f2acede7 +│ │ │ └─ f4329f84ab767b81da2d7c77825f8e9d174d7b +│ │ ├─ e9 +│ │ │ ├─ 091b4009fdcc1c1472d1e1d783cbdc5166e54f +│ │ │ ├─ 6d67af90a0d412a6fc33182b6efdbb4bf5bb63 +│ │ │ ├─ a6a328eb425f68d1fd8ab0c4206db6a315f4b2 +│ │ │ ├─ bb1d54f7d6382574f4e460e9dbe941513a91be +│ │ │ └─ dae3c5320848a30f296103636ddae0347129a4 +│ │ ├─ ea +│ │ │ ├─ 28d23fd64d5683bc5a27a9461b436e54c58fec +│ │ │ ├─ 29982981aa7c9503c3253351bff6e4f969ba69 +│ │ │ ├─ 595353b4b2f332e8080e5bfbac2177bfc7e68c +│ │ │ ├─ 94af1337ab57b92c9113175e34aab8737023ba +│ │ │ ├─ b6bf47c11ea5df6e600d420e790cd09b850736 +│ │ │ ├─ b7e5203c8ee3f4df38ab460fa7ed066e477902 +│ │ │ ├─ c4a4d8890cb702cf14d9ff187c7161e1491107 +│ │ │ ├─ d95373b58450859a8f6ffce16e848eb20f04e2 +│ │ │ └─ e37aefb279b311d56f720acbc988cca1eb6a67 +│ │ ├─ eb +│ │ │ ├─ 0536286f3081c6c0646817037faf5446e3547d +│ │ │ ├─ 0667ad2792cc1e2b19c0cfe9460c7329ea63a3 +│ │ │ ├─ 2380d978321e3642fb860d004cf880065b1691 +│ │ │ ├─ 70b4d2d5339b4ec33078f2e5ae6cde99e958dc +│ │ │ └─ e7f6636a3bd04a1c921815d7465708693d5993 +│ │ ├─ ec +│ │ │ ├─ 34baa2546f3f76820437f290a452ac7ad69feb +│ │ │ ├─ cf4cd4073f2f986bfb75cc10f9504d6207f6c3 +│ │ │ ├─ d3ee82ad44b05cbbabf444e5d1194765a569ce +│ │ │ └─ e84198cf81b3fa6e528465c6f8417eee0d8919 +│ │ ├─ ed +│ │ │ ├─ 09befd5ca288a43fdbbf2ab4add15ea51ab71b +│ │ │ ├─ 311ce7dde3d76282bb009787b5992720061c85 +│ │ │ └─ 803f61f6a493d89ee8c94167333dd359fe817f +│ │ ├─ ee +│ │ │ ├─ 2935d3aa8b7baa45264a4e7b4a431fa6674e78 +│ │ │ ├─ 49bd49ca33c6d9c4413c0e59f226d4cbec6b07 +│ │ │ ├─ c095e0971248d73fdb377da340a4a7e6a53e3c +│ │ │ └─ db4af72f496824cd52d96d548b49b54154c170 +│ │ ├─ ef +│ │ │ ├─ c7429ef613ab1d5619c32e18d060cbb462187e +│ │ │ └─ db19de852e6fed77fc479e87925504c828cc24 +│ │ ├─ f0 +│ │ │ └─ 2030d1907af5bde0e524616e99e2b896670774 +│ │ ├─ f1 +│ │ │ ├─ 0b7bba766ed3cb848ca8cac83cb17a8ded60c3 +│ │ │ ├─ 9d4aea9a1be28ab41147224562efdf9962b0f5 +│ │ │ ├─ cb227c51be6d9ab21438e108b30e59c25c988c +│ │ │ └─ ccc5e52cd50b02e652cb853f272366fa1345f4 +│ │ ├─ f2 +│ │ │ ├─ 004fc2de3f618b5d8c86b3f8121b587ab825d1 +│ │ │ ├─ 7ba14f09f2aef16b8bfe2ea2dacff7853215ef +│ │ │ └─ ef85f539c40082e4e413036a9828d99bfc2f1a +│ │ ├─ f3 +│ │ │ ├─ 1575ec773bb199aeb7c0d0f1612cfe1c7038f1 +│ │ │ ├─ 1b3837ce0c1f34b782de353c746ba15f620b83 +│ │ │ ├─ 2a3da81e61964a953b7f0959bff2e10f77e164 +│ │ │ ├─ 934031703bd10d928dc8f626b97798dc660d7d +│ │ │ ├─ c7e0bebeab56cd2ef595931697c7513546bb34 +│ │ │ └─ f4dc9319c33d8517aafaf661428b343cd78dfa +│ │ ├─ f4 +│ │ │ ├─ 14f99433dd4ec694069fee01ece090fb1bd7f7 +│ │ │ └─ cff77e6afe1182a8360448d3778e8ece4f9f86 +│ │ ├─ f5 +│ │ │ ├─ 36c55a55612413bf011f8772a08467b58a39b2 +│ │ │ ├─ 593c852f0bd0a19d435c10c4a9a1ccc93fa7b1 +│ │ │ ├─ d9fe331c0b23e6c7ed4fa0009ca9b097d28c82 +│ │ │ └─ e7fb7a4abde24623c2d7aa03f145d62d838c3c +│ │ ├─ f6 +│ │ │ ├─ 0c2656d4b838bbe1bd2d9570c259113dbc8456 +│ │ │ ├─ 96d17205dfb6add98d93e7be78ccc4c6475264 +│ │ │ └─ df23065c388157cbf32f4c09586a2ad7b58e47 +│ │ ├─ f7 +│ │ │ ├─ 182edcea2baa8778219d4aab2c0c1b21f1a30a +│ │ │ ├─ 5fb0ad34af415254afd0b800cff40bad6e6d3a +│ │ │ └─ d8dc781419d04a594e5e98e87107680ae0f414 +│ │ ├─ f8 +│ │ │ ├─ 182342a5fcd6b5b17db256fa4e200f258d8818 +│ │ │ ├─ 4474ab6de345811d1676c9556a30aac4d539d9 +│ │ │ ├─ 49eed9075a928461e0271bac08075468d67a02 +│ │ │ ├─ 52999c1b722cd5b9be2fb8e942acac3d61aa9c +│ │ │ ├─ def80021dbb3f39d3ad67730c2ad87e7748c6d +│ │ │ └─ fe57a58dc8597c3bbdfcf376e61da993b8ffc5 +│ │ ├─ fa +│ │ │ └─ d9803cba1cc150332eeeff11231920b5a42254 +│ │ ├─ fb +│ │ │ ├─ 13ec03cc308f12d8b6086a3d53c8d703d86fad +│ │ │ ├─ 5883369bbc9fec742e08bdb0bc4a4b68343bdb +│ │ │ ├─ 5c2ac93e7b5055b4c58daa4d5617255026385a +│ │ │ ├─ 65e3c0762730e419d8fe72feb8504fd52b2345 +│ │ │ ├─ 8c0d501cc8903ccb1d0abeaeed3e0804c40c61 +│ │ │ ├─ abcacd9e92615e4fb1290030f79e9f18b9e6fd +│ │ │ └─ ffa92c2bb7c748d6fc78f9f9dcac604dabb87d +│ │ ├─ fc +│ │ │ ├─ 24b0daa886a6713e19abb95aab1cdc6f4136c9 +│ │ │ ├─ 26cb0fcd98daa12b31c7f64e10a3161b06787f +│ │ │ └─ d628f8ef169ace753dd453de593bd7f4a74a56 +│ │ ├─ fd +│ │ │ ├─ 1ad421c2060f02a3b78cc2d03f4355c637f6b3 +│ │ │ ├─ 9131abffc97ac4e8d6ccee36be0be4cbbdc77e +│ │ │ ├─ be128cb80e98c96918f83b02b3665e311274f2 +│ │ │ ├─ d3363c5c4fd2997682709e414d59710c5e8520 +│ │ │ └─ dc7b2d8ce6e925f958f507acdfd1e0d9911f8f +│ │ ├─ fe +│ │ │ ├─ 00c1e027030320dfef3c122610152b86ef6d35 +│ │ │ ├─ 07fb7e8c0504216bf47430624f534bf799d74f +│ │ │ ├─ 6fc6ef6b5605f3ba78f8bca5a66ff8dcfe3986 +│ │ │ └─ c10445f44b89a190da032b148d4b4475086d2a +│ │ ├─ ff +│ │ │ ├─ 6ec9a6b5af27c739cb932c90a0afc0b2abb8e5 +│ │ │ └─ b73a10765698ba6ae1f8ccf5c3bc5d97cebb8b +│ │ ├─ info +│ │ └─ pack +│ ├─ ORIG_HEAD +│ ├─ packed-refs +│ └─ refs +│ ├─ heads +│ │ ├─ chore +│ │ │ └─ TL-DYS-16 +│ │ ├─ feature +│ │ │ ├─ content +│ │ │ ├─ database +│ │ │ ├─ detailed-steps +│ │ │ ├─ TL-DYS-24 +│ │ │ └─ TL-DYS-27 +│ │ ├─ main +│ │ └─ master +│ ├─ remotes +│ │ └─ origin +│ │ ├─ chore +│ │ │ └─ TL-DYS-16 +│ │ ├─ feature +│ │ │ ├─ content +│ │ │ ├─ database +│ │ │ ├─ detailed-steps +│ │ │ └─ TL-DYS-24 +│ │ └─ main +│ └─ tags +├─ .github +│ └─ workflows +│ └─ codeql.yml +├─ .gitignore +├─ .husky +│ ├─ pre-commit +│ └─ _ +│ ├─ .gitignore +│ └─ husky.sh +├─ client +│ ├─ .eslintrc.cjs +│ ├─ .gitignore +│ ├─ .vite +│ ├─ index.html +│ ├─ package.json +│ ├─ public +│ │ ├─ image +│ │ │ └─ icon.svg +│ │ └─ robots.txt +│ ├─ README.md +│ ├─ src +│ │ ├─ api +│ │ │ └─ open-ai-api.ts +│ │ ├─ App.tsx +│ │ ├─ assets +│ │ ├─ components +│ │ │ ├─ CustomMarkdown.tsx +│ │ │ ├─ ErrorFallback.tsx +│ │ │ ├─ Footer.tsx +│ │ │ ├─ generate +│ │ │ │ ├─ BudgetFilter.tsx +│ │ │ │ ├─ CategoryFilter.tsx +│ │ │ │ ├─ DifficultyFilter.tsx +│ │ │ │ ├─ index.ts +│ │ │ │ ├─ LoadingComponent.tsx +│ │ │ │ ├─ MaterialInput.tsx +│ │ │ │ ├─ MilestoneItems.tsx +│ │ │ │ ├─ ProjectTabs.tsx +│ │ │ │ ├─ PurposeFilter.tsx +│ │ │ │ ├─ SafetyCheck.tsx +│ │ │ │ ├─ TimeAvailabilityFilter.tsx +│ │ │ │ └─ ToolsAvailableInput.tsx +│ │ │ ├─ MetaTag.tsx +│ │ │ ├─ Navbar.tsx +│ │ │ └─ project-details +│ │ │ ├─ index.ts +│ │ │ ├─ ProjectImage.tsx +│ │ │ ├─ ProjectInfo.tsx +│ │ │ ├─ ProjectSteps.tsx +│ │ │ └─ ShareModal.tsx +│ │ ├─ constants +│ │ │ └─ index.ts +│ │ ├─ hooks +│ │ │ └─ useInterval.ts +│ │ ├─ main.tsx +│ │ ├─ pages +│ │ │ ├─ FAQ.tsx +│ │ │ ├─ Home.tsx +│ │ │ ├─ HowToGuideDetail.tsx +│ │ │ ├─ HowToGuideList.tsx +│ │ │ ├─ ProjectDetail.tsx +│ │ │ └─ ProjectDetailById.tsx +│ │ ├─ styles +│ │ │ ├─ App.css +│ │ │ └─ index.css +│ │ ├─ types +│ │ │ └─ index.ts +│ │ ├─ utils +│ │ │ └─ index.ts +│ │ └─ vite-env.d.ts +│ ├─ tsconfig.json +│ ├─ tsconfig.node.json +│ └─ vite.config.ts +├─ package.json +├─ README.md +└─ server + ├─ .eslintrc.json + ├─ .gitignore + ├─ jest.config.ts + ├─ nodemon.json + ├─ package.json + ├─ prisma + │ ├─ migrations + │ │ ├─ 20230918064719_init + │ │ │ └─ migration.sql + │ │ ├─ 20230918070252_init + │ │ │ └─ migration.sql + │ │ ├─ 20230918070427_init + │ │ │ └─ migration.sql + │ │ └─ migration_lock.toml + │ ├─ schema.prisma + │ └─ seed.ts + ├─ README.md + ├─ src + │ ├─ controllers + │ │ ├─ guide.controller.ts + │ │ ├─ openai.controller.ts + │ │ ├─ share.controller.ts + │ │ └─ unsplash.controller.ts + │ ├─ index.ts + │ ├─ middleware + │ │ ├─ cache-response.ts + │ │ ├─ error-handler.ts + │ │ ├─ request-limit.ts + │ │ └─ schema-validation.ts + │ ├─ routes + │ │ ├─ guide.routes.ts + │ │ ├─ index.routes.ts + │ │ ├─ openai.routes.ts + │ │ ├─ share.routes.ts + │ │ └─ unsplash.routes.ts + │ ├─ server.ts + │ ├─ utils + │ │ ├─ index.ts + │ │ └─ response-template.ts + │ └─ validators + │ ├─ explain.ts + │ ├─ idea.ts + │ ├─ image-search.ts + │ └─ share-link.ts + └─ tsconfig.json + +``` \ No newline at end of file diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs index d6c9537..e33ca49 100644 --- a/client/.eslintrc.cjs +++ b/client/.eslintrc.cjs @@ -1,18 +1,17 @@ module.exports = { root: true, env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - ], - ignorePatterns: ['dist', '.eslintrc.cjs'], - parser: '@typescript-eslint/parser', - plugins: ['react-refresh'], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:react-hooks/recommended", "plugin:prettier/recommended"], + ignorePatterns: ["dist", ".eslintrc.cjs"], + parser: "@typescript-eslint/parser", + plugins: ["react-refresh"], rules: { - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, + "prettier/prettier": [ + "error", + { + endOfLine: "auto", + }, ], + "react-refresh/only-export-components": ["warn", { allowConstantExport: true }], }, -} +}; diff --git a/client/.lintstagedrc.json b/client/.lintstagedrc.json new file mode 100644 index 0000000..624c6fe --- /dev/null +++ b/client/.lintstagedrc.json @@ -0,0 +1,3 @@ +{ + "src/**/*.{ts,tsx,js,jsx,json,css,scss,md}": ["eslint --quiet --fix", "prettier --write"] +} diff --git a/client/package.json b/client/package.json index eae37ae..028800e 100644 --- a/client/package.json +++ b/client/package.json @@ -7,6 +7,8 @@ "dev": "vite", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "lint:fix": "eslint \"src/**/*.{ts,tsx}\" --quiet --fix", + "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css}\"", "preview": "vite preview" }, "dependencies": { @@ -36,10 +38,21 @@ "@typescript-eslint/parser": "^6.7.0", "@vitejs/plugin-react": "^4.0.3", "eslint": "^8.49.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", + "prettier": "^3.0.3", "typescript": "^5.0.2", "vite": "^4.4.5" }, + "prettier": { + "semi": true, + "trailingComma": "all", + "singleQuote": false, + "printWidth": 200, + "tabWidth": 2, + "endOfLine": "auto" + }, "homepage": "https://www.diyspire.online" } diff --git a/client/src/components/CustomMarkdown.tsx b/client/src/components/CustomMarkdown.tsx index cd8f039..1197b36 100644 --- a/client/src/components/CustomMarkdown.tsx +++ b/client/src/components/CustomMarkdown.tsx @@ -51,9 +51,15 @@ const CustomMarkdown: React.FC = ({ content }) => { h6: { component: Heading, props: { as: "h6", size: "xs", mb: 3 } }, p: { component: Text, props: { mb: 5 } }, ul: { component: List, props: { styleType: "disc", ml: 4, mb: 4 } }, - ol: { component: List, props: { styleType: "decimal", ml: 4, mb: 4 } }, + ol: { + component: List, + props: { styleType: "decimal", ml: 4, mb: 4 }, + }, li: { component: ListItem, props: { mb: 3 } }, - a: { component: Link, props: { mb: 2, textDecorationLine: "underline" } }, + a: { + component: Link, + props: { mb: 2, textDecorationLine: "underline" }, + }, img: { component: Image, props: { mb: 4, loading: "lazy" } }, pre: { component: MarkdownPre, diff --git a/client/src/components/generate/BudgetFilter.tsx b/client/src/components/generate/BudgetFilter.tsx index c36cce3..b1ac1bc 100644 --- a/client/src/components/generate/BudgetFilter.tsx +++ b/client/src/components/generate/BudgetFilter.tsx @@ -10,7 +10,7 @@ const BudgetFilter: React.FC = ({ onBudgetChange, ...props }) (value: string | number) => { onBudgetChange(Number(value)); }, - [onBudgetChange] + [onBudgetChange], ); return ( diff --git a/client/src/components/generate/MaterialInput.tsx b/client/src/components/generate/MaterialInput.tsx index 86f6911..07e3985 100644 --- a/client/src/components/generate/MaterialInput.tsx +++ b/client/src/components/generate/MaterialInput.tsx @@ -16,7 +16,7 @@ const MaterialInput: FC = ({ materials, setMaterials, onlySp updatedMaterials[index] = value; setMaterials(updatedMaterials); }, - [materials, setMaterials] + [materials, setMaterials], ); const handleDeleteInput = useCallback( @@ -25,7 +25,7 @@ const MaterialInput: FC = ({ materials, setMaterials, onlySp updatedMaterials.splice(index, 1); setMaterials(updatedMaterials); }, - [materials, setMaterials] + [materials, setMaterials], ); const handleAddMore = useCallback(() => { diff --git a/client/src/components/generate/ProjectTabs.tsx b/client/src/components/generate/ProjectTabs.tsx index ff6ec9a..6427aad 100644 --- a/client/src/components/generate/ProjectTabs.tsx +++ b/client/src/components/generate/ProjectTabs.tsx @@ -20,7 +20,10 @@ interface ProjectTabsProps { type OmittedProject = Omit; const ProjectTabs: React.FC = ({ projects }) => { - const tabOrientation = useBreakpointValue({ base: "vertical", md: "horizontal" }) as "vertical" | "horizontal" | undefined; + const tabOrientation = useBreakpointValue({ + base: "vertical", + md: "horizontal", + }) as "vertical" | "horizontal" | undefined; const toast = useToast(); const handleShare = async (project: Project) => { diff --git a/client/src/components/generate/TimeAvailabilityFilter.tsx b/client/src/components/generate/TimeAvailabilityFilter.tsx index 95d4b30..5b2ae64 100644 --- a/client/src/components/generate/TimeAvailabilityFilter.tsx +++ b/client/src/components/generate/TimeAvailabilityFilter.tsx @@ -13,7 +13,7 @@ const TimeAvailabilityFilter: React.FC = ({ onTimeC setTimeValue(value); onTimeChange(value); }, - [onTimeChange] + [onTimeChange], ); return ( diff --git a/client/src/components/generate/ToolsAvailableInput.tsx b/client/src/components/generate/ToolsAvailableInput.tsx index d5e4f6b..899a8c9 100644 --- a/client/src/components/generate/ToolsAvailableInput.tsx +++ b/client/src/components/generate/ToolsAvailableInput.tsx @@ -14,7 +14,7 @@ const ToolsAvailableInput: React.FC = ({ tools, setToo newTools[index] = value; setTools(newTools); }, - [tools, setTools] + [tools, setTools], ); const handleDeleteTool = useCallback( @@ -23,7 +23,7 @@ const ToolsAvailableInput: React.FC = ({ tools, setToo newTools.splice(index, 1); setTools(newTools); }, - [tools, setTools] + [tools, setTools], ); return ( diff --git a/client/src/components/project-details/ProjectImage.tsx b/client/src/components/project-details/ProjectImage.tsx index df5d698..9d8da13 100644 --- a/client/src/components/project-details/ProjectImage.tsx +++ b/client/src/components/project-details/ProjectImage.tsx @@ -8,7 +8,6 @@ import { RelatedImages } from "../../types"; interface ProjectImageProps { isLoading: boolean; - // eslint-disable-next-line @typescript-eslint/no-explicit-any relatedImages: RelatedImages | null; projectTitle: string; onOpen: () => void; diff --git a/client/src/components/project-details/ProjectInfo.tsx b/client/src/components/project-details/ProjectInfo.tsx index 6ec6c65..e02d9a7 100644 --- a/client/src/components/project-details/ProjectInfo.tsx +++ b/client/src/components/project-details/ProjectInfo.tsx @@ -5,7 +5,6 @@ import { ProjectLocationState } from "../../types"; interface ProjectInfoProps { isLoading: boolean; - // eslint-disable-next-line @typescript-eslint/no-explicit-any project: ProjectLocationState; } @@ -14,6 +13,7 @@ const ProjectInfo: React.FC = ({ isLoading, project }) => { const description = useColorModeValue("gray.500", "gray.400"); const toolsAndMaterials = useColorModeValue("yellow.500", "yellow.300"); const ellipsisBreakpoint = useBreakpointValue({ base: undefined, lg: 3 }); + if (isLoading) { return ( <> diff --git a/client/src/constants/index.ts b/client/src/constants/index.ts index e10cf01..752472b 100644 --- a/client/src/constants/index.ts +++ b/client/src/constants/index.ts @@ -52,7 +52,11 @@ export const footerData: Footer[] = [ links: [ { label: "Getting Started", path: "/faq", hash: "#getting-started" }, { label: "Usage Guidelines", path: "/faq", hash: "#usage-guidelines" }, - { label: "Security and Privacy", path: "/faq", hash: "#security-privacy" }, + { + label: "Security and Privacy", + path: "/faq", + hash: "#security-privacy", + }, { label: "Feedback and Suggestions", path: "/faq", hash: "#feedback" }, ], }, diff --git a/client/src/main.tsx b/client/src/main.tsx index 905a429..9f51e8a 100644 --- a/client/src/main.tsx +++ b/client/src/main.tsx @@ -12,5 +12,5 @@ ReactDOM.createRoot(document.getElementById("root")!).render( - + , ); diff --git a/client/src/pages/Home.tsx b/client/src/pages/Home.tsx index 635b768..3424a64 100644 --- a/client/src/pages/Home.tsx +++ b/client/src/pages/Home.tsx @@ -102,7 +102,7 @@ const Home = () => { ), - [tools] + [tools], ); return ( diff --git a/package-lock.json b/package-lock.json index d7186a5..6649905 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,9 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "concurrently": "^8.2.1" + "concurrently": "^8.2.1", + "husky": "^8.0.3", + "lint-staged": "^14.0.1" } }, "node_modules/@babel/runtime": { @@ -24,6 +26,21 @@ "node": ">=6.9.0" } }, + "node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -48,6 +65,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -76,6 +105,87 @@ "node": ">=8" } }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -108,6 +218,21 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, "node_modules/concurrently": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.1.tgz", @@ -135,6 +260,20 @@ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -151,6 +290,29 @@ "url": "https://opencollective.com/date-fns" } }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -166,6 +328,47 @@ "node": ">=6" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -175,6 +378,18 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -184,6 +399,30 @@ "node": ">=8" } }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -193,43 +432,545 @@ "node": ">=8" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", + "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/listr2/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/log-update/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", "dev": true }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "dependencies": { - "tslib": "^2.1.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "engines": { + "node": ">=12" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/spawn-command": { @@ -238,6 +979,15 @@ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -264,6 +1014,18 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -279,6 +1041,18 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -294,6 +1068,33 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, + "node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -320,6 +1121,15 @@ "node": ">=10" } }, + "node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -358,6 +1168,15 @@ "regenerator-runtime": "^0.14.0" } }, + "ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "requires": { + "type-fest": "^1.0.2" + } + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -373,6 +1192,15 @@ "color-convert": "^2.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -394,6 +1222,59 @@ } } }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -420,6 +1301,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true + }, "concurrently": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.1.tgz", @@ -437,6 +1330,17 @@ "yargs": "^17.7.2" } }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -446,6 +1350,21 @@ "@babel/runtime": "^7.21.0" } }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -458,30 +1377,331 @@ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lint-staged": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", + "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", + "dev": true, + "requires": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true + } + } + }, + "listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "dev": true, + "requires": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, "regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", @@ -494,6 +1714,39 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -503,18 +1756,69 @@ "tslib": "^2.1.0" } }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "shell-quote": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, "spawn-command": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, + "string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -535,6 +1839,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -544,6 +1854,15 @@ "has-flag": "^4.0.0" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -556,6 +1875,21 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -573,6 +1907,12 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, + "yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true + }, "yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index abcbc98..ba69f07 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,9 @@ "description": "A platform that provides unique DIY (Do It Yourself) project suggestions using OpenAI. Explore a variety of projects, their materials, and steps to create them.", "main": "index.js", "devDependencies": { - "concurrently": "^8.2.1" + "concurrently": "^8.2.1", + "husky": "^8.0.3", + "lint-staged": "^14.0.1" }, "scripts": { "dev:client": "cd client && npm run dev", @@ -13,7 +15,13 @@ "build:server": "cd server && npm run build", "dev": "concurrently \"npm run dev:client\" \"npm run dev:server\"", "build": "npm install && concurrently \"npm run build:client\" \"npm run build:server\"", - "start": "concurrently \"cd server && npm start\" \"cd client && npm run preview\"" + "start": "concurrently \"cd server && npm start\" \"cd client && npm run preview\"", + "lint:all": "cd server && npm run lint && cd ../client && npm run lint" + }, + "husky": { + "hooks": { + "pre-commit": "cd client && npx lint-staged && cd ../server && npx lint-staged" + } }, "repository": { "type": "git", diff --git a/server/.eslintrc.json b/server/.eslintrc.json index 52204a6..3aa0812 100644 --- a/server/.eslintrc.json +++ b/server/.eslintrc.json @@ -1,11 +1,6 @@ { "parser": "@typescript-eslint/parser", - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended", - "plugin:jest/recommended" - ], + "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", "plugin:jest/recommended"], "parserOptions": { "ecmaVersion": 2020, "sourceType": "module" @@ -23,10 +18,7 @@ ], "import/no-unused-modules": "error", "unused-imports/no-unused-imports": "error", - "@typescript-eslint/no-unused-vars": [ - "error", - { "varsIgnorePattern": "^_" } - ], + "@typescript-eslint/no-unused-vars": ["error", { "varsIgnorePattern": "^_" }], "@typescript-eslint/no-explicit-any": "off" } } diff --git a/server/package.json b/server/package.json index c167723..83882f7 100644 --- a/server/package.json +++ b/server/package.json @@ -41,7 +41,7 @@ "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^6.5.0", "@typescript-eslint/parser": "^6.4.1", - "eslint": "^8.48.0", + "eslint": "^8.49.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-import": "^2.28.1", "eslint-plugin-jest": "^27.2.3", @@ -60,7 +60,8 @@ "semi": true, "trailingComma": "all", "singleQuote": false, - "printWidth": 80, - "tabWidth": 2 + "printWidth": 200, + "tabWidth": 2, + "endOfLine": "auto" } } diff --git a/server/src/.lintstagedrc.json b/server/src/.lintstagedrc.json new file mode 100644 index 0000000..18c0046 --- /dev/null +++ b/server/src/.lintstagedrc.json @@ -0,0 +1,3 @@ +{ + "src/**/*.ts": ["eslint --quiet --fix", "prettier --write"] +} diff --git a/server/src/controllers/guide.controller.ts b/server/src/controllers/guide.controller.ts index 2e7b445..03550af 100644 --- a/server/src/controllers/guide.controller.ts +++ b/server/src/controllers/guide.controller.ts @@ -2,11 +2,7 @@ import { Request, Response, NextFunction } from "express"; import { sendSuccess } from "../utils/response-template"; import { PrismaClient } from "@prisma/client"; -export async function getHowToGuideByPath( - req: Request, - res: Response, - next: NextFunction, -) { +export async function getHowToGuideByPath(req: Request, res: Response, next: NextFunction) { try { const path = req.params.path; @@ -32,11 +28,7 @@ export async function getHowToGuideByPath( } } -export async function getAllGuidePaths( - req: Request, - res: Response, - next: NextFunction, -) { +export async function getAllGuidePaths(req: Request, res: Response, next: NextFunction) { try { const prisma = req.app.get("prisma") as PrismaClient; diff --git a/server/src/controllers/openai.controller.ts b/server/src/controllers/openai.controller.ts index f1cb227..86b9dd0 100644 --- a/server/src/controllers/openai.controller.ts +++ b/server/src/controllers/openai.controller.ts @@ -14,50 +14,21 @@ interface IdeaRequestBody { endPurpose: string; } -export const generateIdea = async ( - req: Request, - res: Response, - next: NextFunction, -) => { +export const generateIdea = async (req: Request, res: Response, next: NextFunction) => { try { - const { - materials, - onlySpecified, - difficulty, - category, - tools, - time, - budget, - endPurpose, - }: IdeaRequestBody = req.body; + const { materials, onlySpecified, difficulty, category, tools, time, budget, endPurpose }: IdeaRequestBody = req.body; const openai: OpenAI = req.app.get("openai"); - const materialsString = onlySpecified - ? `Only use the following specified materials: ${materials.join(", ")}.` - : `Include any materials, especially the specified ones: ${materials.join( - ", ", - )}.`; + const materialsString = onlySpecified ? `Only use the following specified materials: ${materials.join(", ")}.` : `Include any materials, especially the specified ones: ${materials.join(", ")}.`; - const toolsString = - tools.length > 0 - ? `Work with these tools: ${tools.join(", ")}.` - : "Recommend tools that might be beneficial for the projects."; + const toolsString = tools.length > 0 ? `Work with these tools: ${tools.join(", ")}.` : "Recommend tools that might be beneficial for the projects."; - const timeString = - time === 0 - ? "There's no strict time constraint." - : `The available time to complete the project is approximately ${time} hours.`; + const timeString = time === 0 ? "There's no strict time constraint." : `The available time to complete the project is approximately ${time} hours.`; - const budgetString = - budget === 0 - ? "The budget is flexible." - : `The budget is set between ₱0 and ₱${budget}.`; + const budgetString = budget === 0 ? "The budget is flexible." : `The budget is set between ₱0 and ₱${budget}.`; - const purposeString = - endPurpose !== "other" - ? `The desired outcome of these projects is primarily for ${endPurpose}.` - : "The end goal for these projects is versatile."; + const purposeString = endPurpose !== "other" ? `The desired outcome of these projects is primarily for ${endPurpose}.` : "The end goal for these projects is versatile."; const prompt: string = ` Please generate a response in the following JSON format: @@ -112,14 +83,9 @@ interface ExplainRequestBody { description: string; } -export const explainProjectByTitle = async ( - req: Request, - res: Response, - next: NextFunction, -) => { +export const explainProjectByTitle = async (req: Request, res: Response, next: NextFunction) => { try { - const { title, materials, tools, time, budget, description } = - req.body as ExplainRequestBody; + const { title, materials, tools, time, budget, description } = req.body as ExplainRequestBody; const openai: OpenAI = req.app.get("openai"); diff --git a/server/src/controllers/share.controller.ts b/server/src/controllers/share.controller.ts index e7979bf..bc5d2cc 100644 --- a/server/src/controllers/share.controller.ts +++ b/server/src/controllers/share.controller.ts @@ -2,11 +2,7 @@ import { Request, Response, NextFunction } from "express"; import { sendSuccess } from "../utils/response-template"; import { PrismaClient } from "@prisma/client"; -export const getProjectById = async ( - req: Request, - res: Response, - next: NextFunction, -) => { +export const getProjectById = async (req: Request, res: Response, next: NextFunction) => { try { const id = req.params.id; @@ -29,11 +25,7 @@ export const getProjectById = async ( } }; -export const saveProject = async ( - req: Request, - res: Response, - next: NextFunction, -) => { +export const saveProject = async (req: Request, res: Response, next: NextFunction) => { try { const prisma = req.app.get("prisma") as PrismaClient; diff --git a/server/src/controllers/unsplash.controller.ts b/server/src/controllers/unsplash.controller.ts index 013ebbf..06e02bd 100644 --- a/server/src/controllers/unsplash.controller.ts +++ b/server/src/controllers/unsplash.controller.ts @@ -2,15 +2,9 @@ import { Request, Response, NextFunction } from "express"; import { sendSuccess } from "../utils/response-template"; -export const searchImages = async ( - req: Request, - res: Response, - next: NextFunction, -) => { +export const searchImages = async (req: Request, res: Response, next: NextFunction) => { try { - const query: string = decodeURIComponent( - req.query.query ? req.query.query.toString() : "", - ); + const query: string = decodeURIComponent(req.query.query ? req.query.query.toString() : ""); const unsplash = req.app.get("unsplash"); @@ -45,11 +39,7 @@ export const searchImages = async ( }, }); } else { - sendSuccess( - res, - { errors: "No photos found for the given query." }, - 400, - ); + sendSuccess(res, { errors: "No photos found for the given query." }, 400); } } } catch (error) { diff --git a/server/src/middleware/error-handler.ts b/server/src/middleware/error-handler.ts index 191a3b7..fa61126 100644 --- a/server/src/middleware/error-handler.ts +++ b/server/src/middleware/error-handler.ts @@ -2,12 +2,7 @@ import { NextFunction, Request, Response } from "express"; import { sendError } from "../utils/response-template"; /* eslint-disable @typescript-eslint/no-unused-vars */ -const errorHandlerMiddleware = ( - err: any, - req: Request, - res: Response, - next: NextFunction, -) => { +const errorHandlerMiddleware = (err: any, req: Request, res: Response, next: NextFunction) => { console.error(err.stack); sendError(res, "Something went wrong!"); }; diff --git a/server/src/middleware/schema-validation.ts b/server/src/middleware/schema-validation.ts index 6a8d3e4..a1f6c37 100644 --- a/server/src/middleware/schema-validation.ts +++ b/server/src/middleware/schema-validation.ts @@ -2,11 +2,7 @@ import { Request, Response, NextFunction } from "express"; import { validationResult } from "express-validator"; import { sendSuccess } from "../utils/response-template"; -const validationMiddleware = ( - req: Request, - res: Response, - next: NextFunction, -) => { +const validationMiddleware = (req: Request, res: Response, next: NextFunction) => { const errors = validationResult(req); if (!errors.isEmpty()) { return sendSuccess(res, { errors: errors.array() }, 400); diff --git a/server/src/routes/guide.routes.ts b/server/src/routes/guide.routes.ts index 655f643..9d6c12b 100644 --- a/server/src/routes/guide.routes.ts +++ b/server/src/routes/guide.routes.ts @@ -1,8 +1,5 @@ import express from "express"; -import { - getAllGuidePaths, - getHowToGuideByPath, -} from "../controllers/guide.controller"; +import { getAllGuidePaths, getHowToGuideByPath } from "../controllers/guide.controller"; const router = express.Router(); diff --git a/server/src/routes/openai.routes.ts b/server/src/routes/openai.routes.ts index 0f45b9d..3cdd535 100644 --- a/server/src/routes/openai.routes.ts +++ b/server/src/routes/openai.routes.ts @@ -1,20 +1,12 @@ import express from "express"; import { ideaValidationSchema } from "../validators/idea"; -import { - explainProjectByTitle, - generateIdea, -} from "../controllers/openai.controller"; +import { explainProjectByTitle, generateIdea } from "../controllers/openai.controller"; import { explainValidationSchema } from "../validators/explain"; import validationMiddleware from "../middleware/schema-validation"; const router = express.Router(); router.post("/idea", ideaValidationSchema, validationMiddleware, generateIdea); -router.post( - "/explain", - explainValidationSchema, - validationMiddleware, - explainProjectByTitle, -); +router.post("/explain", explainValidationSchema, validationMiddleware, explainProjectByTitle); export default router; diff --git a/server/src/routes/share.routes.ts b/server/src/routes/share.routes.ts index 93bb5b0..86ea88d 100644 --- a/server/src/routes/share.routes.ts +++ b/server/src/routes/share.routes.ts @@ -6,11 +6,6 @@ import validationMiddleware from "../middleware/schema-validation"; const router = express.Router(); router.get("/:id", getProjectById); -router.post( - "", - shareProjectValidationSchema, - validationMiddleware, - saveProject, -); +router.post("", shareProjectValidationSchema, validationMiddleware, saveProject); export default router; diff --git a/server/src/routes/unsplash.routes.ts b/server/src/routes/unsplash.routes.ts index fad9803..aeac2ce 100644 --- a/server/src/routes/unsplash.routes.ts +++ b/server/src/routes/unsplash.routes.ts @@ -5,11 +5,6 @@ import validationMiddleware from "../middleware/schema-validation"; const router = express.Router(); -router.get( - "/search", - searchValidationSchema, - validationMiddleware, - searchImages, -); +router.get("/search", searchValidationSchema, validationMiddleware, searchImages); export default router; diff --git a/server/src/server.ts b/server/src/server.ts index 2894bd6..cec6bf3 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -7,12 +7,7 @@ import { createApi } from "unsplash-js"; import * as nodeFetch from "node-fetch"; import { PrismaClient } from "@prisma/client"; -import { - guideRoutes, - unsplashRoutes, - openaiRoutes, - shareRoutes, -} from "./routes/index.routes"; +import { guideRoutes, unsplashRoutes, openaiRoutes, shareRoutes } from "./routes/index.routes"; import { sendError } from "./utils/response-template"; import errorHandlerMiddleware from "./middleware/error-handler"; import limiter from "./middleware/request-limit"; @@ -39,9 +34,7 @@ app.set("prisma", prisma); app.use(helmet()); -const allowedOrigins = process.env - .WEBSITE_URL!.split(",") - .map((origin) => origin.trim()); +const allowedOrigins = process.env.WEBSITE_URL!.split(",").map((origin) => origin.trim()); app.use( cors({ diff --git a/server/src/utils/response-template.ts b/server/src/utils/response-template.ts index 78e7a42..ef99768 100644 --- a/server/src/utils/response-template.ts +++ b/server/src/utils/response-template.ts @@ -4,22 +4,14 @@ interface SuccessResponseData { [key: string]: any; } -export function sendSuccess( - res: Response, - data: SuccessResponseData, - status: number = 200, -) { +export function sendSuccess(res: Response, data: SuccessResponseData, status: number = 200) { res.status(status).setHeader("Content-Type", "application/json").json({ success: true, data, }); } -export function sendError( - res: Response, - message: string, - status: number = 500, -) { +export function sendError(res: Response, message: string, status: number = 500) { res.status(status).setHeader("Content-Type", "application/json").json({ success: false, error: message, diff --git a/server/src/validators/share-link.ts b/server/src/validators/share-link.ts index 52728e8..ad6a0d2 100644 --- a/server/src/validators/share-link.ts +++ b/server/src/validators/share-link.ts @@ -167,8 +167,7 @@ export const shareProjectValidationSchema = checkSchema({ }, "projectImage.links.download_location": { in: ["body"], - errorMessage: - "Image download location link is required and should be a string.", + errorMessage: "Image download location link is required and should be a string.", isString: true, trim: true, notEmpty: {