diff --git a/extensions/qr-code-scanner/package-lock.json b/extensions/qr-code-scanner/package-lock.json index 719d93280893..ab990242bf85 100644 --- a/extensions/qr-code-scanner/package-lock.json +++ b/extensions/qr-code-scanner/package-lock.json @@ -9,8 +9,8 @@ "dependencies": { "@raycast/api": "^1.26.3", "jimp": "^0.16.1", - "open": "^8.4.0", - "qrcode-reader": "^1.0.4" + "jsqr": "^1.4.0", + "open": "^8.4.0" }, "devDependencies": { "@types/node": "~16.10.0", @@ -3117,6 +3117,11 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsqr": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz", + "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==" + }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://rg.cnpmjs.org/keyv/download/keyv-3.1.0.tgz", @@ -3807,11 +3812,6 @@ "node": ">=6" } }, - "node_modules/qrcode-reader": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz", - "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://rg.cnpmjs.org/queue-microtask/download/queue-microtask-1.2.3.tgz", @@ -7541,6 +7541,11 @@ "graceful-fs": "^4.1.6" } }, + "jsqr": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz", + "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==" + }, "keyv": { "version": "3.1.0", "resolved": "https://rg.cnpmjs.org/keyv/download/keyv-3.1.0.tgz", @@ -8091,11 +8096,6 @@ "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", "dev": true }, - "qrcode-reader": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz", - "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==" - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://rg.cnpmjs.org/queue-microtask/download/queue-microtask-1.2.3.tgz", diff --git a/extensions/qr-code-scanner/package.json b/extensions/qr-code-scanner/package.json index 10e3e7cfb82c..1a6bb7e70b12 100644 --- a/extensions/qr-code-scanner/package.json +++ b/extensions/qr-code-scanner/package.json @@ -17,8 +17,8 @@ "dependencies": { "@raycast/api": "^1.26.3", "jimp": "^0.16.1", - "open": "^8.4.0", - "qrcode-reader": "^1.0.4" + "jsqr": "^1.4.0", + "open": "^8.4.0" }, "devDependencies": { "@types/node": "~16.10.0", diff --git a/extensions/qr-code-scanner/src/index.tsx b/extensions/qr-code-scanner/src/index.tsx index 7dbff34c4c51..fbc5e38eee81 100644 --- a/extensions/qr-code-scanner/src/index.tsx +++ b/extensions/qr-code-scanner/src/index.tsx @@ -10,8 +10,8 @@ import { import { exec } from "child_process"; import open from "open"; import { read as decodeImage } from "jimp"; -import qrcodeReader from "qrcode-reader"; import { randomInt } from "crypto"; +import jsQR from "jsqr"; function qrDecode(filepath: string, callback: (data: string | boolean) => void) { decodeImage(filepath, (err, image) => { @@ -23,21 +23,16 @@ function qrDecode(filepath: string, callback: (data: string | boolean) => void) showToast(ToastStyle.Failure, "Image decoder error..."); return; } - const decodeQR = new qrcodeReader(); - decodeQR.callback = function (errorWhenDecodeQR, result) { - if (errorWhenDecodeQR) { - if (errorWhenDecodeQR.indexOf("Couldn't find enough finder patterns") > -1) { - callback(false); - } else { - showToast(ToastStyle.Failure, "Parser error..."); - return; - } - } else { - callback(JSON.parse(JSON.stringify(result)).result); - } - exec("rm " + filepath); - }; - decodeQR.decode(image.bitmap); + const result = jsQR(new Uint8ClampedArray(image.bitmap.data.buffer), image.bitmap.width, image.bitmap.height, { + inversionAttempts: "attemptBoth", + }); + if (result) { + const decoder = new TextDecoder("shift-jis"); + const code = decoder.decode(Uint8Array.from(result?.binaryData).buffer); + callback(code); + return; + } + callback(false); }); }