@nddeps/barcode-scanner 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/create-barcode-scanner.d.ts +2 -1
- package/dist/index.js +14 -14
- package/package.json +2 -4
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ScanArea } from './utils';
|
|
2
|
-
declare function createBarcodeScanner(video: HTMLVideoElement, { calcScanArea, }?: {
|
|
2
|
+
declare function createBarcodeScanner(video: HTMLVideoElement, { calcScanArea, debug, }?: {
|
|
3
3
|
calcScanArea?: (video: HTMLVideoElement) => ScanArea;
|
|
4
|
+
debug?: boolean;
|
|
4
5
|
}): {
|
|
5
6
|
destroy: () => Promise<void>;
|
|
6
7
|
pause: () => void;
|
package/dist/index.js
CHANGED
|
@@ -204,15 +204,15 @@ function install() {
|
|
|
204
204
|
}, { once: !0 }), instance.value = e;
|
|
205
205
|
});
|
|
206
206
|
}
|
|
207
|
-
function createBarcodeScanner(r, { calcScanArea: o } = {}) {
|
|
207
|
+
function createBarcodeScanner(r, { calcScanArea: o, debug: s = !1 } = {}) {
|
|
208
208
|
if (!(r instanceof HTMLVideoElement)) throw Error("video is not a HTMLVideoElement");
|
|
209
|
-
let
|
|
210
|
-
if (!
|
|
209
|
+
let c = document.createElement("canvas"), l = c.getContext("2d", { willReadFrequently: !0 });
|
|
210
|
+
if (!l) throw Error("Failed to get canvas context");
|
|
211
211
|
let { state: u, watch: d } = createWatchable({
|
|
212
212
|
calcScanArea: o ?? getScanArea,
|
|
213
|
-
canvas:
|
|
214
|
-
canvasContext:
|
|
215
|
-
debug:
|
|
213
|
+
canvas: c,
|
|
214
|
+
canvasContext: l,
|
|
215
|
+
debug: s,
|
|
216
216
|
decodeFrameRequestTimestamp: performance.now(),
|
|
217
217
|
facingMode: "environment",
|
|
218
218
|
isDecodeFrameProcessed: !1,
|
|
@@ -236,11 +236,11 @@ function createBarcodeScanner(r, { calcScanArea: o } = {}) {
|
|
|
236
236
|
});
|
|
237
237
|
install().then((e) => u.worker = e).then(() => Promise.resolve()).then(() => u.isReady = !0), u.video.autoplay = !0, u.video.disablePictureInPicture = !0, u.video.hidden = !1, u.video.muted = !0, u.video.playsInline = !0, document.addEventListener("visibilitychange", f);
|
|
238
238
|
function f() {
|
|
239
|
-
document.visibilityState === "hidden" ? u.isVideoActive && u.isVideoPaused === !1 && (u.resumeOnVisibilityChange = !0, h()) : u.resumeOnVisibilityChange && (u.resumeOnVisibilityChange = !1, g({ facingMode: u.facingMode }, u.onDecodeSuccess, u.onDecodeFailure));
|
|
239
|
+
s && console.log("barcode-scanner:handleVisibilityChange", document.visibilityState, u), document.visibilityState === "hidden" ? u.isVideoActive && u.isVideoPaused === !1 && (u.resumeOnVisibilityChange = !0, h()) : u.resumeOnVisibilityChange && (u.resumeOnVisibilityChange = !1, g({ facingMode: u.facingMode }, u.onDecodeSuccess, u.onDecodeFailure));
|
|
240
240
|
}
|
|
241
241
|
function p(e, r) {
|
|
242
|
-
u.isDestroyed || u.isVideoActive === !1 || u.isVideoPaused
|
|
243
|
-
if (performance.now() - u.decodeFrameRequestTimestamp < 1e3 / u.scanRate || u.isDecodeFrameProcessed || u.video.
|
|
242
|
+
s && console.log("barcode-scanner:handleDecode", u, performance.now()), !(u.isDestroyed || u.isVideoActive === !1 || u.isVideoPaused) && u.requestFrame(() => {
|
|
243
|
+
if (u.isReady === !1 || performance.now() - u.decodeFrameRequestTimestamp < 1e3 / u.scanRate || u.isDecodeFrameProcessed || u.video.readyState <= 1) {
|
|
244
244
|
u.decodeFrameRequestTimestamp = performance.now(), p(e, r);
|
|
245
245
|
return;
|
|
246
246
|
}
|
|
@@ -249,12 +249,12 @@ function createBarcodeScanner(r, { calcScanArea: o } = {}) {
|
|
|
249
249
|
u.debug && window.dispatchEvent(new CustomEvent("barcode-scanner:decode-frame", { detail: { imageData: i } })), decode(i).then((i) => {
|
|
250
250
|
if (i) {
|
|
251
251
|
let r = i.cornerPoints.map((e) => e.x), a = i.cornerPoints.map((e) => e.y);
|
|
252
|
-
e(i.rawValue,
|
|
252
|
+
e(i.rawValue, {
|
|
253
253
|
height: Math.max(...a) - Math.min(...a),
|
|
254
254
|
width: Math.max(...r) - Math.min(...r),
|
|
255
255
|
x: Math.min(...r) + u.scanArea.x,
|
|
256
256
|
y: Math.min(...a) + u.scanArea.y
|
|
257
|
-
})
|
|
257
|
+
});
|
|
258
258
|
} else r();
|
|
259
259
|
}).catch(() => {
|
|
260
260
|
console.error("Failed to decode barcode");
|
|
@@ -267,11 +267,11 @@ function createBarcodeScanner(r, { calcScanArea: o } = {}) {
|
|
|
267
267
|
u.isDestroyed || (_(), document.removeEventListener("visibilitychange", f), u.worker?.terminate(), u.worker = null, u.isDestroyed = !0, u.isReady = !1);
|
|
268
268
|
}
|
|
269
269
|
function h() {
|
|
270
|
-
u.canvas.height = u.video.videoHeight, u.canvas.width = u.video.videoWidth, u.canvasContext.clearRect(0, 0, u.canvas.width, u.canvas.height), u.canvasContext.drawImage(u.video, 0, 0, u.canvas.width, u.canvas.height, 0, 0, u.canvas.width, u.canvas.height), u.video.poster = u.canvas.toDataURL(), u.video.srcObject instanceof MediaStream && u.video.srcObject.getTracks().forEach((e) => e.stop()), u.video.srcObject = null, u.isVideoPaused = !0;
|
|
270
|
+
s && console.log("barcode-scanner:pause", u), u.canvas.height = u.video.videoHeight, u.canvas.width = u.video.videoWidth, u.canvasContext.clearRect(0, 0, u.canvas.width, u.canvas.height), u.canvasContext.drawImage(u.video, 0, 0, u.canvas.width, u.canvas.height, 0, 0, u.canvas.width, u.canvas.height), u.video.poster = u.canvas.toDataURL(), u.video.srcObject instanceof MediaStream && u.video.srcObject.getTracks().forEach((e) => e.stop()), u.video.srcObject = null, u.isVideoPaused = !0;
|
|
271
271
|
}
|
|
272
272
|
async function g({ facingMode: e = "environment" } = {}, r, a = () => {}) {
|
|
273
|
-
if (!await getCameraAccess()) throw Error("No camera access");
|
|
274
|
-
u.video.srcObject instanceof MediaStream && u.isVideoActive && u.isVideoPaused === !1 || (u.video.srcObject instanceof MediaStream || (u.video.srcObject = await navigator.mediaDevices.getUserMedia({ video: { facingMode: e } })), await u.video.play(), u.facingMode = e, u.isVideoActive = !0, u.isVideoPaused = !1, u.onDecodeFailure = a, u.onDecodeSuccess = r, u.scanArea = u.calcScanArea(u.video), u.video.style.transform = e === "user" ? "scaleX(-1)" : "none", p(r, a));
|
|
273
|
+
if (s && console.log("barcode-scanner:start:before", u), !await getCameraAccess()) throw Error("No camera access");
|
|
274
|
+
u.video.srcObject instanceof MediaStream && u.isVideoActive && u.isVideoPaused === !1 || (u.video.srcObject instanceof MediaStream || (u.video.srcObject = await navigator.mediaDevices.getUserMedia({ video: { facingMode: e } })), await u.video.play(), u.facingMode = e, u.isVideoActive = !0, u.isVideoPaused = !1, u.onDecodeFailure = a, u.onDecodeSuccess = r, u.scanArea = u.calcScanArea(u.video), u.video.style.transform = e === "user" ? "scaleX(-1)" : "none", s && console.log("barcode-scanner:start:after", u), p(r, a));
|
|
275
275
|
}
|
|
276
276
|
function _() {
|
|
277
277
|
u.video.srcObject instanceof MediaStream && u.video.srcObject.getTracks().forEach((e) => e.stop()), u.video.poster = "", u.video.srcObject = null, u.isVideoActive = !1, u.isVideoPaused = !1;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nddeps/barcode-scanner",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"keywords": [
|
|
6
6
|
"barcode",
|
|
@@ -32,15 +32,13 @@
|
|
|
32
32
|
"scripts": {
|
|
33
33
|
"build": "vite build && tsc -b",
|
|
34
34
|
"dev": "vite",
|
|
35
|
-
"preview": "vite preview"
|
|
36
|
-
"publish": "npm publish --access public"
|
|
35
|
+
"preview": "vite preview"
|
|
37
36
|
},
|
|
38
37
|
"overrides": {
|
|
39
38
|
"vite": "npm:rolldown-vite@7.3.1"
|
|
40
39
|
},
|
|
41
40
|
"dependencies": {
|
|
42
41
|
"barcode-detector": "^3.0.8",
|
|
43
|
-
"jsqr": "^1.4.0",
|
|
44
42
|
"zxing-wasm": "^2.2.4"
|
|
45
43
|
},
|
|
46
44
|
"devDependencies": {
|