@mleonard9/vin-scanner 0.1.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.
Files changed (47) hide show
  1. package/README.md +110 -0
  2. package/android/build.gradle +102 -0
  3. package/android/gradle.properties +5 -0
  4. package/android/src/main/AndroidManifest.xml +8 -0
  5. package/android/src/main/AndroidManifestNew.xml +2 -0
  6. package/android/src/main/java/com/visioncamerabarcodescanner/VisionCameraBarcodeScannerModule.kt +93 -0
  7. package/android/src/main/java/com/visioncamerabarcodescanner/VisionCameraBarcodeScannerPackage.kt +27 -0
  8. package/android/src/main/java/com/visioncameratextrecognition/VisionCameraTextRecognitionModule.kt +130 -0
  9. package/ios/VisionCameraBarcodeScanner.m +175 -0
  10. package/ios/VisionCameraTextRecognition.m +114 -0
  11. package/lib/commonjs/index.js +87 -0
  12. package/lib/commonjs/index.js.map +1 -0
  13. package/lib/commonjs/scanBarcodes.js +46 -0
  14. package/lib/commonjs/scanBarcodes.js.map +1 -0
  15. package/lib/commonjs/scanText.js +29 -0
  16. package/lib/commonjs/scanText.js.map +1 -0
  17. package/lib/commonjs/types.js +6 -0
  18. package/lib/commonjs/types.js.map +1 -0
  19. package/lib/commonjs/vinUtils.js +240 -0
  20. package/lib/commonjs/vinUtils.js.map +1 -0
  21. package/lib/module/index.js +80 -0
  22. package/lib/module/index.js.map +1 -0
  23. package/lib/module/scanBarcodes.js +40 -0
  24. package/lib/module/scanBarcodes.js.map +1 -0
  25. package/lib/module/scanText.js +23 -0
  26. package/lib/module/scanText.js.map +1 -0
  27. package/lib/module/types.js +2 -0
  28. package/lib/module/types.js.map +1 -0
  29. package/lib/module/vinUtils.js +230 -0
  30. package/lib/module/vinUtils.js.map +1 -0
  31. package/lib/typescript/src/index.d.ts +6 -0
  32. package/lib/typescript/src/index.d.ts.map +1 -0
  33. package/lib/typescript/src/scanBarcodes.d.ts +3 -0
  34. package/lib/typescript/src/scanBarcodes.d.ts.map +1 -0
  35. package/lib/typescript/src/scanText.d.ts +3 -0
  36. package/lib/typescript/src/scanText.d.ts.map +1 -0
  37. package/lib/typescript/src/types.d.ts +104 -0
  38. package/lib/typescript/src/types.d.ts.map +1 -0
  39. package/lib/typescript/src/vinUtils.d.ts +19 -0
  40. package/lib/typescript/src/vinUtils.d.ts.map +1 -0
  41. package/package.json +168 -0
  42. package/src/index.tsx +131 -0
  43. package/src/scanBarcodes.ts +76 -0
  44. package/src/scanText.ts +36 -0
  45. package/src/types.ts +145 -0
  46. package/src/vinUtils.ts +368 -0
  47. package/vin-scanner.podspec +28 -0
@@ -0,0 +1,80 @@
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ import React, { forwardRef, useMemo, useRef } from 'react';
3
+ import { Camera as VisionCamera, useFrameProcessor } from 'react-native-vision-camera';
4
+ import { useRunOnJS } from 'react-native-worklets-core';
5
+ import { createBarcodeScannerPlugin } from './scanBarcodes';
6
+ import { createTextRecognitionPlugin } from './scanText';
7
+ import { buildVinCandidates, pickBestCandidate, resolveOptions } from './vinUtils';
8
+ export const Camera = /*#__PURE__*/forwardRef(function Camera(props, ref) {
9
+ const {
10
+ device,
11
+ callback,
12
+ options,
13
+ ...rest
14
+ } = props;
15
+ const resolvedOptions = useMemo(() => resolveOptions(options), [options]);
16
+ const barcodeScanner = useBarcodeScanner(resolvedOptions.barcode);
17
+ const textScanner = useTextScanner(resolvedOptions.text);
18
+ const lastEmissionRef = useRef(undefined);
19
+ const handleDetections = useRunOnJS(payload => {
20
+ const candidates = buildVinCandidates(payload, resolvedOptions);
21
+ const best = pickBestCandidate(candidates, resolvedOptions);
22
+ const mode = resolvedOptions.detection.resultMode;
23
+ const filteredCandidates = mode === 'all' ? candidates : best ? [best] : [];
24
+ const fingerprint = mode === 'all' ? filteredCandidates.map(candidate => candidate.value).join('|') || null : (best === null || best === void 0 ? void 0 : best.value) ?? null;
25
+ if (!resolvedOptions.detection.emitDuplicates) {
26
+ if (lastEmissionRef.current !== undefined && fingerprint === lastEmissionRef.current) {
27
+ return;
28
+ }
29
+ lastEmissionRef.current = fingerprint;
30
+ }
31
+ callback({
32
+ mode,
33
+ timestamp: payload.timestamp,
34
+ candidates: filteredCandidates,
35
+ best: best ?? null,
36
+ raw: {
37
+ barcodes: payload.barcodes ?? [],
38
+ textBlocks: payload.textBlocks ?? []
39
+ }
40
+ });
41
+ }, [callback, resolvedOptions]);
42
+ const scanBarcodes = barcodeScanner === null || barcodeScanner === void 0 ? void 0 : barcodeScanner.scanBarcodes;
43
+ const scanText = textScanner === null || textScanner === void 0 ? void 0 : textScanner.scanText;
44
+ const frameProcessor = useFrameProcessor(frame => {
45
+ 'worklet';
46
+
47
+ const barcodes = scanBarcodes ? scanBarcodes(frame) : [];
48
+ const textBlocks = scanText ? scanText(frame) : [];
49
+ handleDetections({
50
+ barcodes: barcodes ?? [],
51
+ textBlocks: textBlocks ?? [],
52
+ timestamp: typeof (frame === null || frame === void 0 ? void 0 : frame.timestamp) === 'number' ? frame.timestamp : Date.now()
53
+ });
54
+ }, [scanBarcodes, scanText, handleDetections]);
55
+ return /*#__PURE__*/React.createElement(React.Fragment, null, !!device && /*#__PURE__*/React.createElement(VisionCamera, _extends({
56
+ pixelFormat: "yuv",
57
+ ref: ref,
58
+ frameProcessor: frameProcessor,
59
+ device: device
60
+ }, rest)));
61
+ });
62
+ function useBarcodeScanner(options) {
63
+ return useMemo(() => {
64
+ if (!options.enabled) {
65
+ return null;
66
+ }
67
+ return createBarcodeScannerPlugin(options.formats);
68
+ }, [options.enabled, options.formats]);
69
+ }
70
+ function useTextScanner(options) {
71
+ return useMemo(() => {
72
+ if (!options.enabled) {
73
+ return null;
74
+ }
75
+ return createTextRecognitionPlugin({
76
+ language: options.language
77
+ });
78
+ }, [options.enabled, options.language]);
79
+ }
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","forwardRef","useMemo","useRef","Camera","VisionCamera","useFrameProcessor","useRunOnJS","createBarcodeScannerPlugin","createTextRecognitionPlugin","buildVinCandidates","pickBestCandidate","resolveOptions","props","ref","device","callback","options","rest","resolvedOptions","barcodeScanner","useBarcodeScanner","barcode","textScanner","useTextScanner","text","lastEmissionRef","undefined","handleDetections","payload","candidates","best","mode","detection","resultMode","filteredCandidates","fingerprint","map","candidate","value","join","emitDuplicates","current","timestamp","raw","barcodes","textBlocks","scanBarcodes","scanText","frameProcessor","frame","Date","now","createElement","Fragment","_extends","pixelFormat","enabled","formats","language"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,40 @@
1
+ import { Platform } from 'react-native';
2
+ import { VisionCameraProxy } from 'react-native-vision-camera';
3
+ const LINKING_ERROR = `The package '@mleonard9/vin-scanner' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
4
+ ios: "- You have run 'pod install'\n",
5
+ default: ''
6
+ }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
7
+ const DEFAULT_FORMATS = ['all'];
8
+ const KNOWN_FORMATS = ['all', 'aztec', 'code-128', 'code-39', 'code-93', 'codabar', 'data-matrix', 'ean-13', 'ean-8', 'itf', 'pdf-417', 'qr', 'upc-a', 'upc-e'];
9
+ const toNativeBarcodeOptions = formats => {
10
+ const sanitized = formats && formats.length > 0 ? formats : DEFAULT_FORMATS;
11
+ if (sanitized.includes('all')) {
12
+ return {
13
+ all: true
14
+ };
15
+ }
16
+ return sanitized.reduce((acc, format) => {
17
+ if (KNOWN_FORMATS.includes(format)) {
18
+ acc[format] = true;
19
+ }
20
+ return acc;
21
+ }, {});
22
+ };
23
+ export function createBarcodeScannerPlugin(formats) {
24
+ const pluginOptions = toNativeBarcodeOptions(formats);
25
+ const plugin = VisionCameraProxy.initFrameProcessorPlugin('scanBarcodes', {
26
+ ...pluginOptions
27
+ });
28
+ if (!plugin) {
29
+ throw new Error(LINKING_ERROR);
30
+ }
31
+ return {
32
+ scanBarcodes: frame => {
33
+ 'worklet';
34
+
35
+ const result = plugin.call(frame);
36
+ return Array.isArray(result) ? result : [];
37
+ }
38
+ };
39
+ }
40
+ //# sourceMappingURL=scanBarcodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","VisionCameraProxy","LINKING_ERROR","select","ios","default","DEFAULT_FORMATS","KNOWN_FORMATS","toNativeBarcodeOptions","formats","sanitized","length","includes","all","reduce","acc","format","createBarcodeScannerPlugin","pluginOptions","plugin","initFrameProcessorPlugin","Error","scanBarcodes","frame","result","call","Array","isArray"],"sourceRoot":"../../src","sources":["scanBarcodes.ts"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAEEC,iBAAiB,QACZ,4BAA4B;AASnC,MAAMC,aAAqB,GACzB,iFAAiF,GACjFF,QAAQ,CAACG,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,eAAmC,GAAG,CAAC,KAAK,CAAC;AAEnD,MAAMC,aAA8B,GAAG,CACrC,KAAK,EACL,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,EACb,QAAQ,EACR,OAAO,EACP,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,EACP,OAAO,CACR;AAID,MAAMC,sBAAsB,GAC1BC,OAA4B,IACD;EAC3B,MAAMC,SAAS,GAAGD,OAAO,IAAIA,OAAO,CAACE,MAAM,GAAG,CAAC,GAAGF,OAAO,GAAGH,eAAe;EAC3E,IAAII,SAAS,CAACE,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC7B,OAAO;MAAEC,GAAG,EAAE;IAAK,CAAC;EACtB;EACA,OAAOH,SAAS,CAACI,MAAM,CAAyB,CAACC,GAAG,EAAEC,MAAM,KAAK;IAC/D,IAAKT,aAAa,CAAcK,QAAQ,CAACI,MAAM,CAAC,EAAE;MAChDD,GAAG,CAACC,MAAM,CAAkB,GAAG,IAAI;IACrC;IACA,OAAOD,GAAG;EACZ,CAAC,EAAE,CAAC,CAAC,CAAC;AACR,CAAC;AAED,OAAO,SAASE,0BAA0BA,CACxCR,OAA2B,EACL;EACtB,MAAMS,aAAa,GAAGV,sBAAsB,CAACC,OAAO,CAAC;EACrD,MAAMU,MAAwC,GAC5ClB,iBAAiB,CAACmB,wBAAwB,CAAC,cAAc,EAAE;IACzD,GAAGF;EACL,CAAC,CAAC;EACJ,IAAI,CAACC,MAAM,EAAE;IACX,MAAM,IAAIE,KAAK,CAACnB,aAAa,CAAC;EAChC;EACA,OAAO;IACLoB,YAAY,EAAGC,KAAY,IAAyB;MAClD,SAAS;;MACT,MAAMC,MAAM,GAAGL,MAAM,CAACM,IAAI,CAACF,KAAK,CAAC;MACjC,OAAQG,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,GACzBA,MAAM,GACN,EAAE;IACR;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ import { Platform } from 'react-native';
2
+ import { VisionCameraProxy } from 'react-native-vision-camera';
3
+ const LINKING_ERROR = `The package '@mleonard9/vin-scanner' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
4
+ ios: "- You have run 'pod install'\n",
5
+ default: ''
6
+ }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
7
+ export function createTextRecognitionPlugin(options) {
8
+ const plugin = VisionCameraProxy.initFrameProcessorPlugin('scanText', {
9
+ ...options
10
+ });
11
+ if (!plugin) {
12
+ throw new Error(LINKING_ERROR);
13
+ }
14
+ return {
15
+ scanText: frame => {
16
+ 'worklet';
17
+
18
+ const result = plugin.call(frame);
19
+ return Array.isArray(result) ? result : [];
20
+ }
21
+ };
22
+ }
23
+ //# sourceMappingURL=scanText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","VisionCameraProxy","LINKING_ERROR","select","ios","default","createTextRecognitionPlugin","options","plugin","initFrameProcessorPlugin","Error","scanText","frame","result","call","Array","isArray"],"sourceRoot":"../../src","sources":["scanText.ts"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAEEC,iBAAiB,QACZ,4BAA4B;AAQnC,MAAMC,aAAqB,GACzB,iFAAiF,GACjFF,QAAQ,CAACG,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,OAAO,SAASC,2BAA2BA,CACzCC,OAA+B,EACR;EACvB,MAAMC,MAAwC,GAC5CP,iBAAiB,CAACQ,wBAAwB,CAAC,UAAU,EAAE;IACrD,GAAGF;EACL,CAAC,CAAC;EACJ,IAAI,CAACC,MAAM,EAAE;IACX,MAAM,IAAIE,KAAK,CAACR,aAAa,CAAC;EAChC;EACA,OAAO;IACLS,QAAQ,EAAGC,KAAY,IAAsB;MAC3C,SAAS;;MACT,MAAMC,MAAM,GAAGL,MAAM,CAACM,IAAI,CAACF,KAAK,CAAC;MACjC,OAAQG,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,GAAGA,MAAM,GAAG,EAAE;IAC7C;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,230 @@
1
+ const DEFAULT_RESOLVED_OPTIONS = {
2
+ barcode: {
3
+ enabled: true,
4
+ formats: ['all']
5
+ },
6
+ text: {
7
+ enabled: true,
8
+ language: 'latin'
9
+ },
10
+ detection: {
11
+ resultMode: 'best',
12
+ preferBarcode: true,
13
+ validateChecksum: true,
14
+ emitDuplicates: false
15
+ }
16
+ };
17
+ export const resolveOptions = options => {
18
+ var _options$detection, _options$detection2, _options$barcode, _options$barcode2, _options$text, _options$text2, _options$detection3, _options$detection4;
19
+ const resultMode = (options === null || options === void 0 || (_options$detection = options.detection) === null || _options$detection === void 0 ? void 0 : _options$detection.resultMode) ?? DEFAULT_RESOLVED_OPTIONS.detection.resultMode;
20
+ const emitDuplicates = (options === null || options === void 0 || (_options$detection2 = options.detection) === null || _options$detection2 === void 0 ? void 0 : _options$detection2.emitDuplicates) ?? (resultMode === 'all' ? true : DEFAULT_RESOLVED_OPTIONS.detection.emitDuplicates);
21
+ return {
22
+ barcode: {
23
+ enabled: (options === null || options === void 0 || (_options$barcode = options.barcode) === null || _options$barcode === void 0 ? void 0 : _options$barcode.enabled) ?? DEFAULT_RESOLVED_OPTIONS.barcode.enabled,
24
+ formats: options !== null && options !== void 0 && (_options$barcode2 = options.barcode) !== null && _options$barcode2 !== void 0 && (_options$barcode2 = _options$barcode2.formats) !== null && _options$barcode2 !== void 0 && _options$barcode2.length ? [...options.barcode.formats] : [...DEFAULT_RESOLVED_OPTIONS.barcode.formats]
25
+ },
26
+ text: {
27
+ enabled: (options === null || options === void 0 || (_options$text = options.text) === null || _options$text === void 0 ? void 0 : _options$text.enabled) ?? DEFAULT_RESOLVED_OPTIONS.text.enabled,
28
+ language: (options === null || options === void 0 || (_options$text2 = options.text) === null || _options$text2 === void 0 ? void 0 : _options$text2.language) ?? DEFAULT_RESOLVED_OPTIONS.text.language
29
+ },
30
+ detection: {
31
+ resultMode,
32
+ preferBarcode: (options === null || options === void 0 || (_options$detection3 = options.detection) === null || _options$detection3 === void 0 ? void 0 : _options$detection3.preferBarcode) ?? DEFAULT_RESOLVED_OPTIONS.detection.preferBarcode,
33
+ validateChecksum: (options === null || options === void 0 || (_options$detection4 = options.detection) === null || _options$detection4 === void 0 ? void 0 : _options$detection4.validateChecksum) ?? DEFAULT_RESOLVED_OPTIONS.detection.validateChecksum,
34
+ emitDuplicates
35
+ }
36
+ };
37
+ };
38
+ const VIN_PATTERN = /^[A-HJ-NPR-Z0-9]{17}$/;
39
+ const transliteration = {
40
+ A: 1,
41
+ B: 2,
42
+ C: 3,
43
+ D: 4,
44
+ E: 5,
45
+ F: 6,
46
+ G: 7,
47
+ H: 8,
48
+ J: 1,
49
+ K: 2,
50
+ L: 3,
51
+ M: 4,
52
+ N: 5,
53
+ P: 7,
54
+ R: 9,
55
+ S: 2,
56
+ T: 3,
57
+ U: 4,
58
+ V: 5,
59
+ W: 6,
60
+ X: 7,
61
+ Y: 8,
62
+ Z: 9
63
+ };
64
+ const weights = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2];
65
+ const tokenizeCandidate = value => {
66
+ if (!value) {
67
+ return [];
68
+ }
69
+ const normalized = value.toUpperCase();
70
+ const cleaned = normalized.replace(/[^A-Z0-9]/g, ' ');
71
+ const tokens = cleaned.split(/\s+/).filter(token => token.length > 0);
72
+ const matches = new Set();
73
+ tokens.forEach(token => {
74
+ if (token.length < 17) {
75
+ return;
76
+ }
77
+ for (let i = 0; i <= token.length - 17; i += 1) {
78
+ const candidate = token.slice(i, i + 17);
79
+ if (VIN_PATTERN.test(candidate)) {
80
+ matches.add(candidate);
81
+ }
82
+ }
83
+ });
84
+ return Array.from(matches);
85
+ };
86
+ export const isValidVin = value => {
87
+ if (!VIN_PATTERN.test(value)) {
88
+ return false;
89
+ }
90
+ const chars = value.split('');
91
+ let sum = 0;
92
+ for (let i = 0; i < chars.length; i += 1) {
93
+ const char = chars[i];
94
+ if (!char) {
95
+ return false;
96
+ }
97
+ const numeric = /^[0-9]$/.test(char) ? Number.parseInt(char, 10) : transliteration[char];
98
+ if (numeric === undefined) {
99
+ return false;
100
+ }
101
+ const weight = weights[i] ?? 0;
102
+ sum += numeric * weight;
103
+ }
104
+ const remainder = sum % 11;
105
+ const expected = remainder === 10 ? 'X' : remainder.toString();
106
+ const checkDigit = chars[8];
107
+ if (!checkDigit) {
108
+ return false;
109
+ }
110
+ return checkDigit === expected;
111
+ };
112
+ const toBoundingBox = (candidate, preferred) => {
113
+ if (!candidate) {
114
+ return undefined;
115
+ }
116
+ if (preferred === 'barcode') {
117
+ const maybe = candidate;
118
+ if (typeof maybe.top === 'number' && typeof maybe.bottom === 'number' && typeof maybe.left === 'number' && typeof maybe.right === 'number') {
119
+ return {
120
+ top: maybe.top,
121
+ bottom: maybe.bottom,
122
+ left: maybe.left,
123
+ right: maybe.right,
124
+ width: maybe.width,
125
+ height: maybe.height
126
+ };
127
+ }
128
+ }
129
+ const block = candidate;
130
+ const blockBox = typeof block.blockFrameTop === 'number' && typeof block.blockFrameBottom === 'number' && typeof block.blockFrameLeft === 'number' && typeof block.blockFrameRight === 'number' ? {
131
+ top: block.blockFrameTop,
132
+ bottom: block.blockFrameBottom,
133
+ left: block.blockFrameLeft,
134
+ right: block.blockFrameRight
135
+ } : undefined;
136
+ const lineBox = typeof block.lineFrameTop === 'number' && typeof block.lineFrameBottom === 'number' && typeof block.lineFrameLeft === 'number' && typeof block.lineFrameRight === 'number' ? {
137
+ top: block.lineFrameTop,
138
+ bottom: block.lineFrameBottom,
139
+ left: block.lineFrameLeft,
140
+ right: block.lineFrameRight
141
+ } : undefined;
142
+ const elementBox = typeof block.elementFrameTop === 'number' && typeof block.elementFrameBottom === 'number' && typeof block.elementFrameLeft === 'number' && typeof block.elementFrameRight === 'number' ? {
143
+ top: block.elementFrameTop,
144
+ bottom: block.elementFrameBottom,
145
+ left: block.elementFrameLeft,
146
+ right: block.elementFrameRight
147
+ } : undefined;
148
+ if (preferred === 'element' && elementBox) {
149
+ return elementBox;
150
+ }
151
+ if (preferred === 'line' && lineBox) {
152
+ return lineBox;
153
+ }
154
+ return blockBox || lineBox || elementBox;
155
+ };
156
+ const candidateFromBarcode = (detection, validateChecksum) => {
157
+ const values = new Set();
158
+ tokenizeCandidate(detection.rawValue ?? '').forEach(value => values.add(value));
159
+ tokenizeCandidate(detection.displayValue ?? '').forEach(value => values.add(value));
160
+ const boundingBox = toBoundingBox(detection, 'barcode');
161
+ return Array.from(values).map(value => {
162
+ const checksumValid = !validateChecksum || isValidVin(value);
163
+ return {
164
+ value,
165
+ source: 'barcode',
166
+ confidence: checksumValid ? 0.95 : 0.8,
167
+ boundingBox,
168
+ origin: detection.displayValue ? 'displayValue' : 'rawValue',
169
+ rawPayload: detection
170
+ };
171
+ });
172
+ };
173
+ const candidateFromText = (detection, validateChecksum) => {
174
+ const values = new Set();
175
+ [detection.lineText, detection.elementText, detection.blockText, detection.resultText].forEach(value => tokenizeCandidate(value ?? '').forEach(v => values.add(v)));
176
+ const boundingBox = toBoundingBox(detection, 'line') ?? toBoundingBox(detection, 'element') ?? toBoundingBox(detection, 'block');
177
+ return Array.from(values).map(value => {
178
+ const checksumValid = !validateChecksum || isValidVin(value);
179
+ return {
180
+ value,
181
+ source: 'text',
182
+ confidence: checksumValid ? 0.8 : 0.6,
183
+ boundingBox,
184
+ origin: detection.elementText ? 'element' : detection.lineText ? 'line' : 'block',
185
+ rawPayload: detection
186
+ };
187
+ });
188
+ };
189
+ const dedupeCandidates = candidates => {
190
+ const map = new Map();
191
+ candidates.forEach(candidate => {
192
+ var _candidate$boundingBo, _candidate$boundingBo2;
193
+ const key = [candidate.value, candidate.source, ((_candidate$boundingBo = candidate.boundingBox) === null || _candidate$boundingBo === void 0 ? void 0 : _candidate$boundingBo.top) ?? 'x', ((_candidate$boundingBo2 = candidate.boundingBox) === null || _candidate$boundingBo2 === void 0 ? void 0 : _candidate$boundingBo2.left) ?? 'y'].join(':');
194
+ const existing = map.get(key);
195
+ if (!existing || existing.confidence < candidate.confidence) {
196
+ map.set(key, candidate);
197
+ }
198
+ });
199
+ return Array.from(map.values());
200
+ };
201
+ export const buildVinCandidates = (payload, options) => {
202
+ const list = [];
203
+ if (options.barcode.enabled) {
204
+ (payload.barcodes ?? []).forEach(barcode => {
205
+ list.push(...candidateFromBarcode(barcode, options.detection.validateChecksum));
206
+ });
207
+ }
208
+ if (options.text.enabled) {
209
+ (payload.textBlocks ?? []).forEach(textBlock => {
210
+ list.push(...candidateFromText(textBlock, options.detection.validateChecksum));
211
+ });
212
+ }
213
+ return dedupeCandidates(list);
214
+ };
215
+ export const pickBestCandidate = (candidates, options) => {
216
+ if (!candidates.length) {
217
+ return null;
218
+ }
219
+ const sorted = [...candidates].sort((a, b) => {
220
+ if (a.confidence !== b.confidence) {
221
+ return b.confidence - a.confidence;
222
+ }
223
+ if (options.detection.preferBarcode && a.source !== b.source) {
224
+ return a.source === 'barcode' ? -1 : 1;
225
+ }
226
+ return 0;
227
+ });
228
+ return sorted[0] ?? null;
229
+ };
230
+ //# sourceMappingURL=vinUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_RESOLVED_OPTIONS","barcode","enabled","formats","text","language","detection","resultMode","preferBarcode","validateChecksum","emitDuplicates","resolveOptions","options","_options$detection","_options$detection2","_options$barcode","_options$barcode2","_options$text","_options$text2","_options$detection3","_options$detection4","length","VIN_PATTERN","transliteration","A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z","weights","tokenizeCandidate","value","normalized","toUpperCase","cleaned","replace","tokens","split","filter","token","matches","Set","forEach","i","candidate","slice","test","add","Array","from","isValidVin","chars","sum","char","numeric","Number","parseInt","undefined","weight","remainder","expected","toString","checkDigit","toBoundingBox","preferred","maybe","top","bottom","left","right","width","height","block","blockBox","blockFrameTop","blockFrameBottom","blockFrameLeft","blockFrameRight","lineBox","lineFrameTop","lineFrameBottom","lineFrameLeft","lineFrameRight","elementBox","elementFrameTop","elementFrameBottom","elementFrameLeft","elementFrameRight","candidateFromBarcode","values","rawValue","displayValue","boundingBox","map","checksumValid","source","confidence","origin","rawPayload","candidateFromText","lineText","elementText","blockText","resultText","v","dedupeCandidates","candidates","Map","_candidate$boundingBo","_candidate$boundingBo2","key","join","existing","get","set","buildVinCandidates","payload","list","barcodes","push","textBlocks","textBlock","pickBestCandidate","sorted","sort","a","b"],"sourceRoot":"../../src","sources":["vinUtils.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export declare const Camera: React.ForwardRefExoticComponent<{
3
+ callback: (event: import("./types").VinScannerEvent) => void;
4
+ options?: import("./types").VinScannerOptions;
5
+ } & import("react-native-vision-camera").CameraProps & React.RefAttributes<any>>;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAuB3D,eAAO,MAAM,MAAM;;;gFAmFjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { BarcodeScannerPlugin, ScanBarcodeOptions } from './types';
2
+ export declare function createBarcodeScannerPlugin(formats: ScanBarcodeOptions): BarcodeScannerPlugin;
3
+ //# sourceMappingURL=scanBarcodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanBarcodes.d.ts","sourceRoot":"","sources":["../../../src/scanBarcodes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,oBAAoB,EAEpB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AA4CjB,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,kBAAkB,GAC1B,oBAAoB,CAkBtB"}
@@ -0,0 +1,3 @@
1
+ import type { TextRecognitionOptions, TextRecognitionPlugin } from './types';
2
+ export declare function createTextRecognitionPlugin(options: TextRecognitionOptions): TextRecognitionPlugin;
3
+ //# sourceMappingURL=scanText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanText.d.ts","sourceRoot":"","sources":["../../../src/scanText.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAQjB,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAevB"}
@@ -0,0 +1,104 @@
1
+ import type { CameraProps } from 'react-native-vision-camera';
2
+ export type { Frame, ReadonlyFrameProcessor, FrameProcessorPlugin, } from 'react-native-vision-camera';
3
+ import type { Frame } from 'react-native-vision-camera';
4
+ export type { ForwardedRef } from 'react';
5
+ export type BarcodeFormat = 'all' | 'aztec' | 'code-128' | 'code-39' | 'code-93' | 'codabar' | 'data-matrix' | 'ean-13' | 'ean-8' | 'itf' | 'pdf-417' | 'qr' | 'upc-a' | 'upc-e';
6
+ export type ScanBarcodeOptions = BarcodeFormat[];
7
+ export type BarcodeDetection = {
8
+ width?: number;
9
+ height?: number;
10
+ top?: number;
11
+ bottom?: number;
12
+ left?: number;
13
+ right?: number;
14
+ rawValue?: string;
15
+ displayValue?: string;
16
+ format?: string;
17
+ [key: string]: number | string | undefined;
18
+ };
19
+ export type TextRecognitionLanguage = 'latin' | 'chinese' | 'devanagari' | 'japanese' | 'korean';
20
+ export type TextDetection = {
21
+ blockFrameBottom?: number;
22
+ blockFrameLeft?: number;
23
+ blockFrameRight?: number;
24
+ blockFrameTop?: number;
25
+ blockText?: string;
26
+ elementFrameBottom?: number;
27
+ elementFrameLeft?: number;
28
+ elementFrameRight?: number;
29
+ elementFrameTop?: number;
30
+ elementText?: string;
31
+ lineFrameBottom?: number;
32
+ lineFrameLeft?: number;
33
+ lineFrameRight?: number;
34
+ lineFrameTop?: number;
35
+ lineText?: string;
36
+ resultText?: string;
37
+ size?: number;
38
+ };
39
+ export type TextRecognitionOptions = {
40
+ language?: TextRecognitionLanguage;
41
+ };
42
+ export type VinResultMode = 'best' | 'all';
43
+ export type BoundingBox = {
44
+ top: number;
45
+ left: number;
46
+ right: number;
47
+ bottom: number;
48
+ width?: number;
49
+ height?: number;
50
+ };
51
+ export type VinCandidateSource = 'barcode' | 'text';
52
+ export type VinCandidate = {
53
+ value: string;
54
+ source: VinCandidateSource;
55
+ confidence: number;
56
+ boundingBox?: BoundingBox;
57
+ origin?: 'rawValue' | 'displayValue' | 'block' | 'line' | 'element';
58
+ rawPayload?: BarcodeDetection | TextDetection;
59
+ };
60
+ export type VinScannerEvent = {
61
+ mode: VinResultMode;
62
+ timestamp: number;
63
+ candidates: VinCandidate[];
64
+ best?: VinCandidate | null;
65
+ raw: {
66
+ barcodes: BarcodeDetection[];
67
+ textBlocks: TextDetection[];
68
+ };
69
+ };
70
+ export type BarcodeScannerOptions = {
71
+ enabled?: boolean;
72
+ formats?: ScanBarcodeOptions;
73
+ };
74
+ export type TextScannerOptions = {
75
+ enabled?: boolean;
76
+ language?: TextRecognitionLanguage;
77
+ };
78
+ export type DetectionOptions = {
79
+ resultMode?: VinResultMode;
80
+ preferBarcode?: boolean;
81
+ validateChecksum?: boolean;
82
+ emitDuplicates?: boolean;
83
+ };
84
+ export type VinScannerOptions = {
85
+ barcode?: BarcodeScannerOptions;
86
+ text?: TextScannerOptions;
87
+ detection?: DetectionOptions;
88
+ };
89
+ export type CameraTypes = {
90
+ callback: (event: VinScannerEvent) => void;
91
+ options?: VinScannerOptions;
92
+ } & CameraProps;
93
+ export type BarcodeScannerPlugin = {
94
+ scanBarcodes: (frame: Frame) => BarcodeDetection[] | undefined;
95
+ };
96
+ export type TextRecognitionPlugin = {
97
+ scanText: (frame: Frame) => TextDetection[] | undefined;
98
+ };
99
+ export type WorkletPayload = {
100
+ barcodes?: BarcodeDetection[];
101
+ textBlocks?: TextDetection[];
102
+ timestamp: number;
103
+ };
104
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { DetectionOptions, ScanBarcodeOptions, TextRecognitionLanguage, VinCandidate, VinResultMode, VinScannerOptions, WorkletPayload } from './types';
2
+ export type ResolvedVinScannerOptions = {
3
+ barcode: {
4
+ enabled: boolean;
5
+ formats: ScanBarcodeOptions;
6
+ };
7
+ text: {
8
+ enabled: boolean;
9
+ language: TextRecognitionLanguage;
10
+ };
11
+ detection: Required<DetectionOptions> & {
12
+ resultMode: VinResultMode;
13
+ };
14
+ };
15
+ export declare const resolveOptions: (options?: VinScannerOptions) => ResolvedVinScannerOptions;
16
+ export declare const isValidVin: (value: string) => boolean;
17
+ export declare const buildVinCandidates: (payload: WorkletPayload, options: ResolvedVinScannerOptions) => VinCandidate[];
18
+ export declare const pickBestCandidate: (candidates: VinCandidate[], options: ResolvedVinScannerOptions) => VinCandidate | null;
19
+ //# sourceMappingURL=vinUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vinUtils.d.ts","sourceRoot":"","sources":["../../../src/vinUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,kBAAkB,EAElB,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,kBAAkB,CAAC;KAC7B,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,uBAAuB,CAAC;KACnC,CAAC;IACF,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG;QAAE,UAAU,EAAE,aAAa,CAAA;KAAE,CAAC;CACvE,CAAC;AAmBF,eAAO,MAAM,cAAc,GACzB,UAAU,iBAAiB,KAC1B,yBAkCF,CAAC;AAsDF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,OA2B1C,CAAC;AA0KF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,cAAc,EACvB,SAAS,yBAAyB,KACjC,YAAY,EAiBd,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,YAAY,YAAY,EAAE,EAC1B,SAAS,yBAAyB,KACjC,YAAY,GAAG,IAcjB,CAAC"}