diff --git a/packages/arb-token-bridge-ui/.gitignore b/packages/arb-token-bridge-ui/.gitignore index c11e5a25db..118a252e21 100644 --- a/packages/arb-token-bridge-ui/.gitignore +++ b/packages/arb-token-bridge-ui/.gitignore @@ -40,3 +40,6 @@ yarn-error.log* # Next.js .next next-env.d.ts + +# auto-generated images +public/images/__auto-generated diff --git a/packages/arb-token-bridge-ui/package.json b/packages/arb-token-bridge-ui/package.json index 5794a2eb9e..abe147b101 100644 --- a/packages/arb-token-bridge-ui/package.json +++ b/packages/arb-token-bridge-ui/package.json @@ -40,7 +40,7 @@ "react-toastify": "^9.1.1", "react-use": "^17.2.4", "react-virtualized": "^9.22.3", - "sharp": "^0.32.6", + "sharp": "^0.33.5", "swr": "^2.1.2", "tailwind-merge": "^2.0.0", "use-query-params": "^2.2.1", @@ -49,8 +49,9 @@ "zustand": "^4.3.9" }, "scripts": { + "predev": "yarn generateDenylist && yarn generateOpenGraphImages", "dev": "next dev", - "prebuild": "yarn generateDenylist", + "prebuild": "yarn generateDenylist && yarn generateOpenGraphImages", "postinstall": "patch-package", "build": "next build", "start": "next start", @@ -60,6 +61,7 @@ "lint:fix": "tsc && eslint 'src/**/*.{js,ts,tsx}' --quiet --fix", "prettier:format": "prettier --config-precedence file-override --write \"src/**/*.{tsx,ts,scss,md,json}\"", "generateDenylist": "ts-node --project ./scripts/tsconfig.json ./scripts/generateDenylist.ts", + "generateOpenGraphImages": "ts-node --project ./scripts/tsconfig.json ./src/generateOpenGraphImages.tsx", "generateCoreChainsToMonitor": "ts-node --project ./scripts/tsconfig.json ./scripts/generateCoreChainsToMonitor.ts", "generateOrbitChainsToMonitor": "ts-node --project ./scripts/tsconfig.json ./scripts/generateOrbitChainsToMonitor.ts" }, @@ -110,6 +112,7 @@ "postinstall-postinstall": "^2.1.0", "prettier": "^2.7.1", "prettier-plugin-tailwindcss": "^0.1.11", + "satori": "^0.10.11", "start-server-and-test": "^2.0.0", "tailwindcss": "^3.2.4", "ts-node": "^10.9.1", diff --git a/packages/arb-token-bridge-ui/public/images/PolterTestnetLogo.png b/packages/arb-token-bridge-ui/public/images/PolterTestnetLogo.png deleted file mode 100644 index 70ee5c61fb..0000000000 Binary files a/packages/arb-token-bridge-ui/public/images/PolterTestnetLogo.png and /dev/null differ diff --git a/packages/arb-token-bridge-ui/public/images/PolterTestnetLogo.webp b/packages/arb-token-bridge-ui/public/images/PolterTestnetLogo.webp new file mode 100644 index 0000000000..c466d2526e Binary files /dev/null and b/packages/arb-token-bridge-ui/public/images/PolterTestnetLogo.webp differ diff --git a/packages/arb-token-bridge-ui/public/images/__auto-generated/open-graph/.gitkeep b/packages/arb-token-bridge-ui/public/images/__auto-generated/open-graph/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/arb-token-bridge-ui/scripts/tsconfig.json b/packages/arb-token-bridge-ui/scripts/tsconfig.json index 2eba876951..18b760b317 100644 --- a/packages/arb-token-bridge-ui/scripts/tsconfig.json +++ b/packages/arb-token-bridge-ui/scripts/tsconfig.json @@ -15,6 +15,7 @@ }, "compilerOptions": { // typescript options here - "moduleResolution": "NodeNext" + "moduleResolution": "NodeNext", + "jsx": "react" } } diff --git a/packages/arb-token-bridge-ui/src/font/Unica77LL-Medium.otf b/packages/arb-token-bridge-ui/src/font/Unica77LL-Medium.otf new file mode 100644 index 0000000000..e53df6d053 Binary files /dev/null and b/packages/arb-token-bridge-ui/src/font/Unica77LL-Medium.otf differ diff --git a/packages/arb-token-bridge-ui/src/font/Unica77LL-Regular.otf b/packages/arb-token-bridge-ui/src/font/Unica77LL-Regular.otf new file mode 100644 index 0000000000..b2bcfc79ec Binary files /dev/null and b/packages/arb-token-bridge-ui/src/font/Unica77LL-Regular.otf differ diff --git a/packages/arb-token-bridge-ui/src/generateOpenGraphImages.tsx b/packages/arb-token-bridge-ui/src/generateOpenGraphImages.tsx new file mode 100644 index 0000000000..43e422430f --- /dev/null +++ b/packages/arb-token-bridge-ui/src/generateOpenGraphImages.tsx @@ -0,0 +1,344 @@ +import React from 'react' +import satori, { Font } from 'satori' +import sharp from 'sharp' +import fs from 'fs' +import { ChainId, isNetwork } from './util/networks' +import { getBridgeUiConfigForChain } from './util/bridgeUiConfig' +import { orbitMainnets, orbitTestnets } from './util/orbitChainsList' + +const dimensions = { + width: 1200, + height: 627 +} as const + +async function getFonts(): Promise { + const unica77_regular = fs.readFileSync('./src/font/Unica77LL-Regular.otf') + const unica77_medium = fs.readFileSync('./src/font/Unica77LL-Medium.otf') + + return [ + { + name: 'Unica77', + data: unica77_regular, + weight: 400, + style: 'normal' + }, + { + name: 'Unica77', + data: unica77_medium, + weight: 500, + style: 'normal' + } + ] +} + +type Chain = ChainId | number + +type ChainCombination = [Chain, Chain] + +const chainToLogo: { [key: Chain]: string } = { + [ChainId.Ethereum]: 'https://l2beat.com/icons/ethereum.png', + [ChainId.ArbitrumOne]: 'https://l2beat.com/icons/arbitrum.png', + [ChainId.ArbitrumNova]: 'https://l2beat.com/icons/nova.png', + [ChainId.Sepolia]: 'https://l2beat.com/icons/ethereum.png', + [ChainId.ArbitrumSepolia]: 'https://l2beat.com/icons/arbitrum.png' +} + +const configs: ChainCombination[] = [ + [ChainId.Ethereum, ChainId.ArbitrumOne], + [ChainId.Ethereum, ChainId.ArbitrumNova], + [ChainId.Sepolia, ChainId.ArbitrumSepolia], + ...Object.values(orbitMainnets).map( + chain => [chain.parentChainId, chain.chainId] as ChainCombination + ), + ...Object.values(orbitTestnets).map( + chain => [chain.parentChainId, chain.chainId] as ChainCombination + ) +] + +function ChainWrapper({ + chain, + direction +}: { + chain: Chain + direction: 'From' | 'To' +}) { + const chainConfig = getBridgeUiConfigForChain(chain) + return ( +
+ + {direction}: {chainConfig.network.name} + + {`${chainConfig.network.name} +
+ ) +} + +function ArbitrumLogo({ + style, + width, + height +}: { + style: React.CSSProperties + width: number + height: number +}) { + return ( + Arbitrum Logo + ) +} + +function getCoreChainImage(from: Chain, to: Chain) { + return ( +
+
+ + + BRIDGE + +
+ + arrow + +
+
+ ) +} + +async function getOrbitChainImage(orbitChain: Chain) { + const chainConfig = getBridgeUiConfigForChain(orbitChain) + const isSvg = chainConfig.network.logo.endsWith('.svg') + const logoFileBuffer = fs.readFileSync(`./public${chainConfig.network.logo}`) + + console.log(`Generating image for ${orbitChain}`) + + const imageContent = isSvg + ? await sharp(logoFileBuffer) + .resize({ + width: 120, + height: 120, + fit: 'contain', + background: 'transparent' + }) + .toBuffer() + : await sharp(logoFileBuffer).png().toBuffer() + + return ( +
+
+
+ + logo + + {chainConfig.network.name.toUpperCase()} + + + BRIDGE + +
+
+ ) +} +async function generateSvg(orbitChain: Chain): Promise +async function generateSvg({ + from, + to +}: { + from: Chain + to: Chain +}): Promise +async function generateSvg( + chainsOrOrbitChain: Chain | { from: Chain; to: Chain } +): Promise { + const fonts = await getFonts() + const isOrbitChain = typeof chainsOrOrbitChain === 'number' + + const svg = await satori( + isOrbitChain + ? await getOrbitChainImage(chainsOrOrbitChain) + : getCoreChainImage(chainsOrOrbitChain.from, chainsOrOrbitChain.to), + { + ...dimensions, + fonts + } + ) + + const file = isOrbitChain + ? `${chainsOrOrbitChain}.jpg` + : `${chainsOrOrbitChain.from}-to-${chainsOrOrbitChain.to}.jpg` + const filePath = `./public/images/__auto-generated/open-graph/${file}` + + await sharp(Buffer.from(svg)) + .jpeg({ quality: 90, mozjpeg: true }) + .toFile(filePath) + + console.log(`Generated ${filePath}`) +} + +async function main() { + for (const combination of configs) { + const { isCoreChain: isChildChainCoreChain } = isNetwork(combination[1]) + + if (!isChildChainCoreChain) { + await generateSvg(combination[1]) + } else { + await generateSvg({ from: combination[0], to: combination[1] }) + await generateSvg({ from: combination[1], to: combination[0] }) + } + } +} + +main() diff --git a/packages/arb-token-bridge-ui/src/pages/_app.tsx b/packages/arb-token-bridge-ui/src/pages/_app.tsx index 6fb6a7eca0..6a10075e3e 100644 --- a/packages/arb-token-bridge-ui/src/pages/_app.tsx +++ b/packages/arb-token-bridge-ui/src/pages/_app.tsx @@ -14,11 +14,17 @@ import 'tippy.js/themes/light.css' import '@rainbow-me/rainbowkit/styles.css' import { Layout } from '../components/common/Layout' -import { siteTitle } from './_document' import '../styles/tailwind.css' import '../styles/purple.css' +import { + ChainKeyQueryParam, + getChainForChainKeyQueryParam +} from '../types/ChainQueryParam' import { isUserRejectedError } from '../util/isUserRejectedError' +import { isNetwork } from '../util/networks' + +const siteTitle = 'Bridge to Arbitrum' dayjs.extend(utc) dayjs.extend(relativeTime) @@ -74,10 +80,84 @@ if ( }) } -export default function App({ Component, pageProps }: AppProps) { +function DynamicMetaData({ + sourceChainSlug, + destinationChainSlug +}: { + sourceChainSlug: ChainKeyQueryParam + destinationChainSlug: ChainKeyQueryParam +}) { + const sourceChainInfo = getChainForChainKeyQueryParam(sourceChainSlug) + const destinationChainInfo = + getChainForChainKeyQueryParam(destinationChainSlug) + const { isOrbitChain: isSourceOrbitChain } = isNetwork(sourceChainInfo.id) + const { isOrbitChain: isDestinationOrbitChain } = isNetwork( + destinationChainInfo.id + ) + + const siteDescription = `Bridge from ${sourceChainInfo.name} to ${destinationChainInfo.name} using the Arbitrum Bridge. Built to scale Ethereum, Arbitrum brings you 10x lower costs while inheriting Ethereum’s security model. Arbitrum is a Layer 2 Optimistic Rollup.` + const siteDomain = 'https://bridge.arbitrum.io' + + let metaImagePath = `${sourceChainInfo.id}-to-${destinationChainInfo.id}.jpg` + + if (isSourceOrbitChain) { + metaImagePath = `${sourceChainInfo.id}.jpg` + } + + if (isDestinationOrbitChain) { + metaImagePath = `${destinationChainInfo.id}.jpg` + } + + return ( + <> + + + {/* */} + + + + + + + {/* */} + + + + + + + + ) +} + +export default function App({ Component, pageProps, router }: AppProps) { + const sourceChainSlug = (router.query.sourceChain?.toString() ?? + 'ethereum') as ChainKeyQueryParam + const destinationChainSlug = (router.query.destinationChain?.toString() ?? + 'arbitrum-one') as ChainKeyQueryParam + return ( <> + {siteTitle} diff --git a/packages/arb-token-bridge-ui/src/pages/_document.tsx b/packages/arb-token-bridge-ui/src/pages/_document.tsx index 85136cf939..cae930c3c6 100644 --- a/packages/arb-token-bridge-ui/src/pages/_document.tsx +++ b/packages/arb-token-bridge-ui/src/pages/_document.tsx @@ -1,10 +1,5 @@ import { Html, Head, Main, NextScript } from 'next/document' -export const siteTitle = 'Bridge to Arbitrum' -const siteDomain = 'https://bridge.arbitrum.io' -const siteDescription = - 'Built to scale Ethereum, Arbitrum brings you 10x lower costs while inheriting Ethereum’s security model. Arbitrum is a Layer 2 Optimistic Rollup.' - export default function Document() { return ( @@ -13,21 +8,6 @@ export default function Document() { - - {/* */} - - - - - - - {/* */} - - - - - -
diff --git a/packages/arb-token-bridge-ui/src/types/ChainQueryParam.ts b/packages/arb-token-bridge-ui/src/types/ChainQueryParam.ts index 77abdf0b20..cb41de6fc8 100644 --- a/packages/arb-token-bridge-ui/src/types/ChainQueryParam.ts +++ b/packages/arb-token-bridge-ui/src/types/ChainQueryParam.ts @@ -1,6 +1,5 @@ import { Chain } from 'wagmi' import * as chains from 'wagmi/chains' - import { ChainId, getCustomChainFromLocalStorageById, diff --git a/packages/arb-token-bridge-ui/src/util/networks.ts b/packages/arb-token-bridge-ui/src/util/networks.ts index 3266dad69c..ab8ce17bfb 100644 --- a/packages/arb-token-bridge-ui/src/util/networks.ts +++ b/packages/arb-token-bridge-ui/src/util/networks.ts @@ -193,6 +193,7 @@ export function saveCustomChainToLocalStorage(newCustomChain: ChainWithRpcUrl) { } const newCustomChains = [...getCustomChainsFromLocalStorage(), newCustomChain] + localStorage.setItem( customChainLocalStorageKey, JSON.stringify(newCustomChains) @@ -203,6 +204,7 @@ export function removeCustomChainFromLocalStorage(chainId: number) { const newCustomChains = getCustomChainsFromLocalStorage().filter( chain => chain.chainId !== chainId ) + localStorage.setItem( customChainLocalStorageKey, JSON.stringify(newCustomChains) diff --git a/packages/arb-token-bridge-ui/src/util/orbitChainsData.json b/packages/arb-token-bridge-ui/src/util/orbitChainsData.json index 2fc3853b9c..4a66f86ddb 100644 --- a/packages/arb-token-bridge-ui/src/util/orbitChainsData.json +++ b/packages/arb-token-bridge-ui/src/util/orbitChainsData.json @@ -1093,7 +1093,7 @@ "color": "#03AB2A", "network": { "name": "Polter Testnet", - "logo": "/images/PolterTestnetLogo.png", + "logo": "/images/PolterTestnetLogo.webp", "description": "A gaming testnet for Aavegotchi's Geist Mainnet." }, "nativeTokenData": { diff --git a/packages/arb-token-bridge-ui/src/util/wagmi/getWagmiChain.ts b/packages/arb-token-bridge-ui/src/util/wagmi/getWagmiChain.ts index 66de1b1b0f..ad75742cc3 100644 --- a/packages/arb-token-bridge-ui/src/util/wagmi/getWagmiChain.ts +++ b/packages/arb-token-bridge-ui/src/util/wagmi/getWagmiChain.ts @@ -13,8 +13,7 @@ import { baseSepolia, base } from './wagmiAdditionalNetworks' -import { ChainId } from '../networks' -import { getCustomChainFromLocalStorageById } from '../networks' +import { ChainId, getCustomChainFromLocalStorageById } from '../networks' import { orbitChains } from '../orbitChainsList' export function getWagmiChain(chainId: number): Chain { diff --git a/packages/arb-token-bridge-ui/src/util/wagmi/setup.ts b/packages/arb-token-bridge-ui/src/util/wagmi/setup.ts index fac6d8c971..4b748a2080 100644 --- a/packages/arb-token-bridge-ui/src/util/wagmi/setup.ts +++ b/packages/arb-token-bridge-ui/src/util/wagmi/setup.ts @@ -1,6 +1,7 @@ import { createClient, configureChains } from 'wagmi' import { mainnet, arbitrum } from '@wagmi/core/chains' import { publicProvider } from 'wagmi/providers/public' +import { jsonRpcProvider } from 'wagmi/providers/jsonRpc' import { connectorsForWallets, getDefaultWallets } from '@rainbow-me/rainbowkit' import { trustWallet, okxWallet } from '@rainbow-me/rainbowkit/wallets' @@ -16,7 +17,7 @@ import { baseSepolia } from './wagmiAdditionalNetworks' import { isTestingEnvironment } from '../CommonUtils' -import { getCustomChainsFromLocalStorage, ChainId } from '../networks' +import { getCustomChainsFromLocalStorage, ChainId, rpcURLs } from '../networks' import { getOrbitChains } from '../orbitChainsList' import { getWagmiChain } from './getWagmiChain' import { customInfuraProvider } from '../infura' @@ -131,7 +132,15 @@ export function getProps(targetChainKey: string | null) { // // https://github.com/wagmi-dev/references/blob/main/packages/connectors/src/walletConnect.ts#L114 getChains(sanitizeTargetChainKey(targetChainKey)), - [customInfuraProvider(), publicProvider()] + [ + customInfuraProvider(), + publicProvider(), + jsonRpcProvider({ + rpc: chain => ({ + http: rpcURLs[chain.id]! + }) + }) + ] ) const { wallets } = getDefaultWallets({ diff --git a/packages/arb-token-bridge-ui/tsconfig.json b/packages/arb-token-bridge-ui/tsconfig.json index 6d8f505ddc..89eac35f60 100644 --- a/packages/arb-token-bridge-ui/tsconfig.json +++ b/packages/arb-token-bridge-ui/tsconfig.json @@ -5,7 +5,8 @@ "additional.d.ts", "next.config.js", "next-env.d.ts", - ".next/types/**/*.ts" + ".next/types/**/*.ts", + "build/types/**/*.ts" ], "compilerOptions": { "noEmit": true, @@ -15,7 +16,13 @@ "@/images/*": ["./public/images/*"], "@/icons/*": ["./public/icons/*"], "@/token-bridge-sdk/*": ["./src/token-bridge-sdk/*"] - } + }, + "plugins": [ + { + "name": "next" + } + ], + "strictNullChecks": true }, "exclude": ["node_modules"] } diff --git a/yarn.lock b/yarn.lock index 9139b218dd..c1346b3d9a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -628,6 +628,13 @@ chance "^1.1.4" core-js "^3.6.4" +"@emnapi/runtime@^1.2.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" + integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== + dependencies: + tslib "^2.4.0" + "@emotion/hash@^0.8.0": version "0.8.0" resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz" @@ -1239,6 +1246,119 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@img/sharp-darwin-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08" + integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.0.4" + +"@img/sharp-darwin-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61" + integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.0.4" + +"@img/sharp-libvips-darwin-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz#447c5026700c01a993c7804eb8af5f6e9868c07f" + integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== + +"@img/sharp-libvips-darwin-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062" + integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== + +"@img/sharp-libvips-linux-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704" + integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== + +"@img/sharp-libvips-linux-arm@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197" + integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== + +"@img/sharp-libvips-linux-s390x@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce" + integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== + +"@img/sharp-libvips-linux-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0" + integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== + +"@img/sharp-libvips-linuxmusl-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5" + integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== + +"@img/sharp-libvips-linuxmusl-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff" + integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== + +"@img/sharp-linux-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22" + integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.0.4" + +"@img/sharp-linux-arm@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff" + integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.0.5" + +"@img/sharp-linux-s390x@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667" + integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.0.4" + +"@img/sharp-linux-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb" + integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.0.4" + +"@img/sharp-linuxmusl-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b" + integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + +"@img/sharp-linuxmusl-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48" + integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + +"@img/sharp-wasm32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1" + integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== + dependencies: + "@emnapi/runtime" "^1.2.0" + +"@img/sharp-win32-ia32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9" + integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== + +"@img/sharp-win32-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342" + integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" @@ -2335,6 +2455,14 @@ dependencies: "@sentry/types" "8.33.1" +"@shuding/opentype.js@1.4.0-beta.0": + version "1.4.0-beta.0" + resolved "https://registry.yarnpkg.com/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz#5d1e7e9e056f546aad41df1c5043f8f85d39e24b" + integrity sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA== + dependencies: + fflate "^0.7.3" + string.prototype.codepointat "^0.2.1" + "@sideway/address@^4.1.3": version "4.1.4" resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz" @@ -4783,6 +4911,11 @@ base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== + base64-js@^1.3.1: version "1.5.1" resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" @@ -5472,7 +5605,7 @@ color-name@1.1.3: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@^1.0.0, color-name@~1.1.4: +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -5695,6 +5828,16 @@ crypto-js@^4.1.1: resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== +css-background-parser@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/css-background-parser/-/css-background-parser-0.1.0.tgz#48a17f7fe6d4d4f1bca3177ddf16c5617950741b" + integrity sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA== + +css-box-shadow@1.0.0-3: + version "1.0.0-3" + resolved "https://registry.yarnpkg.com/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz#9eaeb7140947bf5d649fc49a19e4bbaa5f602713" + integrity sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg== + css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz" @@ -6186,6 +6329,11 @@ detect-libc@^2.0.0, detect-libc@^2.0.2: resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz" integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== +detect-libc@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" @@ -6445,6 +6593,11 @@ emittery@^0.13.1: resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== +emoji-regex@^10.2.1: + version "10.3.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" @@ -6742,7 +6895,7 @@ escalade@^3.1.1: resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== @@ -7592,6 +7745,11 @@ fflate@^0.4.8: resolved "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz" integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA== +fflate@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.4.tgz#61587e5d958fdabb5a9368a302c25363f4f69f50" + integrity sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw== + figures@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" @@ -8412,6 +8570,11 @@ he@^1.2.0: resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hex-rgb@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776" + integrity sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw== + hey-listen@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz" @@ -10043,6 +10206,14 @@ lilconfig@^2.0.5, lilconfig@^2.1.0: resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +linebreak@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" @@ -11190,6 +11361,11 @@ package-hash@^4.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + param-case@^3.0.3, param-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" @@ -11205,6 +11381,14 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-css-color@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/parse-css-color/-/parse-css-color-0.2.1.tgz#b687a583f2e42e66ffdfce80a570706966e807c9" + integrity sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg== + dependencies: + color-name "^1.1.4" + hex-rgb "^4.1.0" + parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -12447,6 +12631,22 @@ safe-stable-stringify@^2.1.0: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +satori@^0.10.11: + version "0.10.11" + resolved "https://registry.yarnpkg.com/satori/-/satori-0.10.11.tgz#4d198beef405668120566d29a554411c534d8a5d" + integrity sha512-yLm1xPRPZUaKcBZJ6nmezoJjHB4MqV8x7Mu0PyZUJodRWRDD27UbeMwzuY9LEGG57WYLO4CQsGPlbHWV1Ex9TQ== + dependencies: + "@shuding/opentype.js" "1.4.0-beta.0" + css-background-parser "^0.1.0" + css-box-shadow "1.0.0-3" + css-to-react-native "^3.0.0" + emoji-regex "^10.2.1" + escape-html "^1.0.3" + linebreak "^1.1.0" + parse-css-color "^0.2.1" + postcss-value-parser "^4.2.0" + yoga-wasm-web "^0.3.3" + saxes@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" @@ -12517,6 +12717,11 @@ semver@^7.0.0, semver@^7.2.1, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semve dependencies: lru-cache "^6.0.0" +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -12635,7 +12840,7 @@ shallowequal@^1.1.0: resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== -sharp@0.32.6, sharp@^0.32.6: +sharp@0.32.6: version "0.32.6" resolved "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz" integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== @@ -12649,6 +12854,35 @@ sharp@0.32.6, sharp@^0.32.6: tar-fs "^3.0.4" tunnel-agent "^0.6.0" +sharp@^0.33.5: + version "0.33.5" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.5.tgz#13e0e4130cc309d6a9497596715240b2ec0c594e" + integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== + dependencies: + color "^4.2.3" + detect-libc "^2.0.3" + semver "^7.6.3" + optionalDependencies: + "@img/sharp-darwin-arm64" "0.33.5" + "@img/sharp-darwin-x64" "0.33.5" + "@img/sharp-libvips-darwin-arm64" "1.0.4" + "@img/sharp-libvips-darwin-x64" "1.0.4" + "@img/sharp-libvips-linux-arm" "1.0.5" + "@img/sharp-libvips-linux-arm64" "1.0.4" + "@img/sharp-libvips-linux-s390x" "1.0.4" + "@img/sharp-libvips-linux-x64" "1.0.4" + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + "@img/sharp-linux-arm" "0.33.5" + "@img/sharp-linux-arm64" "0.33.5" + "@img/sharp-linux-s390x" "0.33.5" + "@img/sharp-linux-x64" "0.33.5" + "@img/sharp-linuxmusl-arm64" "0.33.5" + "@img/sharp-linuxmusl-x64" "0.33.5" + "@img/sharp-wasm32" "0.33.5" + "@img/sharp-win32-ia32" "0.33.5" + "@img/sharp-win32-x64" "0.33.5" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -13101,6 +13335,11 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string.prototype.codepointat@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc" + integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== + string.prototype.matchall@^4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz" @@ -13575,6 +13814,11 @@ timed-out@^4.0.1: resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== +tiny-inflate@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" + integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== + tinybench@^2.5.0: version "2.9.0" resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz" @@ -13978,6 +14222,14 @@ unfetch@^4.2.0: resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== +unicode-trie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" + universal-user-agent@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz" @@ -14716,6 +14968,11 @@ yocto-queue@^1.0.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== +yoga-wasm-web@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz#eb8e9fcb18e5e651994732f19a220cb885d932ba" + integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA== + zen-observable-ts@^1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz"