From ccb5c664efe3a843f28bf30ed6dbf04f535075b5 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 21 Aug 2023 20:20:59 +0200 Subject: [PATCH 01/32] Feature/refresh cryptocurrencies list 20230821 (#2256) * Update cryptocurrencies.json * Update changelog --- CHANGELOG.md | 6 + .../cryptocurrencies/cryptocurrencies.json | 153 ++++++++++++++---- 2 files changed, 131 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3c647fbe..dcc7eded4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Refreshed the cryptocurrencies list + ## 1.302.0 - 2023-08-20 ### Changed diff --git a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json index 413425f68..390d2c68f 100644 --- a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json +++ b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json @@ -51,7 +51,9 @@ "3FT": "ThreeFold Token", "3ULL": "3ULL Coin", "3XD": "3DChain", + "420CHAN": "420chan", "4ART": "4ART Coin", + "4CHAN": "4Chan", "4JNET": "4JNET", "77G": "GraphenTech", "7E": "7ELEVEN", @@ -60,6 +62,7 @@ "8BT": "8 Circuit Studios", "8PAY": "8Pay", "8X8": "8X8 Protocol", + "9GAG": "9GAG", "A5T": "Alpha5", "AAA": "Moon Rabbit", "AAB": "AAX Token", @@ -101,6 +104,7 @@ "ACN": "AvonCoin", "ACOIN": "ACoin", "ACP": "Anarchists Prime", + "ACQ": "Acquire.Fi", "ACS": "Access Protocol", "ACT": "Achain", "ACTIN": "Actinium", @@ -180,7 +184,7 @@ "AGX": "Agricoin", "AHOO": "Ahoolee", "AHT": "AhaToken", - "AI": "Multiverse", + "AI": "AiDoge", "AIB": "AdvancedInternetBlock", "AIBB": "AiBB", "AIBK": "AIB Utility Token", @@ -213,6 +217,7 @@ "AKA": "Akroma", "AKITA": "Akita Inu", "AKN": "Akoin", + "AKNC": "Aave KNC v1", "AKRO": "Akropolis", "AKT": "Akash Network", "AKTIO": "AKTIO Coin", @@ -237,12 +242,14 @@ "ALIC": "AliCoin", "ALICE": "My Neighbor Alice", "ALIEN": "AlienCoin", + "ALINK": "Aave LINK v1", "ALIS": "ALISmedia", "ALITA": "Alita Network", "ALIX": "AlinX", "ALKI": "Alkimi", "ALLBI": "ALL BEST ICO", "ALLEY": "NFT Alley", + "ALLIN": "All in", "ALN": "Aluna", "ALOHA": "Aloha", "ALP": "Alphacon", @@ -410,12 +417,14 @@ "ARIX": "Arix", "ARK": "ARK", "ARKER": "Arker", + "ARKM": "Arkham", "ARKN": "Ark Rivals", "ARM": "Armory Coin", "ARMOR": "ARMOR", "ARMR": "ARMR", "ARMS": "2Acoin", "ARNA": "ARNA Panacea", + "ARNM": "Arenum", "ARNO": "ARNO", "ARNX": "Aeron", "ARNXM": "Armor NXM", @@ -472,6 +481,7 @@ "ASTO": "Altered State Token", "ASTON": "Aston", "ASTR": "Astar", + "ASTRAFER": "Astrafer", "ASTRAL": "Astral", "ASTRO": "AstroSwap", "ASTROC": "Astroport Classic", @@ -531,6 +541,7 @@ "AURY": "Aurory", "AUSCM": "Auric Network", "AUSD": "Appeal dollar", + "AUSDC": "Aave USDC v1", "AUT": "Autoria", "AUTHORSHIP": "Authorship", "AUTO": "Auto", @@ -612,6 +623,7 @@ "BACK": "DollarBack", "BACOIN": "BACoin", "BACON": "BaconDAO (BACON)", + "BAD": "Bad Idea AI", "BADGER": "Badger DAO", "BAG": "BondAppetit", "BAGS": "Basis Gold Share", @@ -662,6 +674,7 @@ "BBCT": "TraDove B2BCoin", "BBDT": "BBD Token", "BBF": "Bubblefong", + "BBFT": "Block Busters Tech Token", "BBG": "BigBang", "BBGC": "BigBang Game", "BBI": "BelugaPay", @@ -725,6 +738,7 @@ "BDX": "Beldex", "BDY": "Buddy DAO", "BEACH": "BeachCoin", + "BEAI": "BeNFT Solutions", "BEAM": "Beam", "BEAN": "BeanCash", "BEAST": "CryptoBeast", @@ -806,6 +820,7 @@ "BIDR": "Binance IDR Stable Coin", "BIFI": "Beefy.Finance", "BIFIF": "BiFi", + "BIG": "Big Eyes", "BIGHAN": "BighanCoin", "BIGSB": "BigShortBets", "BIGUP": "BigUp", @@ -1090,6 +1105,7 @@ "BRNK": "Brank", "BRNX": "Bronix", "BRO": "Bitradio", + "BROCK": "Bitrock", "BRONZ": "BitBronze", "BRT": "Bikerush", "BRTR": "Barter", @@ -1226,7 +1242,7 @@ "BULL": "Bullieverse", "BULLC": "BuySell", "BULLION": "BullionFX", - "BULLS": "BullshitCoin", + "BULLS": "Bull Coin", "BULLSH": "Bullshit Inu", "BUMN": "BUMooN", "BUMP": "Bumper", @@ -1319,8 +1335,10 @@ "CAP": "BottleCaps", "CAPD": "Capdax", "CAPP": "Cappasity", + "CAPRICOIN": "CapriCoin", "CAPS": "Ternoa", "CAPT": "Bitcoin Captain", + "CAPTAINPLANET": "Captain Planet", "CAR": "CarBlock", "CARAT": "Carats Token", "CARBON": "Carboncoin", @@ -1478,6 +1496,7 @@ "CHECKR": "CheckerChain", "CHECOIN": "CheCoin", "CHEDDA": "Chedda", + "CHEEL": "Cheelee", "CHEESE": "CHEESE", "CHEESUS": "Cheesus", "CHEQ": "CHEQD Network", @@ -1520,7 +1539,8 @@ "CHX": "Own", "CHY": "Concern Poverty Chain", "CHZ": "Chiliz", - "CIC": "CIChain", + "CIC": "Crazy Internet Coin", + "CICHAIN": "CIChain", "CIF": "Crypto Improvement Fund", "CIM": "COINCOME", "CIN": "CinderCoin", @@ -1630,7 +1650,6 @@ "COB": "Cobinhood", "COC": "Coin of the champions", "COCK": "Shibacock", - "COCOS": "COCOS BCX", "CODEO": "Codeo Token", "CODEX": "CODEX Finance", "CODI": "Codi Finance", @@ -1659,7 +1678,7 @@ "COLX": "ColossusCoinXT", "COM": "Coliseum", "COMB": "Combo", - "COMBO": "Furucombo", + "COMBO": "COMBO", "COMFI": "CompliFi", "COMM": "Community Coin", "COMMUNITYCOIN": "Community Coin", @@ -1672,7 +1691,6 @@ "CONI": "CoinBene", "CONS": "ConSpiracy Coin", "CONSENTIUM": "Consentium", - "CONT": "Contentos", "CONUN": "CONUN", "CONV": "Convergence", "COOK": "Cook", @@ -1683,17 +1701,19 @@ "COPS": "Cops Finance", "COR": "Corion", "CORAL": "CoralPay", - "CORE": "Coreum", + "CORE": "Core", "COREDAO": "coreDAO", "COREG": "Core Group Asset", + "COREUM": "Coreum", "CORGI": "Corgi Inu", "CORN": "CORN", "CORX": "CorionX", - "COS": "COS", + "COS": "Contentos", "COSHI": "CoShi Inu", "COSM": "CosmoChain", "COSMIC": "CosmicSwap", "COSP": "Cosplay Token", + "COSS": "COS", "COSX": "Cosmecoin", "COT": "CoTrader", "COTI": "COTI", @@ -1729,7 +1749,7 @@ "CPOOL": "Clearpool", "CPROP": "CPROP", "CPRX": "Crypto Perx", - "CPS": "CapriCoin", + "CPS": "Cryptostone", "CPT": "Cryptaur", "CPU": "CPUcoin", "CPX": "Apex Token", @@ -1796,6 +1816,7 @@ "CRTS": "Cratos", "CRU": "Crust Network", "CRV": "Curve DAO Token", + "CRVUSD": "crvUSD", "CRW": "Crown Coin", "CRWD": "CRWD Network", "CRWNY": "Crowny Token", @@ -1843,7 +1864,7 @@ "CTLX": "Cash Telex", "CTN": "Continuum Finance", "CTO": "Crypto", - "CTP": "Captain Planet", + "CTP": "Ctomorrow Platform", "CTPL": "Cultiplan", "CTPT": "Contents Protocol", "CTR": "Creator Platform", @@ -2007,6 +2028,7 @@ "DBC": "DeepBrain Chain", "DBCCOIN": "Datablockchain", "DBD": "Day By Day", + "DBEAR": "DBear Coin", "DBET": "Decent.bet", "DBIC": "DubaiCoin", "DBIX": "DubaiCoin", @@ -2058,6 +2080,7 @@ "DEEP": "DeepCloud AI", "DEEPG": "Deep Gold", "DEEX": "DEEX", + "DEEZ": "DEEZ NUTS", "DEFI": "Defi", "DEFI5": "DEFI Top 5 Tokens Index", "DEFIL": "DeFIL", @@ -2162,11 +2185,12 @@ "DIEM": "Facebook Diem", "DIESEL": "Diesel", "DIFX": "Digital Financial Exchange", - "DIG": "Dignity", + "DIG": "DIEGO", "DIGG": "DIGG", "DIGIC": "DigiCube", "DIGIF": "DigiFel", "DIGITAL": "Digital Reserve Currency", + "DIGNITY": "Dignity", "DIGS": "Diggits", "DIKO": "Arkadiko", "DILI": "D Community", @@ -2246,6 +2270,7 @@ "DOGBOSS": "Dog Boss", "DOGDEFI": "DogDeFiCoin", "DOGE": "Dogecoin", + "DOGE20": "Doge 2.0", "DOGEBNB": "DogeBNB", "DOGEC": "DogeCash", "DOGECEO": "Doge CEO", @@ -2559,6 +2584,7 @@ "EMC2": "Einsteinium", "EMD": "Emerald", "EMIGR": "EmiratesGoldCoin", + "EML": "EML Protocol", "EMN.CUR": "Eastman Chemical", "EMON": "Ethermon", "EMOT": "Sentigraph.io", @@ -2692,6 +2718,7 @@ "ETHD": "Ethereum Dark", "ETHER": "Etherparty", "ETHERDELTA": "EtherDelta", + "ETHERKING": "Ether Kingdoms Token", "ETHERNITY": "Ethernity Chain", "ETHF": "EthereumFair", "ETHIX": "EthicHub", @@ -2709,6 +2736,7 @@ "ETHSHIB": "Eth Shiba", "ETHV": "Ethverse", "ETHW": "Ethereum PoW", + "ETHX": "Stader ETHx", "ETHY": "Ethereum Yield", "ETI": "EtherInc", "ETK": "Energi Token", @@ -2722,7 +2750,7 @@ "ETR": "Electric Token", "ETRNT": "Eternal Trusts", "ETS": "ETH Share", - "ETSC": "​Ether star blockchain", + "ETSC": "Ether star blockchain", "ETT": "EncryptoTel", "ETY": "Ethereum Cloud", "ETZ": "EtherZero", @@ -2773,6 +2801,7 @@ "EXB": "ExaByte (EXB)", "EXC": "Eximchain", "EXCC": "ExchangeCoin", + "EXCHANGEN": "ExchangeN", "EXCL": "Exclusive Coin", "EXE": "ExeCoin", "EXFI": "Flare Finance", @@ -2781,7 +2810,7 @@ "EXLT": "ExtraLovers", "EXM": "EXMO Coin", "EXMR": "EXMR FDN", - "EXN": "ExchangeN", + "EXN": "Exeno", "EXO": "Exosis", "EXP": "Expanse", "EXRD": "Radix", @@ -2814,6 +2843,7 @@ "FAIR": "FairCoin", "FAIRC": "Faireum Token", "FAIRG": "FairGame", + "FAKE": "FAKE COIN", "FAKT": "Medifakt", "FALCONS": "Falcon Swaps", "FAME": "Fame MMA", @@ -2870,6 +2900,7 @@ "FEN": "First Ever NFT", "FENOMY": "Fenomy", "FER": "Ferro", + "FERC": "FairERC20", "FERMA": "Ferma", "FESS": "Fesschain", "FET": "Fetch.AI", @@ -2931,7 +2962,7 @@ "FLASH": "Flashstake", "FLASHC": "FLASH coin", "FLC": "FlowChainCoin", - "FLD": "FLUID", + "FLD": "FluidAI", "FLDC": "Folding Coin", "FLDT": "FairyLand", "FLETA": "FLETA", @@ -3091,6 +3122,7 @@ "FUEL": "Jetfuel Finance", "FUJIN": "Fujinto", "FUKU": "Furukuru", + "FUMO": "Alien Milady Fumo", "FUN": "FUN Token", "FUNC": "FunCoin", "FUND": "Unification", @@ -3101,6 +3133,7 @@ "FUNDZ": "FundFantasy", "FUNK": "Cypherfunks Coin", "FUR": "Furio", + "FURU": "Furucombo", "FURY": "Engines of Fury", "FUS": "Fus", "FUSE": "Fuse Network Token", @@ -3118,6 +3151,7 @@ "FXP": "FXPay", "FXS": "Frax Share", "FXT": "FuzeX", + "FXY": "Floxypay", "FYN": "Affyn", "FYP": "FlypMe", "FYZ": "Fyooz", @@ -3172,6 +3206,7 @@ "GAT": "GATCOIN", "GATE": "GATENet", "GATEWAY": "Gateway Protocol", + "GAYPEPE": "Gay Pepe", "GAZE": "GazeTV", "GB": "GoldBlocks", "GBA": "Geeba", @@ -3222,6 +3257,7 @@ "GEMZ": "Gemz Social", "GEN": "DAOstack", "GENE": "Genopets", + "GENIE": "The Genie", "GENIX": "Genix", "GENS": "Genshiro", "GENSTAKE": "Genstake", @@ -3261,6 +3297,7 @@ "GHCOLD": "Galaxy Heroes Coin", "GHD": "Giftedhands", "GHNY": "Grizzly Honey", + "GHO": "GHO", "GHOST": "GhostbyMcAfee", "GHOSTCOIN": "GhostCoin", "GHOSTM": "GhostMarket", @@ -3274,6 +3311,7 @@ "GIFT": "GiftNet", "GIG": "GigaCoin", "GIGA": "GigaSwap", + "GIGX": "GigXCoin", "GIM": "Gimli", "GIMMER": "Gimmer", "GIN": "GINcoin", @@ -3385,6 +3423,7 @@ "GOVT": "The Government Network", "GOZ": "Göztepe S.K. Fan Token", "GP": "Wizards And Dragons", + "GPBP": "Genius Playboy Billionaire Philanthropist", "GPKR": "Gold Poker", "GPL": "Gold Pressed Latinum", "GPPT": "Pluto Project Coin", @@ -3501,7 +3540,8 @@ "HALF": "0.5X Long Bitcoin Token", "HALFSHIT": "0.5X Long Shitcoin Index Token", "HALLO": "Halloween Coin", - "HALO": "Halo Platform", + "HALO": "Halo Coin", + "HALOPLATFORM": "Halo Platform", "HAM": "Hamster", "HAMS": "HamsterCoin", "HANA": "Hanacoin", @@ -3598,6 +3638,7 @@ "HILL": "President Clinton", "HINA": "Hina Inu", "HINT": "Hintchain", + "HIPPO": "HIPPO", "HIRE": "HireMatch", "HIT": "HitChain", "HITBTC": "HitBTC Token", @@ -3634,6 +3675,7 @@ "HNTR": "Hunter", "HNY": "Honey", "HNZO": "Hanzo Inu", + "HOBO": "HOBO THE BEAR", "HOD": "HoDooi.com", "HODL": "HOdlcoin", "HOGE": "Hoge Finance", @@ -3839,7 +3881,7 @@ "IMPCN": "Brain Space", "IMPER": "Impermax", "IMPS": "Impulse Coin", - "IMPT": "Ether Kingdoms Token", + "IMPT": "IMPT", "IMPULSE": "IMPULSE by FDR", "IMS": "Independent Money System", "IMST": "Imsmart", @@ -4001,6 +4043,7 @@ "JAM": "Tune.Fm", "JANE": "JaneCoin", "JAR": "Jarvis+", + "JARED": "Jared From Subway", "JASMY": "JasmyCoin", "JBS": "JumBucks Coin", "JBX": "Juicebox", @@ -4163,9 +4206,10 @@ "KIN": "Kin", "KIND": "Kind Ads", "KINE": "Kine Protocol", - "KING": "King Finance", + "KING": "KING", "KING93": "King93", "KINGDOMQUEST": "Kingdom Quest", + "KINGF": "King Finance", "KINGSHIB": "King Shiba", "KINGSWAP": "KingSwap", "KINT": "Kintsugi", @@ -4175,6 +4219,7 @@ "KISC": "Kaiser", "KISHIMOTO": "Kishimoto Inu", "KISHU": "Kishu Inu", + "KITA": "KITA INU", "KITSU": "Kitsune Inu", "KITTY": "Kitty Inu", "KKO": "Kineko", @@ -4267,10 +4312,12 @@ "KUBO": "KUBO", "KUBOS": "KubosCoin", "KUE": "Kuende", + "KUJI": "Kujira", "KUMA": "Kuma Inu", "KUNCI": "Kunci Coin", "KUR": "Kuro", "KURT": "Kurrent", + "KUSA": "Kusa Inu", "KUSD": "Kowala", "KUSH": "KushCoin", "KUV": "Kuverit", @@ -4280,6 +4327,7 @@ "KVT": "Kinesis Velocity Token", "KWATT": "4New", "KWD": "KIWI DEFI", + "KWENTA": "Kwenta", "KWH": "KWHCoin", "KWIK": "KwikSwap", "KWS": "Knight War Spirits", @@ -4299,7 +4347,9 @@ "LABX": "Stakinglab", "LACCOIN": "LocalAgro", "LACE": "Lovelace World", + "LADYS": "Milady Meme Coin", "LAEEB": "LaEeb", + "LAELAPS": "Laelaps", "LAIKA": "Laika Protocol", "LALA": "LaLa World", "LAMB": "Lambda", @@ -4455,13 +4505,14 @@ "LLAND": "Lyfe Land", "LLG": "Loligo", "LLION": "Lydian Lion", - "LM": "LM Token", + "LM": "LeisureMeta", "LMAO": "LMAO Finance", "LMC": "LomoCoin", "LMCH": "Latamcash", "LMCSWAP": "LimoCoin SWAP", "LMR": "Lumerin", "LMT": "Lympo Market Token", + "LMTOKEN": "LM Token", "LMXC": "LimonX", "LMY": "Lunch Money", "LN": "LINK", @@ -4530,6 +4581,7 @@ "LRG": "Largo Coin", "LRN": "Loopring [NEO]", "LSD": "LightSpeedCoin", + "LSETH": "Liquid Staked ETH", "LSK": "Lisk", "LSP": "Lumenswap", "LSS": "Lossless", @@ -4626,6 +4678,7 @@ "MAEP": "Maester Protocol", "MAG": "Magnet", "MAGIC": "Magic", + "MAGICF": "MagicFox", "MAHA": "MahaDAO", "MAI": "Mindsync", "MAID": "MaidSafe Coin", @@ -4639,6 +4692,7 @@ "MANDOX": "MandoX", "MANGA": "Manga Token", "MANNA": "Manna", + "MANTLE": "Mantle", "MAP": "MAP Protocol", "MAPC": "MapCoin", "MAPE": "Mecha Morphing", @@ -4672,6 +4726,7 @@ "MATIC": "Polygon", "MATPAD": "MaticPad", "MATTER": "AntiMatter", + "MAV": "Maverick Protocol", "MAX": "MaxCoin", "MAXR": "Max Revive", "MAY": "Theresa May Coin", @@ -4776,6 +4831,7 @@ "MESA": "MetaVisa", "MESG": "MESG", "MESH": "MeshBox", + "MESSI": "MESSI COIN", "MET": "Metronome", "META": "Metadium", "METAC": "Metacoin", @@ -4881,6 +4937,7 @@ "MIODIO": "MIODIOCOIN", "MIOTA": "IOTA", "MIR": "Mirror Protocol", + "MIRACLE": "MIRACLE", "MIRC": "MIR COIN", "MIS": "Mithril Share", "MISA": "Sangkara", @@ -4938,7 +4995,6 @@ "MNRB": "MoneyRebel", "MNS": "Monnos", "MNST": "MoonStarter", - "MNT": "microNFT", "MNTC": "Manet Coin", "MNTG": "Monetas", "MNTL": "AssetMantle", @@ -4967,6 +5023,7 @@ "MOF": "Molecular Future (TRC20)", "MOFI": "MobiFi", "MOFOLD": "Molecular Future (ERC20)", + "MOG": "Mog Coin", "MOGU": "Mogu", "MOGX": "Mogu", "MOI": "MyOwnItem", @@ -4989,9 +5046,11 @@ "MONEYIMT": "MoneyToken", "MONF": "Monfter", "MONG": "MongCoin", + "MONG20": "Mongoose 2.0", "MONI": "Monsta Infinite", "MONK": "Monkey Project", "MONKEY": "Monkey", + "MONKEYS": "Monkeys Token", "MONO": "MonoX", "MONONOKEINU": "Mononoke Inu", "MONS": "Monsters Clan", @@ -5011,11 +5070,13 @@ "MOONSHOT": "Moonshot", "MOOO": "Hashtagger", "MOOV": "dotmoovs", + "MOOX": "Moox Protocol", "MOPS": "Mops", "MORA": "Meliora", "MORE": "More Coin", "MOS": "MOS Coin", "MOT": "Olympus Labs", + "MOTG": "MetaOctagon", "MOTI": "Motion", "MOTO": "Motocoin", "MOV": "MovieCoin", @@ -5076,6 +5137,7 @@ "MSWAP": "MoneySwap", "MT": "MyToken", "MTA": "Meta", + "MTB": "MetaBridge", "MTBC": "Metabolic", "MTC": "MEDICAL TOKEN CURRENCY", "MTCMN": "MTC Mesh", @@ -5108,6 +5170,7 @@ "MUE": "MonetaryUnit", "MULTI": "Multichain", "MULTIBOT": "Multibot", + "MULTIV": "Multiverse", "MUN": "MUNcoin", "MUNCH": "Munch Token", "MUSD": "mStable USD", @@ -5648,6 +5711,7 @@ "OZP": "OZAPHYRE", "P202": "Project 202", "P2PS": "P2P Solutions Foundation", + "PAAL": "PAAL AI", "PAC": "PAC Protocol", "PACOCA": "Pacoca", "PAD": "NearPad", @@ -5736,6 +5800,7 @@ "PEARL": "Pearl Finance", "PEC": "PeaceCoin", "PEEL": "Meta Apes", + "PEEPA": "Peepa", "PEEPS": "The People’s Coin", "PEG": "PegNet", "PEGS": "PegShares", @@ -5748,6 +5813,7 @@ "PEOPLE": "ConstitutionDAO", "PEOS": "pEOS", "PEPE": "Pepe", + "PEPE20": "Pepe 2.0", "PEPECASH": "Pepe Cash", "PEPPER": "Pepper Token", "PEPS": "PEPS Coin", @@ -5822,6 +5888,7 @@ "PINK": "PinkCoin", "PINKX": "PantherCoin", "PINMO": "Pinmo", + "PINO": "Pinocchu", "PINU": "Piccolo Inu", "PIO": "Pioneershares", "PIPI": "Pippi Finance", @@ -5885,6 +5952,7 @@ "PLS": "Pulsechain", "PLSD": "PulseDogecoin", "PLSPAD": "PulsePad", + "PLSX": "PulseX", "PLT": "Poollotto.finance", "PLTC": "PlatonCoin", "PLTX": "PlutusX", @@ -5911,7 +5979,6 @@ "PNK": "Kleros", "PNL": "True PNL", "PNODE": "Pinknode", - "PNP": "LogisticsX", "PNT": "pNetwork Token", "PNX": "PhantomX", "PNY": "Peony Coin", @@ -5927,6 +5994,7 @@ "POINTS": "Cryptsy Points", "POK": "Pokmonsters", "POKEM": "Pokemonio", + "POKEMON": "Pokemon", "POKER": "PokerCoin", "POKT": "Pocket Network", "POL": "Pool-X", @@ -6010,6 +6078,7 @@ "PRIME": "Echelon Prime", "PRIMECHAIN": "PrimeChain", "PRINT": "Printer.Finance", + "PRINTERIUM": "Printerium", "PRINTS": "FingerprintsDAO", "PRISM": "Prism", "PRIX": "Privatix", @@ -6033,7 +6102,7 @@ "PROTON": "Proton", "PROUD": "PROUD Money", "PROXI": "PROXI", - "PRP": "Papyrus", + "PRP": "Pepe Prime", "PRPS": "Purpose", "PRPT": "Purple Token", "PRQ": "PARSIQ", @@ -6042,7 +6111,7 @@ "PRTG": "Pre-Retogeum", "PRV": "PrivacySwap", "PRVS": "Previse", - "PRX": "Printerium", + "PRX": "Parex", "PRXY": "Proxy", "PRY": "PRIMARY", "PSB": "Planet Sandbox", @@ -6120,6 +6189,7 @@ "PYRAM": "Pyram Token", "PYRK": "Pyrk", "PYT": "Payther", + "PYUSD": "PayPal USD", "PZM": "Prizm", "Q1S": "Quantum1Net", "Q2C": "QubitCoin", @@ -6178,6 +6248,7 @@ "QUA": "Quantum Tech", "QUACK": "Rich Quack", "QUAM": "Quam Network", + "QUANT": "Quant Finance", "QUARASHI": "Quarashi Network", "QUARTZ": "Sandclock", "QUASA": "Quasacoin", @@ -6201,7 +6272,7 @@ "RAC": "RAcoin", "RACA": "Radio Caca", "RACEFI": "RaceFi", - "RAD": "Radicle", + "RAD": "Radworks", "RADAR": "DappRadar", "RADI": "RadicalCoin", "RADIO": "RadioShack", @@ -6220,7 +6291,7 @@ "RAM": "Ramifi Protocol", "RAMP": "RAMP", "RANKER": "RankerDao", - "RAP": "Rapture", + "RAP": "Philosoraptor", "RAPDOGE": "RapDoge", "RARE": "SuperRare", "RARI": "Rarible", @@ -6277,6 +6348,7 @@ "REA": "Realisto", "REAL": "RealLink", "REALM": "Realm", + "REALMS": "Realms of Ethernity", "REALPLATFORM": "REAL", "REALY": "Realy Metaverse", "REAP": "ReapChain", @@ -6287,6 +6359,7 @@ "RED": "RED TOKEN", "REDC": "RedCab", "REDCO": "Redcoin", + "REDDIT": "Reddit", "REDI": "REDi", "REDLANG": "RED", "REDLC": "Redlight Chain", @@ -6324,7 +6397,7 @@ "REST": "Restore", "RET": "RealTract", "RETAIL": "Retail.Global", - "RETH": "Realms of Ethernity", + "RETH": "Rocket Pool ETH", "RETH2": "rETH2", "RETIRE": "Retire Token", "REU": "REUCOIN", @@ -6351,6 +6424,7 @@ "RGP": "Rigel Protocol", "RGT": "Rari Governance Token", "RHEA": "Rhea", + "RHINO": "RHINO", "RHOC": "RChain", "RHP": "Rhypton Club", "RIC": "Riecoin", @@ -6490,6 +6564,7 @@ "RWE": "Real-World Evidence", "RWN": "Rowan Token", "RWS": "Robonomics Web Services", + "RXD": "Radiant", "RXT": "RIMAUNANGIS", "RYC": "RoyalCoin", "RYCN": "RoyalCoin 2.0", @@ -6564,6 +6639,7 @@ "SBTC": "Super Bitcoin", "SC": "Siacoin", "SCA": "SiaClassic", + "SCAM": "Scam Coin", "SCAP": "SafeCapital", "SCAR": "Velhalla", "SCASH": "SpaceCash", @@ -6624,6 +6700,7 @@ "SEER": "SEER", "SEI": "Sei", "SEL": "SelenCoin", + "SELF": "SELFCrypto", "SEM": "Semux", "SEN": "Sentaro", "SENATE": "SENATE", @@ -6665,6 +6742,7 @@ "SGE": "Society of Galactic Exploration", "SGLY": "Singularity", "SGN": "Signals Network", + "SGO": "SafuuGO", "SGOLD": "SpaceGold", "SGP": "SGPay", "SGR": "Sogur Currency", @@ -6684,6 +6762,7 @@ "SHEESH": "Sheesh it is bussin bussin", "SHEESHA": "Sheesha Finance", "SHELL": "Shell Token", + "SHERA": "Shera Tokens", "SHFL": "SHUFFLE!", "SHFT": "Shyft Network", "SHI": "Shirtum", @@ -6719,6 +6798,8 @@ "SHR": "ShareToken", "SHREK": "ShrekCoin", "SHROOM": "Shroom.Finance", + "SHROOMFOX": "Magic Shroom", + "SHS": "SHEESH", "SHX": "Stronghold Token", "SI": "Siren", "SIB": "SibCoin", @@ -7018,9 +7099,11 @@ "STEN": "Steneum Coin", "STEP": "Step Finance", "STEPH": "Step Hero", + "STEPR": "Step", "STEPS": "Steps", "STERLINGCOIN": "SterlingCoin", "STETH": "Staked Ether", + "STEWIE": "Stewie Coin", "STEX": "STEX", "STF": "Structure Finance", "STFX": "STFX", @@ -7055,7 +7138,7 @@ "STR": "Sourceless", "STRAKS": "Straks", "STRAX": "Stratis", - "STRAY": "Animal Token", + "STRAY": "Stray Dog", "STREAM": "STREAMIT COIN", "STRIP": "Stripto", "STRK": "Strike", @@ -7361,6 +7444,7 @@ "TOM": "TOM Finance", "TOMAHAWKCOIN": "Tomahawkcoin", "TOMB": "Tomb", + "TOMI": "tomiNet", "TOMO": "TomoChain", "TOMOE": "TomoChain ERC20", "TOMS": "TomTomCoin", @@ -7385,6 +7469,7 @@ "TOTM": "Totem", "TOWER": "Tower", "TOWN": "Town Star", + "TOX": "INTOverse", "TOZ": "Tozex", "TP": "Token Swap", "TPAD": "TrustPad", @@ -7600,6 +7685,7 @@ "UNITY": "SuperNET", "UNIVRS": "Universe", "UNIX": "UniX", + "UNLEASH": "UnleashClub", "UNN": "UNION Protocol Governance Token", "UNO": "Unobtanium", "UNORE": "UnoRe", @@ -7673,6 +7759,7 @@ "UTT": "United Traders Token", "UTU": "UTU Protocol", "UUU": "U Network", + "UWU": "uwu", "UZUMAKI": "Uzumaki Inu", "VAB": "Vabble", "VADER": "Vader Protocol", @@ -7695,6 +7782,7 @@ "VCF": "Valencia CF Fan Token", "VCG": "VCGamers", "VCK": "28VCK", + "VCORE": "VCORE", "VDG": "VeriDocGlobal", "VDL": "Vidulum", "VDO": "VidioCoin", @@ -7710,6 +7798,7 @@ "VEIL": "VEIL", "VELA": "Vela Token", "VELO": "Velo", + "VELOD": "Velodrome Finance", "VELOX": "Velox", "VELOXPROJECT": "Velox", "VEMP": "vEmpire DDAO", @@ -7782,6 +7871,7 @@ "VNT": "VNT Chain", "VNTW": "Value Network Token", "VNX": "VisionX", + "VNXAU": "VNX Gold", "VNXLU": "VNX Exchange", "VOCO": "Provoco", "VODKA": "Vodka Token", @@ -7902,7 +7992,8 @@ "WEC": "Whole Earth Coin", "WEGEN": "WeGen Platform", "WELD": "Weld", - "WELL": "Well", + "WELL": "Moonwell", + "WELLTOKEN": "Well", "WELT": "Fabwelt", "WELUPS": "Welups Blockchain", "WEMIX": "WEMIX", @@ -7958,6 +8049,7 @@ "WIX": "Wixlar", "WIZ": "WIZ Protocol", "WKD": "Wakanda Inu", + "WLD": "Worldcoin", "WLF": "Wolfs Group", "WLITI": "wLITI", "WLK": "Wolk", @@ -7983,6 +8075,7 @@ "WNZ": "Winerz", "WOA": "Wrapped Origin Axie", "WOD": "World of Defish", + "WOID": "WORLD ID", "WOJ": "Wojak Finance", "WOLF": "Insanity Coin", "WOLFILAND": "Wolfiland", @@ -8000,6 +8093,7 @@ "WOOFY": "Woofy", "WOOL": "Wolf Game Wool", "WOONK": "Woonkly", + "WOOO": "wooonen", "WOOP": "Woonkly Power", "WOP": "WorldPay", "WORLD": "World Token", @@ -8010,6 +8104,7 @@ "WOZX": "Efforce", "WPC": "WePiggy Coin", "WPE": "OPES (Wrapped PE)", + "WPLS": "Wrapped Pulse", "WPP": "Green Energy Token", "WPR": "WePower", "WQT": "Work Quest", @@ -8049,6 +8144,7 @@ "WZEC": "Wrapped Zcash", "WZENIQ": "Wrapped Zeniq (ETH)", "WZRD": "Wizardia", + "X": "AI-X", "X2": "X2Coin", "X2Y2": "X2Y2", "X42": "X42 Protocol", @@ -8096,7 +8192,7 @@ "XCI": "Cannabis Industry Coin", "XCLR": "ClearCoin", "XCM": "CoinMetro", - "XCN": "Chain", + "XCN": "Onyxcoin", "XCO": "XCoin", "XCONSOL": "X-Consoles", "XCP": "CounterParty", @@ -8365,6 +8461,7 @@ "YUANG": "Yuang Coin", "YUCJ": "Yu Coin", "YUCT": "Yucreat", + "YUDI": "Yudi", "YUM": "Yumerium", "YUMMY": "Yummy", "YUP": "Crowdholding", From 49c4ea306def799d77f35c4d9eb28a9da70db4c1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 22 Aug 2023 09:02:39 +0200 Subject: [PATCH 02/32] Feature/improve oss friends page (#2257) * Improve OSS Friends page * Update changelog --- CHANGELOG.md | 1 + .../oss-friends/oss-friends-page.component.ts | 128 +----------------- .../about/oss-friends/oss-friends-page.html | 41 +++--- .../oss-friends/oss-friends-page.module.ts | 4 +- .../about/oss-friends/oss-friends-page.scss | 6 + apps/client/src/assets/oss-friends.json | 116 ++++++++++++++++ 6 files changed, 149 insertions(+), 147 deletions(-) create mode 100644 apps/client/src/assets/oss-friends.json diff --git a/CHANGELOG.md b/CHANGELOG.md index dcc7eded4..1699c6c6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Refreshed the cryptocurrencies list +- Improved the _OSS Friends_ page ## 1.302.0 - 2023-08-20 diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts index f00952c65..9b5caa8a8 100644 --- a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts @@ -1,6 +1,8 @@ import { Component, OnDestroy } from '@angular/core'; import { Subject } from 'rxjs'; +const ossFriends = require('../../../../assets/oss-friends.json'); + @Component({ host: { class: 'page' }, selector: 'gf-oss-friends-page', @@ -8,131 +10,7 @@ import { Subject } from 'rxjs'; templateUrl: './oss-friends-page.html' }) export class OpenSourceSoftwareFriendsPageComponent implements OnDestroy { - public ossFriends = [ - { - description: 'Build custom software on top of your data.', - name: 'Appsmith', - url: 'https://www.appsmith.com' - }, - { - description: - 'BoxyHQ’s suite of APIs for security and privacy helps engineering teams build and ship compliant cloud applications faster.', - name: 'BoxyHQ', - url: 'https://boxyhq.com' - }, - { - description: - 'Cal.com is a scheduling tool that helps you schedule meetings without the back-and-forth emails.', - name: 'Cal.com', - url: 'https://cal.com' - }, - { - description: - 'Centralize community, product, and customer data to understand which companies are engaging with your open source project.', - name: 'Crowd.dev', - url: 'https://www.crowd.dev' - }, - { - description: - 'The Open-Source DocuSign Alternative. We aim to earn your trust by enabling you to self-host the platform and examine its inner workings.', - name: 'Documenso', - url: 'https://documenso.com' - }, - { - description: - 'The Open-Source HubSpot Alternative. A single XOS enables to create unique and life-changing experiences ​​that work for all types of business.', - name: 'Erxes', - url: 'https://erxes.io' - }, - { - description: - 'Survey granular user segments at any point in the user journey. Gather up to 6x more insights with targeted micro-surveys. All open-source.', - name: 'Formbricks', - url: 'https://formbricks.com' - }, - { - description: - 'GitWonk is an open-source technical documentation tool, designed and built focusing on the developer experience.', - name: 'GitWonk', - url: 'https://gitwonk.com' - }, - { - description: - 'Open-source authentication and user management for the passkey era. Integrated in minutes, for web and mobile apps.', - name: 'Hanko', - url: 'https://www.hanko.io' - }, - { - description: - 'HTMX is a dependency-free JavaScript library that allows you to access AJAX, CSS Transitions, WebSockets, and Server Sent Events directly in HTML.', - name: 'HTMX', - url: 'https://htmx.org' - }, - { - description: - 'Open source, end-to-end encrypted platform that lets you securely manage secrets and configs across your team, devices, and infrastructure.', - name: 'Infisical', - url: 'https://infisical.com' - }, - { - description: - 'Mockoon is the easiest and quickest way to design and run mock REST APIs.', - name: 'Mockoon', - url: 'https://mockoon.com' - }, - { - description: - 'The open-source notification infrastructure for developers. Simple components and APIs for managing all communication channels in one place.', - name: 'Novu', - url: 'https://novu.co' - }, - { - description: - 'Democratizing investment research through an open source financial ecosystem. The OpenBB Terminal allows everyone to perform investment research, from everywhere.', - name: 'OpenBB', - url: 'https://openbb.co' - }, - { - description: - 'Sniffnet is a network monitoring tool to help you easily keep track of your Internet traffic.', - name: 'Sniffnet', - url: 'https://www.sniffnet.net' - }, - { - description: 'Software localization from A to Z made really easy.', - name: 'Tolgee', - url: 'https://tolgee.io' - }, - { - description: - 'Create long-running Jobs directly in your codebase with features like API integrations, webhooks, scheduling and delays.', - name: 'Trigger.dev', - url: 'https://trigger.dev' - }, - { - description: - 'Typebot gives you powerful blocks to create unique chat experiences. Embed them anywhere on your apps and start collecting results like magic.', - name: 'Typebot', - url: 'https://typebot.io' - }, - { - description: - 'A modern CRM offering the flexibility of open-source, advanced features and sleek design.', - name: 'Twenty', - url: 'https://twenty.com' - }, - { - description: - 'Open-source enterprise-grade serverless CMS. Own your data. Scale effortlessly. Customize everything.', - name: 'Webiny', - url: 'https://www.webiny.com' - }, - { - description: 'Webstudio is an open source alternative to Webflow', - name: 'Webstudio', - url: 'https://webstudio.is' - } - ]; + public ossFriends = ossFriends.data; private unsubscribeSubject = new Subject(); diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html index 30db4c5ff..0248a8b46 100644 --- a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html @@ -14,26 +14,27 @@ *ngFor="let ossFriend of ossFriends" class="col-xs-12 col-md-4 mb-3" > - - - {{ ossFriend.name }} - - -

{{ ossFriend.description }}

-
- - - Visit {{ ossFriend.name - }} - - -
+ + + + {{ ossFriend.name }} + + +

{{ ossFriend.description }}

+
+ +
+ Visit {{ ossFriend.name + }} + + + + diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.module.ts b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.module.ts index 1af5631b0..95cf9c3c3 100644 --- a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.module.ts +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.module.ts @@ -1,10 +1,10 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; import { OpenSourceSoftwareFriendsPageRoutingModule } from './oss-friends-page-routing.module'; import { OpenSourceSoftwareFriendsPageComponent } from './oss-friends-page.component'; -import { MatCardModule } from '@angular/material/card'; -import { MatButtonModule } from '@angular/material/button'; @NgModule({ declarations: [OpenSourceSoftwareFriendsPageComponent], diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.scss b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.scss index 5d4e87f30..a4de10587 100644 --- a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.scss +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.scss @@ -1,3 +1,9 @@ :host { display: block; + + .mat-mdc-card { + &:hover { + border-color: var(--gf-theme-primary-500); + } + } } diff --git a/apps/client/src/assets/oss-friends.json b/apps/client/src/assets/oss-friends.json new file mode 100644 index 000000000..6c83956c9 --- /dev/null +++ b/apps/client/src/assets/oss-friends.json @@ -0,0 +1,116 @@ +{ + "createdAt": "2023-08-22T06:39:23.320Z", + "data": [ + { + "name": "Appsmith", + "description": "Build build custom software on top of your data.", + "href": "https://www.appsmith.com" + }, + { + "name": "BoxyHQ", + "description": "BoxyHQ’s suite of APIs for security and privacy helps engineering teams build and ship compliant cloud applications faster.", + "href": "https://boxyhq.com" + }, + { + "name": "Cal.com", + "description": "Cal.com is a scheduling tool that helps you schedule meetings without the back-and-forth emails.", + "href": "https://cal.com" + }, + { + "name": "Crowd.dev", + "description": "Centralize community, product, and customer data to understand which companies are engaging with your open source project.", + "href": "https://www.crowd.dev" + }, + { + "name": "Documenso", + "description": "The Open-Source DocuSign Alternative. We aim to earn your trust by enabling you to self-host the platform and examine its inner workings.", + "href": "https://documenso.com" + }, + { + "name": "Erxes", + "description": "The Open-Source HubSpot Alternative. A single XOS enables to create unique and life-changing experiences that work for all types of business.", + "href": "https://erxes.io" + }, + { + "name": "Formbricks", + "description": "Survey granular user segments at any point in the user journey. Gather up to 6x more insights with targeted micro-surveys. All open-source.", + "href": "https://formbricks.com" + }, + { + "name": "Ghostfolio", + "description": "Ghostfolio is a privacy-first, open source dashboard for your personal finances. Designed to simplify asset tracking and empower informed investment decisions.", + "href": "https://ghostfol.io" + }, + { + "name": "GitWonk", + "description": "GitWonk is an open-source technical documentation tool, designed and built focusing on the developer experience.", + "href": "https://gitwonk.com" + }, + { + "name": "Hanko", + "description": "Open-source authentication and user management for the passkey era. Integrated in minutes, for web and mobile apps.", + "href": "https://www.hanko.io" + }, + { + "name": "HTMX", + "description": "HTMX is a dependency-free JavaScript library that allows you to access AJAX, CSS Transitions, WebSockets, and Server Sent Events directly in HTML.", + "href": "https://htmx.org" + }, + { + "name": "Infisical", + "description": "Open source, end-to-end encrypted platform that lets you securely manage secrets and configs across your team, devices, and infrastructure.", + "href": "https://infisical.com" + }, + { + "name": "Mockoon", + "description": "Mockoon is the easiest and quickest way to design and run mock REST APIs.", + "href": "https://mockoon.com" + }, + { + "name": "Novu", + "description": "The open-source notification infrastructure for developers. Simple components and APIs for managing all communication channels in one place.", + "href": "https://novu.co" + }, + { + "name": "OpenBB", + "description": "Democratizing investment research through an open source financial ecosystem. The OpenBB Terminal allows everyone to perform investment research, from everywhere.", + "href": "https://openbb.co" + }, + { + "name": "Sniffnet", + "description": "Sniffnet is a network monitoring tool to help you easily keep track of your Internet traffic.", + "href": "https://www.sniffnet.net" + }, + { + "name": "Tolgee", + "description": "Software localization from A to Z made really easy.", + "href": "https://tolgee.io/" + }, + { + "name": "Trigger.dev", + "description": "Create long-running Jobs directly in your codebase with features like API integrations, webhooks, scheduling and delays.", + "href": "https://trigger.dev" + }, + { + "name": "Typebot", + "description": "Typebot gives you powerful blocks to create unique chat experiences. Embed them anywhere on your apps and start collecting results like magic.", + "href": "https://typebot.io" + }, + { + "name": "Twenty", + "description": "A modern CRM offering the flexibility of open-source, advanced features and sleek design.", + "href": "https://twenty.com" + }, + { + "name": "Webiny", + "description": "Open-source enterprise-grade serverless CMS. Own your data. Scale effortlessly. Customize everything.", + "href": "https://www.webiny.com" + }, + { + "name": "Webstudio", + "description": "Webstudio is an open source alternative to Webflow", + "href": "https://webstudio.is" + } + ], + "source": "https://formbricks.com/api/oss-friends" +} From 1f9b9e99989748a760f9cfec77d4c6de729382cf Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 23 Aug 2023 18:49:53 +0200 Subject: [PATCH 03/32] Feature/blog post ghostfolio joins oss friends (#2260) * Add blog post: Ghostfolio joins OSS Friends * Update changelog --- CHANGELOG.md | 4 + apps/api/src/assets/sitemap.xml | 4 + .../middlewares/html-template.middleware.ts | 4 + ...tfolio-joins-oss-friends-page.component.ts | 14 ++ .../ghostfolio-joins-oss-friends-page.html | 167 ++++++++++++++++++ .../pages/blog/blog-page-routing.module.ts | 9 + apps/client/src/app/pages/blog/blog-page.html | 26 +++ .../blog/ghostfolio-joins-oss-friends.png | Bin 0 -> 15638 bytes 8 files changed, 228 insertions(+) create mode 100644 apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts create mode 100644 apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.html create mode 100644 apps/client/src/assets/images/blog/ghostfolio-joins-oss-friends.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 1699c6c6d..b08b7d4fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added a blog post: _Ghostfolio joins OSS Friends_ + ### Changed - Refreshed the cryptocurrencies list diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml index 10f20ca46..915bb8e84 100644 --- a/apps/api/src/assets/sitemap.xml +++ b/apps/api/src/assets/sitemap.xml @@ -142,6 +142,10 @@ https://ghostfol.io/en/blog/2023/07/exploring-the-path-to-fire ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/blog/2023/08/ghostfolio-joins-oss-friends + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/faq ${currentDate}T00:00:00+00:00 diff --git a/apps/api/src/middlewares/html-template.middleware.ts b/apps/api/src/middlewares/html-template.middleware.ts index efbd60fa7..acb3f5aa0 100644 --- a/apps/api/src/middlewares/html-template.middleware.ts +++ b/apps/api/src/middlewares/html-template.middleware.ts @@ -71,6 +71,10 @@ const locales = { '/en/blog/2023/07/exploring-the-path-to-fire': { featureGraphicPath: 'assets/images/blog/20230701.jpg', title: `Exploring the Path to FIRE - ${titleShort}` + }, + '/en/blog/2023/08/ghostfolio-joins-oss-friends': { + featureGraphicPath: 'assets/images/blog/ghostfolio-joins-oss-friends.png', + title: `Ghostfolio joins OSS Friends - ${titleShort}` } }; diff --git a/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts new file mode 100644 index 000000000..682a1fdd8 --- /dev/null +++ b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { RouterModule } from '@angular/router'; + +@Component({ + host: { class: 'page' }, + imports: [MatButtonModule, RouterModule], + selector: 'gf-ghostfolio-joins-oss-friends-page', + standalone: true, + templateUrl: './ghostfolio-joins-oss-friends-page.html' +}) +export class GhostfolioJoinsOssFriendsPageComponent { + public routerLinkAboutOssFriends = ['/' + $localize`about`, 'oss-friends']; +} diff --git a/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.html b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.html new file mode 100644 index 000000000..16cb3d72e --- /dev/null +++ b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.html @@ -0,0 +1,167 @@ +
+
+
+
+
+

Ghostfolio joins OSS Friends

+
2023-08-23
+ Ghostfolio joins OSS Friends Teaser +
+
+

+ We are excited to announce that Ghostfolio is now part of the + OSS Friends. This + new initiative is all about helping open source projects grow and + become more popular. +

+
+
+

The Story of OSS Friends

+

+ OSS Friends started as a simple + post + on X (formerly known as Twitter). The idea came from + Formbricks, an + open source experience management platform to create surveys in + minutes, and is all about giving open source projects a boost. +

+

+ If you are excited about the OSS Friends movement and want to bring + your own open source project along, just take a moment to fill out + this form. Let’s work and learn together – all the open source way. +

+
+
+

+ Ghostfolio – Next Generation Software for your Personal Finances +

+

+ Money management can be tricky, especially when you have various + investments like cryptocurrencies, ETFs and stocks in your + portfolio. But guess what? There are cooler ways than staring at + boring spreadsheets. Say hello to Ghostfolio, a privacy-first, open + source dashboard for your personal finances. +

+
+
+

+ Would you like to simplify asset tracking? +

+

+ Ghostfolio empowers you to make informed investment decisions. +

+ +
+
+
    +
  • + Asset +
  • +
  • + Collaboration +
  • +
  • + Cryptocurrency +
  • +
  • + Community +
  • +
  • + Dashboard +
  • +
  • + ETF +
  • +
  • + Finance +
  • +
  • + Fintech +
  • +
  • + Ghostfolio +
  • +
  • + Initiative +
  • +
  • + Innovation +
  • +
  • + Investment +
  • +
  • + Open Source +
  • +
  • + OSS +
  • +
  • + OSS Friends +
  • +
  • + Personal Finance +
  • +
  • + Platform +
  • +
  • + Portfolio +
  • +
  • + Privacy +
  • +
  • + Software +
  • +
  • + Stock +
  • +
  • + Technology +
  • +
  • + Tracking +
  • +
  • + Wealth Management +
  • +
  • + Web3 +
  • +
+
+ +
+
+
+
diff --git a/apps/client/src/app/pages/blog/blog-page-routing.module.ts b/apps/client/src/app/pages/blog/blog-page-routing.module.ts index 4c41b423e..30d9eb3b5 100644 --- a/apps/client/src/app/pages/blog/blog-page-routing.module.ts +++ b/apps/client/src/app/pages/blog/blog-page-routing.module.ts @@ -136,6 +136,15 @@ const routes: Routes = [ './2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.component' ).then((c) => c.ExploringThePathToFirePageComponent), title: 'Exploring the Path to FIRE' + }, + { + canActivate: [AuthGuard], + path: '2023/08/ghostfolio-joins-oss-friends', + loadComponent: () => + import( + './2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component' + ).then((c) => c.GhostfolioJoinsOssFriendsPageComponent), + title: 'Ghostfolio joins OSS Friends' } ]; diff --git a/apps/client/src/app/pages/blog/blog-page.html b/apps/client/src/app/pages/blog/blog-page.html index 26c262c1a..b5dfae39e 100644 --- a/apps/client/src/app/pages/blog/blog-page.html +++ b/apps/client/src/app/pages/blog/blog-page.html @@ -8,6 +8,32 @@ finance + + + + +
diff --git a/apps/client/src/assets/images/blog/ghostfolio-joins-oss-friends.png b/apps/client/src/assets/images/blog/ghostfolio-joins-oss-friends.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d90aedb87cac069d03e7be044de0adad519f39 GIT binary patch literal 15638 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 KmsKiuAN~)H*2@Y2 literal 0 HcmV?d00001 From da6591fca01a082612b94e5fdaa9ea7c5771d334 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 23 Aug 2023 18:51:02 +0200 Subject: [PATCH 04/32] Bugfix/fix base url in trackinsight data enhancer (#2258) * Fix base url * Update changelog --- CHANGELOG.md | 4 ++++ .../trackinsight/trackinsight.service.ts | 22 ++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b08b7d4fb..4366b0383 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Refreshed the cryptocurrencies list - Improved the _OSS Friends_ page +### Fixed + +- Fixed an issue with the _Trackinsight_ data enhancer for asset profile data + ## 1.302.0 - 2023-08-20 ### Changed diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index a18d82449..2c9f1b7a8 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -7,7 +7,7 @@ import got from 'got'; @Injectable() export class TrackinsightDataEnhancerService implements DataEnhancerInterface { - private static baseUrl = 'https://data.trackinsight.com'; + private static baseUrl = 'https://www.trackinsight.com/data-api'; private static countries = require('countries-list/dist/countries.json'); private static countriesMapping = { 'Russian Federation': 'Russia' @@ -33,14 +33,22 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { } const profile = await got( - `${TrackinsightDataEnhancerService.baseUrl}/data-api/funds/${symbol}.json` + `${TrackinsightDataEnhancerService.baseUrl}/funds/${symbol}.json` ) .json() .catch(() => { - return {}; + return got( + `${TrackinsightDataEnhancerService.baseUrl}/funds/${ + symbol.split('.')?.[0] + }.json` + ) + .json() + .catch(() => { + return {}; + }); }); - const isin = profile.isin?.split(';')?.[0]; + const isin = profile?.isin?.split(';')?.[0]; if (isin) { response.isin = isin; @@ -55,7 +63,11 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { `${TrackinsightDataEnhancerService.baseUrl}/holdings/${ symbol.split('.')?.[0] }.json` - ); + ) + .json() + .catch(() => { + return {}; + }); }); if (holdings?.weight < 0.95) { From 7d238b4935efeaa0cc20ee2037d4100e8cddd369 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 23 Aug 2023 18:52:59 +0200 Subject: [PATCH 05/32] Release 1.303.0 (#2261) --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4366b0383..546e67dfd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 1.303.0 - 2023-08-23 ### Added diff --git a/package.json b/package.json index 0151d5003..99e0a33d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.302.0", + "version": "1.303.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From f41dd9cd8e6d721c28deae5d5571b281af4f6355 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 25 Aug 2023 15:13:04 +0200 Subject: [PATCH 06/32] Fix lint script (#2264) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 99e0a33d2..05df82073 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "format:write": "nx format:write", "help": "nx help", "import-sort": "import-sort --write '{apps,libs}/**/*.ts'", - "lint": "nx workspace-lint && ng lint", + "lint": "nx lint", "ng": "nx", "nx": "nx", "postinstall": "prisma generate", From f2d70f90708adc8510552a87271eb266f5e9c3c6 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 26 Aug 2023 11:22:19 +0200 Subject: [PATCH 07/32] Sort imports (#2266) --- apps/api/src/app/exchange-rate/exchange-rate.controller.ts | 2 +- apps/api/src/app/symbol/symbol.controller.ts | 2 +- apps/client/src/app/pages/about/about-page-routing.module.ts | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/api/src/app/exchange-rate/exchange-rate.controller.ts b/apps/api/src/app/exchange-rate/exchange-rate.controller.ts index 40ff9d3c8..8e01c4ca9 100644 --- a/apps/api/src/app/exchange-rate/exchange-rate.controller.ts +++ b/apps/api/src/app/exchange-rate/exchange-rate.controller.ts @@ -7,10 +7,10 @@ import { UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; +import { parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { ExchangeRateService } from './exchange-rate.service'; -import { parseISO } from 'date-fns'; @Controller('exchange-rate') export class ExchangeRateController { diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/symbol/symbol.controller.ts index e09b08f5b..ad9042991 100644 --- a/apps/api/src/app/symbol/symbol.controller.ts +++ b/apps/api/src/app/symbol/symbol.controller.ts @@ -15,13 +15,13 @@ import { import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; import { DataSource } from '@prisma/client'; +import { parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { isDate, isEmpty } from 'lodash'; import { LookupItem } from './interfaces/lookup-item.interface'; import { SymbolItem } from './interfaces/symbol-item.interface'; import { SymbolService } from './symbol.service'; -import { parseISO } from 'date-fns'; @Controller('symbol') export class SymbolController { diff --git a/apps/client/src/app/pages/about/about-page-routing.module.ts b/apps/client/src/app/pages/about/about-page-routing.module.ts index 88c8080ed..ac586e069 100644 --- a/apps/client/src/app/pages/about/about-page-routing.module.ts +++ b/apps/client/src/app/pages/about/about-page-routing.module.ts @@ -1,10 +1,11 @@ +import * as path from 'path'; + import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; +import { paths } from '@ghostfolio/client/app-routing.module'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { AboutPageComponent } from './about-page.component'; -import { paths } from '@ghostfolio/client/app-routing.module'; -import * as path from 'path'; const routes: Routes = [ { From c2fd31f5e5ef92d87bd0e7981a720d01e0dc9f63 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 27 Aug 2023 10:19:53 +0200 Subject: [PATCH 08/32] Feature/add health check endpoints for data enhancers (#2265) * Add health check for data enhancers * Update changelog --- CHANGELOG.md | 6 +++ apps/api/src/app/health/health.controller.ts | 14 ++++++ apps/api/src/app/health/health.module.ts | 3 +- apps/api/src/app/health/health.service.ts | 6 +++ .../data-enhancer/data-enhancer.module.ts | 8 +++- .../data-enhancer/data-enhancer.service.ts | 44 +++++++++++++++++++ .../trackinsight/trackinsight.service.ts | 4 ++ .../yahoo-finance/yahoo-finance.service.ts | 4 ++ .../interfaces/data-enhancer.interface.ts | 2 + 9 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 apps/api/src/services/data-provider/data-enhancer/data-enhancer.service.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 546e67dfd..ddf8511b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added health check endpoints for data enhancers + ## 1.303.0 - 2023-08-23 ### Added diff --git a/apps/api/src/app/health/health.controller.ts b/apps/api/src/app/health/health.controller.ts index d9af97981..3c8c0ef56 100644 --- a/apps/api/src/app/health/health.controller.ts +++ b/apps/api/src/app/health/health.controller.ts @@ -18,6 +18,20 @@ export class HealthController { @Get() public async getHealth() {} + @Get('data-enhancer/:name') + public async getHealthOfDataEnhancer(@Param('name') name: string) { + const hasResponse = await this.healthService.hasResponseFromDataEnhancer( + name + ); + + if (hasResponse !== true) { + throw new HttpException( + getReasonPhrase(StatusCodes.SERVICE_UNAVAILABLE), + StatusCodes.SERVICE_UNAVAILABLE + ); + } + } + @Get('data-provider/:dataSource') @UseInterceptors(TransformDataSourceInRequestInterceptor) public async getHealthOfDataProvider( diff --git a/apps/api/src/app/health/health.module.ts b/apps/api/src/app/health/health.module.ts index 1c5292027..b6952c3b5 100644 --- a/apps/api/src/app/health/health.module.ts +++ b/apps/api/src/app/health/health.module.ts @@ -1,4 +1,5 @@ import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; +import { DataEnhancerModule } from '@ghostfolio/api/services/data-provider/data-enhancer/data-enhancer.module'; import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; import { Module } from '@nestjs/common'; @@ -7,7 +8,7 @@ import { HealthService } from './health.service'; @Module({ controllers: [HealthController], - imports: [ConfigurationModule, DataProviderModule], + imports: [ConfigurationModule, DataEnhancerModule, DataProviderModule], providers: [HealthService] }) export class HealthModule {} diff --git a/apps/api/src/app/health/health.service.ts b/apps/api/src/app/health/health.service.ts index afbcc0a74..8fac2dde9 100644 --- a/apps/api/src/app/health/health.service.ts +++ b/apps/api/src/app/health/health.service.ts @@ -1,3 +1,4 @@ +import { DataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/data-enhancer.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { Injectable } from '@nestjs/common'; import { DataSource } from '@prisma/client'; @@ -5,9 +6,14 @@ import { DataSource } from '@prisma/client'; @Injectable() export class HealthService { public constructor( + private readonly dataEnhancerService: DataEnhancerService, private readonly dataProviderService: DataProviderService ) {} + public async hasResponseFromDataEnhancer(aName: string) { + return this.dataEnhancerService.enhance(aName); + } + public async hasResponseFromDataProvider(aDataSource: DataSource) { return this.dataProviderService.checkQuote(aDataSource); } diff --git a/apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts b/apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts index a658ef448..069309508 100644 --- a/apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts +++ b/apps/api/src/services/data-provider/data-enhancer/data-enhancer.module.ts @@ -4,14 +4,18 @@ import { TrackinsightDataEnhancerService } from '@ghostfolio/api/services/data-p import { YahooFinanceDataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service'; import { Module } from '@nestjs/common'; +import { DataEnhancerService } from './data-enhancer.service'; + @Module({ exports: [ - 'DataEnhancers', + DataEnhancerService, TrackinsightDataEnhancerService, - YahooFinanceDataEnhancerService + YahooFinanceDataEnhancerService, + 'DataEnhancers' ], imports: [ConfigurationModule, CryptocurrencyModule], providers: [ + DataEnhancerService, TrackinsightDataEnhancerService, YahooFinanceDataEnhancerService, { diff --git a/apps/api/src/services/data-provider/data-enhancer/data-enhancer.service.ts b/apps/api/src/services/data-provider/data-enhancer/data-enhancer.service.ts new file mode 100644 index 000000000..e5038c7c6 --- /dev/null +++ b/apps/api/src/services/data-provider/data-enhancer/data-enhancer.service.ts @@ -0,0 +1,44 @@ +import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface'; +import { HttpException, Inject, Injectable } from '@nestjs/common'; +import { Prisma } from '@prisma/client'; +import { StatusCodes, getReasonPhrase } from 'http-status-codes'; + +@Injectable() +export class DataEnhancerService { + public constructor( + @Inject('DataEnhancers') + private readonly dataEnhancers: DataEnhancerInterface[] + ) {} + + public async enhance(aName: string) { + const dataEnhancer = this.dataEnhancers.find((dataEnhancer) => { + return dataEnhancer.getName() === aName; + }); + + if (!dataEnhancer) { + throw new HttpException( + getReasonPhrase(StatusCodes.NOT_FOUND), + StatusCodes.NOT_FOUND + ); + } + + try { + const assetProfile = await dataEnhancer.enhance({ + response: { + assetClass: 'EQUITY', + assetSubClass: 'ETF' + }, + symbol: dataEnhancer.getTestSymbol() + }); + + if ( + (assetProfile.countries as unknown as Prisma.JsonArray)?.length > 0 && + (assetProfile.sectors as unknown as Prisma.JsonArray)?.length > 0 + ) { + return true; + } + } catch {} + + return false; + } +} diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index 2c9f1b7a8..ee81ef591 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -126,4 +126,8 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { public getName() { return 'TRACKINSIGHT'; } + + public getTestSymbol() { + return 'QQQ'; + } } diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 3ad69646b..54145a8b4 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -234,6 +234,10 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { return DataSource.YAHOO; } + public getTestSymbol() { + return 'AAPL'; + } + public parseAssetClass({ quoteType, shortName diff --git a/apps/api/src/services/data-provider/interfaces/data-enhancer.interface.ts b/apps/api/src/services/data-provider/interfaces/data-enhancer.interface.ts index 4e5ce8cba..9c6db9196 100644 --- a/apps/api/src/services/data-provider/interfaces/data-enhancer.interface.ts +++ b/apps/api/src/services/data-provider/interfaces/data-enhancer.interface.ts @@ -10,4 +10,6 @@ export interface DataEnhancerInterface { }): Promise>; getName(): string; + + getTestSymbol(): string; } From 2f2b712999ffc68b046aa6a4e1a8492180e7c4d4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 27 Aug 2023 10:20:21 +0200 Subject: [PATCH 09/32] Fix breadcrumb (#2267) --- .../ghostfolio-joins-oss-friends-page.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.html b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.html index 16cb3d72e..b7ce5b67e 100644 --- a/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.html +++ b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.html @@ -157,7 +157,7 @@ aria-current="page" class="active breadcrumb-item text-truncate" > - Ghostfolio meets Umbrel + Ghostfolio joins OSS Friends From c5d56f4b4720c051d53be6e5638a57e127b2ee16 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 27 Aug 2023 10:20:36 +0200 Subject: [PATCH 10/32] Fix border (#2268) --- .../exploring-the-path-to-fire-page.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.html b/apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.html index 9f4dc39df..0c147ded3 100644 --- a/apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.html +++ b/apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.html @@ -10,7 +10,7 @@
2023-07-01
Exploring the Path to Financial Independence and Retiring Early (FIRE) Teaser From 7ddd6f27b5ce221100cd386d6eb56bda56509131 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 27 Aug 2023 10:44:06 +0200 Subject: [PATCH 11/32] Feature/upgrade nx to version 16.7.4 (#2271) * Upgrade Nx to version 16.7.4 * Update changelog --- CHANGELOG.md | 4 + package.json | 24 +-- yarn.lock | 510 +++++++++++++++++++++++++-------------------------- 3 files changed, 267 insertions(+), 271 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddf8511b1..9d2dd3de8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added health check endpoints for data enhancers +### Changed + +- Upgraded `Nx` from version `16.7.2` to `16.7.4` + ## 1.303.0 - 2023-08-23 ### Added diff --git a/package.json b/package.json index 05df82073..ff3601d3b 100644 --- a/package.json +++ b/package.json @@ -146,16 +146,16 @@ "@angular/pwa": "16.2.0", "@nestjs/schematics": "10.0.1", "@nestjs/testing": "10.1.3", - "@nx/angular": "16.7.2", - "@nx/cypress": "16.7.2", - "@nx/eslint-plugin": "16.7.2", - "@nx/jest": "16.7.2", - "@nx/js": "16.7.2", - "@nx/nest": "16.7.2", - "@nx/node": "16.7.2", - "@nx/storybook": "16.7.2", - "@nx/web": "16.7.2", - "@nx/workspace": "16.7.2", + "@nx/angular": "16.7.4", + "@nx/cypress": "16.7.4", + "@nx/eslint-plugin": "16.7.4", + "@nx/jest": "16.7.4", + "@nx/js": "16.7.4", + "@nx/nest": "16.7.4", + "@nx/node": "16.7.4", + "@nx/storybook": "16.7.4", + "@nx/web": "16.7.4", + "@nx/workspace": "16.7.4", "@schematics/angular": "16.2.0", "@simplewebauthn/typescript-types": "5.2.1", "@storybook/addon-essentials": "7.3.2", @@ -187,8 +187,8 @@ "jest": "29.4.3", "jest-environment-jsdom": "29.4.3", "jest-preset-angular": "13.1.1", - "nx": "16.7.2", - "nx-cloud": "16.4.0-beta.1", + "nx": "16.7.4", + "nx-cloud": "16.3.0", "prettier": "2.8.4", "prettier-plugin-organize-attributes": "0.0.5", "react": "18.2.0", diff --git a/yarn.lock b/yarn.lock index 51c054577..46c0502aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3825,112 +3825,112 @@ read-package-json-fast "^3.0.0" which "^3.0.0" -"@nrwl/angular@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/angular/-/angular-16.7.2.tgz#11661914c5eb8c6ba3618fee5af5b5072e8a730c" - integrity sha512-qL0zkVtMopyWSXh1XFunG7z9hzg46Me3CplMCaE8nHfACg7qhfybwWhZ9NQZQVm4CXWcKJpJ6NJDi9wZyrMqbA== +"@nrwl/angular@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/angular/-/angular-16.7.4.tgz#0f348b6f77109ecbb3bab90987fb850f772e2b52" + integrity sha512-Qj6QEKounpRB6XR4YM/LN5Vq2chesw+5Xec8BMTyAzFoBYfty2EvmikOyT/cszHMVNwE3veDh6cZP7IHWxc2dg== dependencies: - "@nx/angular" "16.7.2" + "@nx/angular" "16.7.4" tslib "^2.3.0" -"@nrwl/cypress@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-16.7.2.tgz#49fc75b0aaa736e2401d1dcaf81ffd191882956f" - integrity sha512-QAjvfTD/NuBhkciIc0EXttOPzKDwba8VdXFGO9xxMtsq9X9AN9xUHA5ZZStMtP/dnS1qi/BD6vG5d/h1g+c2sw== +"@nrwl/cypress@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-16.7.4.tgz#63e1d0fe0f54b67c6bc046fa43bd28859f4619de" + integrity sha512-FmpCWrBIpoS0MsrMlusSBF7Wr8N6v8nbDpo8M8Bl8a6mGZu3lLnJ1ZnhYtCzwEoK0EnEQLGv76TwagRDhjVvmA== dependencies: - "@nx/cypress" "16.7.2" + "@nx/cypress" "16.7.4" -"@nrwl/devkit@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.7.2.tgz#2aad677797c594c42138ce7dea960d35e4a82997" - integrity sha512-xJIQFtmPoLFWX5gKl6QOGMzXjn+TZPkTMv5pQ12y2StpuGa3T2n8m7TnHPHGAk43ayiPDcDD97cZ75Fue+mK/w== +"@nrwl/devkit@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.7.4.tgz#c69e3ae4455447dc3a0cc5515c149692aadba940" + integrity sha512-Gt2q3cqDWzGP1woavGIo4bl8g9YaXic/Xfsl7qPq0LHJedLj49p1vXetB0wawkavSE2MTyo7yDh6YDK/38XoLw== dependencies: - "@nx/devkit" "16.7.2" + "@nx/devkit" "16.7.4" -"@nrwl/eslint-plugin-nx@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-16.7.2.tgz#6b65fdc3fef24bb6fb2a64a04ddcb7035a86536a" - integrity sha512-NS6TZ08Q0uY6YdNXZRwgwTzlNN3sedfGfibSrbUrPZIxnpBUvI9h+1SNkWNwMu9cGpq6ZrAoSaXUyXGWvC7YFw== +"@nrwl/eslint-plugin-nx@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-16.7.4.tgz#2719debd24db6829908e63d8f22527122f289034" + integrity sha512-/qN/Gn0f+7fxmxLO/mSacous3fkBXCeauKKIeJQl6uSi1aVhV/u4BddNK+d2zn5WNN/xBI+xZThM+DYJMsiXjA== dependencies: - "@nx/eslint-plugin" "16.7.2" + "@nx/eslint-plugin" "16.7.4" -"@nrwl/jest@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-16.7.2.tgz#9da1a09aa980de29156ef5573fdb2fdc3a1161f3" - integrity sha512-SXqANeAi4UNEPj3xg+o1x6kK8sXZiOk4+VhTtE8vftD/TdhgNVUiyG0DvHXvpLCWNhfFftJHhbUB2sg9vma9jg== +"@nrwl/jest@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-16.7.4.tgz#56ed128605b4ba6e46d054b26b2380c2c406b2da" + integrity sha512-1DNBEUzYHK+rfqt6ewshYnVJaW59UqaQhMc3vpu5gI8hUbBnjun8CUAh3CHcZdxDVBG0akTAN7+JkB7UqQD2dg== dependencies: - "@nx/jest" "16.7.2" + "@nx/jest" "16.7.4" -"@nrwl/js@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-16.7.2.tgz#53b488c2c8bf8dc4c5fe0e19af2bcd37c0263497" - integrity sha512-RflIReJoMmBhvBuSKzWLNJvqhz0uDy3Alg7QylGct0uzrTFqOH9fn35W9gYYN3EE8WQXpBlcQk3t+5xs9oHGXg== +"@nrwl/js@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-16.7.4.tgz#2977a79b94b8c73b0a63a69eb07e8aa57cc2a979" + integrity sha512-7mQnzhUUSpMOnSxM10Q2XOWWEj+GdtV7HVt1s+LDvRVXSFNLWBOucjfBunbttYGO36aKk+ZPCU53SvwH2aL5eA== dependencies: - "@nx/js" "16.7.2" + "@nx/js" "16.7.4" -"@nrwl/linter@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-16.7.2.tgz#35d83244d3ab48c1f7722ab7714f9a8fcbb0d816" - integrity sha512-tY5Vi9I9mjwkeVBD96hkcNAwDxs2gxcWxwIs5bnAoGw4GM93toHnbe2vB72m89NwH4bYxD1UkDAqvYnOfEZ5/Q== +"@nrwl/linter@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-16.7.4.tgz#152c1d25109c7196c579fbd8c03731d75c47e7f7" + integrity sha512-XBxFn/2nbJUPAfAJ6y7rDlEZIpkN2cZ4z1C0+QvDJkIT24YhHUIdSvYBUav0TX17xneH7+NQhY2EHelgXFf4yw== dependencies: - "@nx/linter" "16.7.2" + "@nx/linter" "16.7.4" -"@nrwl/nest@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nest/-/nest-16.7.2.tgz#703678229982a4f3aa90730d9752040f0ffba6b5" - integrity sha512-kKwuWYbSnzCSr0V2wCDLt/Ij3OJpwGhohAK0U/EghCwCpkeTy4B1pL7WscR+cB8UVrBq7Vz/DQhOGOloLjyBww== +"@nrwl/nest@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/nest/-/nest-16.7.4.tgz#6f35bb8b92d1b7bcafa2fe8ce92612a55bf92970" + integrity sha512-ax/sSCM5SFfAZ2t0nLuAqP9U4+03uPw5IqdB6zHISEcSkJqQw+mcR3RiQiyzdNsJlCDA8mWKP7N8niLS7yuTPg== dependencies: - "@nx/nest" "16.7.2" + "@nx/nest" "16.7.4" -"@nrwl/node@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/node/-/node-16.7.2.tgz#74a5d4498cd1265fc7e9e3dce4dccb99a1680b6f" - integrity sha512-HPhtGAxiM/N/JihRacHMVH4+MGp1eTPLw/T3RBtf5VyuBI/aRW0gF1nCqJxizSs+Vy9FD2XE+fUoca9FZIrxxg== +"@nrwl/node@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/node/-/node-16.7.4.tgz#e34e7f0d58ac1cf7e8cefdfa9b61ef5afaa2aa39" + integrity sha512-GJW3j27LX36AYcBMhkQASTTfVnIz5L3oOxNSMGb6xzL9xsoiiQU5Fo/Yz4jI9iw7hUaht3EgzbATYbJhq4wETA== dependencies: - "@nx/node" "16.7.2" + "@nx/node" "16.7.4" -"@nrwl/nx-cloud@16.4.0-beta.1": - version "16.4.0-beta.1" - resolved "https://registry.yarnpkg.com/@nrwl/nx-cloud/-/nx-cloud-16.4.0-beta.1.tgz#bcd4ba73a9afed241391ef49aae51b847a6d3ebc" - integrity sha512-XQFmpVtGJghvR+JJWgp2so0eeJSG7U1W0/WcyAskTnCSMt8M5FFotJmF4upFfRK1rexlECZ7xbcZzUXuIEqzsw== +"@nrwl/nx-cloud@16.3.0": + version "16.3.0" + resolved "https://registry.yarnpkg.com/@nrwl/nx-cloud/-/nx-cloud-16.3.0.tgz#0f1d563200af5bb6ce51a8408d698774d5ccdbbd" + integrity sha512-nJrGsVufhY74KcP7kM7BqFOGAoO5OEF6+wfiM295DgmEG9c1yW+x5QiQaC42K9SWYn/eKQa1X7466ZA5lynXoQ== dependencies: - nx-cloud "16.4.0-beta.1" + nx-cloud "16.3.0" -"@nrwl/storybook@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-16.7.2.tgz#ebac9edaca0bdf7db2688866da13206cf679df6a" - integrity sha512-F0LZoo7F+S1zGNhMKO5GQojGScZKnPr9/29WzyOXggtoICO4JpYkIjTr5PqYZtFLJE8UrYAeLL9N6uRJD7Wh7g== +"@nrwl/storybook@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-16.7.4.tgz#146298468a92eadf2898c84b9000cef056f86ef7" + integrity sha512-qRqDW8ILyvgTwd55dw1hRjaz9CAz3KYvmkQuZvMIQ4HTTodgx2ZOznG8ujvO154m8drWowurBIOLdXDq/BPUqg== dependencies: - "@nx/storybook" "16.7.2" + "@nx/storybook" "16.7.4" -"@nrwl/tao@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-16.7.2.tgz#53dbb5a1ed221f0226c73d165d12d706b9069386" - integrity sha512-4Wc3ic5VtZL3t4qqCMJlEad/wWuFxNUX78U5ohEStN3UFFJIjwJJpKZYZDtxhaOLWUdXbk6CI3KfSIpWgwPdbQ== +"@nrwl/tao@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-16.7.4.tgz#2b2e2cc26ce6c50884da63e69ba8ccf0fcbb9455" + integrity sha512-hH03oF+yVmaf19UZfyLDSuVEh0KasU5YfYezuNsdRkXNdTU/WmpDrk4qoo0j6fVoMPrqbbPOn1YMRtulP2WyYA== dependencies: - nx "16.7.2" + nx "16.7.4" tslib "^2.3.0" -"@nrwl/web@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-16.7.2.tgz#03e67d93d4462febfdb149b70ddb3de19dc9a943" - integrity sha512-hjFacN2WOdyVqVnN8SauOc9jKZ79sfQOrUZX75bfrWzUeZmXVG+DAGFhvtEroczm4B1MDxpx62tcZ0nC9m+zSA== +"@nrwl/web@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-16.7.4.tgz#5fca83ad10abd7254ef2db0b4b60810fc45b81a3" + integrity sha512-HB3dYp2gJTl/bw5jn4gIcoyBGU2rfJ3OrIyBRjlUMRwgFayAadweyqfIFirHSPc+S7E6NNKhTRxifGJOrwyYTQ== dependencies: - "@nx/web" "16.7.2" + "@nx/web" "16.7.4" -"@nrwl/webpack@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/webpack/-/webpack-16.7.2.tgz#ab9ac908294a596d2d84ea550b708c3036d42487" - integrity sha512-M4JCakc+piRt4eYEuC3s/Pu+J2z7l7Mr63K3FfeZJMLsX7sI87xWifm4Jf4sJvaRNzQHzrykb3xluWMQ/B22Ag== +"@nrwl/webpack@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/webpack/-/webpack-16.7.4.tgz#8cb19b11789d665924e0c311a8f4c3f205b94f63" + integrity sha512-AFplOBmoq+IehP9XML1loEHJQLhPIqibpyOLmt2kZbne0BVKrLcLxmIztqbVHWfqJz9A1QO6DgxTcHdFF8447A== dependencies: - "@nx/webpack" "16.7.2" + "@nx/webpack" "16.7.4" -"@nrwl/workspace@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-16.7.2.tgz#8ef4eb11acc7d95c4f2e663a095b477cb2bbfcb8" - integrity sha512-PTYFfSG64DBJPII/AiUQXP9uuPRfllVBMKKLwvMgVp9siClvgmyctlf5XONlbWfYNJ5jRI7/To8FF52EuQ95Zg== +"@nrwl/workspace@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-16.7.4.tgz#fcac4467e78477125dcb771e007b7a6bfd8411ea" + integrity sha512-i2mMSzF/qfsFbTD0DBMSRTNKSahJZoJCnDrTSgwZeTVfLoKYOO5QaiAqB0zKh/5qTsBCt/rKtAlfTd5uGpBzPQ== dependencies: - "@nx/workspace" "16.7.2" + "@nx/workspace" "16.7.4" "@nuxtjs/opencollective@0.3.2": version "0.3.2" @@ -3941,19 +3941,19 @@ consola "^2.15.0" node-fetch "^2.6.1" -"@nx/angular@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/angular/-/angular-16.7.2.tgz#347a29028b814c5481589a3138f7ca31660cfc38" - integrity sha512-OOgVtOIFsnoqiaG+jLXmdZPZgqXp2Oefj2AbH4RwN3mYDSpieO8/MyoX0YcB5pBPOMM1iIREqEbYtq625Q8lmw== - dependencies: - "@nrwl/angular" "16.7.2" - "@nx/cypress" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/jest" "16.7.2" - "@nx/js" "16.7.2" - "@nx/linter" "16.7.2" - "@nx/webpack" "16.7.2" - "@nx/workspace" "16.7.2" +"@nx/angular@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/angular/-/angular-16.7.4.tgz#53d645c57ff71039e6deec17316be0423567966c" + integrity sha512-Avo8NdJKnuWmBRPwO/F7pg6wpW83HYnrKKL/QsAaBlp3jzi+u4UrVwZvh8OSFwQvdAYk7+qzfQe2163L76yDkg== + dependencies: + "@nrwl/angular" "16.7.4" + "@nx/cypress" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/jest" "16.7.4" + "@nx/js" "16.7.4" + "@nx/linter" "16.7.4" + "@nx/webpack" "16.7.4" + "@nx/workspace" "16.7.4" "@phenomnomnominal/tsquery" "~5.0.1" "@typescript-eslint/type-utils" "^5.36.1" chalk "^4.1.0" @@ -3967,27 +3967,27 @@ webpack "^5.80.0" webpack-merge "^5.8.0" -"@nx/cypress@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/cypress/-/cypress-16.7.2.tgz#a780fa1eb16dd7f296e6a6d8c35aadec26f47f69" - integrity sha512-KBNd2whuBc/aY2dG9uiyMi7LHl5OUbKzKSY4s6bCjgJUiByFbSX6tP6U9QxWxlPmWWjw1OwcoeCWGuUAs/HUZw== +"@nx/cypress@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/cypress/-/cypress-16.7.4.tgz#0b33d9c12e2a6b06f2ce5cf60e911de612a81a14" + integrity sha512-rqVnTZbM8rr7K8p+O51uMBko9pYlFPpGqkFQbGOpzFjhoCXW0d4MqYMd03Iele4HjBLCNqVjgmUg3TZacO9vTQ== dependencies: - "@nrwl/cypress" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/js" "16.7.2" - "@nx/linter" "16.7.2" + "@nrwl/cypress" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/js" "16.7.4" + "@nx/linter" "16.7.4" "@phenomnomnominal/tsquery" "~5.0.1" detect-port "^1.5.1" dotenv "~16.3.1" semver "7.5.3" tslib "^2.3.0" -"@nx/devkit@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.7.2.tgz#cb34103221a257608ee9f330e615071a430148eb" - integrity sha512-Gf6FwxhVUH7h3u6Vp/62sDAqgiPR0WvU/etw/DQmJvOqauM9Nj43r0mBCmgh29yZZEgW1zMIMCTOtUYqFFl1ew== +"@nx/devkit@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.7.4.tgz#c03c308bc190a18642e0dc0c183323662c38c426" + integrity sha512-SLito+/TAeDYR+d7IIpp/sBJm41WM+nIevILv0TSQW4Pq0ylUy1nUvV8Pe7l1ohZccDrQuebMUWPwGO0hv8SeQ== dependencies: - "@nrwl/devkit" "16.7.2" + "@nrwl/devkit" "16.7.4" ejs "^3.1.7" enquirer "~2.3.6" ignore "^5.0.4" @@ -3995,14 +3995,14 @@ tmp "~0.2.1" tslib "^2.3.0" -"@nx/eslint-plugin@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/eslint-plugin/-/eslint-plugin-16.7.2.tgz#e13137c2eea2a5c04d9c6336d371f48448657b6c" - integrity sha512-EEElrgkTmjkkyrl0tOBoN0nMZynOagAEiri7wOznUeBffqcR0QJt1CeUald3O8DJt49P7ywRSsceW3ZircSpiw== +"@nx/eslint-plugin@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/eslint-plugin/-/eslint-plugin-16.7.4.tgz#09c04ff657955959f061724f8018dcfcd64677a6" + integrity sha512-PjpXeW/Tr/y/PJSEaB9X2xNaqW6mYXzcFSAXQrlxuDNdVEtrieSj+OiAGKfaYjkcN1d/X9dupV6b/L0V+HcSlw== dependencies: - "@nrwl/eslint-plugin-nx" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/js" "16.7.2" + "@nrwl/eslint-plugin-nx" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/js" "16.7.4" "@typescript-eslint/type-utils" "^5.60.1" "@typescript-eslint/utils" "^5.60.1" chalk "^4.1.0" @@ -4011,16 +4011,16 @@ semver "7.5.3" tslib "^2.3.0" -"@nx/jest@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/jest/-/jest-16.7.2.tgz#68e8262c145d93b82ee426965a0c54745c631c8c" - integrity sha512-PoUxUPha2zWA3DOatjXxoCvqk+XySSGJV8XM+7oWdlVXWpWB60XAfs8f9Tl4krUk1v+JlB+9svwds8KLRoj++w== +"@nx/jest@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/jest/-/jest-16.7.4.tgz#4df84dc7dc99645ac0b2ad256ab3997474765a69" + integrity sha512-/96+Pf9duar1ynjF+rWw+B5UJbM8ldLlHoGAkH8755Yq20INrwr6XEqQAu/HdosBlR7Ytbg3YnFPwb3lTOuLEw== dependencies: "@jest/reporters" "^29.4.1" "@jest/test-result" "^29.4.1" - "@nrwl/jest" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/js" "16.7.2" + "@nrwl/jest" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/js" "16.7.4" "@phenomnomnominal/tsquery" "~5.0.1" chalk "^4.1.0" dotenv "~16.3.1" @@ -4031,10 +4031,10 @@ resolve.exports "1.1.0" tslib "^2.3.0" -"@nx/js@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/js/-/js-16.7.2.tgz#32f576bd7a48c7fb00ab21910a22061a13148a47" - integrity sha512-6mkOfZlI+RpqkF8Lwte+ZmC2Lx46cHcDUjvdYkoIud40C2uf7eaqnMKh4zw3M25mdzm51BAf22LV31b8q3mBmg== +"@nx/js@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/js/-/js-16.7.4.tgz#6870c072503b0d42a2bca05327818a4b365a6658" + integrity sha512-aJnpJkgGgEt1IjsV/ywZRLZ4B5/jDkTtdVu+Wf+6UrtlWji7sq2PC96NSuKeEHjq3oAvNsBc8+u2rjB/9a+8jQ== dependencies: "@babel/core" "^7.22.9" "@babel/plugin-proposal-class-properties" "^7.18.6" @@ -4043,9 +4043,9 @@ "@babel/preset-env" "^7.22.9" "@babel/preset-typescript" "^7.22.5" "@babel/runtime" "^7.22.6" - "@nrwl/js" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/workspace" "16.7.2" + "@nrwl/js" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/workspace" "16.7.4" "@phenomnomnominal/tsquery" "~5.0.1" babel-plugin-const-enum "^1.0.1" babel-plugin-macros "^2.8.0" @@ -4063,121 +4063,121 @@ tsconfig-paths "^4.1.2" tslib "^2.3.0" -"@nx/linter@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/linter/-/linter-16.7.2.tgz#49d960cf1509a9ae5ccb9967c69c7cf04085f936" - integrity sha512-rmgE7y0nUupG1iamdTH5S4SVp/+0VC/VvvXnB50mJgVn1XwtvgvmLMb90oFAy1azjxtrboK4y1tI1UC4eSytSw== +"@nx/linter@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/linter/-/linter-16.7.4.tgz#a571f4b66428d106d9e7e95c0be2a142a0aaddea" + integrity sha512-AGuPfpDIk44fBIwcloo2Hb0+ROmoD69n6ypzdpZvRrBS6KHROGjT3SoWKituyj75bSgtWndNC1ywBhcVnRfamg== dependencies: - "@nrwl/linter" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/js" "16.7.2" + "@nrwl/linter" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/js" "16.7.4" "@phenomnomnominal/tsquery" "~5.0.1" tmp "~0.2.1" tslib "^2.3.0" -"@nx/nest@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nest/-/nest-16.7.2.tgz#3b67fc2491aaae1c2da46e83fdd6b1ef6354e78e" - integrity sha512-PDRNdmOQt1Njv4EzBnvGFNjPvZR+27bwSIKMwUSh2HfNQLkhommmb4w6WOOV5QY4FN0NATc3JhJJilARzWubKw== +"@nx/nest@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nest/-/nest-16.7.4.tgz#b24ff76357d97e54b76c8dbc72c3171300c72c5b" + integrity sha512-ccxVD6W08cuRWSaruiDsbJXZ3CFgJih10XINNgBUh6g0AYtOFtPjn1s7RVbRyR1i4urNsTSp2oq7wisU5sRV0Q== dependencies: "@nestjs/schematics" "^9.1.0" - "@nrwl/nest" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/js" "16.7.2" - "@nx/linter" "16.7.2" - "@nx/node" "16.7.2" + "@nrwl/nest" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/js" "16.7.4" + "@nx/linter" "16.7.4" + "@nx/node" "16.7.4" "@phenomnomnominal/tsquery" "~5.0.1" enquirer "~2.3.6" semver "7.5.3" tslib "^2.3.0" -"@nx/node@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/node/-/node-16.7.2.tgz#145914640c8883b970d1baba878b1c49c306cde1" - integrity sha512-BQ+dOGOXoc3/qlttJxsk/5Ty/EqjyjgiC95icV67o2bpfEnC+A7EzobsxiG23ZNGrkvxd8SxStv6VrbtH1Ox1g== - dependencies: - "@nrwl/node" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/jest" "16.7.2" - "@nx/js" "16.7.2" - "@nx/linter" "16.7.2" - "@nx/workspace" "16.7.2" +"@nx/node@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/node/-/node-16.7.4.tgz#c242063fa1f0dd9981175bd14427cf383421d1c0" + integrity sha512-lO8y58y0qlOmXj/rmRQe/JaUic2vTUa8irT9ByWkfwpp2iLmIw5/qrf3TiC5kqu4LsOuPkZiiLRQyA01LhWwRw== + dependencies: + "@nrwl/node" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/jest" "16.7.4" + "@nx/js" "16.7.4" + "@nx/linter" "16.7.4" + "@nx/workspace" "16.7.4" tslib "^2.3.0" -"@nx/nx-darwin-arm64@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.7.2.tgz#b693d389c89edf1bdb82f533d843534f63b41282" - integrity sha512-dkTHAzOTbqRHUQtnw7knEJq4ll6hew11u+9B0fThs9gC/X0iPK0eDXD4TqbIKEbcWAsxpuGiWPzGoNPo7Gwl9A== - -"@nx/nx-darwin-x64@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.7.2.tgz#be7da3c22f50d36d2976be0d87b63cc24ecd7c59" - integrity sha512-EKhjX7DCRIA5U8yAxIgGXeIFaq1dhgLJy8OAG4n1Ud8c21px+bBSrcZvv0ww5VoEulhggQ+c6fW1cjKtGgLknQ== - -"@nx/nx-freebsd-x64@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.7.2.tgz#710e3d4b2cbf76997b5e8b5e5663bf045bb6157e" - integrity sha512-3QhXZq0wxvi4lg1MJqwq72F7PE/d0Hcl3uwheenYQtwUvAFAmijC/Z4AVPSqbKJ+QaoqASnXRim9z3EIfeD+DQ== - -"@nx/nx-linux-arm-gnueabihf@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.7.2.tgz#3f318c003c0678d11556e1bc7be0d4094e2939dd" - integrity sha512-7bny8NvE9iyfwRfq9/mOZjzMNWthT70Ce1N9suB2zdbgbLUEDPQQhBNbg969yT6/LbWMWuWZXeIbz/Fwndf9zA== - -"@nx/nx-linux-arm64-gnu@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.7.2.tgz#2fc032b217c0f99a94bdc4872080f969101326e7" - integrity sha512-+UdeFB1HY/3GU2+mflydFWpztghFRQiVzJV6MTcjtOzE3jfgXzz9TP580pDxozTvNSRPlblH07X+iB8DhVcB9w== - -"@nx/nx-linux-arm64-musl@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.7.2.tgz#9f3b256332d2ca074854ee1a0b4667aa44ff2640" - integrity sha512-YfkWu+4GKXageuYiH5a77gIDAXnit5SIyfI+RWe/j04uFy171KnUt167DC417fv/fTGxeXY1tzOu112Y+x5ixw== - -"@nx/nx-linux-x64-gnu@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.7.2.tgz#e9e42c800fcbd489501b618e3a2f0ed12481e007" - integrity sha512-/TtSa2rHR+1gNuALR1yafl4fzBK2/GAhosf+skn00OgwsJ0c8ie9tuuftlMo+2n3LcXY/IaPDaD7t6fln4qsQg== - -"@nx/nx-linux-x64-musl@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.7.2.tgz#8279d458e7e763f02ae2f10cbfcbb46eb80ce9aa" - integrity sha512-VC638hxdWSA8VTDU9rAXjr60mmMP3ZyCUbSkJ+8ydEe83StMDY3PAXS5Hw3n/ouxDfCF9r1kWIGFe4g+emvfBw== - -"@nx/nx-win32-arm64-msvc@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.7.2.tgz#7258e46f3af9e93d667ff42a73ee6a36a484bc2b" - integrity sha512-sSUqgANLgQFFzKTvyMczh5D6xiqTQnB8daJTLX+QUCv5vO5+ZSwuVDyNfr6g/HV2+ak0M9/wVQUae11TgUIPYw== - -"@nx/nx-win32-x64-msvc@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.7.2.tgz#1b0a286a5b0cb9c8545c7c49e7514aaf464fe9a7" - integrity sha512-+n01cT9/P3o95x+FlRWYf9sFZ29ooxYD/WLcmxACeXN0V1bdbnZxKVSuJqrXZhmpHe7P+/+IRmniv9cdpkxz7g== - -"@nx/storybook@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/storybook/-/storybook-16.7.2.tgz#2c158bbcc6fc5874d93970f2a83b71a2e124b269" - integrity sha512-vnyS6sYXEEknqOCvQJ9OO55GHOQVrkXkOU5k+/LrHAJekYvDsjVpZjXLUgfeGqJEasXiAtBzyExIRHroUmSd6g== - dependencies: - "@nrwl/storybook" "16.7.2" - "@nx/cypress" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/js" "16.7.2" - "@nx/linter" "16.7.2" - "@nx/workspace" "16.7.2" +"@nx/nx-darwin-arm64@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.7.4.tgz#1a797805850444cc6c0aa56668bf6f832093d641" + integrity sha512-pRNjxn6KlcR6iGkU1j/1pzcogwXFv97pYiZaibpF7UV0vfdEUA3EETpDcs+hbNAcKMvVtn/TgN857/5LQ/lGUg== + +"@nx/nx-darwin-x64@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.7.4.tgz#53f681c86d9d8e8bcebfc8ba54dd7b2ec9f71207" + integrity sha512-GANXeabAAWRoF85WDla2ZPxtr8vnqvXjwyCIhRCda8hlKiVCpM98GemucN25z97G5H6MgyV9Dd9t9jrr2Fn0Og== + +"@nx/nx-freebsd-x64@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.7.4.tgz#df88ff9b6ed0b51723d76d711b9467a1a4726f00" + integrity sha512-zmBBDYjPaHhIHx1YASUJJIy+oz7mCrj5f0f3kOzfMraQOjkQZ0xYgNNUzBqmnYu1855yiphu94MkAMYJnbk0jw== + +"@nx/nx-linux-arm-gnueabihf@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.7.4.tgz#2cfac69e65237245560326039bb319691147daed" + integrity sha512-d3Cmz/vdtoSasTUANoh4ZYLJESNA3+PCP/HnXNqmrr6AEHo+T8DcI+qsamO3rmYUSFxTMAeMyoihZMU8OKGZ1A== + +"@nx/nx-linux-arm64-gnu@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.7.4.tgz#492fb66b804aa6154cd44ded6eaaf6cfcb32ea9f" + integrity sha512-W1u4O78lTHCwvUP0vakeKWFXeSZ13nYzbd6FARICnImY2my8vz41rLm6aU9TYWaiOGEGL2xKpHKSgiNwbLjhFw== + +"@nx/nx-linux-arm64-musl@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.7.4.tgz#ad32f35f05067e918eff9a97d8720f3923c034cb" + integrity sha512-Dc8IQFvhfH/Z3GmhBBNNxGd2Ehw6Y5SePEgJj1c2JyPdoVtc2OjGzkUaZkT4z5z77VKtju6Yi10T6Enps+y+kw== + +"@nx/nx-linux-x64-gnu@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.7.4.tgz#40271f7d21ef3ba0676c046b73c84cf9eb1ed94a" + integrity sha512-4B58C/pXeuovSznBOeicsxNieBApbGMoi2du8jR6Is1gYFPv4l8fFHQHHGAa1l5XJC5JuGJqFywS4elInWprNw== + +"@nx/nx-linux-x64-musl@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.7.4.tgz#8bd13692a0922df51c6305df93d69a3c66b4b716" + integrity sha512-spqqvEdGSSeV2ByJHkex5m8MRQfM6lQlnon25XgVBdPR47lKMWSikUsaWCiE7bVAFU9BFyWY2L4HfZ4+LiNY7A== + +"@nx/nx-win32-arm64-msvc@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.7.4.tgz#dfbe5b28c62c1c1ceadad12e79029f76e450d855" + integrity sha512-etNnbuCcSqAYOeDcS6si6qw0WR/IS87ovTzLS17ETKpdHcHN5nM4l02CQyupKiD58ShxrXHxXmvgBfbXxoN5Ew== + +"@nx/nx-win32-x64-msvc@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.7.4.tgz#e4b270107e02e73451d7c5dc7c4237fffe18aa75" + integrity sha512-y6pugK6ino1wvo2FbgtXG2cVbEm3LzJwOSBKBRBXSWhUgjP7T92uGfOt6KVQKpaqDvS9lA9TO/2DcygcLHXh7A== + +"@nx/storybook@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/storybook/-/storybook-16.7.4.tgz#9f7dce572b03b7e7a715d3a6c412339a16b16e32" + integrity sha512-tXR3iPc8EXqQzxG33EcKZIICYj9oXTIr/C8aW/hwDc51AAz4HAjXT0E9zzus+FynLeV4Ser58BfzBkEqycVjIw== + dependencies: + "@nrwl/storybook" "16.7.4" + "@nx/cypress" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/js" "16.7.4" + "@nx/linter" "16.7.4" + "@nx/workspace" "16.7.4" "@phenomnomnominal/tsquery" "~5.0.1" dotenv "~16.3.1" semver "7.5.3" tslib "^2.3.0" -"@nx/web@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/web/-/web-16.7.2.tgz#08a17330a5ad79d3b19d45d663c049a227022103" - integrity sha512-IYi3gGKewvfkEUgspgVmUlEKFK2yxmKt2wUOQtlhdC5cPJcRoR7Ql64rg7BoJu3t34ftXiTPD63qqv/uBC566g== +"@nx/web@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/web/-/web-16.7.4.tgz#09f6233e7ff81b6ea7b51c90565a0b475c917653" + integrity sha512-keR+jZES/H9MZBOIvN3zLyOw7qP05cOs14NNHc7tkj5jOvifQxslLQRdx+h62tJigmS6TZY43mlJfVCWvYwdXg== dependencies: - "@nrwl/web" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/js" "16.7.2" + "@nrwl/web" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/js" "16.7.4" chalk "^4.1.0" chokidar "^3.5.1" detect-port "^1.5.1" @@ -4185,15 +4185,15 @@ ignore "^5.0.4" tslib "^2.3.0" -"@nx/webpack@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/webpack/-/webpack-16.7.2.tgz#8fbf0c7e520ee1ff5423ab9bf08e6db2c863f599" - integrity sha512-nZPgIISyUpPLTvPSfRMJo4IY2f3cABxJH4LKJ0U0+uV0fTvzMs9GO8JIQ8534m9b2KISjSbaPL6efJhGkn2VbQ== +"@nx/webpack@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/webpack/-/webpack-16.7.4.tgz#7c9ceb1ab480db94cf9ceb07e3d5b2fdb130d56e" + integrity sha512-fAPuH14BO+Hzjn4Y6zJNn8b05lBDmqM0oy/yi3U3FHGoc9S1cmaLiajBMlle6nWlQjbd7S3R6Dk5xwr76Ii8yw== dependencies: "@babel/core" "^7.22.9" - "@nrwl/webpack" "16.7.2" - "@nx/devkit" "16.7.2" - "@nx/js" "16.7.2" + "@nrwl/webpack" "16.7.4" + "@nx/devkit" "16.7.4" + "@nx/js" "16.7.4" autoprefixer "^10.4.9" babel-loader "^9.1.2" browserslist "^4.21.4" @@ -4230,16 +4230,16 @@ webpack-node-externals "^3.0.0" webpack-subresource-integrity "^5.1.0" -"@nx/workspace@16.7.2": - version "16.7.2" - resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-16.7.2.tgz#25b54090b37db9f45d795327c013781d290b6a95" - integrity sha512-6bI2EBXxbMcUI/Gtin+M95l9kQdoov9UIB97j8pX/V/4K8Xvegn01+MF99De9/oApkQjNehmR2dpi4hPo0FFUw== +"@nx/workspace@16.7.4": + version "16.7.4" + resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-16.7.4.tgz#7c002c548c921c1b0f63a338a5ec80f051f59b5b" + integrity sha512-mbefKyHg3avgK1jN6GChCDz2wc1qvi22BOUd/4WO+o88sShAA2h0gg8SMvkzLTNvGcNUWok66dInBfAJHvUOnw== dependencies: - "@nrwl/workspace" "16.7.2" - "@nx/devkit" "16.7.2" + "@nrwl/workspace" "16.7.4" + "@nx/devkit" "16.7.4" chalk "^4.1.0" ignore "^5.0.4" - nx "16.7.2" + nx "16.7.4" rxjs "^7.8.0" tslib "^2.3.0" yargs-parser "21.1.1" @@ -5729,13 +5729,6 @@ "@swc/core-win32-ia32-msvc" "1.3.74" "@swc/core-win32-x64-msvc" "1.3.74" -"@swc/helpers@0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.1.tgz#e9031491aa3f26bfcc974a67f48bd456c8a5357a" - integrity sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg== - dependencies: - tslib "^2.4.0" - "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -14830,13 +14823,12 @@ nwsapi@^2.2.0, nwsapi@^2.2.2: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -nx-cloud@16.4.0-beta.1: - version "16.4.0-beta.1" - resolved "https://registry.yarnpkg.com/nx-cloud/-/nx-cloud-16.4.0-beta.1.tgz#87aede180e32ee77c1965b033c6f91634b5a4bfc" - integrity sha512-I62IBQDjbA3h+P8JVFrannVllj8O9/3YYfyg8sPLVYxFKwnqqsgR6kG2zHxB9Q2k0hoSU7JZ02d9oPJsRzL5rg== +nx-cloud@16.3.0: + version "16.3.0" + resolved "https://registry.yarnpkg.com/nx-cloud/-/nx-cloud-16.3.0.tgz#f916c0be1d7eb5d017d542fea349e09893502ee9" + integrity sha512-hmNgpeLO4v4WDSWa8YhwX+q+9ohIyY8iqxlWyIKixWzQH2XfRgYFjOLH4IDLGOlKa3hg7MB6+4+75cK9CfSmKw== dependencies: - "@nrwl/nx-cloud" "16.4.0-beta.1" - "@swc/helpers" "0.5.1" + "@nrwl/nx-cloud" "16.3.0" axios "1.1.3" chalk "^4.1.0" dotenv "~10.0.0" @@ -14847,12 +14839,12 @@ nx-cloud@16.4.0-beta.1: tar "6.1.11" yargs-parser ">=21.1.1" -nx@16.7.2: - version "16.7.2" - resolved "https://registry.yarnpkg.com/nx/-/nx-16.7.2.tgz#d5886f183f0b99c1e218f0c0e6edac72f9be637d" - integrity sha512-T7cRC97qJ4H9fg498ZGwFQaTzJdLQaRp6DFUwzFo1B9qzR56A2tA3HBvT/huo85THaDX+/pcgLyeixJKEE5RPg== +nx@16.7.4: + version "16.7.4" + resolved "https://registry.yarnpkg.com/nx/-/nx-16.7.4.tgz#355cfe9187822fa29676b88da1673a09acab990e" + integrity sha512-L0Cbikk5kO+IBH0UQ2BOAut5ndeHXBlACKzjOPOCluY8WYh2sxWYt9/N/juFBN3XXRX7ionTr1PhWUzNE0Mzqw== dependencies: - "@nrwl/tao" "16.7.2" + "@nrwl/tao" "16.7.4" "@parcel/watcher" "2.0.4" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "3.0.0-rc.46" @@ -14888,16 +14880,16 @@ nx@16.7.2: yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nx/nx-darwin-arm64" "16.7.2" - "@nx/nx-darwin-x64" "16.7.2" - "@nx/nx-freebsd-x64" "16.7.2" - "@nx/nx-linux-arm-gnueabihf" "16.7.2" - "@nx/nx-linux-arm64-gnu" "16.7.2" - "@nx/nx-linux-arm64-musl" "16.7.2" - "@nx/nx-linux-x64-gnu" "16.7.2" - "@nx/nx-linux-x64-musl" "16.7.2" - "@nx/nx-win32-arm64-msvc" "16.7.2" - "@nx/nx-win32-x64-msvc" "16.7.2" + "@nx/nx-darwin-arm64" "16.7.4" + "@nx/nx-darwin-x64" "16.7.4" + "@nx/nx-freebsd-x64" "16.7.4" + "@nx/nx-linux-arm-gnueabihf" "16.7.4" + "@nx/nx-linux-arm64-gnu" "16.7.4" + "@nx/nx-linux-arm64-musl" "16.7.4" + "@nx/nx-linux-x64-gnu" "16.7.4" + "@nx/nx-linux-x64-musl" "16.7.4" + "@nx/nx-win32-arm64-msvc" "16.7.4" + "@nx/nx-win32-x64-msvc" "16.7.4" oauth@0.9.x: version "0.9.15" From 0b59fc639ddb2cc98d242d503dabd85a79ab905a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 27 Aug 2023 11:13:11 +0200 Subject: [PATCH 12/32] Feature/upgrade prettier to version 3 (#2163) * Upgrade prettier to version 3.0.2 * Prettify code * Update changelog --- .prettierrc | 1 + CHANGELOG.md | 1 + apps/api/src/app/auth/auth.controller.ts | 5 ++--- apps/api/src/app/health/health.controller.ts | 10 ++++------ .../src/app/portfolio/portfolio.service.ts | 20 ++++++++----------- .../app/subscription/subscription.service.ts | 5 ++--- .../data-gathering/data-gathering.service.ts | 10 ++++------ .../trackinsight/trackinsight.service.ts | 12 +++++------ .../yahoo-finance/yahoo-finance.service.ts | 5 ++--- .../twitter-bot/twitter-bot.service.ts | 5 ++--- .../admin-market-data-detail.component.html | 2 +- apps/client/src/index.html | 2 +- libs/ui/.storybook/preview-head.html | 2 +- .../activities-table.component.html | 2 +- .../fire-calculator.component.html | 2 +- package.json | 4 ++-- yarn.lock | 18 ++++++++--------- 17 files changed, 48 insertions(+), 58 deletions(-) diff --git a/.prettierrc b/.prettierrc index 30f191d91..6a8ad9afa 100644 --- a/.prettierrc +++ b/.prettierrc @@ -9,6 +9,7 @@ ], "attributeSort": "ASC", "endOfLine": "auto", + "plugins": ["prettier-plugin-organize-attributes"], "printWidth": 80, "singleQuote": true, "tabWidth": 2, diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d2dd3de8..3b2f6634b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Upgraded `Nx` from version `16.7.2` to `16.7.4` +- Upgraded `prettier` from version `2.8.4` to `3.0.2` ## 1.303.0 - 2023-08-23 diff --git a/apps/api/src/app/auth/auth.controller.ts b/apps/api/src/app/auth/auth.controller.ts index 0c6b047bf..376109b8d 100644 --- a/apps/api/src/app/auth/auth.controller.ts +++ b/apps/api/src/app/auth/auth.controller.ts @@ -41,9 +41,8 @@ export class AuthController { @Param('accessToken') accessToken: string ): Promise { try { - const authToken = await this.authService.validateAnonymousLogin( - accessToken - ); + const authToken = + await this.authService.validateAnonymousLogin(accessToken); return { authToken }; } catch { throw new HttpException( diff --git a/apps/api/src/app/health/health.controller.ts b/apps/api/src/app/health/health.controller.ts index 3c8c0ef56..cc430c0dc 100644 --- a/apps/api/src/app/health/health.controller.ts +++ b/apps/api/src/app/health/health.controller.ts @@ -20,9 +20,8 @@ export class HealthController { @Get('data-enhancer/:name') public async getHealthOfDataEnhancer(@Param('name') name: string) { - const hasResponse = await this.healthService.hasResponseFromDataEnhancer( - name - ); + const hasResponse = + await this.healthService.hasResponseFromDataEnhancer(name); if (hasResponse !== true) { throw new HttpException( @@ -44,9 +43,8 @@ export class HealthController { ); } - const hasResponse = await this.healthService.hasResponseFromDataProvider( - dataSource - ); + const hasResponse = + await this.healthService.hasResponseFromDataProvider(dataSource); if (hasResponse !== true) { throw new HttpException( diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 564056d1c..466cec964 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -470,9 +470,8 @@ export class PortfolioService { transactionPoints[0]?.date ?? format(new Date(), DATE_FORMAT) ); const startDate = this.getStartDate(dateRange, portfolioStart); - const currentPositions = await portfolioCalculator.getCurrentPositions( - startDate - ); + const currentPositions = + await portfolioCalculator.getCurrentPositions(startDate); const cashDetails = await this.accountService.getCashDetails({ filters, @@ -810,9 +809,8 @@ export class PortfolioService { const transactionPoints = portfolioCalculator.getTransactionPoints(); const portfolioStart = parseDate(transactionPoints[0].date); - const currentPositions = await portfolioCalculator.getCurrentPositions( - portfolioStart - ); + const currentPositions = + await portfolioCalculator.getCurrentPositions(portfolioStart); const position = currentPositions.positions.find( (item) => item.symbol === aSymbol @@ -1046,9 +1044,8 @@ export class PortfolioService { const portfolioStart = parseDate(transactionPoints[0].date); const startDate = this.getStartDate(dateRange, portfolioStart); - const currentPositions = await portfolioCalculator.getCurrentPositions( - startDate - ); + const currentPositions = + await portfolioCalculator.getCurrentPositions(startDate); const positions = currentPositions.positions.filter( (item) => !item.quantity.eq(0) @@ -1238,9 +1235,8 @@ export class PortfolioService { portfolioCalculator.setTransactionPoints(transactionPoints); const portfolioStart = parseDate(transactionPoints[0].date); - const currentPositions = await portfolioCalculator.getCurrentPositions( - portfolioStart - ); + const currentPositions = + await portfolioCalculator.getCurrentPositions(portfolioStart); const positions = currentPositions.positions.filter( (item) => !item.quantity.eq(0) diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index c3e01851d..d94dd68ad 100644 --- a/apps/api/src/app/subscription/subscription.service.ts +++ b/apps/api/src/app/subscription/subscription.service.ts @@ -93,9 +93,8 @@ export class SubscriptionService { public async createSubscriptionViaStripe(aCheckoutSessionId: string) { try { - const session = await this.stripe.checkout.sessions.retrieve( - aCheckoutSessionId - ); + const session = + await this.stripe.checkout.sessions.retrieve(aCheckoutSessionId); await this.createSubscription({ price: session.amount_total / 100, diff --git a/apps/api/src/services/data-gathering/data-gathering.service.ts b/apps/api/src/services/data-gathering/data-gathering.service.ts index 7718ef394..77b79835d 100644 --- a/apps/api/src/services/data-gathering/data-gathering.service.ts +++ b/apps/api/src/services/data-gathering/data-gathering.service.ts @@ -127,12 +127,10 @@ export class DataGatheringService { uniqueAssets = await this.getUniqueAssets(); } - const assetProfiles = await this.dataProviderService.getAssetProfiles( - uniqueAssets - ); - const symbolProfiles = await this.symbolProfileService.getSymbolProfiles( - uniqueAssets - ); + const assetProfiles = + await this.dataProviderService.getAssetProfiles(uniqueAssets); + const symbolProfiles = + await this.symbolProfileService.getSymbolProfiles(uniqueAssets); for (const [symbol, assetProfile] of Object.entries(assetProfiles)) { const symbolMapping = symbolProfiles.find((symbolProfile) => { diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index ee81ef591..07c0234b6 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -38,9 +38,9 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { .json() .catch(() => { return got( - `${TrackinsightDataEnhancerService.baseUrl}/funds/${ - symbol.split('.')?.[0] - }.json` + `${TrackinsightDataEnhancerService.baseUrl}/funds/${symbol.split( + '.' + )?.[0]}.json` ) .json() .catch(() => { @@ -60,9 +60,9 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { .json() .catch(() => { return got( - `${TrackinsightDataEnhancerService.baseUrl}/holdings/${ - symbol.split('.')?.[0] - }.json` + `${TrackinsightDataEnhancerService.baseUrl}/holdings/${symbol.split( + '.' + )?.[0]}.json` ) .json() .catch(() => { diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 54145a8b4..9e7032de6 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -99,9 +99,8 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { yahooSymbol = quotes[0].symbol; } - const { countries, sectors, url } = await this.getAssetProfile( - yahooSymbol - ); + const { countries, sectors, url } = + await this.getAssetProfile(yahooSymbol); if (countries) { response.countries = countries; diff --git a/apps/api/src/services/twitter-bot/twitter-bot.service.ts b/apps/api/src/services/twitter-bot/twitter-bot.service.ts index 218dd291f..d3e7fb91c 100644 --- a/apps/api/src/services/twitter-bot/twitter-bot.service.ts +++ b/apps/api/src/services/twitter-bot/twitter-bot.service.ts @@ -65,9 +65,8 @@ export class TwitterBotService { status += benchmarkListing; } - const { data: createdTweet } = await this.twitterClient.v2.tweet( - status - ); + const { data: createdTweet } = + await this.twitterClient.v2.tweet(status); Logger.log( `Fear & Greed Index has been tweeted: https://twitter.com/ghostfolio_/status/${createdTweet.id}`, diff --git a/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.html b/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.html index dc64ed120..d6f67faa3 100644 --- a/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.html +++ b/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.html @@ -29,7 +29,7 @@ }" [title]=" (itemByMonth.key + '-' + (i + 1 < 10 ? '0' + (i + 1) : i + 1) - | date : defaultDateFormat) ?? '' + | date: defaultDateFormat) ?? '' " (click)=" onOpenMarketDataDetail({ diff --git a/apps/client/src/index.html b/apps/client/src/index.html index 55120ec08..eabc42f94 100644 --- a/apps/client/src/index.html +++ b/apps/client/src/index.html @@ -1,4 +1,4 @@ - + ${title} diff --git a/libs/ui/.storybook/preview-head.html b/libs/ui/.storybook/preview-head.html index ef2b9647a..aa97d5363 100644 --- a/libs/ui/.storybook/preview-head.html +++ b/libs/ui/.storybook/preview-head.html @@ -1,6 +1,6 @@