diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 529d6ef..a38efe6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,20 +10,20 @@ jobs: install: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: "18" + node-version: "20" cache: "yarn" - name: Install dependencies run: yarn install --frozen-lockfile - name: Cache install - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ./node_modules/ key: ${{ github.sha }}-install - name: Cache Cypress - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.cache/Cypress/ key: ${{ github.sha }}-cypress @@ -32,9 +32,9 @@ jobs: runs-on: ubuntu-latest needs: install steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Retrive install cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ./node_modules/ key: ${{ github.sha }}-install @@ -45,9 +45,9 @@ jobs: runs-on: ubuntu-latest needs: install steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Retrive install cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ./node_modules/ key: ${{ github.sha }}-install @@ -57,7 +57,7 @@ jobs: setup_backend: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: path: "./bl-api" repository: boklisten/bl-api @@ -67,7 +67,7 @@ jobs: yarn install --frozen-lockfile yarn build - name: Cache backend - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ./bl-api/ key: ${{ github.sha }}-backend @@ -76,14 +76,14 @@ jobs: runs-on: ubuntu-latest needs: [install, setup_backend] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Retrive Install Cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ./node_modules/ key: ${{ github.sha }}-install - name: Retrive Next cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ github.workspace }}/.next/cache # Generate a new cache whenever packages or source files change. @@ -92,14 +92,14 @@ jobs: restore-keys: | ${{ runner.os }}-nextjs-${{ hashFiles('**/yarn.lock') }}- - name: Retrive backend cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ./bl-api/ key: ${{ github.sha }}-backend - name: Start MongoDB - uses: supercharge/mongodb-github-action@1.7.0 + uses: supercharge/mongodb-github-action@1.10.0 with: - mongodb-version: "4.4" + mongodb-version: "7.0" - name: Start backend run: | cd bl-api @@ -139,89 +139,88 @@ jobs: - name: Build run: yarn build - name: Cache build - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ./.next/ key: ${{ github.sha }}-build - - tests: - runs-on: ubuntu-latest - needs: [build] - strategy: - fail-fast: false - matrix: - containers: [1, 2, 3, 4] - steps: - - uses: actions/checkout@v2 - - name: Retrive install cache - uses: actions/cache@v2 - with: - path: ./node_modules/ - key: ${{ github.sha }}-install - - name: Retrive Cypress cache - uses: actions/cache@v2 - with: - path: ~/.cache/Cypress/ - key: ${{ github.sha }}-cypress - - name: Retrive build cache - uses: actions/cache@v2 - with: - path: ./.next/ - key: ${{ github.sha }}-build - - name: Retrive backend cache - uses: actions/cache@v2 - with: - path: ./bl-api/ - key: ${{ github.sha }}-backend - - name: Start MongoDB - uses: supercharge/mongodb-github-action@1.7.0 - with: - mongodb-version: "4.4" - - name: Start backend - run: | - cd bl-api - yarn load_fixtures - yarn serve & - env: - PORT: 1337 - BLAPI_HOST: localhost - BLAPI_PORT: 1337 - MONGODB_URI: mongodb://localhost:27017/test - SERVER_PATH: / - NODE_ENV: dev - LOG_LEVEL: silly - URI_WHITELIST: localhost:3000 http://localhost:3000 - ACCESS_TOKEN_SECRET: not_secret_at_all - BL_API_URI: http://localhost:1337/ - CLIENT_URI: http://localhost:3000/ - REFRESH_TOKEN_SECRET: not_the_prod_secret - DIBS_CHECKOUT_KEY: ${{ secrets.DIBS_CHECKOUT_KEY }} - DIBS_SECRET_KEY: ${{ secrets.DIBS_CHECKOUT_SECRET }} - DIBS_URI: https://test.api.dibspayment.eu/v1/ - FACEBOOK_CLIENT_ID: 123 - FACEBOOK_SECRET: 123 - FEIDE_AUTHORIZATION_URL: https://auth.dataporten.no/oauth/authorization - FEIDE_CLIENT_ID: yello - FEIDE_SECRET: foo - FEIDE_TOKEN_URL: https://auth.dataporten.no/oauth/token - FEIDE_USER_INFO_URL: https://auth.dataporten.no/userinfo - GOOGLE_CLIENT_ID: totally_legit - GOOGLE_SECRET: nope - SENDGRID_API_KEY: foo - TWILIO_SMS_AUTH_TOKEN: foo - TWILIO_SMS_SID: ACfoo - TWILIO_STATUS_CALLBACK_URL: foo - BRING_API_KEY: ${{ secrets.BRING_API_KEY }} - BRING_API_ID: ${{ secrets.BRING_API_ID }} - - name: Cypress run - uses: cypress-io/github-action@v5.3.1 - with: - install: false - start: yarn serve - record: true - parallel: true - group: "UI - Electron" - env: - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - BRING_API_KEY: ${{ secrets.BRING_API_KEY }} - BRING_API_ID: ${{ secrets.BRING_API_ID }} +# tests: +# runs-on: ubuntu-latest +# needs: [build] +# strategy: +# fail-fast: false +# matrix: +# containers: [1, 2, 3, 4] +# steps: +# - uses: actions/checkout@v4 +# - name: Retrive install cache +# uses: actions/cache@v4 +# with: +# path: ./node_modules/ +# key: ${{ github.sha }}-install +# - name: Retrive Cypress cache +# uses: actions/cache@v4 +# with: +# path: ~/.cache/Cypress/ +# key: ${{ github.sha }}-cypress +# - name: Retrive build cache +# uses: actions/cache@v4 +# with: +# path: ./.next/ +# key: ${{ github.sha }}-build +# - name: Retrive backend cache +# uses: actions/cache@v4 +# with: +# path: ./bl-api/ +# key: ${{ github.sha }}-backend +# - name: Start MongoDB +# uses: supercharge/mongodb-github-action@1.7.0 +# with: +# mongodb-version: "4.4" +# - name: Start backend +# run: | +# cd bl-api +# yarn load_fixtures +# yarn serve & +# env: +# PORT: 1337 +# BLAPI_HOST: localhost +# BLAPI_PORT: 1337 +# MONGODB_URI: mongodb://localhost:27017/test +# SERVER_PATH: / +# NODE_ENV: dev +# LOG_LEVEL: silly +# URI_WHITELIST: localhost:3000 http://localhost:3000 +# ACCESS_TOKEN_SECRET: not_secret_at_all +# BL_API_URI: http://localhost:1337/ +# CLIENT_URI: http://localhost:3000/ +# REFRESH_TOKEN_SECRET: not_the_prod_secret +# DIBS_CHECKOUT_KEY: ${{ secrets.DIBS_CHECKOUT_KEY }} +# DIBS_SECRET_KEY: ${{ secrets.DIBS_CHECKOUT_SECRET }} +# DIBS_URI: https://test.api.dibspayment.eu/v1/ +# FACEBOOK_CLIENT_ID: 123 +# FACEBOOK_SECRET: 123 +# FEIDE_AUTHORIZATION_URL: https://auth.dataporten.no/oauth/authorization +# FEIDE_CLIENT_ID: yello +# FEIDE_SECRET: foo +# FEIDE_TOKEN_URL: https://auth.dataporten.no/oauth/token +# FEIDE_USER_INFO_URL: https://auth.dataporten.no/userinfo +# GOOGLE_CLIENT_ID: totally_legit +# GOOGLE_SECRET: nope +# SENDGRID_API_KEY: foo +# TWILIO_SMS_AUTH_TOKEN: foo +# TWILIO_SMS_SID: ACfoo +# TWILIO_STATUS_CALLBACK_URL: foo +# BRING_API_KEY: ${{ secrets.BRING_API_KEY }} +# BRING_API_ID: ${{ secrets.BRING_API_ID }} +# - name: Cypress run +# uses: cypress-io/github-action@v5.3.1 +# with: +# install: false +# start: yarn serve +# record: true +# parallel: true +# group: "UI - Electron" +# env: +# CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} +# BRING_API_KEY: ${{ secrets.BRING_API_KEY }} +# BRING_API_ID: ${{ secrets.BRING_API_ID }} diff --git a/package.json b/package.json index 48e52aa..7888f82 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@mui/material": "^5.15.15", "@mui/x-date-pickers": "^7.3.1", "@reduxjs/toolkit": "^2.2.3", + "@yudiel/react-qr-scanner": "^2.0.1", "axios": "^1.6.8", "draft-js": "^0.11.7", "moment": "^2.30.1", @@ -39,7 +40,6 @@ "react-draft-wysiwyg": "^1.15.0", "react-hook-form": "^7.51.3", "react-jwt": "^1.2.1", - "react-qr-barcode-scanner": "^1.0.6", "react-quill": "^2.0.0", "react-redux": "^9.1.1", "sanitize-html": "^2.13.0", diff --git a/src/components/matches/BarcodeQrScanner.tsx b/src/components/matches/BarcodeQrScanner.tsx deleted file mode 100644 index 717ab54..0000000 --- a/src/components/matches/BarcodeQrScanner.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import dynamic from "next/dynamic"; -import React from "react"; - -// This scanner does not work on the dev server, only when fully built -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -const BarcodeScanner = dynamic(() => import("react-qr-barcode-scanner"), { - ssr: false, - loading: () =>

Laster...

, -}); - -const BarcodeQrScanner = ({ - handleScan, -}: { - // eslint-disable-next-line no-unused-vars - handleScan: (result: string) => void; -}) => { - return ( - { - if (result?.text) { - handleScan(result.text as string); - } - }} - /> - ); -}; - -export default BarcodeQrScanner; diff --git a/src/components/matches/Scanner/Scanner.tsx b/src/components/matches/Scanner/Scanner.tsx index a4899d4..a843238 100644 --- a/src/components/matches/Scanner/Scanner.tsx +++ b/src/components/matches/Scanner/Scanner.tsx @@ -77,6 +77,7 @@ const Scanner = ({ forceUpdate }: { forceUpdate: () => void }) => { "transfer-item", JSON.stringify({ blid: scannedText }), ); + navigator.vibrate(100); const feedback = response.data?.data?.[0]?.feedback; displayFeedback( feedback ?? "Boken har blitt registrert!", diff --git a/src/components/matches/Scanner/ScannerModal.tsx b/src/components/matches/Scanner/ScannerModal.tsx index 0359fb0..8a65eb8 100644 --- a/src/components/matches/Scanner/ScannerModal.tsx +++ b/src/components/matches/Scanner/ScannerModal.tsx @@ -1,8 +1,6 @@ -import CropFreeIcon from "@mui/icons-material/CropFree"; -import { Box, Button, Container, Modal, Typography } from "@mui/material"; -import React, { useCallback } from "react"; - -import BarcodeQrScanner from "@/components/matches/BarcodeQrScanner"; +import { Box, Button, Container, Modal } from "@mui/material"; +import { Scanner } from "@yudiel/react-qr-scanner"; +import React from "react"; const ScannerModal = ({ open, @@ -14,8 +12,6 @@ const ScannerModal = ({ // eslint-disable-next-line no-unused-vars handleSubmit: (scannedText: string) => Promise; }) => { - const handleScan = useCallback(handleSubmit, [handleSubmit]); - return ( - - Unik ID - - - - + + { + for (const code of detectedCodes) { + handleSubmit(code.rawValue); + } + }} + /> diff --git a/tsconfig.json b/tsconfig.json index f8dd776..a5cbd61 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -36,5 +36,5 @@ } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "bl-api"] } diff --git a/yarn.lock b/yarn.lock index 93649ef..4c23a20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -888,6 +888,11 @@ dependencies: "@types/node" "*" +"@types/dom-webcodecs@^0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@types/dom-webcodecs/-/dom-webcodecs-0.1.11.tgz#2e36e5cc71789551f107e2fe15d956845fa19567" + integrity sha512-yPEZ3z7EohrmOxbk/QTAa0yonMFkNkjnVXqbGb7D4rMr+F1dGQ8ZUFxXkyLLJuiICPejZ0AZE9Rrk9wUCczx4A== + "@types/draft-js@*": version "0.11.17" resolved "https://registry.yarnpkg.com/@types/draft-js/-/draft-js-0.11.17.tgz#32a68cac3e4e3d5c8f2cd5e22409d7dbf28887f1" @@ -904,6 +909,11 @@ "@types/react" "*" immutable "~3.7.4" +"@types/emscripten@^1.39.12": + version "1.39.13" + resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.13.tgz#afeb1648648dc096efe57983e20387627306e2aa" + integrity sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw== + "@types/hoist-non-react-statics@^3.3.0": version "3.3.5" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" @@ -1007,15 +1017,6 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/react@^16.9.35": - version "16.14.56" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.56.tgz#4cf37850a87edcb9f3526648338eff35d283c9ab" - integrity sha512-MxuHB7dvVm5yOxRr7hJoonLG0JY8YvqZtaQ9Quirp3Oe4FLFjAgxkxsKE6IspdHPpRVZKo2ZoDEravWO81EeYA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - "@types/sanitize-html@^2.11.0": version "2.11.0" resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.11.0.tgz#582d8c72215c0228e3af2be136e40e0b531addf2" @@ -1202,19 +1203,13 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@zxing/library@^0.17.0": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@zxing/library/-/library-0.17.1.tgz#4c82bf401391c2b79bfbab0a6b1143da6d8feb1a" - integrity sha512-RuiBZuteGaFXCle/b0X+g3peN8UpDc3pGe/J7hZBzKWaMZLbjensR7ja3vy47xWhXU4e8MICGqegPMxc2V2sow== +"@yudiel/react-qr-scanner@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@yudiel/react-qr-scanner/-/react-qr-scanner-2.0.1.tgz#eb743646495c1ebc5a0cc3dcff507d9f5d6fc3d1" + integrity sha512-2d8ZRBlSgqDmzhlcs1AeWiVwmT099v3HvvW/7HhSw6u0VN7sVCUN5qULe2g31Z5nJDz019t9J7vf7MpasN+Rxw== dependencies: - ts-custom-error "^3.0.0" - optionalDependencies: - "@zxing/text-encoding" "~0.9.0" - -"@zxing/text-encoding@~0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" - integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== + barcode-detector "^2.2.6" + webrtc-adapter "9.0.1" JSONStream@^1.3.5: version "1.3.5" @@ -1527,6 +1522,14 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +barcode-detector@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/barcode-detector/-/barcode-detector-2.2.6.tgz#91c11c0fad8aa5133438ba970eda47030cf5576c" + integrity sha512-IRXfsqff2V8w/4RAGFpjCoLWrsxG2RMJg3bZK9YHtkZff4YJW/IKrdJcsENNbTSPDNL0qCIDjLKSnx73dpZ/2w== + dependencies: + "@types/dom-webcodecs" "^0.1.11" + zxing-wasm "1.2.10" + base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -4569,15 +4572,6 @@ react-jwt@^1.2.1: optionalDependencies: fsevents "^2.3.2" -react-qr-barcode-scanner@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/react-qr-barcode-scanner/-/react-qr-barcode-scanner-1.0.6.tgz#1df7ac3f3cb839ad673e8b619e0e93b4bdddc4e3" - integrity sha512-DdalO4oqHyxWPa4cIjiHeMS19HbIvKq+oo/PAglAsxmfhAUGC8sM1mJnzo0zPQM1yw9ZNpjrtqHz+rs86Mu7Ww== - dependencies: - "@types/react" "^16.9.35" - "@zxing/library" "^0.17.0" - react-webcam "^5.0.1" - react-quill@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/react-quill/-/react-quill-2.0.0.tgz#67a0100f58f96a246af240c9fa6841b363b3e017" @@ -4605,11 +4599,6 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -react-webcam@^5.0.1: - version "5.2.4" - resolved "https://registry.yarnpkg.com/react-webcam/-/react-webcam-5.2.4.tgz#714b4460ea43ac7ed081824299cd2a580f764478" - integrity sha512-Qqj14t68Ke1eoEYjFde+N48HtuIJg0ePIQRpFww9eZt5oBcDpe/l60h+m3VRFJAR5/E3dOhSU5R8EJEcdCq/Eg== - react@18.3.1: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" @@ -4876,6 +4865,11 @@ scheduler@^0.23.2: dependencies: loose-envify "^1.1.0" +sdp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/sdp/-/sdp-3.2.0.tgz#8961420552b36663b4d13ddba6f478d1461896a5" + integrity sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw== + "semver@2 || 3 || 4 || 5": version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" @@ -5358,11 +5352,6 @@ ts-api-utils@^1.3.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== -ts-custom-error@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/ts-custom-error/-/ts-custom-error-3.3.1.tgz#8bd3c8fc6b8dc8e1cb329267c45200f1e17a65d1" - integrity sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A== - tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -5581,6 +5570,13 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webrtc-adapter@9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/webrtc-adapter/-/webrtc-adapter-9.0.1.tgz#d4efa22ca9604cb2c8cdb9e492815ba37acfa0b2" + integrity sha512-1AQO+d4ElfVSXyzNVTOewgGT/tAomwwztX/6e3totvyyzXPvXIIuUUjAmyZGbKBKbZOXauuJooZm3g6IuFuiNQ== + dependencies: + sdp "^3.2.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -5758,3 +5754,10 @@ yocto-queue@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + +zxing-wasm@1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/zxing-wasm/-/zxing-wasm-1.2.10.tgz#7753a704bcd3e917a2d49fc8aaf8e1f291b0a328" + integrity sha512-hGVjYKKEOzOF8g9w0GEe0uYvowkD64U9ntGGGnXxjIRz8J1mU/tKlO7ntNQJeJhkQUSabubtWgYyLM2sbMFFZw== + dependencies: + "@types/emscripten" "^1.39.12"