pi-kiosk-shared 2.2.88 → 2.2.89
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/barcode-scanner.d.ts +2 -1
- package/dist/barcode-scanner.d.ts.map +1 -1
- package/dist/barcode-scanner.js +1 -1
- package/dist/barcode-scanner.js.map +1 -1
- package/dist/hooks/scannerCameraConstraints.d.ts +13 -0
- package/dist/hooks/scannerCameraConstraints.d.ts.map +1 -0
- package/dist/hooks/scannerCameraConstraints.js +49 -0
- package/dist/hooks/scannerCameraConstraints.js.map +1 -0
- package/dist/hooks/selectEngine.d.ts +10 -4
- package/dist/hooks/selectEngine.d.ts.map +1 -1
- package/dist/hooks/selectEngine.js +1 -16
- package/dist/hooks/selectEngine.js.map +1 -1
- package/dist/hooks/useBarcodeScanner.d.ts +13 -1
- package/dist/hooks/useBarcodeScanner.d.ts.map +1 -1
- package/dist/hooks/useBarcodeScanner.js +158 -27
- package/dist/hooks/useBarcodeScanner.js.map +1 -1
- package/dist/hooks/zxingWasmEngine.d.ts +66 -0
- package/dist/hooks/zxingWasmEngine.d.ts.map +1 -0
- package/dist/hooks/zxingWasmEngine.js +203 -0
- package/dist/hooks/zxingWasmEngine.js.map +1 -0
- package/package.json +399 -394
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { useBarcodeScanner, type UseBarcodeScannerMessages, type UseBarcodeScannerOptions, type UseBarcodeScannerReturn, type ScannerStatus, } from './hooks/useBarcodeScanner.js';
|
|
2
|
-
export {
|
|
2
|
+
export type { ScannerEngine } from './hooks/selectEngine.js';
|
|
3
3
|
export { resolveScannerFormatConfig, type BarcodeScannerFormatProfile, type ScannerFormatConfig, } from './hooks/scannerFormats.js';
|
|
4
|
+
export { setZXingWasmUrl, isZXingWasmConfigured } from './hooks/zxingWasmEngine.js';
|
|
4
5
|
//# sourceMappingURL=barcode-scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"barcode-scanner.d.ts","sourceRoot":"","sources":["../src/barcode-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,MAAM,8BAA8B,CAAC;AACtC,
|
|
1
|
+
{"version":3,"file":"barcode-scanner.d.ts","sourceRoot":"","sources":["../src/barcode-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,0BAA0B,EAC1B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/barcode-scanner.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { useBarcodeScanner, } from './hooks/useBarcodeScanner.js';
|
|
2
|
-
export { selectBarcodeScannerEngine } from './hooks/selectEngine.js';
|
|
3
2
|
export { resolveScannerFormatConfig, } from './hooks/scannerFormats.js';
|
|
3
|
+
export { setZXingWasmUrl, isZXingWasmConfigured } from './hooks/zxingWasmEngine.js';
|
|
4
4
|
//# sourceMappingURL=barcode-scanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"barcode-scanner.js","sourceRoot":"","sources":["../src/barcode-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAKlB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"barcode-scanner.js","sourceRoot":"","sources":["../src/barcode-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAKlB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,0BAA0B,GAG3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-sensitivity camera constraints for live barcode / QR decode.
|
|
3
|
+
* Prefer rear camera + max practical resolution so small symbols fill pixels.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SCANNER_VIDEO_CONSTRAINTS: MediaTrackConstraints;
|
|
6
|
+
/** Mild optical zoom when supported — enlarges distant/small codes without user effort. */
|
|
7
|
+
export declare const SCANNER_PREFERRED_ZOOM = 1.75;
|
|
8
|
+
/**
|
|
9
|
+
* Best-effort continuous autofocus + mild zoom after getUserMedia.
|
|
10
|
+
* Unsupported constraints are ignored so older devices still scan.
|
|
11
|
+
*/
|
|
12
|
+
export declare function applyScannerTrackEnhancements(track: MediaStreamTrack): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=scannerCameraConstraints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scannerCameraConstraints.d.ts","sourceRoot":"","sources":["../../src/hooks/scannerCameraConstraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,qBAKvC,CAAC;AAkBF,2FAA2F;AAC3F,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;GAGG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC1F"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-sensitivity camera constraints for live barcode / QR decode.
|
|
3
|
+
* Prefer rear camera + max practical resolution so small symbols fill pixels.
|
|
4
|
+
*/
|
|
5
|
+
export const SCANNER_VIDEO_CONSTRAINTS = {
|
|
6
|
+
facingMode: { ideal: 'environment' },
|
|
7
|
+
width: { ideal: 3840, min: 1280 },
|
|
8
|
+
height: { ideal: 2160, min: 720 },
|
|
9
|
+
frameRate: { ideal: 30 },
|
|
10
|
+
};
|
|
11
|
+
/** Mild optical zoom when supported — enlarges distant/small codes without user effort. */
|
|
12
|
+
export const SCANNER_PREFERRED_ZOOM = 1.75;
|
|
13
|
+
/**
|
|
14
|
+
* Best-effort continuous autofocus + mild zoom after getUserMedia.
|
|
15
|
+
* Unsupported constraints are ignored so older devices still scan.
|
|
16
|
+
*/
|
|
17
|
+
export async function applyScannerTrackEnhancements(track) {
|
|
18
|
+
const getCapabilities = track.getCapabilities;
|
|
19
|
+
if (getCapabilities === undefined) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const capabilities = getCapabilities.call(track);
|
|
23
|
+
const advanced = [];
|
|
24
|
+
if (capabilities.focusMode?.includes('continuous') === true) {
|
|
25
|
+
advanced.push({ focusMode: 'continuous' });
|
|
26
|
+
}
|
|
27
|
+
const zoomCap = capabilities.zoom;
|
|
28
|
+
if (zoomCap !== undefined) {
|
|
29
|
+
const min = zoomCap.min ?? 1;
|
|
30
|
+
const max = zoomCap.max ?? 1;
|
|
31
|
+
if (max > min) {
|
|
32
|
+
const target = Math.min(max, Math.max(min, SCANNER_PREFERRED_ZOOM));
|
|
33
|
+
if (target > min) {
|
|
34
|
+
advanced.push({ zoom: target });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (advanced.length === 0) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const next = { advanced };
|
|
43
|
+
await track.applyConstraints(next);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Device rejected advanced focus/zoom — keep the stream as opened.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=scannerCameraConstraints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scannerCameraConstraints.js","sourceRoot":"","sources":["../../src/hooks/scannerCameraConstraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAA0B;IAC9D,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACpC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;IACjC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;CACzB,CAAC;AAkBF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,KAAuB;IACzE,MAAM,eAAe,GAAI,KAA+B,CAAC,eAAe,CAAC;IACzE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAE/C,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC;IAClC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC;YACpE,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAgC,EAAE,QAAQ,EAAE,CAAC;QACvD,MAAM,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Decode engines used by {@link useBarcodeScanner}:
|
|
3
|
+
* - `zxing-wasm` — ZXing-C++ WASM (primary; highest sensitivity; requires configured URL)
|
|
4
|
+
* - `native-detector` — Chromium BarcodeDetector (fast path when formats OK)
|
|
5
|
+
* - `zxing` — pure-JS @zxing fallback when WASM/native cannot start
|
|
6
|
+
*
|
|
7
|
+
* Engine selection lives only in `useBarcodeScanner` (runtime cascade).
|
|
8
|
+
* There is no separate `selectBarcodeScannerEngine` helper — that was a dual SoT (G7).
|
|
9
|
+
*/
|
|
10
|
+
export type ScannerEngine = 'zxing-wasm' | 'native-detector' | 'zxing';
|
|
5
11
|
//# sourceMappingURL=selectEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/selectEngine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"selectEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/selectEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,iBAAiB,GAAG,OAAO,CAAC"}
|
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import './scannerNativeTypes.js';
|
|
3
|
-
export async function selectBarcodeScannerEngine(formatProfile = 'retail') {
|
|
4
|
-
if (typeof window === 'undefined' || window.BarcodeDetector === undefined) {
|
|
5
|
-
return 'zxing';
|
|
6
|
-
}
|
|
7
|
-
const { nativeFormats } = resolveScannerFormatConfig(formatProfile);
|
|
8
|
-
try {
|
|
9
|
-
const supported = (await window.BarcodeDetector.getSupportedFormats()).map((value) => value.toLowerCase());
|
|
10
|
-
const ok = nativeFormats.every((format) => supported.includes(format));
|
|
11
|
-
return ok ? 'native-detector' : 'zxing';
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
return 'zxing';
|
|
15
|
-
}
|
|
16
|
-
}
|
|
1
|
+
export {};
|
|
17
2
|
//# sourceMappingURL=selectEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectEngine.js","sourceRoot":"","sources":["../../src/hooks/selectEngine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"selectEngine.js","sourceRoot":"","sources":["../../src/hooks/selectEngine.ts"],"names":[],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import './scannerNativeTypes.js';
|
|
2
|
-
import {
|
|
2
|
+
import type { ScannerEngine } from './selectEngine.js';
|
|
3
3
|
import { type BarcodeScannerFormatProfile } from './scannerFormats.js';
|
|
4
4
|
export type ScannerStatus = 'idle' | 'starting' | 'running' | 'denied' | 'error';
|
|
5
5
|
export interface UseBarcodeScannerMessages {
|
|
@@ -10,6 +10,8 @@ export interface UseBarcodeScannerMessages {
|
|
|
10
10
|
runningZxing: string;
|
|
11
11
|
error: string;
|
|
12
12
|
scannerOff: string;
|
|
13
|
+
/** G3 — high-sensitivity WASM missing / prepare failed (no silent weaker-engine fallthrough). */
|
|
14
|
+
wasmBootstrapFailed: string;
|
|
13
15
|
}
|
|
14
16
|
export interface UseBarcodeScannerOptions {
|
|
15
17
|
enabled: boolean;
|
|
@@ -28,5 +30,15 @@ export interface UseBarcodeScannerReturn {
|
|
|
28
30
|
engine: ScannerEngine | null;
|
|
29
31
|
errorMessage: string | null;
|
|
30
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Live camera barcode/QR decode.
|
|
35
|
+
*
|
|
36
|
+
* Runtime cascade (single SoT — no selectBarcodeScannerEngine helper):
|
|
37
|
+
* 1. Configured ZXing-C++ WASM (required for sensitivity upgrade; missing URL /
|
|
38
|
+
* unloadable asset / instantiate fail → G3 `wasmBootstrapFailed`, no weaker-engine fallthrough)
|
|
39
|
+
* 2. After WASM is successfully instantiated and running: ≥{@link WASM_HARD_FAIL_BOUND}
|
|
40
|
+
* consecutive hard decode rejects → native BarcodeDetector (G4 only — not bootstrap)
|
|
41
|
+
* 3. then pure-JS @zxing/browser
|
|
42
|
+
*/
|
|
31
43
|
export declare function useBarcodeScanner(options: UseBarcodeScannerOptions): UseBarcodeScannerReturn;
|
|
32
44
|
//# sourceMappingURL=useBarcodeScanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBarcodeScanner.d.ts","sourceRoot":"","sources":["../../src/hooks/useBarcodeScanner.ts"],"names":[],"mappings":"AAGA,OAAO,yBAAyB,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"useBarcodeScanner.d.ts","sourceRoot":"","sources":["../../src/hooks/useBarcodeScanner.ts"],"names":[],"mappings":"AAGA,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,qBAAqB,CAAC;AAY7B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,iGAAiG;IACjG,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,aAAa,CAAC,EAAE,2BAA2B,CAAC;IAC5C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AASD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB,CAyY5F"}
|
|
@@ -2,8 +2,24 @@ import { useCallback, useEffect, useRef, useState } from 'react';
|
|
|
2
2
|
import { BrowserMultiFormatReader } from '@zxing/browser';
|
|
3
3
|
import { DecodeHintType } from '@zxing/library';
|
|
4
4
|
import './scannerNativeTypes.js';
|
|
5
|
-
import { selectBarcodeScannerEngine } from './selectEngine.js';
|
|
6
5
|
import { resolveScannerFormatConfig, } from './scannerFormats.js';
|
|
6
|
+
import { applyScannerTrackEnhancements, SCANNER_VIDEO_CONSTRAINTS, } from './scannerCameraConstraints.js';
|
|
7
|
+
import { buildSensitiveReaderOptions, decodeVideoFrameWithZxingWasm, ensureZXingWasmPrepared, isZXingWasmConfigured, } from './zxingWasmEngine.js';
|
|
8
|
+
/** ~30 fps decode budget — multi-pass zoom is heavier; still prefer hit rate. */
|
|
9
|
+
const WASM_MIN_FRAME_INTERVAL_MS = 32;
|
|
10
|
+
/** G4 — consecutive hard decode rejects before abandoning zxing-wasm for native/@zxing.
|
|
11
|
+
* Only after successful WASM instantiate; unloadable WASM is G3 bootstrap error. */
|
|
12
|
+
const WASM_HARD_FAIL_BOUND = 8;
|
|
13
|
+
/**
|
|
14
|
+
* Live camera barcode/QR decode.
|
|
15
|
+
*
|
|
16
|
+
* Runtime cascade (single SoT — no selectBarcodeScannerEngine helper):
|
|
17
|
+
* 1. Configured ZXing-C++ WASM (required for sensitivity upgrade; missing URL /
|
|
18
|
+
* unloadable asset / instantiate fail → G3 `wasmBootstrapFailed`, no weaker-engine fallthrough)
|
|
19
|
+
* 2. After WASM is successfully instantiated and running: ≥{@link WASM_HARD_FAIL_BOUND}
|
|
20
|
+
* consecutive hard decode rejects → native BarcodeDetector (G4 only — not bootstrap)
|
|
21
|
+
* 3. then pure-JS @zxing/browser
|
|
22
|
+
*/
|
|
7
23
|
export function useBarcodeScanner(options) {
|
|
8
24
|
const { enabled, videoRef, onDecode, messages, formatProfile = 'retail', onBackgroundStop, } = options;
|
|
9
25
|
const [status, setStatus] = useState('idle');
|
|
@@ -85,7 +101,12 @@ export function useBarcodeScanner(options) {
|
|
|
85
101
|
let stream = null;
|
|
86
102
|
let zxingControls = null;
|
|
87
103
|
let nativeFrameHandle = null;
|
|
104
|
+
let wasmFrameHandle = null;
|
|
105
|
+
let wasmBusy = false;
|
|
106
|
+
let wasmAbandoned = false;
|
|
107
|
+
let consecutiveWasmHardFails = 0;
|
|
88
108
|
const formatConfig = resolveScannerFormatConfig(formatProfile);
|
|
109
|
+
const wasmCanvas = typeof document !== 'undefined' ? document.createElement('canvas') : null;
|
|
89
110
|
const cleanup = () => {
|
|
90
111
|
if (zxingControls !== null) {
|
|
91
112
|
try {
|
|
@@ -100,6 +121,10 @@ export function useBarcodeScanner(options) {
|
|
|
100
121
|
cancelAnimationFrame(nativeFrameHandle);
|
|
101
122
|
nativeFrameHandle = null;
|
|
102
123
|
}
|
|
124
|
+
if (wasmFrameHandle !== null) {
|
|
125
|
+
cancelAnimationFrame(wasmFrameHandle);
|
|
126
|
+
wasmFrameHandle = null;
|
|
127
|
+
}
|
|
103
128
|
if (stream !== null) {
|
|
104
129
|
for (const track of stream.getTracks()) {
|
|
105
130
|
try {
|
|
@@ -127,14 +152,9 @@ export function useBarcodeScanner(options) {
|
|
|
127
152
|
}
|
|
128
153
|
return;
|
|
129
154
|
}
|
|
130
|
-
const chosenEngine = await selectBarcodeScannerEngine(formatProfile);
|
|
131
|
-
if (cancelled) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
setEngine(chosenEngine);
|
|
135
155
|
try {
|
|
136
156
|
stream = await navigator.mediaDevices.getUserMedia({
|
|
137
|
-
video:
|
|
157
|
+
video: SCANNER_VIDEO_CONSTRAINTS,
|
|
138
158
|
audio: false,
|
|
139
159
|
});
|
|
140
160
|
}
|
|
@@ -155,6 +175,11 @@ export function useBarcodeScanner(options) {
|
|
|
155
175
|
cleanup();
|
|
156
176
|
return;
|
|
157
177
|
}
|
|
178
|
+
const activeStream = stream;
|
|
179
|
+
const [primaryTrack] = activeStream.getVideoTracks();
|
|
180
|
+
if (primaryTrack !== undefined) {
|
|
181
|
+
await applyScannerTrackEnhancements(primaryTrack);
|
|
182
|
+
}
|
|
158
183
|
const video = videoRef.current;
|
|
159
184
|
if (video === null) {
|
|
160
185
|
cleanup();
|
|
@@ -162,7 +187,7 @@ export function useBarcodeScanner(options) {
|
|
|
162
187
|
}
|
|
163
188
|
video.setAttribute('playsinline', 'true');
|
|
164
189
|
video.muted = true;
|
|
165
|
-
video.srcObject =
|
|
190
|
+
video.srcObject = activeStream;
|
|
166
191
|
try {
|
|
167
192
|
await video.play();
|
|
168
193
|
}
|
|
@@ -173,8 +198,10 @@ export function useBarcodeScanner(options) {
|
|
|
173
198
|
cleanup();
|
|
174
199
|
return;
|
|
175
200
|
}
|
|
176
|
-
|
|
177
|
-
|
|
201
|
+
const startNativeLoop = () => {
|
|
202
|
+
if (window.BarcodeDetector === undefined) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
178
205
|
const detector = new window.BarcodeDetector({
|
|
179
206
|
formats: [...formatConfig.nativeFormats],
|
|
180
207
|
});
|
|
@@ -206,30 +233,134 @@ export function useBarcodeScanner(options) {
|
|
|
206
233
|
nativeFrameHandle = requestAnimationFrame(() => {
|
|
207
234
|
void tick();
|
|
208
235
|
});
|
|
236
|
+
return true;
|
|
237
|
+
};
|
|
238
|
+
const startZxingJsFallback = async () => {
|
|
239
|
+
const hints = new Map();
|
|
240
|
+
hints.set(DecodeHintType.POSSIBLE_FORMATS, [...formatConfig.zxingFormats]);
|
|
241
|
+
hints.set(DecodeHintType.TRY_HARDER, true);
|
|
242
|
+
const reader = new BrowserMultiFormatReader(hints);
|
|
243
|
+
try {
|
|
244
|
+
zxingControls = await reader.decodeFromStream(activeStream, video, (result, _err, controls) => {
|
|
245
|
+
if (cancelled) {
|
|
246
|
+
controls.stop();
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (result !== undefined && result !== null) {
|
|
250
|
+
onDecodeRef.current(result.getText());
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
const failAllEngines = () => {
|
|
260
|
+
if (!cancelled) {
|
|
261
|
+
setStatus('error');
|
|
262
|
+
setErrorMessage(messagesRef.current.error);
|
|
263
|
+
}
|
|
264
|
+
cleanup();
|
|
265
|
+
};
|
|
266
|
+
const fallThroughFromWasm = async () => {
|
|
267
|
+
if (cancelled) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (startNativeLoop()) {
|
|
271
|
+
if (!cancelled) {
|
|
272
|
+
setEngine('native-detector');
|
|
273
|
+
setStatus('running');
|
|
274
|
+
}
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
const jsOk = await startZxingJsFallback();
|
|
278
|
+
if (cancelled) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
if (jsOk) {
|
|
282
|
+
setEngine('zxing');
|
|
283
|
+
setStatus('running');
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
failAllEngines();
|
|
287
|
+
};
|
|
288
|
+
const failWasmBootstrap = () => {
|
|
289
|
+
if (!cancelled) {
|
|
290
|
+
setStatus('error');
|
|
291
|
+
setErrorMessage(messagesRef.current.wasmBootstrapFailed);
|
|
292
|
+
}
|
|
293
|
+
cleanup();
|
|
294
|
+
};
|
|
295
|
+
// G3 — WASM is required for the sensitivity upgrade; never silently start a weaker engine.
|
|
296
|
+
// Unloadable / instantiate failure → wasmBootstrapFailed (not G4 fallthrough).
|
|
297
|
+
// G4 ≥8 fallthrough is ONLY for post-start decode rejects after successful instantiate.
|
|
298
|
+
if (!isZXingWasmConfigured() || wasmCanvas === null) {
|
|
299
|
+
failWasmBootstrap();
|
|
209
300
|
return;
|
|
210
301
|
}
|
|
211
|
-
const hints = new Map();
|
|
212
|
-
hints.set(DecodeHintType.POSSIBLE_FORMATS, [...formatConfig.zxingFormats]);
|
|
213
|
-
hints.set(DecodeHintType.TRY_HARDER, true);
|
|
214
|
-
const reader = new BrowserMultiFormatReader(hints);
|
|
215
302
|
try {
|
|
216
|
-
|
|
217
|
-
if (cancelled) {
|
|
218
|
-
controls.stop();
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
if (result !== undefined && result !== null) {
|
|
222
|
-
onDecodeRef.current(result.getText());
|
|
223
|
-
}
|
|
224
|
-
});
|
|
303
|
+
await ensureZXingWasmPrepared();
|
|
225
304
|
}
|
|
226
305
|
catch {
|
|
227
|
-
|
|
306
|
+
failWasmBootstrap();
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const readerOptions = buildSensitiveReaderOptions(formatProfile);
|
|
310
|
+
let lastAttemptMs = 0;
|
|
311
|
+
const abandonWasmAndFallThrough = () => {
|
|
312
|
+
if (wasmAbandoned || cancelled) {
|
|
228
313
|
return;
|
|
229
314
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
315
|
+
wasmAbandoned = true;
|
|
316
|
+
if (wasmFrameHandle !== null) {
|
|
317
|
+
cancelAnimationFrame(wasmFrameHandle);
|
|
318
|
+
wasmFrameHandle = null;
|
|
319
|
+
}
|
|
320
|
+
void fallThroughFromWasm();
|
|
321
|
+
};
|
|
322
|
+
const tick = () => {
|
|
323
|
+
if (cancelled || wasmAbandoned) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const now = performance.now();
|
|
327
|
+
if (!wasmBusy &&
|
|
328
|
+
video.readyState >= 2 &&
|
|
329
|
+
now - lastAttemptMs >= WASM_MIN_FRAME_INTERVAL_MS) {
|
|
330
|
+
lastAttemptMs = now;
|
|
331
|
+
wasmBusy = true;
|
|
332
|
+
void decodeVideoFrameWithZxingWasm(video, wasmCanvas, readerOptions)
|
|
333
|
+
.then((text) => {
|
|
334
|
+
if (cancelled || wasmAbandoned) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
// G4 — null/empty = non-fatal; reset consecutive hard-fail counter.
|
|
338
|
+
consecutiveWasmHardFails = 0;
|
|
339
|
+
if (text !== null) {
|
|
340
|
+
onDecodeRef.current(text);
|
|
341
|
+
}
|
|
342
|
+
})
|
|
343
|
+
.catch(() => {
|
|
344
|
+
if (cancelled || wasmAbandoned) {
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
consecutiveWasmHardFails += 1;
|
|
348
|
+
if (consecutiveWasmHardFails >= WASM_HARD_FAIL_BOUND) {
|
|
349
|
+
abandonWasmAndFallThrough();
|
|
350
|
+
}
|
|
351
|
+
})
|
|
352
|
+
.finally(() => {
|
|
353
|
+
wasmBusy = false;
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
if (!cancelled && !wasmAbandoned) {
|
|
357
|
+
wasmFrameHandle = requestAnimationFrame(tick);
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
wasmFrameHandle = requestAnimationFrame(tick);
|
|
361
|
+
if (!cancelled) {
|
|
362
|
+
setEngine('zxing-wasm');
|
|
363
|
+
setStatus('running');
|
|
233
364
|
}
|
|
234
365
|
})();
|
|
235
366
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBarcodeScanner.js","sourceRoot":"","sources":["../../src/hooks/useBarcodeScanner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useBarcodeScanner.js","sourceRoot":"","sources":["../../src/hooks/useBarcodeScanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ZXing-C++ WebAssembly decode path (zxing-wasm).
|
|
3
|
+
* Much more sensitive than pure-JS @zxing/library for live camera frames.
|
|
4
|
+
*
|
|
5
|
+
* WASM must be same-origin under CSP (`connect-src 'self'`). Apps call
|
|
6
|
+
* {@link setZXingWasmUrl} once at boot with a Vite `?url` import.
|
|
7
|
+
*
|
|
8
|
+
* Sensitivity strategy (maximize hit rate for small / distant / low-contrast codes):
|
|
9
|
+
* - Eager WASM instantiate (`fireImmediately`)
|
|
10
|
+
* - Multi-pass digital zoom: full frame + center crops upscaled + 1D mid-band
|
|
11
|
+
* - Alternate binarizer on tight crops
|
|
12
|
+
* - tryDenoise + minLineCount: 1 (non-default reader deltas)
|
|
13
|
+
*/
|
|
14
|
+
import { type ReaderOptions } from 'zxing-wasm/reader';
|
|
15
|
+
import type { BarcodeScannerFormatProfile } from './scannerFormats.js';
|
|
16
|
+
/**
|
|
17
|
+
* Configure same-origin URL for `zxing_reader.wasm` (Vite `?url` or `/public`).
|
|
18
|
+
* Empty / whitespace-only URL clears configuration (`isZXingWasmConfigured()` → false).
|
|
19
|
+
*/
|
|
20
|
+
export declare function setZXingWasmUrl(url: string): void;
|
|
21
|
+
/** True only when a non-empty URL was set via {@link setZXingWasmUrl}. */
|
|
22
|
+
export declare function isZXingWasmConfigured(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Eagerly instantiate zxing-wasm (asset fetch + WASM compile).
|
|
25
|
+
*
|
|
26
|
+
* Must use `fireImmediately: true` and await the Promise — with the library
|
|
27
|
+
* default `fireImmediately: false`, prepare only registers overrides and
|
|
28
|
+
* `prepared = true` would lie; asset/instantiate failure then surfaces later
|
|
29
|
+
* as `readBarcodes` rejects (G4 fallthrough) while status stays `running`.
|
|
30
|
+
*
|
|
31
|
+
* On reject/throw: leave `prepared = false` and rethrow so the caller can
|
|
32
|
+
* hard-fail via G3 `wasmBootstrapFailed` (no native/@zxing fallthrough).
|
|
33
|
+
* G4 ≥8 hard-fail fallthrough applies ONLY to post-start decode rejects after
|
|
34
|
+
* a successfully instantiated module — unloadable WASM is a bootstrap error.
|
|
35
|
+
*/
|
|
36
|
+
export declare function ensureZXingWasmPrepared(): Promise<void>;
|
|
37
|
+
export declare function resolveWasmReaderFormats(formatProfile: BarcodeScannerFormatProfile): ReaderOptions['formats'];
|
|
38
|
+
/**
|
|
39
|
+
* Reader options for the high-sensitivity WASM path.
|
|
40
|
+
*
|
|
41
|
+
* Note: `tryHarder` / `tryRotate` / `tryInvert` / `tryDownscale` already default to
|
|
42
|
+
* `true` in zxing-wasm@3.1.3 — kept explicit but they are not the sensitivity upgrade.
|
|
43
|
+
* Real deltas vs library defaults: `tryDenoise: true`, `minLineCount: 1`, earlier
|
|
44
|
+
* downscale threshold, multi-pass digital zoom in {@link decodeVideoFrameWithZxingWasm},
|
|
45
|
+
* plus camera constraints / optical zoom elsewhere.
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildSensitiveReaderOptions(formatProfile: BarcodeScannerFormatProfile): ReaderOptions;
|
|
48
|
+
export interface ScanPass {
|
|
49
|
+
readonly sx: number;
|
|
50
|
+
readonly sy: number;
|
|
51
|
+
readonly sw: number;
|
|
52
|
+
readonly sh: number;
|
|
53
|
+
/** Upscale factor when drawing the crop into the decode canvas (digital zoom). */
|
|
54
|
+
readonly scale: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Full frame + center zooms + mid-band (1D). Digital zoom is the main lever for
|
|
58
|
+
* distant / small symbols when the user does not fill the viewfinder.
|
|
59
|
+
*/
|
|
60
|
+
export declare function buildMaxSensitivityScanPasses(videoWidth: number, videoHeight: number): ScanPass[];
|
|
61
|
+
/**
|
|
62
|
+
* Decode one video frame via multi-pass canvas crops → ImageData → zxing-wasm.
|
|
63
|
+
* Returns the first payload or null when nothing is found.
|
|
64
|
+
*/
|
|
65
|
+
export declare function decodeVideoFrameWithZxingWasm(video: HTMLVideoElement, canvas: HTMLCanvasElement, readerOptions: ReaderOptions): Promise<string | null>;
|
|
66
|
+
//# sourceMappingURL=zxingWasmEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zxingWasmEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/zxingWasmEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAKvE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CASjD;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CA2B7D;AAMD,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,2BAA2B,GACzC,aAAa,CAAC,SAAS,CAAC,CAQ1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,2BAA2B,GACzC,aAAa,CAcf;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmCjG;AA4BD;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoCxB"}
|