@scanly/core 2.0.0

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 (226) hide show
  1. package/README.md +3 -0
  2. package/dist/barcode/contracts.d.ts +44 -0
  3. package/dist/barcode/contracts.d.ts.map +1 -0
  4. package/dist/barcode/contracts.js +33 -0
  5. package/dist/barcode/contracts.js.map +1 -0
  6. package/dist/barcode/format-selection.d.ts +12 -0
  7. package/dist/barcode/format-selection.d.ts.map +1 -0
  8. package/dist/barcode/format-selection.js +32 -0
  9. package/dist/barcode/format-selection.js.map +1 -0
  10. package/dist/barcode/format.d.ts +7 -0
  11. package/dist/barcode/format.d.ts.map +1 -0
  12. package/dist/barcode/format.js +20 -0
  13. package/dist/barcode/format.js.map +1 -0
  14. package/dist/barcode/index.d.ts +5 -0
  15. package/dist/barcode/index.d.ts.map +1 -0
  16. package/dist/barcode/index.js +5 -0
  17. package/dist/barcode/index.js.map +1 -0
  18. package/dist/barcode/retail.d.ts +16 -0
  19. package/dist/barcode/retail.d.ts.map +1 -0
  20. package/dist/barcode/retail.js +95 -0
  21. package/dist/barcode/retail.js.map +1 -0
  22. package/dist/contracts/engine.d.ts +84 -0
  23. package/dist/contracts/engine.d.ts.map +1 -0
  24. package/dist/contracts/engine.js +2 -0
  25. package/dist/contracts/engine.js.map +1 -0
  26. package/dist/contracts/errors.d.ts +17 -0
  27. package/dist/contracts/errors.d.ts.map +1 -0
  28. package/dist/contracts/errors.js +31 -0
  29. package/dist/contracts/errors.js.map +1 -0
  30. package/dist/contracts/frame.d.ts +37 -0
  31. package/dist/contracts/frame.d.ts.map +1 -0
  32. package/dist/contracts/frame.js +77 -0
  33. package/dist/contracts/frame.js.map +1 -0
  34. package/dist/contracts/operator.d.ts +46 -0
  35. package/dist/contracts/operator.d.ts.map +1 -0
  36. package/dist/contracts/operator.js +14 -0
  37. package/dist/contracts/operator.js.map +1 -0
  38. package/dist/contracts/result.d.ts +135 -0
  39. package/dist/contracts/result.d.ts.map +1 -0
  40. package/dist/contracts/result.js +2 -0
  41. package/dist/contracts/result.js.map +1 -0
  42. package/dist/contracts/validator.d.ts +15 -0
  43. package/dist/contracts/validator.d.ts.map +1 -0
  44. package/dist/contracts/validator.js +2 -0
  45. package/dist/contracts/validator.js.map +1 -0
  46. package/dist/index.d.ts +29 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +28 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/industrial/candidate-region.d.ts +15 -0
  51. package/dist/industrial/candidate-region.d.ts.map +1 -0
  52. package/dist/industrial/candidate-region.js +108 -0
  53. package/dist/industrial/candidate-region.js.map +1 -0
  54. package/dist/industrial/coordinate-transform.d.ts +9 -0
  55. package/dist/industrial/coordinate-transform.d.ts.map +1 -0
  56. package/dist/industrial/coordinate-transform.js +42 -0
  57. package/dist/industrial/coordinate-transform.js.map +1 -0
  58. package/dist/industrial/decode-candidate-conflict.d.ts +8 -0
  59. package/dist/industrial/decode-candidate-conflict.d.ts.map +1 -0
  60. package/dist/industrial/decode-candidate-conflict.js +97 -0
  61. package/dist/industrial/decode-candidate-conflict.js.map +1 -0
  62. package/dist/industrial/difficulty-diagnosis.d.ts +15 -0
  63. package/dist/industrial/difficulty-diagnosis.d.ts.map +1 -0
  64. package/dist/industrial/difficulty-diagnosis.js +291 -0
  65. package/dist/industrial/difficulty-diagnosis.js.map +1 -0
  66. package/dist/industrial/index.d.ts +13 -0
  67. package/dist/industrial/index.d.ts.map +1 -0
  68. package/dist/industrial/index.js +13 -0
  69. package/dist/industrial/index.js.map +1 -0
  70. package/dist/industrial/memory.d.ts +28 -0
  71. package/dist/industrial/memory.d.ts.map +1 -0
  72. package/dist/industrial/memory.js +65 -0
  73. package/dist/industrial/memory.js.map +1 -0
  74. package/dist/industrial/pixels.d.ts +44 -0
  75. package/dist/industrial/pixels.d.ts.map +1 -0
  76. package/dist/industrial/pixels.js +295 -0
  77. package/dist/industrial/pixels.js.map +1 -0
  78. package/dist/industrial/recovery-pipeline.d.ts +26 -0
  79. package/dist/industrial/recovery-pipeline.d.ts.map +1 -0
  80. package/dist/industrial/recovery-pipeline.js +149 -0
  81. package/dist/industrial/recovery-pipeline.js.map +1 -0
  82. package/dist/industrial/recovery-planner.d.ts +10 -0
  83. package/dist/industrial/recovery-planner.d.ts.map +1 -0
  84. package/dist/industrial/recovery-planner.js +107 -0
  85. package/dist/industrial/recovery-planner.js.map +1 -0
  86. package/dist/industrial/recovery-route-registry.d.ts +12 -0
  87. package/dist/industrial/recovery-route-registry.d.ts.map +1 -0
  88. package/dist/industrial/recovery-route-registry.js +15 -0
  89. package/dist/industrial/recovery-route-registry.js.map +1 -0
  90. package/dist/industrial/recovery-routes.d.ts +89 -0
  91. package/dist/industrial/recovery-routes.d.ts.map +1 -0
  92. package/dist/industrial/recovery-routes.js +280 -0
  93. package/dist/industrial/recovery-routes.js.map +1 -0
  94. package/dist/industrial/scan-evidence.d.ts +5 -0
  95. package/dist/industrial/scan-evidence.d.ts.map +1 -0
  96. package/dist/industrial/scan-evidence.js +63 -0
  97. package/dist/industrial/scan-evidence.js.map +1 -0
  98. package/dist/industrial/scanner-diagnostics.d.ts +19 -0
  99. package/dist/industrial/scanner-diagnostics.d.ts.map +1 -0
  100. package/dist/industrial/scanner-diagnostics.js +35 -0
  101. package/dist/industrial/scanner-diagnostics.js.map +1 -0
  102. package/dist/industrial/types.d.ts +189 -0
  103. package/dist/industrial/types.d.ts.map +1 -0
  104. package/dist/industrial/types.js +2 -0
  105. package/dist/industrial/types.js.map +1 -0
  106. package/dist/node.d.ts +2 -0
  107. package/dist/node.d.ts.map +1 -0
  108. package/dist/node.js +2 -0
  109. package/dist/node.js.map +1 -0
  110. package/dist/qr/candidate-dedupe.d.ts +6 -0
  111. package/dist/qr/candidate-dedupe.d.ts.map +1 -0
  112. package/dist/qr/candidate-dedupe.js +27 -0
  113. package/dist/qr/candidate-dedupe.js.map +1 -0
  114. package/dist/qr/candidate-generation.d.ts +46 -0
  115. package/dist/qr/candidate-generation.d.ts.map +1 -0
  116. package/dist/qr/candidate-generation.js +277 -0
  117. package/dist/qr/candidate-generation.js.map +1 -0
  118. package/dist/qr/decode-pipeline.d.ts +14 -0
  119. package/dist/qr/decode-pipeline.d.ts.map +1 -0
  120. package/dist/qr/decode-pipeline.js +615 -0
  121. package/dist/qr/decode-pipeline.js.map +1 -0
  122. package/dist/qr/geometry.d.ts +24 -0
  123. package/dist/qr/geometry.d.ts.map +1 -0
  124. package/dist/qr/geometry.js +64 -0
  125. package/dist/qr/geometry.js.map +1 -0
  126. package/dist/qr/grayscale.d.ts +13 -0
  127. package/dist/qr/grayscale.d.ts.map +1 -0
  128. package/dist/qr/grayscale.js +46 -0
  129. package/dist/qr/grayscale.js.map +1 -0
  130. package/dist/qr/image-loader-node.d.ts +4 -0
  131. package/dist/qr/image-loader-node.d.ts.map +1 -0
  132. package/dist/qr/image-loader-node.js +26 -0
  133. package/dist/qr/image-loader-node.js.map +1 -0
  134. package/dist/qr/index.d.ts +15 -0
  135. package/dist/qr/index.d.ts.map +1 -0
  136. package/dist/qr/index.js +15 -0
  137. package/dist/qr/index.js.map +1 -0
  138. package/dist/qr/jsqr-decoder.d.ts +10 -0
  139. package/dist/qr/jsqr-decoder.d.ts.map +1 -0
  140. package/dist/qr/jsqr-decoder.js +18 -0
  141. package/dist/qr/jsqr-decoder.js.map +1 -0
  142. package/dist/qr/preprocess.d.ts +18 -0
  143. package/dist/qr/preprocess.d.ts.map +1 -0
  144. package/dist/qr/preprocess.js +165 -0
  145. package/dist/qr/preprocess.js.map +1 -0
  146. package/dist/qr/region-detection.d.ts +25 -0
  147. package/dist/qr/region-detection.d.ts.map +1 -0
  148. package/dist/qr/region-detection.js +129 -0
  149. package/dist/qr/region-detection.js.map +1 -0
  150. package/dist/qr/result-normalizer.d.ts +9 -0
  151. package/dist/qr/result-normalizer.d.ts.map +1 -0
  152. package/dist/qr/result-normalizer.js +70 -0
  153. package/dist/qr/result-normalizer.js.map +1 -0
  154. package/dist/qr/rotate.d.ts +5 -0
  155. package/dist/qr/rotate.d.ts.map +1 -0
  156. package/dist/qr/rotate.js +51 -0
  157. package/dist/qr/rotate.js.map +1 -0
  158. package/dist/qr/types.d.ts +186 -0
  159. package/dist/qr/types.d.ts.map +1 -0
  160. package/dist/qr/types.js +67 -0
  161. package/dist/qr/types.js.map +1 -0
  162. package/dist/qr/zxing-decoder.d.ts +8 -0
  163. package/dist/qr/zxing-decoder.d.ts.map +1 -0
  164. package/dist/qr/zxing-decoder.js +33 -0
  165. package/dist/qr/zxing-decoder.js.map +1 -0
  166. package/dist/runtime/artifacts.d.ts +16 -0
  167. package/dist/runtime/artifacts.d.ts.map +1 -0
  168. package/dist/runtime/artifacts.js +52 -0
  169. package/dist/runtime/artifacts.js.map +1 -0
  170. package/dist/runtime/builtin-operators.d.ts +12 -0
  171. package/dist/runtime/builtin-operators.d.ts.map +1 -0
  172. package/dist/runtime/builtin-operators.js +487 -0
  173. package/dist/runtime/builtin-operators.js.map +1 -0
  174. package/dist/runtime/capabilities.d.ts +32 -0
  175. package/dist/runtime/capabilities.d.ts.map +1 -0
  176. package/dist/runtime/capabilities.js +18 -0
  177. package/dist/runtime/capabilities.js.map +1 -0
  178. package/dist/runtime/engine-registry.d.ts +19 -0
  179. package/dist/runtime/engine-registry.d.ts.map +1 -0
  180. package/dist/runtime/engine-registry.js +136 -0
  181. package/dist/runtime/engine-registry.js.map +1 -0
  182. package/dist/runtime/execution-budget.d.ts +25 -0
  183. package/dist/runtime/execution-budget.d.ts.map +1 -0
  184. package/dist/runtime/execution-budget.js +41 -0
  185. package/dist/runtime/execution-budget.js.map +1 -0
  186. package/dist/runtime/frame-lease.d.ts +10 -0
  187. package/dist/runtime/frame-lease.d.ts.map +1 -0
  188. package/dist/runtime/frame-lease.js +17 -0
  189. package/dist/runtime/frame-lease.js.map +1 -0
  190. package/dist/runtime/frame-normalization.d.ts +13 -0
  191. package/dist/runtime/frame-normalization.d.ts.map +1 -0
  192. package/dist/runtime/frame-normalization.js +21 -0
  193. package/dist/runtime/frame-normalization.js.map +1 -0
  194. package/dist/runtime/memory-budget.d.ts +32 -0
  195. package/dist/runtime/memory-budget.d.ts.map +1 -0
  196. package/dist/runtime/memory-budget.js +109 -0
  197. package/dist/runtime/memory-budget.js.map +1 -0
  198. package/dist/runtime/operator-registry.d.ts +11 -0
  199. package/dist/runtime/operator-registry.d.ts.map +1 -0
  200. package/dist/runtime/operator-registry.js +19 -0
  201. package/dist/runtime/operator-registry.js.map +1 -0
  202. package/dist/runtime/result-policies.d.ts +21 -0
  203. package/dist/runtime/result-policies.d.ts.map +1 -0
  204. package/dist/runtime/result-policies.js +62 -0
  205. package/dist/runtime/result-policies.js.map +1 -0
  206. package/dist/runtime/router.d.ts +45 -0
  207. package/dist/runtime/router.d.ts.map +1 -0
  208. package/dist/runtime/router.js +202 -0
  209. package/dist/runtime/router.js.map +1 -0
  210. package/dist/runtime/scenario-compiler.d.ts +32 -0
  211. package/dist/runtime/scenario-compiler.d.ts.map +1 -0
  212. package/dist/runtime/scenario-compiler.js +131 -0
  213. package/dist/runtime/scenario-compiler.js.map +1 -0
  214. package/dist/runtime/scenario-runtime.d.ts +4 -0
  215. package/dist/runtime/scenario-runtime.d.ts.map +1 -0
  216. package/dist/runtime/scenario-runtime.js +32 -0
  217. package/dist/runtime/scenario-runtime.js.map +1 -0
  218. package/dist/runtime/session.d.ts +40 -0
  219. package/dist/runtime/session.d.ts.map +1 -0
  220. package/dist/runtime/session.js +117 -0
  221. package/dist/runtime/session.js.map +1 -0
  222. package/dist/runtime/validator-registry.d.ts +11 -0
  223. package/dist/runtime/validator-registry.d.ts.map +1 -0
  224. package/dist/runtime/validator-registry.js +16 -0
  225. package/dist/runtime/validator-registry.js.map +1 -0
  226. package/package.json +39 -0
@@ -0,0 +1,277 @@
1
+ import { applyCropPadding, cropBuffer, detectCandidateRegions, scaleRectToOriginal } from "./region-detection.js";
2
+ import { createCoordinateTransform, cropToSourceTransform, IDENTITY_MATRIX, multiplyMatrices } from "./geometry.js";
3
+ function scaleLabel(factor) {
4
+ if (factor < 0.95)
5
+ return "downscaled";
6
+ if (factor > 1.05)
7
+ return "upscaled";
8
+ return "original";
9
+ }
10
+ /** Nearest-neighbor resize for RGBA buffers. */
11
+ export function resizeBuffer(src, targetW, targetH, budget) {
12
+ const tw = Math.max(1, Math.floor(targetW));
13
+ const th = Math.max(1, Math.floor(targetH));
14
+ if (tw === src.width && th === src.height) {
15
+ return { data: new Uint8ClampedArray(src.data), width: tw, height: th };
16
+ }
17
+ const out = new Uint8ClampedArray(tw * th * 4);
18
+ for (let y = 0; y < th; y++) {
19
+ if ((y & 31) === 0)
20
+ budget?.throwIfExceeded("candidate-resize");
21
+ const sy = Math.min(src.height - 1, Math.floor((y / th) * src.height));
22
+ for (let x = 0; x < tw; x++) {
23
+ const sx = Math.min(src.width - 1, Math.floor((x / tw) * src.width));
24
+ const si = (sy * src.width + sx) * 4;
25
+ const di = (y * tw + x) * 4;
26
+ out[di] = src.data[si];
27
+ out[di + 1] = src.data[si + 1];
28
+ out[di + 2] = src.data[si + 2];
29
+ out[di + 3] = src.data[si + 3];
30
+ }
31
+ }
32
+ return { data: out, width: tw, height: th };
33
+ }
34
+ export function fitMaxSide(src, maxSide, budget) {
35
+ const m = Math.max(src.width, src.height);
36
+ if (m <= maxSide) {
37
+ return {
38
+ buffer: { data: new Uint8ClampedArray(src.data), width: src.width, height: src.height },
39
+ scale: 1,
40
+ };
41
+ }
42
+ const scale = maxSide / m;
43
+ return {
44
+ buffer: resizeBuffer(src, Math.floor(src.width * scale), Math.floor(src.height * scale), budget),
45
+ scale,
46
+ };
47
+ }
48
+ function cappedDimensions(width, height, scaleFactor, maxPixels) {
49
+ let w = Math.floor(width * scaleFactor);
50
+ let h = Math.floor(height * scaleFactor);
51
+ const pixels = Math.max(1, w * h);
52
+ if (pixels > maxPixels) {
53
+ const s = Math.sqrt(maxPixels / pixels);
54
+ w = Math.floor(w * s);
55
+ h = Math.floor(h * s);
56
+ }
57
+ const maxSide = 1200;
58
+ if (Math.max(w, h) > maxSide) {
59
+ const s = maxSide / Math.max(w, h);
60
+ w = Math.floor(w * s);
61
+ h = Math.floor(h * s);
62
+ }
63
+ return { width: Math.max(1, w), height: Math.max(1, h) };
64
+ }
65
+ function capAndResize(cropped, scaleFactor, maxPixels, budget) {
66
+ const target = cappedDimensions(cropped.width, cropped.height, scaleFactor, maxPixels);
67
+ return resizeBuffer(cropped, target.width, target.height, budget);
68
+ }
69
+ function hasCandidateCapacity(out, transientBytes, outputBytes, budget) {
70
+ if (!budget)
71
+ return true;
72
+ const retained = out.reduce((sum, candidate) => sum + candidate.buffer.data.byteLength, 0);
73
+ const available = budget.remainingIntermediateBytes();
74
+ const decodeHeadroom = Math.min(8 * 1024 * 1024, Math.floor(available / 3));
75
+ return retained + transientBytes + outputBytes <= available - decodeHeadroom;
76
+ }
77
+ function pushCandidate(out, full, region, originalRect, padding, scaleFactor, maxPixels, sourceToFrame, budget) {
78
+ budget?.throwIfExceeded("candidate-generation");
79
+ const padded = applyCropPadding(originalRect, full.width, full.height, padding);
80
+ const target = cappedDimensions(padded.width, padded.height, scaleFactor, maxPixels);
81
+ if (!hasCandidateCapacity(out, padded.width * padded.height * 4, target.width * target.height * 4, budget))
82
+ return false;
83
+ const cropped = cropBuffer(full, padded, budget);
84
+ const buffer = capAndResize(cropped, scaleFactor, maxPixels, budget);
85
+ const local = cropToSourceTransform(padded, buffer.width, buffer.height, full.width, full.height);
86
+ out.push({
87
+ buffer,
88
+ candidateIndex: region.index >= 0 ? region.index : 0,
89
+ candidateScore: region.score,
90
+ cropPadding: padding,
91
+ scale: scaleLabel(scaleFactor),
92
+ scaleFactor,
93
+ region: { ...region, ...padded },
94
+ transform: createCoordinateTransform(multiplyMatrices(sourceToFrame.matrix, local.matrix), buffer.width, buffer.height, sourceToFrame.targetWidth, sourceToFrame.targetHeight),
95
+ });
96
+ return true;
97
+ }
98
+ /** Conservative high-frequency rejection for independently random pixels. */
99
+ export function highFrequencyRatio(image, budget) {
100
+ if (image.width < 64 || image.height < 64)
101
+ return 0;
102
+ let high = 0;
103
+ let samples = 0;
104
+ const step = Math.max(1, Math.floor(Math.max(image.width, image.height) / 256));
105
+ for (let y = 0; y < image.height - step; y += step) {
106
+ if ((y & 31) === 0)
107
+ budget?.throwIfExceeded("entropy-analysis");
108
+ for (let x = 0; x < image.width - step; x += step) {
109
+ const i = (y * image.width + x) * 4;
110
+ const r = (y * image.width + x + step) * 4;
111
+ const d = ((y + step) * image.width + x) * 4;
112
+ const gray = (image.data[i] + image.data[i + 1] + image.data[i + 2]) / 3;
113
+ const right = (image.data[r] + image.data[r + 1] + image.data[r + 2]) / 3;
114
+ const down = (image.data[d] + image.data[d + 1] + image.data[d + 2]) / 3;
115
+ high += Math.abs(gray - right) > 48 ? 1 : 0;
116
+ high += Math.abs(gray - down) > 48 ? 1 : 0;
117
+ samples += 2;
118
+ }
119
+ }
120
+ // The retained corpus peaks at 0.235 for valid QR imagery (moire); seeded
121
+ // independent random noise is 0.436. Keep a substantial deterministic gap.
122
+ return samples > 2_000 ? high / samples : 0;
123
+ }
124
+ export function isPathologicalHighEntropy(image, budget) {
125
+ return highFrequencyRatio(image, budget) > 0.3;
126
+ }
127
+ /**
128
+ * Prioritized candidates:
129
+ * - top regions get full padding×scale combos
130
+ * - later regions get medium@1 first
131
+ * - full-image fallbacks last
132
+ */
133
+ export function generateCandidates(full, options) {
134
+ const budget = options.budget;
135
+ const sourceToFrame = options.sourceToFrame ?? createCoordinateTransform(IDENTITY_MATRIX, full.width, full.height, full.width, full.height);
136
+ const preview = fitMaxSide(full, options.previewSize, budget);
137
+ const frequencyRatio = highFrequencyRatio(preview.buffer, budget);
138
+ if (frequencyRatio > 0.3) {
139
+ const fitted = fitMaxSide(full, Math.min(600, options.previewSize * 2), budget);
140
+ const local = cropToSourceTransform({ x: 0, y: 0, width: full.width, height: full.height }, fitted.buffer.width, fitted.buffer.height, full.width, full.height);
141
+ return [{
142
+ buffer: fitted.buffer, candidateIndex: -1, candidateScore: 0, cropPadding: "full", scale: "full",
143
+ scaleFactor: fitted.scale, region: null, pathologicalInput: true,
144
+ highFrequencyRatio: frequencyRatio, candidateCountBeforeCap: 1,
145
+ transform: createCoordinateTransform(multiplyMatrices(sourceToFrame.matrix, local.matrix), fitted.buffer.width, fitted.buffer.height, sourceToFrame.targetWidth, sourceToFrame.targetHeight),
146
+ }];
147
+ }
148
+ const regions = options.enableLocalization === false ? [] : detectCandidateRegions(preview.buffer, {
149
+ maxRaw: Math.max(8, options.maxCandidates * 3),
150
+ budget,
151
+ });
152
+ const top = regions.slice(0, options.maxCandidates);
153
+ const out = [];
154
+ const workRegions = options.enableLocalization === false
155
+ ? []
156
+ : top.length > 0
157
+ ? top
158
+ : [
159
+ {
160
+ x: Math.floor(full.width * 0.1),
161
+ y: Math.floor(full.height * 0.1),
162
+ width: Math.floor(full.width * 0.8),
163
+ height: Math.floor(full.height * 0.8),
164
+ score: 0,
165
+ index: 0,
166
+ },
167
+ ];
168
+ workRegions.forEach((region, idx) => {
169
+ const originalRect = top.length > 0
170
+ ? scaleRectToOriginal(region, preview.scale)
171
+ : { x: region.x, y: region.y, width: region.width, height: region.height };
172
+ if (idx === 0) {
173
+ for (const padding of options.paddings) {
174
+ for (const scaleFactor of options.scales) {
175
+ pushCandidate(out, full, region, originalRect, padding, scaleFactor, options.maxPixels, sourceToFrame, budget);
176
+ }
177
+ }
178
+ }
179
+ else {
180
+ // Secondary candidates: medium @ 1 and expanded @ 1
181
+ pushCandidate(out, full, region, originalRect, "medium", 1, options.maxPixels, sourceToFrame, budget);
182
+ pushCandidate(out, full, region, originalRect, "expanded", 1, options.maxPixels, sourceToFrame, budget);
183
+ pushCandidate(out, full, region, originalRect, "medium", 1.35, options.maxPixels, sourceToFrame, budget);
184
+ }
185
+ });
186
+ for (const side of options.enableFullImageFallback === false ? [] : [800, 600, 1200]) {
187
+ budget?.throwIfExceeded("full-image-candidate");
188
+ const scale = Math.min(1, side / Math.max(full.width, full.height));
189
+ if (!hasCandidateCapacity(out, 0, Math.max(1, Math.floor(full.width * scale)) * Math.max(1, Math.floor(full.height * scale)) * 4, budget))
190
+ continue;
191
+ const fitted = fitMaxSide(full, side, budget);
192
+ const local = cropToSourceTransform({ x: 0, y: 0, width: full.width, height: full.height }, fitted.buffer.width, fitted.buffer.height, full.width, full.height);
193
+ out.push({
194
+ buffer: fitted.buffer,
195
+ candidateIndex: -1,
196
+ candidateScore: 0,
197
+ cropPadding: "full",
198
+ scale: "full",
199
+ scaleFactor: fitted.scale,
200
+ region: null,
201
+ transform: createCoordinateTransform(multiplyMatrices(sourceToFrame.matrix, local.matrix), fitted.buffer.width, fitted.buffer.height, sourceToFrame.targetWidth, sourceToFrame.targetHeight),
202
+ });
203
+ }
204
+ // Split candidates help multiple-QR images (left / right / quadrants).
205
+ const halves = options.enableSplitImageFallback === false ? [] : [
206
+ { x: 0, y: 0, width: Math.floor(full.width / 2), height: full.height, index: 100 },
207
+ { x: Math.floor(full.width / 2), y: 0, width: Math.ceil(full.width / 2), height: full.height, index: 101 },
208
+ { x: 0, y: 0, width: full.width, height: Math.floor(full.height / 2), index: 102 },
209
+ { x: 0, y: Math.floor(full.height / 2), width: full.width, height: Math.ceil(full.height / 2), index: 103 },
210
+ ];
211
+ for (const h of halves) {
212
+ if (h.width < 32 || h.height < 32)
213
+ continue;
214
+ budget?.throwIfExceeded("split-image-candidate");
215
+ const splitScale = Math.min(1, 800 / Math.max(h.width, h.height));
216
+ if (!hasCandidateCapacity(out, h.width * h.height * 4, Math.max(1, Math.floor(h.width * splitScale)) * Math.max(1, Math.floor(h.height * splitScale)) * 4, budget))
217
+ continue;
218
+ const cropped = cropBuffer(full, h, budget);
219
+ const fitted = fitMaxSide(cropped, 800, budget);
220
+ const local = cropToSourceTransform(h, fitted.buffer.width, fitted.buffer.height, full.width, full.height);
221
+ out.push({
222
+ buffer: fitted.buffer,
223
+ candidateIndex: h.index,
224
+ candidateScore: 1,
225
+ cropPadding: "medium",
226
+ scale: "original",
227
+ scaleFactor: fitted.scale,
228
+ region: { ...h, score: 1, index: h.index },
229
+ transform: createCoordinateTransform(multiplyMatrices(sourceToFrame.matrix, local.matrix), fitted.buffer.width, fitted.buffer.height, sourceToFrame.targetWidth, sourceToFrame.targetHeight),
230
+ });
231
+ }
232
+ if (out.length === 0) {
233
+ const local = cropToSourceTransform({ x: 0, y: 0, width: full.width, height: full.height }, preview.buffer.width, preview.buffer.height, full.width, full.height);
234
+ out.push({
235
+ buffer: preview.buffer, candidateIndex: -1, candidateScore: 0, cropPadding: "full", scale: "full",
236
+ scaleFactor: preview.scale, region: null,
237
+ transform: createCoordinateTransform(multiplyMatrices(sourceToFrame.matrix, local.matrix), preview.buffer.width, preview.buffer.height, sourceToFrame.targetWidth, sourceToFrame.targetHeight),
238
+ });
239
+ }
240
+ // Multi-code-only grid candidates provide one-symbol crops for dense boards.
241
+ if (options.enableGridImageFallback && full.width >= 500 && full.height >= 300) {
242
+ const columns = full.width >= 650 ? 4 : 3;
243
+ const rows = Math.max(2, Math.min(3, Math.round(columns / (full.width / full.height))));
244
+ const overlap = Math.max(8, Math.floor(Math.min(full.width / columns, full.height / rows) * 0.08));
245
+ for (let row = 0; row < rows; row++) {
246
+ for (let column = 0; column < columns; column++) {
247
+ budget?.throwIfExceeded("grid-image-candidate");
248
+ const left = Math.max(0, Math.floor(column * full.width / columns) - overlap);
249
+ const top = Math.max(0, Math.floor(row * full.height / rows) - overlap);
250
+ const right = Math.min(full.width, Math.ceil((column + 1) * full.width / columns) + overlap);
251
+ const bottom = Math.min(full.height, Math.ceil((row + 1) * full.height / rows) + overlap);
252
+ const rect = { x: left, y: top, width: right - left, height: bottom - top };
253
+ if (!hasCandidateCapacity(out, rect.width * rect.height * 4, rect.width * rect.height * 4, budget))
254
+ continue;
255
+ const cropped = cropBuffer(full, rect, budget);
256
+ const local = cropToSourceTransform(rect, cropped.width, cropped.height, full.width, full.height);
257
+ const index = 200 + row * columns + column;
258
+ out.push({
259
+ buffer: cropped,
260
+ candidateIndex: index,
261
+ candidateScore: 1,
262
+ cropPadding: "medium",
263
+ scale: "original",
264
+ scaleFactor: 1,
265
+ region: { ...rect, score: 1, index },
266
+ transform: createCoordinateTransform(multiplyMatrices(sourceToFrame.matrix, local.matrix), cropped.width, cropped.height, sourceToFrame.targetWidth, sourceToFrame.targetHeight),
267
+ });
268
+ }
269
+ }
270
+ }
271
+ for (const candidate of out) {
272
+ candidate.highFrequencyRatio = frequencyRatio;
273
+ candidate.candidateCountBeforeCap = regions.length;
274
+ }
275
+ return out;
276
+ }
277
+ //# sourceMappingURL=candidate-generation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidate-generation.js","sourceRoot":"","sources":["../../src/qr/candidate-generation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { DecodeAttempt, DecodeOutcome, DecodePipelineOptions, DecodeSuccess, DecodedCode, PixelBuffer, PreprocessMethod, PhaseTiming, RotationDegrees } from "./types.js";
2
+ import { type CandidateImage } from "./candidate-generation.js";
3
+ import type { EngineDiagnostic } from "../contracts/result.js";
4
+ export declare function buildAttemptPlan(preprocessOrder: PreprocessMethod[], rotations: RotationDegrees[], budgetRemaining: number): Array<{
5
+ preprocessing: PreprocessMethod;
6
+ rotation: RotationDegrees;
7
+ }>;
8
+ export declare function orderCandidates(candidates: CandidateImage[], findMultiple: boolean): CandidateImage[];
9
+ /**
10
+ * Breadth-first decode pipeline with dedupe, adaptive multiple stop, and fail-fast.
11
+ */
12
+ export declare function decodePixelBuffer(image: PixelBuffer, options?: DecodePipelineOptions): Promise<DecodeOutcome>;
13
+ export declare function successOutcome(results: DecodedCode[], attempts: DecodeAttempt[], start: number, cancelled: boolean, phaseTiming: PhaseTiming, engineDiagnostics?: EngineDiagnostic[]): DecodeSuccess;
14
+ //# sourceMappingURL=decode-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-pipeline.d.ts","sourceRoot":"","sources":["../../src/qr/decode-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,WAAW,EAEX,WAAW,EAEX,gBAAgB,EAChB,WAAW,EAEX,eAAe,EAEhB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAOpF,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,wBAAwB,CAAC;AAiCvF,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,gBAAgB,EAAE,EACnC,SAAS,EAAE,eAAe,EAAE,EAC5B,eAAe,EAAE,MAAM,GACtB,KAAK,CAAC;IAAE,aAAa,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC,CAavE;AAmRD,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,OAAO,GAAG,cAAc,EAAE,CAQrG;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,CAAC,CAsTxB;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,EAAE,EACtB,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,WAAW,EACxB,iBAAiB,GAAE,gBAAgB,EAAO,GACzC,aAAa,CAoBf"}