From 0263d586d743645168b27de4e91ad89cef808dfc Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Sun, 18 Aug 2024 22:46:41 +0530 Subject: [PATCH] Fix badge for early access apps --- .github/workflows/{node.js.yml => test.yml} | 20 +- .gitignore | 1 + bun.lockb | Bin 0 -> 88611 bytes package.json | 19 +- pnpm-lock.yaml | 1662 ------------------- src/full-badge.tsx | 51 +- src/google-play-scraper.ts | 36 +- src/index.ts | 4 +- test/scraper.test.ts | 31 +- tsconfig.json | 44 +- 10 files changed, 134 insertions(+), 1734 deletions(-) rename .github/workflows/{node.js.yml => test.yml} (61%) create mode 100755 bun.lockb delete mode 100644 pnpm-lock.yaml diff --git a/.github/workflows/node.js.yml b/.github/workflows/test.yml similarity index 61% rename from .github/workflows/node.js.yml rename to .github/workflows/test.yml index 42fafa3..e1b1a87 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/test.yml @@ -1,9 +1,10 @@ # This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs -name: Node.js CI +name: Test on: + workflow_dispatch: push: branches: [ "main" ] pull_request: @@ -15,20 +16,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v2 - with: - version: 8 - - - name: Use Node.js - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: 'pnpm' + - name: Setup Bun + uses: oven-sh/setup-bun@v2.0.1 - name: Install dependencies - run: pnpm install --frozen-lockfile + run: bun install --frozen-lockfile - name: Run tests - run: pnpm test + run: bun run test diff --git a/.gitignore b/.gitignore index b971397..1016c56 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,4 @@ dist .tern-port bundle.js +.DS_Store \ No newline at end of file diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..ee7ea3283b2a93b3bb371fa0c95ac4bb3e5d3280 GIT binary patch literal 88611 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 4ed8910..e29dc5d 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "private": true, "version": "1.0.0", "description": "", + "type": "module", "main": "index.js", "scripts": { "w:deploy": "wrangler deploy --minify", @@ -13,18 +14,18 @@ "author": "", "license": "ISC", "devDependencies": { - "@cloudflare/workers-types": "^4.20231025.0", - "@types/react": "^18.2.37", - "@types/react-dom": "^18.2.15", - "vitest": "^0.34.6", - "wrangler": "^3.16.0" + "@cloudflare/workers-types": "^4.20240815.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "vitest": "^2.0.5", + "wrangler": "^3.72.0" }, "dependencies": { "badgen": "^3.2.3", - "hono": "^3.10.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "satori": "^0.10.9", + "hono": "^4.5.6", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "satori": "^0.10.14", "yoga-wasm-web": "^0.3.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index f0a9ec3..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,1662 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - badgen: - specifier: ^3.2.3 - version: 3.2.3 - hono: - specifier: ^3.10.1 - version: 3.10.1 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - satori: - specifier: ^0.10.9 - version: 0.10.9 - yoga-wasm-web: - specifier: ^0.3.3 - version: 0.3.3 - -devDependencies: - '@cloudflare/workers-types': - specifier: ^4.20231025.0 - version: 4.20231025.0 - '@types/react': - specifier: ^18.2.37 - version: 18.2.37 - '@types/react-dom': - specifier: ^18.2.15 - version: 18.2.15 - vitest: - specifier: ^0.34.6 - version: 0.34.6 - wrangler: - specifier: ^3.16.0 - version: 3.16.0 - -packages: - - /@cloudflare/kv-asset-handler@0.2.0: - resolution: {integrity: sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==} - dependencies: - mime: 3.0.0 - dev: true - - /@cloudflare/workerd-darwin-64@1.20231030.0: - resolution: {integrity: sha512-J4PQ9utPxLya9yHdMMx3AZeC5M/6FxcoYw6jo9jbDDFTy+a4Gslqf4Im9We3aeOEdPXa3tgQHVQOSelJSZLhIw==} - engines: {node: '>=16'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@cloudflare/workerd-darwin-arm64@1.20231030.0: - resolution: {integrity: sha512-WSJJjm11Del4hSneiNB7wTXGtBXI4QMCH9l5qf4iT5PAW8cESGcCmdHtWDWDtGAAGcvmLT04KNvmum92vRKKQQ==} - engines: {node: '>=16'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@cloudflare/workerd-linux-64@1.20231030.0: - resolution: {integrity: sha512-2HUeRTvoCC17fxE0qdBeR7J9dO8j4A8ZbdcvY8pZxdk+zERU6+N03RTbk/dQMU488PwiDvcC3zZqS4gwLfVT8g==} - engines: {node: '>=16'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@cloudflare/workerd-linux-arm64@1.20231030.0: - resolution: {integrity: sha512-4/GK5zHh+9JbUI6Z5xTCM0ZmpKKHk7vu9thmHjUxtz+o8Ne9DoD7DlDvXQWgMF6XGaTubDWyp3ttn+Qv8jDFuQ==} - engines: {node: '>=16'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@cloudflare/workerd-windows-64@1.20231030.0: - resolution: {integrity: sha512-fb/Jgj8Yqy3PO1jLhk7mTrHMkR8jklpbQFud6rL/aMAn5d6MQbaSrYOCjzkKGp0Zng8D2LIzSl+Fc0C9Sggxjg==} - engines: {node: '>=16'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@cloudflare/workers-types@4.20231025.0: - resolution: {integrity: sha512-TkcZkntUTOcvJ4vgmwpNfLTclpMbmbClZCe62B25/VTukmyv91joRa4eKzSjzCZUXTbFHNmVdOpmGaaJU2U3+A==} - dev: true - - /@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19): - resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} - peerDependencies: - esbuild: '*' - dependencies: - esbuild: 0.17.19 - dev: true - - /@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19): - resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} - peerDependencies: - esbuild: '*' - dependencies: - esbuild: 0.17.19 - escape-string-regexp: 4.0.0 - rollup-plugin-node-polyfills: 0.2.1 - dev: true - - /@esbuild/android-arm64@0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.19.5: - resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.19.5: - resolution: {integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.17.19: - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.19.5: - resolution: {integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.17.19: - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.19.5: - resolution: {integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.17.19: - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.19.5: - resolution: {integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.17.19: - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.19.5: - resolution: {integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.17.19: - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.19.5: - resolution: {integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.19.5: - resolution: {integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.19.5: - resolution: {integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.17.19: - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.19.5: - resolution: {integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.19.5: - resolution: {integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.17.19: - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.19.5: - resolution: {integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.17.19: - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.19.5: - resolution: {integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.17.19: - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.19.5: - resolution: {integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.17.19: - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.19.5: - resolution: {integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.17.19: - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.19.5: - resolution: {integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.17.19: - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.19.5: - resolution: {integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.17.19: - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.19.5: - resolution: {integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.17.19: - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.19.5: - resolution: {integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.17.19: - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.19.5: - resolution: {integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.17.19: - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.19.5: - resolution: {integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.17.19: - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.19.5: - resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@fastify/busboy@2.1.0: - resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} - engines: {node: '>=14'} - dev: true - - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - - /@rollup/rollup-android-arm-eabi@4.4.1: - resolution: {integrity: sha512-Ss4suS/sd+6xLRu+MLCkED2mUrAyqHmmvZB+zpzZ9Znn9S8wCkTQCJaQ8P8aHofnvG5L16u9MVnJjCqioPErwQ==} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-android-arm64@4.4.1: - resolution: {integrity: sha512-sRSkGTvGsARwWd7TzC8LKRf8FiPn7257vd/edzmvG4RIr9x68KBN0/Ek48CkuUJ5Pj/Dp9vKWv6PEupjKWjTYA==} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-arm64@4.4.1: - resolution: {integrity: sha512-nz0AiGrrXyaWpsmBXUGOBiRDU0wyfSXbFuF98pPvIO8O6auQsPG6riWsfQqmCCC5FNd8zKQ4JhgugRNAkBJ8mQ==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-x64@4.4.1: - resolution: {integrity: sha512-Ogqvf4/Ve/faMaiPRvzsJEqajbqs00LO+8vtrPBVvLgdw4wBg6ZDXdkDAZO+4MLnrc8mhGV6VJAzYScZdPLtJg==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm-gnueabihf@4.4.1: - resolution: {integrity: sha512-9zc2tqlr6HfO+hx9+wktUlWTRdje7Ub15iJqKcqg5uJZ+iKqmd2CMxlgPpXi7+bU7bjfDIuvCvnGk7wewFEhCg==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-gnu@4.4.1: - resolution: {integrity: sha512-phLb1fN3rq2o1j1v+nKxXUTSJnAhzhU0hLrl7Qzb0fLpwkGMHDem+o6d+ZI8+/BlTXfMU4kVWGvy6g9k/B8L6Q==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-musl@4.4.1: - resolution: {integrity: sha512-M2sDtw4tf57VPSjbTAN/lz1doWUqO2CbQuX3L9K6GWIR5uw9j+ROKCvvUNBY8WUbMxwaoc8mH9HmmBKsLht7+w==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-gnu@4.4.1: - resolution: {integrity: sha512-mHIlRLX+hx+30cD6c4BaBOsSqdnCE4ok7/KDvjHYAHoSuveoMMxIisZFvcLhUnyZcPBXDGZTuBoalcuh43UfQQ==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-musl@4.4.1: - resolution: {integrity: sha512-tB+RZuDi3zxFx7vDrjTNGVLu2KNyzYv+UY8jz7e4TMEoAj7iEt8Qk6xVu6mo3pgjnsHj6jnq3uuRsHp97DLwOA==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-arm64-msvc@4.4.1: - resolution: {integrity: sha512-Hdn39PzOQowK/HZzYpCuZdJC91PE6EaGbTe2VCA9oq2u18evkisQfws0Smh9QQGNNRa/T7MOuGNQoLeXhhE3PQ==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-ia32-msvc@4.4.1: - resolution: {integrity: sha512-tLpKb1Elm9fM8c5w3nl4N1eLTP4bCqTYw9tqUBxX8/hsxqHO3dxc2qPbZ9PNkdK4tg4iLEYn0pOUnVByRd2CbA==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-x64-msvc@4.4.1: - resolution: {integrity: sha512-eAhItDX9yQtZVM3yvXS/VR3qPqcnXvnLyx1pLXl4JzyNMBNO3KC986t/iAg2zcMzpAp9JSvxB5VZGnBiNoA98w==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@shuding/opentype.js@1.4.0-beta.0: - resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} - engines: {node: '>= 8.0.0'} - hasBin: true - dependencies: - fflate: 0.7.4 - string.prototype.codepointat: 0.2.1 - dev: false - - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true - - /@types/chai-subset@1.3.5: - resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} - dependencies: - '@types/chai': 4.3.10 - dev: true - - /@types/chai@4.3.10: - resolution: {integrity: sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg==} - dev: true - - /@types/node-forge@1.3.9: - resolution: {integrity: sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==} - dependencies: - '@types/node': 20.9.1 - dev: true - - /@types/node@20.9.1: - resolution: {integrity: sha512-HhmzZh5LSJNS5O8jQKpJ/3ZcrrlG6L70hpGqMIAoM9YVD0YBRNWYsfwcXq8VnSjlNpCpgLzMXdiPo+dxcvSmiA==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/prop-types@15.7.10: - resolution: {integrity: sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==} - dev: true - - /@types/react-dom@18.2.15: - resolution: {integrity: sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==} - dependencies: - '@types/react': 18.2.37 - dev: true - - /@types/react@18.2.37: - resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} - dependencies: - '@types/prop-types': 15.7.10 - '@types/scheduler': 0.16.6 - csstype: 3.1.2 - dev: true - - /@types/scheduler@0.16.6: - resolution: {integrity: sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==} - dev: true - - /@vitest/expect@0.34.6: - resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} - dependencies: - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - chai: 4.3.10 - dev: true - - /@vitest/runner@0.34.6: - resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} - dependencies: - '@vitest/utils': 0.34.6 - p-limit: 4.0.0 - pathe: 1.1.1 - dev: true - - /@vitest/snapshot@0.34.6: - resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} - dependencies: - magic-string: 0.30.5 - pathe: 1.1.1 - pretty-format: 29.7.0 - dev: true - - /@vitest/spy@0.34.6: - resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} - dependencies: - tinyspy: 2.2.0 - dev: true - - /@vitest/utils@0.34.6: - resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} - dependencies: - diff-sequences: 29.6.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - dev: true - - /acorn-walk@8.3.0: - resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - dependencies: - printable-characters: 1.0.42 - dev: true - - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true - - /badgen@3.2.3: - resolution: {integrity: sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==} - dev: false - - /base64-js@0.0.8: - resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} - engines: {node: '>= 0.4'} - dev: false - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /blake3-wasm@2.1.5: - resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true - - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true - - /camelize@1.0.1: - resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - dev: false - - /capnp-ts@0.7.0: - resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} - dependencies: - debug: 4.3.4 - tslib: 2.6.2 - transitivePeerDependencies: - - supports-color - dev: true - - /chai@4.3.10: - resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} - engines: {node: '>=4'} - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 - dev: true - - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: true - - /css-background-parser@0.1.0: - resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} - dev: false - - /css-box-shadow@1.0.0-3: - resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} - dev: false - - /css-color-keywords@1.0.0: - resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} - engines: {node: '>=4'} - dev: false - - /css-to-react-native@3.2.0: - resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} - dependencies: - camelize: 1.0.1 - css-color-keywords: 1.0.0 - postcss-value-parser: 4.2.0 - dev: false - - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - dev: true - - /data-uri-to-buffer@2.0.2: - resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} - dependencies: - type-detect: 4.0.8 - dev: true - - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - dev: false - - /esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - dev: true - - /esbuild@0.19.5: - resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.19.5 - '@esbuild/android-arm64': 0.19.5 - '@esbuild/android-x64': 0.19.5 - '@esbuild/darwin-arm64': 0.19.5 - '@esbuild/darwin-x64': 0.19.5 - '@esbuild/freebsd-arm64': 0.19.5 - '@esbuild/freebsd-x64': 0.19.5 - '@esbuild/linux-arm': 0.19.5 - '@esbuild/linux-arm64': 0.19.5 - '@esbuild/linux-ia32': 0.19.5 - '@esbuild/linux-loong64': 0.19.5 - '@esbuild/linux-mips64el': 0.19.5 - '@esbuild/linux-ppc64': 0.19.5 - '@esbuild/linux-riscv64': 0.19.5 - '@esbuild/linux-s390x': 0.19.5 - '@esbuild/linux-x64': 0.19.5 - '@esbuild/netbsd-x64': 0.19.5 - '@esbuild/openbsd-x64': 0.19.5 - '@esbuild/sunos-x64': 0.19.5 - '@esbuild/win32-arm64': 0.19.5 - '@esbuild/win32-ia32': 0.19.5 - '@esbuild/win32-x64': 0.19.5 - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /estree-walker@0.6.1: - resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - dev: true - - /exit-hook@2.2.1: - resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} - engines: {node: '>=6'} - dev: true - - /fflate@0.7.4: - resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} - dev: false - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true - - /get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true - - /hex-rgb@4.3.0: - resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} - engines: {node: '>=6'} - dev: false - - /hono@3.10.1: - resolution: {integrity: sha512-4jPKCmYWLAoCMpmvOU+xNOQYdcNftip7sM/IsO8EPyGAtjk9fGNyUchG6huSzLrY449WDNGFPetVs5doepNnlA==} - engines: {node: '>=16.0.0'} - dev: false - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true - - /linebreak@1.1.0: - resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} - dependencies: - base64-js: 0.0.8 - unicode-trie: 2.0.0 - dev: false - - /local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} - engines: {node: '>=14'} - dev: true - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - dependencies: - get-func-name: 2.0.2 - dev: true - - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 - dev: true - - /magic-string@0.30.5: - resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: true - - /miniflare@3.20231030.0: - resolution: {integrity: sha512-iCg1dNauUG+kNp7jizcNmV/1XFItuTDvD/6xIC34PrszgKxYCbBO2R72y5NEDJTwaqr5ohQI/320wuJ8GEe7nQ==} - engines: {node: '>=16.13'} - hasBin: true - dependencies: - acorn: 8.11.2 - acorn-walk: 8.3.0 - capnp-ts: 0.7.0 - exit-hook: 2.2.1 - glob-to-regexp: 0.4.1 - source-map-support: 0.5.21 - stoppable: 1.1.0 - undici: 5.27.2 - workerd: 1.20231030.0 - ws: 8.14.2 - youch: 3.3.3 - zod: 3.22.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /mlly@1.4.2: - resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} - dependencies: - acorn: 8.11.2 - pathe: 1.1.1 - pkg-types: 1.0.3 - ufo: 1.3.2 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - dev: true - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: true - - /pako@0.2.9: - resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - dev: false - - /parse-css-color@0.2.1: - resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==} - dependencies: - color-name: 1.1.4 - hex-rgb: 4.3.0 - dev: false - - /path-to-regexp@6.2.1: - resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} - dev: true - - /pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} - dev: true - - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} - dependencies: - jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 - dev: true - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: false - - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true - - /printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - dev: true - - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - dev: true - - /rollup-plugin-inject@3.0.2: - resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. - dependencies: - estree-walker: 0.6.1 - magic-string: 0.25.9 - rollup-pluginutils: 2.8.2 - dev: true - - /rollup-plugin-node-polyfills@0.2.1: - resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} - dependencies: - rollup-plugin-inject: 3.0.2 - dev: true - - /rollup-pluginutils@2.8.2: - resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - dependencies: - estree-walker: 0.6.1 - dev: true - - /rollup@4.4.1: - resolution: {integrity: sha512-idZzrUpWSblPJX66i+GzrpjKE3vbYrlWirUHteoAbjKReZwa0cohAErOYA5efoMmNCdvG9yrJS+w9Kl6csaH4w==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.4.1 - '@rollup/rollup-android-arm64': 4.4.1 - '@rollup/rollup-darwin-arm64': 4.4.1 - '@rollup/rollup-darwin-x64': 4.4.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.4.1 - '@rollup/rollup-linux-arm64-gnu': 4.4.1 - '@rollup/rollup-linux-arm64-musl': 4.4.1 - '@rollup/rollup-linux-x64-gnu': 4.4.1 - '@rollup/rollup-linux-x64-musl': 4.4.1 - '@rollup/rollup-win32-arm64-msvc': 4.4.1 - '@rollup/rollup-win32-ia32-msvc': 4.4.1 - '@rollup/rollup-win32-x64-msvc': 4.4.1 - fsevents: 2.3.3 - dev: true - - /satori@0.10.9: - resolution: {integrity: sha512-XU9EELUEZuioT4acLIpCXxHcFzrsC8muvg0MY28d+TlqwxbkTzBmWbw+3+hnCzXT7YZ0Qm8k3eXktDaEu+qmEw==} - engines: {node: '>=16'} - 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.2.0 - emoji-regex: 10.3.0 - 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 - dev: false - - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - - /selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - dependencies: - '@types/node-forge': 1.3.9 - node-forge: 1.3.1 - dev: true - - /siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - dev: true - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: true - - /stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - dev: true - - /stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 - dev: true - - /std-env@3.5.0: - resolution: {integrity: sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA==} - dev: true - - /stoppable@1.1.0: - resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} - engines: {node: '>=4', npm: '>=6'} - dev: true - - /string.prototype.codepointat@0.2.1: - resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} - dev: false - - /strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} - dependencies: - acorn: 8.11.2 - dev: true - - /tiny-inflate@1.0.3: - resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - dev: false - - /tinybench@2.5.1: - resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} - dev: true - - /tinypool@0.7.0: - resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} - engines: {node: '>=14.0.0'} - dev: true - - /tinyspy@2.2.0: - resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} - engines: {node: '>=14.0.0'} - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true - - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true - - /ufo@1.3.2: - resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} - dev: true - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - - /undici@5.27.2: - resolution: {integrity: sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==} - engines: {node: '>=14.0'} - dependencies: - '@fastify/busboy': 2.1.0 - dev: true - - /unicode-trie@2.0.0: - resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} - dependencies: - pako: 0.2.9 - tiny-inflate: 1.0.3 - dev: false - - /vite-node@0.34.6(@types/node@20.9.1): - resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} - engines: {node: '>=v14.18.0'} - hasBin: true - dependencies: - cac: 6.7.14 - debug: 4.3.4 - mlly: 1.4.2 - pathe: 1.1.1 - picocolors: 1.0.0 - vite: 5.0.0(@types/node@20.9.1) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - dev: true - - /vite@5.0.0(@types/node@20.9.1): - resolution: {integrity: sha512-ESJVM59mdyGpsiNAeHQOR/0fqNoOyWPYesFto8FFZugfmhdHx8Fzd8sF3Q/xkVhZsyOxHfdM7ieiVAorI9RjFw==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.9.1 - esbuild: 0.19.5 - postcss: 8.4.31 - rollup: 4.4.1 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vitest@0.34.6: - resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} - engines: {node: '>=v14.18.0'} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - dependencies: - '@types/chai': 4.3.10 - '@types/chai-subset': 1.3.5 - '@types/node': 20.9.1 - '@vitest/expect': 0.34.6 - '@vitest/runner': 0.34.6 - '@vitest/snapshot': 0.34.6 - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - acorn: 8.11.2 - acorn-walk: 8.3.0 - cac: 6.7.14 - chai: 4.3.10 - debug: 4.3.4 - local-pkg: 0.4.3 - magic-string: 0.30.5 - pathe: 1.1.1 - picocolors: 1.0.0 - std-env: 3.5.0 - strip-literal: 1.3.0 - tinybench: 2.5.1 - tinypool: 0.7.0 - vite: 5.0.0(@types/node@20.9.1) - vite-node: 0.34.6(@types/node@20.9.1) - why-is-node-running: 2.2.2 - transitivePeerDependencies: - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - dev: true - - /why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} - hasBin: true - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - dev: true - - /workerd@1.20231030.0: - resolution: {integrity: sha512-+FSW+d31f8RrjHanFf/R9A+Z0csf3OtsvzdPmAKuwuZm/5HrBv83cvG9fFeTxl7/nI6irUUXIRF9xcj/NomQzQ==} - engines: {node: '>=16'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20231030.0 - '@cloudflare/workerd-darwin-arm64': 1.20231030.0 - '@cloudflare/workerd-linux-64': 1.20231030.0 - '@cloudflare/workerd-linux-arm64': 1.20231030.0 - '@cloudflare/workerd-windows-64': 1.20231030.0 - dev: true - - /wrangler@3.16.0: - resolution: {integrity: sha512-MIx35sSdFKE3hnfWB6xWUnrt3OiyKK+PQnc9kFLjksLESX0tLmEk1gdvThYHliY90kkelS+nbH48SUGTFAI5BA==} - engines: {node: '>=16.17.0'} - hasBin: true - dependencies: - '@cloudflare/kv-asset-handler': 0.2.0 - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) - blake3-wasm: 2.1.5 - chokidar: 3.5.3 - esbuild: 0.17.19 - miniflare: 3.20231030.0 - nanoid: 3.3.7 - path-to-regexp: 6.2.1 - resolve.exports: 2.0.2 - selfsigned: 2.4.1 - source-map: 0.6.1 - source-map-support: 0.5.21 - xxhash-wasm: 1.0.2 - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /ws@8.14.2: - resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /xxhash-wasm@1.0.2: - resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} - dev: true - - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true - - /yoga-wasm-web@0.3.3: - resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} - dev: false - - /youch@3.3.3: - resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} - dependencies: - cookie: 0.5.0 - mustache: 4.2.0 - stacktracey: 2.1.8 - dev: true - - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - dev: true diff --git a/src/full-badge.tsx b/src/full-badge.tsx index 063d1c4..b2dcbfe 100644 --- a/src/full-badge.tsx +++ b/src/full-badge.tsx @@ -1,10 +1,9 @@ import React from 'react' -import satori, {init} from 'satori/wasm' +import satori, { init } from 'satori/wasm' import initYoga from 'yoga-wasm-web' -// @ts-ignore import yogaWasm from '../node_modules/yoga-wasm-web/dist/yoga.wasm' -import {AppDetails} from "./google-play-scraper.js"; -import {compactNumberFormatter} from "./utils"; +import { AppDetails } from "./google-play-scraper.js"; +import { compactNumberFormatter } from "./utils"; declare module 'react' { interface HTMLAttributes extends DOMAttributes { @@ -31,22 +30,40 @@ export async function fullBadge(appDetails: AppDetails) { const markup = (
- app icon + style={{ fontFamily: 'Inter, "Material Symbols Outlined"' }}> + app icon
-

{appDetails.title}

-

{appDetails.developer}

-
-

- - {compactNumberFormatter.format(parseFloat(appDetails.maxInstalls))} +

+

+ {appDetails.title} +

+

+ {appDetails.developer}

-

- {appDetails.scoreText} - - ({compactNumberFormatter.format(parseFloat(appDetails.ratings))}) +

+
+

+ + + {compactNumberFormatter.format(Number(appDetails.maxInstalls))} +

+ {!appDetails.ratings ? ( +

+ + N/A +

+ ) : ( +

+ + {appDetails.scoreText} + + + + ({compactNumberFormatter.format(Number(appDetails.ratings))}) + +

+ )}
diff --git a/src/google-play-scraper.ts b/src/google-play-scraper.ts index b6e1d7e..ce06f88 100644 --- a/src/google-play-scraper.ts +++ b/src/google-play-scraper.ts @@ -5,14 +5,28 @@ const MAPPINGS = { installs: [1, 2, 13, 0], minInstalls: [1, 2, 13, 1], maxInstalls: [1, 2, 13, 2], - score: [1, 2, 51, 0, 1], + score: [1, 2, 51, 0, 0], scoreText: [1, 2, 51, 0, 0], ratings: [1, 2, 51, 2, 1], icon: [1, 2, 95, 0, 3, 2], developer: [1, 2, 68, 0], +}; + +type MAPPINGS_TYPE = { + title: string | null; + description: string | null; + summary: string | null; + installs: string | null; + minInstalls: number | null; + maxInstalls: number | null; + score: number | null; + scoreText: string | null; + ratings: number | null; + icon: string | null; + developer: string | null; } -export type AppDetails = Record +export type AppDetails = MAPPINGS_TYPE; export async function fetchAppDetails( appId: string, @@ -28,17 +42,25 @@ export async function fetchAppDetails( const html = await response.text() if (html.length == 0) return null - let jsonString = html.match(/AF_initDataCallback\(({key: 'ds:5', .*?})\);<\/script>/)?.[1] + const jsonString = html.match(/AF_initDataCallback\(({key: 'ds:5', .*?})\);<\/script>/)?.[1] if (!jsonString) return null - jsonString = jsonString.replace(/({|, )([a-z0-9A-Z_]+?):/g, '$1"$2":') + const cleanedJsonString = jsonString.replace(/({|, )([a-z0-9A-Z_]+?):/g, '$1"$2":') .replaceAll("'", '"'); - let json = JSON.parse(jsonString) - json = json.data + const json = JSON.parse(cleanedJsonString) + const data = json.data return Object.fromEntries( Object.entries(MAPPINGS) - .map(([m, p]) => [m, p.reduce((j, k) => j[k], json)]) + .map(([key, path]) => [key, getValue(data, path)]) ) as AppDetails } + +function getValue(data: any, path: number[]): string | number | null { + for (const part of path) { + data = data[part] + if (!data) return null + } + return data +} diff --git a/src/index.ts b/src/index.ts index ebb3d4e..af42019 100644 --- a/src/index.ts +++ b/src/index.ts @@ -89,7 +89,7 @@ app.get('/badge/downloads', async (c) => { c.header('Content-Type', 'image/svg+xml') return c.body(shieldsBadge({ label: 'Downloads', - status: `${isPretty ? compactNumberFormatter.format(parseFloat(appDetails.maxInstalls)) : appDetails.maxInstalls}`, + status: `${isPretty ? compactNumberFormatter.format(Number(appDetails.maxInstalls)) : appDetails.maxInstalls}`, })) }) @@ -111,7 +111,7 @@ app.get('/badge/ratings', async (c) => { c.header('Content-Type', 'image/svg+xml') return c.body(shieldsBadge({ label: 'Ratings', - status: isPretty ? makeStars(parseFloat(appDetails.score)) : `${appDetails.scoreText}/5 (${appDetails.ratings})`, + status: isPretty ? makeStars(Number(appDetails.score)) : `${appDetails.scoreText ?? 0}/5 (${appDetails.ratings ?? 0})`, })) }) diff --git a/test/scraper.test.ts b/test/scraper.test.ts index 1064543..9a574a2 100644 --- a/test/scraper.test.ts +++ b/test/scraper.test.ts @@ -1,12 +1,29 @@ -import {describe, it, assert} from "vitest"; -import {fetchAppDetails} from "../src/google-play-scraper.js"; +import { describe, test, expect, assert } from "vitest"; +import { fetchAppDetails } from "../src/google-play-scraper.js"; describe("scraper", () => { - it('should fetch whatsapp', async () => { - const appDetails = await fetchAppDetails('com.whatsapp', 'US'); + test.each([ + { appId: 'com.whatsapp', appTitle: 'WhatsApp Messenger' }, + { appId: 'appinventor.ai_pavitragolchha.VR', appTitle: 'VR Compatibility Checker' }, + { appId: 'me.pavi2410.folo', appTitle: 'Folo: Social Followers Tracker' }, + ])('should fetch $appId', async ({ appId, appTitle }) => { + const appDetails = await fetchAppDetails(appId); - assert.exists(appDetails); - // @ts-ignore - assert.strictEqual(appDetails.title, 'WhatsApp Messenger'); + expect(appDetails).not.toBeNull(); + + expect(appDetails!.title).toBe(appTitle); + expect(appDetails!.description).not.toBeNull(); + expect(appDetails!.summary).not.toBeNull(); + expect(appDetails!.installs).not.toBeNull(); + expect(appDetails!.minInstalls).not.toBeNull(); + expect(appDetails!.maxInstalls).not.toBeNull(); + expect(appDetails!.icon).not.toBeNull(); + expect(appDetails!.developer).not.toBeNull(); + + expect(appDetails!.minInstalls).toBeTypeOf('number'); + expect(appDetails!.maxInstalls).toBeTypeOf('number'); + expect(appDetails!.minInstalls).toBeLessThanOrEqual(appDetails!.maxInstalls!); + + expect(URL.canParse(appDetails!.icon!)).toBe(true); }); }); diff --git a/tsconfig.json b/tsconfig.json index d46ed5b..4196dd7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,28 @@ { - "compilerOptions": { - "noEmit": true, - "module": "esnext", - "target": "esnext", - "lib": ["esnext"], - "strict": true, - "alwaysStrict": true, - "preserveConstEnums": true, - "moduleResolution": "node", - "sourceMap": true, - "types": ["@cloudflare/workers-types"], - "allowSyntheticDefaultImports": true, - "jsx": "react" - }, - "include": ["src"], - "exclude": ["node_modules", "dist", "test"] -} + "compilerOptions": { + "noEmit": true, + "module": "esnext", + "target": "esnext", + "lib": [ + "esnext" + ], + "strict": true, + "alwaysStrict": true, + "preserveConstEnums": true, + "moduleResolution": "node", + "sourceMap": true, + "types": [ + "@cloudflare/workers-types" + ], + "allowSyntheticDefaultImports": true, + "jsx": "react" + }, + "include": [ + "src" + ], + "exclude": [ + "node_modules", + "dist", + "test" + ] +} \ No newline at end of file