🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@robinpath/barcode

Package Overview
Dependencies
Maintainers
4
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@robinpath/barcode - npm Package Compare versions

Comparing version
0.1.4
to
0.1.5
+3
-3
package.json
{
"name": "@robinpath/barcode",
"version": "0.1.4",
"version": "0.1.5",
"publishConfig": {

@@ -24,6 +24,6 @@ "access": "public"

"peerDependencies": {
"@wiredwp/robinpath": ">=0.20.0"
"@robinpath/core": ">=0.20.0"
},
"devDependencies": {
"@wiredwp/robinpath": "^0.30.1",
"@robinpath/core": "^0.30.1",
"tsx": "^4.19.0",

@@ -30,0 +30,0 @@ "typescript": "^5.6.0"

import type { BuiltinHandler } from "@wiredwp/robinpath";
export declare const BarcodeFunctions: Record<string, BuiltinHandler>;
export declare const BarcodeFunctionMetadata: {
qrGenerate: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
qrToFile: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
qrToSvg: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
qrToTerminal: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
ean13Validate: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
ean13Checksum: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
upcValidate: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
upcChecksum: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
isbn10Validate: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
isbn13Validate: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
isbn10to13: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
isbn13to10: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
luhn: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
luhnGenerate: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
};
export declare const BarcodeModuleMetadata: {
description: string;
methods: string[];
};
//# sourceMappingURL=barcode.d.ts.map
{"version":3,"file":"barcode.d.ts","sourceRoot":"","sources":["../src/barcode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAwjCzD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAuL,CAAC;AAEpP,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAenC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;CAGjC,CAAC"}
import { writeFileSync } from "node:fs";
// ============================================================================
// Pure JavaScript QR Code Encoder
// Supports versions 1-10, error correction levels L/M/Q/H,
// numeric, alphanumeric, and byte encoding modes.
// ============================================================================
// --- Constants & Tables ---
const EC_LEVELS = { L: 0, M: 1, Q: 2, H: 3 };
// Mode indicators (4-bit)
const MODE_NUMERIC = 0b0001;
const MODE_ALPHANUMERIC = 0b0010;
const MODE_BYTE = 0b0100;
// Alphanumeric character table
const ALPHANUM_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";
// Character count indicator bit lengths per version group [1-9, 10-26, 27-40]
const CHAR_COUNT_BITS = {
[MODE_NUMERIC]: [10, 12, 14],
[MODE_ALPHANUMERIC]: [9, 11, 13],
[MODE_BYTE]: [8, 16, 16],
};
// Total codewords per version (data + ec)
const TOTAL_CODEWORDS = [
26, 44, 70, 100, 134, 172, 196, 242, 292, 346,
];
// Version/EC level table: [totalDataCodewords, ecCWPerBlock, g1Blocks, g1DataCW, g2Blocks, g2DataCW]
// Sources: ISO/IEC 18004 Table 9
const VERSION_EC_TABLE = [
// Version 1
[[19, 7, 1, 19, 0, 0], [16, 10, 1, 16, 0, 0], [13, 13, 1, 13, 0, 0], [9, 17, 1, 9, 0, 0]],
// Version 2
[[34, 10, 1, 34, 0, 0], [28, 16, 1, 28, 0, 0], [22, 22, 1, 22, 0, 0], [16, 28, 1, 16, 0, 0]],
// Version 3
[[55, 15, 1, 55, 0, 0], [44, 26, 1, 44, 0, 0], [34, 18, 2, 17, 0, 0], [24, 22, 2, 12, 0, 0]],
// Version 4
[[80, 20, 1, 80, 0, 0], [64, 18, 2, 32, 0, 0], [48, 26, 2, 24, 0, 0], [36, 16, 4, 9, 0, 0]],
// Version 5
[[108, 26, 1, 108, 0, 0], [86, 24, 2, 43, 0, 0], [62, 18, 2, 15, 2, 16], [46, 22, 2, 11, 2, 12]],
// Version 6
[[136, 18, 2, 68, 0, 0], [108, 16, 4, 27, 0, 0], [76, 24, 4, 19, 0, 0], [60, 28, 4, 15, 0, 0]],
// Version 7
[[156, 20, 2, 78, 0, 0], [124, 18, 4, 31, 0, 0], [88, 18, 2, 14, 4, 15], [66, 26, 4, 13, 1, 14]],
// Version 8
[[194, 24, 2, 97, 0, 0], [154, 22, 2, 38, 2, 39], [110, 22, 4, 18, 2, 19], [86, 26, 4, 14, 2, 15]],
// Version 9
[[232, 30, 2, 116, 0, 0], [182, 22, 3, 36, 2, 37], [132, 20, 4, 16, 4, 17], [100, 24, 4, 12, 4, 13]],
// Version 10
[[271, 18, 2, 68, 2, 69], [216, 26, 4, 43, 1, 44], [154, 24, 6, 19, 2, 20], [122, 28, 6, 15, 2, 16]],
];
// Alignment pattern positions per version (version 1 has none)
const ALIGNMENT_POSITIONS = [
[], // v1
[6, 18], // v2
[6, 22], // v3
[6, 26], // v4
[6, 30], // v5
[6, 34], // v6
[6, 22, 38], // v7
[6, 24, 42], // v8
[6, 26, 46], // v9
[6, 28, 50], // v10
];
// Format information strings (15 bits) for each EC level and mask pattern
// Pre-calculated with BCH error correction
const FORMAT_INFO_STRINGS = [
// L (0)
[0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976],
// M (1)
[0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0],
// Q (2)
[0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed],
// H (3)
[0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b],
];
// --- Reed-Solomon Error Correction ---
// GF(256) with primitive polynomial 0x11d (x^8 + x^4 + x^3 + x^2 + 1)
const GF_EXP = new Uint8Array(512);
const GF_LOG = new Uint8Array(256);
function initGaloisField() {
let x = 1;
for (let i = 0; i < 255; i++) {
GF_EXP[i] = x;
GF_LOG[x] = i;
x <<= 1;
if (x >= 256)
x ^= 0x11d;
}
for (let i = 255; i < 512; i++) {
GF_EXP[i] = GF_EXP[i - 255];
}
}
initGaloisField();
function gfMul(a, b) {
if (a === 0 || b === 0)
return 0;
return GF_EXP[GF_LOG[a] + GF_LOG[b]];
}
function rsGeneratorPoly(numECCodewords) {
let gen = new Uint8Array([1]);
for (let i = 0; i < numECCodewords; i++) {
const newGen = new Uint8Array(gen.length + 1);
for (let j = 0; j < gen.length; j++) {
newGen[j] ^= gen[j];
newGen[j + 1] ^= gfMul(gen[j], GF_EXP[i]);
}
gen = newGen;
}
return gen;
}
function rsEncode(data, numECCodewords) {
const gen = rsGeneratorPoly(numECCodewords);
const result = new Uint8Array(data.length + numECCodewords);
result.set(data);
for (let i = 0; i < data.length; i++) {
const coef = result[i];
if (coef !== 0) {
for (let j = 0; j < gen.length; j++) {
result[i + j] ^= gfMul(gen[j], coef);
}
}
}
return result.slice(data.length);
}
// --- Data Encoding ---
function detectMode(text) {
if (/^\d+$/.test(text))
return MODE_NUMERIC;
if (text.split("").every((c) => ALPHANUM_CHARS.includes(c)))
return MODE_ALPHANUMERIC;
return MODE_BYTE;
}
function getCharCountBits(mode, version) {
const group = version <= 9 ? 0 : version <= 26 ? 1 : 2;
return CHAR_COUNT_BITS[mode][group];
}
function getVersionECInfo(version, ecLevel) {
const row = VERSION_EC_TABLE[version - 1][ecLevel];
return {
totalDataCodewords: row[0],
ecCodewordsPerBlock: row[1],
group1Blocks: row[2],
group1DataCW: row[3],
group2Blocks: row[4],
group2DataCW: row[5],
};
}
function selectVersion(text, mode, ecLevel) {
const dataLen = mode === MODE_BYTE ? new TextEncoder().encode(text).length : text.length;
for (let v = 1; v <= 10; v++) {
const info = getVersionECInfo(v, ecLevel);
const totalBits = info.totalDataCodewords * 8;
const ccBits = getCharCountBits(mode, v);
let dataBits;
if (mode === MODE_NUMERIC) {
dataBits = Math.floor(dataLen / 3) * 10 + (dataLen % 3 === 2 ? 7 : dataLen % 3 === 1 ? 4 : 0);
}
else if (mode === MODE_ALPHANUMERIC) {
dataBits = Math.floor(dataLen / 2) * 11 + (dataLen % 2) * 6;
}
else {
dataBits = dataLen * 8;
}
const needed = 4 + ccBits + dataBits;
if (needed <= totalBits)
return v;
}
throw new Error("Data too long for QR versions 1-10");
}
class BitBuffer {
bits = [];
get length() { return this.bits.length; }
put(value, numBits) {
for (let i = numBits - 1; i >= 0; i--) {
this.bits.push((value >> i) & 1);
}
}
getByte(index) {
let byte = 0;
for (let i = 0; i < 8; i++) {
const bitIndex = index * 8 + i;
if (bitIndex < this.bits.length) {
byte = (byte << 1) | this.bits[bitIndex];
}
else {
byte <<= 1;
}
}
return byte;
}
}
function encodeData(text, version, ecLevel) {
const mode = detectMode(text);
const info = getVersionECInfo(version, ecLevel);
const totalDataCodewords = info.totalDataCodewords;
const buffer = new BitBuffer();
// Mode indicator
buffer.put(mode, 4);
// Character count
const ccBits = getCharCountBits(mode, version);
if (mode === MODE_NUMERIC) {
buffer.put(text.length, ccBits);
for (let i = 0; i < text.length; i += 3) {
const group = text.substring(i, i + 3);
const bits = group.length === 3 ? 10 : group.length === 2 ? 7 : 4;
buffer.put(parseInt(group, 10), bits);
}
}
else if (mode === MODE_ALPHANUMERIC) {
buffer.put(text.length, ccBits);
for (let i = 0; i < text.length; i += 2) {
if (i + 1 < text.length) {
const val = ALPHANUM_CHARS.indexOf(text[i]) * 45 + ALPHANUM_CHARS.indexOf(text[i + 1]);
buffer.put(val, 11);
}
else {
buffer.put(ALPHANUM_CHARS.indexOf(text[i]), 6);
}
}
}
else {
const bytes = new TextEncoder().encode(text);
buffer.put(bytes.length, ccBits);
for (const b of bytes) {
buffer.put(b, 8);
}
}
// Terminator
const totalBits = totalDataCodewords * 8;
const terminatorLen = Math.min(4, totalBits - buffer.length);
buffer.put(0, terminatorLen);
// Pad to byte boundary
while (buffer.length % 8 !== 0) {
buffer.put(0, 1);
}
// Pad codewords
const padPatterns = [0xec, 0x11];
let padIdx = 0;
while (buffer.length < totalBits) {
buffer.put(padPatterns[padIdx], 8);
padIdx = 1 - padIdx;
}
// Convert to bytes
const data = new Uint8Array(totalDataCodewords);
for (let i = 0; i < totalDataCodewords; i++) {
data[i] = buffer.getByte(i);
}
return data;
}
// --- Error Correction & Interleaving ---
function generateECCodewords(data, version, ecLevel) {
const info = getVersionECInfo(version, ecLevel);
const { ecCodewordsPerBlock, group1Blocks, group1DataCW, group2Blocks, group2DataCW } = info;
const totalCodewords = TOTAL_CODEWORDS[version - 1];
const dataBlocks = [];
const ecBlocks = [];
let offset = 0;
// Group 1
for (let i = 0; i < group1Blocks; i++) {
const block = data.slice(offset, offset + group1DataCW);
dataBlocks.push(block);
ecBlocks.push(rsEncode(block, ecCodewordsPerBlock));
offset += group1DataCW;
}
// Group 2
for (let i = 0; i < group2Blocks; i++) {
const block = data.slice(offset, offset + group2DataCW);
dataBlocks.push(block);
ecBlocks.push(rsEncode(block, ecCodewordsPerBlock));
offset += group2DataCW;
}
// Interleave data codewords
const result = [];
const maxDataCW = Math.max(group1DataCW, group2DataCW || 0);
for (let i = 0; i < maxDataCW; i++) {
for (const block of dataBlocks) {
if (i < block.length)
result.push(block[i]);
}
}
// Interleave EC codewords
for (let i = 0; i < ecCodewordsPerBlock; i++) {
for (const block of ecBlocks) {
if (i < block.length)
result.push(block[i]);
}
}
// Remainder bits are handled during matrix placement
const output = new Uint8Array(totalCodewords);
for (let i = 0; i < Math.min(result.length, totalCodewords); i++) {
output[i] = result[i];
}
return output;
}
// --- QR Matrix Construction ---
function getModuleCount(version) {
return version * 4 + 17;
}
function createMatrix(size) {
return Array.from({ length: size }, () => Array(size).fill(null));
}
function placeFinderPattern(matrix, row, col) {
for (let r = -1; r <= 7; r++) {
for (let c = -1; c <= 7; c++) {
const mr = row + r;
const mc = col + c;
if (mr < 0 || mr >= matrix.length || mc < 0 || mc >= matrix.length)
continue;
if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||
(c >= 0 && c <= 6 && (r === 0 || r === 6)) ||
(r >= 2 && r <= 4 && c >= 2 && c <= 4)) {
matrix[mr][mc] = 1;
}
else {
matrix[mr][mc] = 0;
}
}
}
}
function placeAlignmentPattern(matrix, row, col) {
for (let r = -2; r <= 2; r++) {
for (let c = -2; c <= 2; c++) {
if (Math.abs(r) === 2 || Math.abs(c) === 2 || (r === 0 && c === 0)) {
matrix[row + r][col + c] = 1;
}
else {
matrix[row + r][col + c] = 0;
}
}
}
}
function placeTimingPatterns(matrix) {
const size = matrix.length;
for (let i = 8; i < size - 8; i++) {
if (matrix[6][i] === null)
matrix[6][i] = i % 2 === 0 ? 1 : 0;
if (matrix[i][6] === null)
matrix[i][6] = i % 2 === 0 ? 1 : 0;
}
}
function reserveFormatInfo(matrix) {
const size = matrix.length;
// Around top-left finder
for (let i = 0; i <= 8; i++) {
if (matrix[8][i] === null)
matrix[8][i] = 0;
if (matrix[i][8] === null)
matrix[i][8] = 0;
}
// Around top-right finder
for (let i = 0; i <= 7; i++) {
if (matrix[8][size - 1 - i] === null)
matrix[8][size - 1 - i] = 0;
}
// Around bottom-left finder
for (let i = 0; i <= 7; i++) {
if (matrix[size - 1 - i][8] === null)
matrix[size - 1 - i][8] = 0;
}
// Dark module
matrix[size - 8][8] = 1;
}
function placeAllPatterns(matrix, version) {
const size = matrix.length;
// Finder patterns
placeFinderPattern(matrix, 0, 0);
placeFinderPattern(matrix, 0, size - 7);
placeFinderPattern(matrix, size - 7, 0);
// Alignment patterns (version 2+)
if (version >= 2) {
const positions = ALIGNMENT_POSITIONS[version - 1];
for (const r of positions) {
for (const c of positions) {
// Skip if overlapping with finder patterns
if (r <= 8 && c <= 8)
continue; // top-left
if (r <= 8 && c >= size - 8)
continue; // top-right
if (r >= size - 8 && c <= 8)
continue; // bottom-left
placeAlignmentPattern(matrix, r, c);
}
}
}
// Timing patterns
placeTimingPatterns(matrix);
// Reserve format info areas
reserveFormatInfo(matrix);
}
function placeData(matrix, data) {
const size = matrix.length;
let bitIndex = 0;
const totalBits = data.length * 8;
// Data placement goes right-to-left in 2-column strips, alternating up and down
let col = size - 1;
let goingUp = true;
while (col >= 0) {
// Skip column 6 (timing pattern)
if (col === 6)
col--;
for (let row = 0; row < size; row++) {
const actualRow = goingUp ? size - 1 - row : row;
for (let c = 0; c < 2; c++) {
const actualCol = col - c;
if (actualCol < 0)
continue;
if (matrix[actualRow][actualCol] !== null)
continue;
if (bitIndex < totalBits) {
const byteIndex = Math.floor(bitIndex / 8);
const bitOffset = 7 - (bitIndex % 8);
matrix[actualRow][actualCol] = (data[byteIndex] >> bitOffset) & 1;
bitIndex++;
}
else {
matrix[actualRow][actualCol] = 0;
}
}
}
goingUp = !goingUp;
col -= 2;
}
}
// --- Masking ---
function getMaskFunction(pattern) {
switch (pattern) {
case 0: return (r, c) => (r + c) % 2 === 0;
case 1: return (r) => r % 2 === 0;
case 2: return (_, c) => c % 3 === 0;
case 3: return (r, c) => (r + c) % 3 === 0;
case 4: return (r, c) => (Math.floor(r / 2) + Math.floor(c / 3)) % 2 === 0;
case 5: return (r, c) => ((r * c) % 2 + (r * c) % 3) === 0;
case 6: return (r, c) => ((r * c) % 2 + (r * c) % 3) % 2 === 0;
case 7: return (r, c) => ((r + c) % 2 + (r * c) % 3) % 2 === 0;
default: return (r, c) => (r + c) % 2 === 0;
}
}
function isDataModule(matrix, patternMatrix, row, col) {
return patternMatrix[row][col] === null;
}
function applyMask(matrix, patternMatrix, maskPattern) {
const size = matrix.length;
const masked = matrix.map((row) => [...row]);
const maskFn = getMaskFunction(maskPattern);
for (let r = 0; r < size; r++) {
for (let c = 0; c < size; c++) {
if (isDataModule(matrix, patternMatrix, r, c)) {
if (maskFn(r, c)) {
masked[r][c] = masked[r][c] === 1 ? 0 : 1;
}
}
}
}
return masked;
}
function writeFormatInfo(matrix, ecLevel, maskPattern) {
const size = matrix.length;
const formatBits = FORMAT_INFO_STRINGS[ecLevel][maskPattern];
// Place format info bits
// Horizontal strip near top-left
const positions1 = [
[8, 0], [8, 1], [8, 2], [8, 3], [8, 4], [8, 5], [8, 7], [8, 8],
[7, 8], [5, 8], [4, 8], [3, 8], [2, 8], [1, 8], [0, 8],
];
// Second copy
const positions2 = [];
for (let i = 0; i < 7; i++)
positions2.push([size - 1 - i, 8]);
for (let i = 0; i < 8; i++)
positions2.push([8, size - 8 + i]);
for (let i = 0; i < 15; i++) {
const bit = (formatBits >> (14 - i)) & 1;
const [r1, c1] = positions1[i];
matrix[r1][c1] = bit;
const [r2, c2] = positions2[i];
matrix[r2][c2] = bit;
}
}
// --- Penalty scoring ---
function calculatePenalty(matrix) {
const size = matrix.length;
let penalty = 0;
// Rule 1: Groups of 5+ same-colored modules in a row/column
for (let r = 0; r < size; r++) {
let count = 1;
for (let c = 1; c < size; c++) {
if (matrix[r][c] === matrix[r][c - 1]) {
count++;
if (c === size - 1 && count >= 5)
penalty += count - 2;
}
else {
if (count >= 5)
penalty += count - 2;
count = 1;
}
}
}
for (let c = 0; c < size; c++) {
let count = 1;
for (let r = 1; r < size; r++) {
if (matrix[r][c] === matrix[r - 1][c]) {
count++;
if (r === size - 1 && count >= 5)
penalty += count - 2;
}
else {
if (count >= 5)
penalty += count - 2;
count = 1;
}
}
}
// Rule 2: 2x2 blocks of same color
for (let r = 0; r < size - 1; r++) {
for (let c = 0; c < size - 1; c++) {
const val = matrix[r][c];
if (val === matrix[r][c + 1] && val === matrix[r + 1][c] && val === matrix[r + 1][c + 1]) {
penalty += 3;
}
}
}
// Rule 3: Finder-like patterns
for (let r = 0; r < size; r++) {
for (let c = 0; c < size - 10; c++) {
if (matrix[r][c] === 1 && matrix[r][c + 1] === 0 && matrix[r][c + 2] === 1 &&
matrix[r][c + 3] === 1 && matrix[r][c + 4] === 1 && matrix[r][c + 5] === 0 &&
matrix[r][c + 6] === 1 && matrix[r][c + 7] === 0 && matrix[r][c + 8] === 0 &&
matrix[r][c + 9] === 0 && matrix[r][c + 10] === 0)
penalty += 40;
if (matrix[r][c] === 0 && matrix[r][c + 1] === 0 && matrix[r][c + 2] === 0 &&
matrix[r][c + 3] === 0 && matrix[r][c + 4] === 1 && matrix[r][c + 5] === 0 &&
matrix[r][c + 6] === 1 && matrix[r][c + 7] === 1 && matrix[r][c + 8] === 1 &&
matrix[r][c + 9] === 0 && matrix[r][c + 10] === 1)
penalty += 40;
}
}
for (let c = 0; c < size; c++) {
for (let r = 0; r < size - 10; r++) {
if (matrix[r][c] === 1 && matrix[r + 1][c] === 0 && matrix[r + 2][c] === 1 &&
matrix[r + 3][c] === 1 && matrix[r + 4][c] === 1 && matrix[r + 5][c] === 0 &&
matrix[r + 6][c] === 1 && matrix[r + 7][c] === 0 && matrix[r + 8][c] === 0 &&
matrix[r + 9][c] === 0 && matrix[r + 10][c] === 0)
penalty += 40;
if (matrix[r][c] === 0 && matrix[r + 1][c] === 0 && matrix[r + 2][c] === 0 &&
matrix[r + 3][c] === 0 && matrix[r + 4][c] === 1 && matrix[r + 5][c] === 0 &&
matrix[r + 6][c] === 1 && matrix[r + 7][c] === 1 && matrix[r + 8][c] === 1 &&
matrix[r + 9][c] === 0 && matrix[r + 10][c] === 1)
penalty += 40;
}
}
// Rule 4: Proportion of dark modules
let darkCount = 0;
for (let r = 0; r < size; r++) {
for (let c = 0; c < size; c++) {
if (matrix[r][c] === 1)
darkCount++;
}
}
const percent = (darkCount / (size * size)) * 100;
const prevFive = Math.floor(percent / 5) * 5;
const nextFive = prevFive + 5;
penalty += Math.min(Math.abs(prevFive - 50) / 5, Math.abs(nextFive - 50) / 5) * 10;
return penalty;
}
// --- Main QR Code Generation ---
function generateQRMatrix(text, ecLevelStr = "M") {
const ecLevel = EC_LEVELS[ecLevelStr.toUpperCase()] ?? 1;
const mode = detectMode(text);
const version = selectVersion(text, mode, ecLevel);
const size = getModuleCount(version);
// Encode data
const data = encodeData(text, version, ecLevel);
// Generate error correction and interleave
const codewords = generateECCodewords(data, version, ecLevel);
// Create pattern template (for knowing which modules are data vs pattern)
const patternMatrix = createMatrix(size);
placeAllPatterns(patternMatrix, version);
// Create actual matrix with patterns + data
const baseMatrix = createMatrix(size);
placeAllPatterns(baseMatrix, version);
placeData(baseMatrix, codewords);
// Try all 8 mask patterns, pick best
let bestMask = 0;
let bestPenalty = Infinity;
let bestMatrix = baseMatrix;
for (let mask = 0; mask < 8; mask++) {
const masked = applyMask(baseMatrix, patternMatrix, mask);
writeFormatInfo(masked, ecLevel, mask);
const penalty = calculatePenalty(masked);
if (penalty < bestPenalty) {
bestPenalty = penalty;
bestMask = mask;
bestMatrix = masked;
}
}
// Apply best mask to fresh copy
const finalMatrix = applyMask(baseMatrix, patternMatrix, bestMask);
writeFormatInfo(finalMatrix, ecLevel, bestMask);
return finalMatrix;
}
// --- Output Formats ---
function matrixToSvg(matrix, opts = {}) {
const moduleCount = matrix.length;
const margin = opts.margin ?? 4;
const width = opts.width ?? (moduleCount + margin * 2);
const scale = width / (moduleCount + margin * 2);
const darkColor = opts.darkColor ?? "#000000";
const lightColor = opts.lightColor ?? "#ffffff";
let svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${moduleCount + margin * 2} ${moduleCount + margin * 2}" width="${width}" height="${width}" shape-rendering="crispEdges">`;
svg += `<rect width="100%" height="100%" fill="${lightColor}"/>`;
for (let r = 0; r < moduleCount; r++) {
for (let c = 0; c < moduleCount; c++) {
if (matrix[r][c] === 1) {
svg += `<rect x="${c + margin}" y="${r + margin}" width="1" height="1" fill="${darkColor}"/>`;
}
}
}
svg += "</svg>";
return svg;
}
function matrixToTerminal(matrix) {
const moduleCount = matrix.length;
const margin = 2;
const lines = [];
// Use Unicode block characters: upper half block, lower half block, full block
// Each character row represents 2 module rows
// White on white = space, Black on black = full block
// Black on white = upper half, White on black = lower half
const totalRows = moduleCount + margin * 2;
const totalCols = moduleCount + margin * 2;
const getModule = (r, c) => {
const mr = r - margin;
const mc = c - margin;
if (mr < 0 || mr >= moduleCount || mc < 0 || mc >= moduleCount)
return false;
return matrix[mr][mc] === 1;
};
for (let r = 0; r < totalRows; r += 2) {
let line = "";
for (let c = 0; c < totalCols; c++) {
const top = getModule(r, c);
const bottom = r + 1 < totalRows ? getModule(r + 1, c) : false;
if (top && bottom) {
line += "\u2588"; // Full block
}
else if (top && !bottom) {
line += "\u2580"; // Upper half block
}
else if (!top && bottom) {
line += "\u2584"; // Lower half block
}
else {
line += " ";
}
}
lines.push(line);
}
return lines.join("\n");
}
// --- Minimal PNG encoder (uncompressed, no dependencies) ---
function crc32(data) {
let crc = 0xffffffff;
for (let i = 0; i < data.length; i++) {
crc ^= data[i];
for (let j = 0; j < 8; j++) {
crc = (crc >>> 1) ^ (crc & 1 ? 0xedb88320 : 0);
}
}
return (crc ^ 0xffffffff) >>> 0;
}
function adler32(data) {
let a = 1;
let b = 0;
for (let i = 0; i < data.length; i++) {
a = (a + data[i]) % 65521;
b = (b + a) % 65521;
}
return ((b << 16) | a) >>> 0;
}
function deflateStored(data) {
// Use stored (uncompressed) deflate blocks
// Each block: 1 byte header + 2 bytes len + 2 bytes nlen + data
const maxBlockSize = 65535;
const numBlocks = Math.ceil(data.length / maxBlockSize) || 1;
const output = [];
for (let i = 0; i < numBlocks; i++) {
const start = i * maxBlockSize;
const end = Math.min(start + maxBlockSize, data.length);
const block = data.slice(start, end);
const isLast = i === numBlocks - 1;
output.push(isLast ? 0x01 : 0x00); // BFINAL + BTYPE=00 (stored)
const len = block.length;
output.push(len & 0xff, (len >> 8) & 0xff);
output.push((~len) & 0xff, ((~len) >> 8) & 0xff);
for (let j = 0; j < block.length; j++) {
output.push(block[j]);
}
}
return new Uint8Array(output);
}
function createZlibData(rawData) {
const deflated = deflateStored(rawData);
const adler = adler32(rawData);
const result = new Uint8Array(2 + deflated.length + 4);
// Zlib header: CMF=0x78, FLG=0x01 (no dict, level 0)
result[0] = 0x78;
result[1] = 0x01;
result.set(deflated, 2);
// Adler32 checksum (big-endian)
const off = 2 + deflated.length;
result[off] = (adler >> 24) & 0xff;
result[off + 1] = (adler >> 16) & 0xff;
result[off + 2] = (adler >> 8) & 0xff;
result[off + 3] = adler & 0xff;
return result;
}
function pngChunk(type, data) {
const typeBytes = new TextEncoder().encode(type);
const chunk = new Uint8Array(4 + 4 + data.length + 4);
// Length (big-endian)
const len = data.length;
chunk[0] = (len >> 24) & 0xff;
chunk[1] = (len >> 16) & 0xff;
chunk[2] = (len >> 8) & 0xff;
chunk[3] = len & 0xff;
// Type
chunk.set(typeBytes, 4);
// Data
chunk.set(data, 8);
// CRC over type + data
const crcData = new Uint8Array(4 + data.length);
crcData.set(typeBytes, 0);
crcData.set(data, 4);
const crc = crc32(crcData);
chunk[8 + data.length] = (crc >> 24) & 0xff;
chunk[9 + data.length] = (crc >> 16) & 0xff;
chunk[10 + data.length] = (crc >> 8) & 0xff;
chunk[11 + data.length] = crc & 0xff;
return chunk;
}
function matrixToPng(matrix, opts = {}) {
const moduleCount = matrix.length;
const scale = opts.scale ?? 10;
const margin = opts.margin ?? 4;
const totalModules = moduleCount + margin * 2;
const imgSize = totalModules * scale;
// Build raw image data (1-bit indexed, but we'll use grayscale for simplicity)
// Each row: filter byte (0) + pixel data
const rawData = new Uint8Array((1 + imgSize) * imgSize);
for (let py = 0; py < imgSize; py++) {
const rowOffset = py * (1 + imgSize);
rawData[rowOffset] = 0; // No filter
const moduleRow = Math.floor(py / scale) - margin;
for (let px = 0; px < imgSize; px++) {
const moduleCol = Math.floor(px / scale) - margin;
let isDark = false;
if (moduleRow >= 0 && moduleRow < moduleCount && moduleCol >= 0 && moduleCol < moduleCount) {
isDark = matrix[moduleRow][moduleCol] === 1;
}
rawData[rowOffset + 1 + px] = isDark ? 0 : 255;
}
}
// Create PNG
const PNG_SIGNATURE = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
// IHDR
const ihdr = new Uint8Array(13);
ihdr[0] = (imgSize >> 24) & 0xff;
ihdr[1] = (imgSize >> 16) & 0xff;
ihdr[2] = (imgSize >> 8) & 0xff;
ihdr[3] = imgSize & 0xff;
ihdr[4] = (imgSize >> 24) & 0xff;
ihdr[5] = (imgSize >> 16) & 0xff;
ihdr[6] = (imgSize >> 8) & 0xff;
ihdr[7] = imgSize & 0xff;
ihdr[8] = 8; // Bit depth
ihdr[9] = 0; // Color type: grayscale
ihdr[10] = 0; // Compression
ihdr[11] = 0; // Filter
ihdr[12] = 0; // Interlace
// IDAT
const compressedData = createZlibData(rawData);
// IEND
const iendData = new Uint8Array(0);
const chunks = [
PNG_SIGNATURE,
pngChunk("IHDR", ihdr),
pngChunk("IDAT", compressedData),
pngChunk("IEND", iendData),
];
const totalLen = chunks.reduce((sum, c) => sum + c.length, 0);
const png = new Uint8Array(totalLen);
let offset = 0;
for (const chunk of chunks) {
png.set(chunk, offset);
offset += chunk.length;
}
return png;
}
function matrixToDataUrl(matrix, opts = {}) {
const png = matrixToPng(matrix, opts);
// Manual base64 encoding
const base64 = uint8ArrayToBase64(png);
return `data:image/png;base64,${base64}`;
}
function uint8ArrayToBase64(bytes) {
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
let result = "";
const len = bytes.length;
for (let i = 0; i < len; i += 3) {
const b0 = bytes[i];
const b1 = i + 1 < len ? bytes[i + 1] : 0;
const b2 = i + 2 < len ? bytes[i + 2] : 0;
result += chars[(b0 >> 2) & 0x3f];
result += chars[((b0 << 4) | (b1 >> 4)) & 0x3f];
result += i + 1 < len ? chars[((b1 << 2) | (b2 >> 6)) & 0x3f] : "=";
result += i + 2 < len ? chars[b2 & 0x3f] : "=";
}
return result;
}
function parseQROptions(opts) {
if (typeof opts !== "object" || opts === null)
return {};
return opts;
}
// ============================================================================
// Module Handlers
// ============================================================================
const qrGenerate = (args) => {
const text = String(args[0] ?? "");
const opts = parseQROptions(args[1]);
const ecLevel = opts.errorCorrectionLevel ?? "M";
const matrix = generateQRMatrix(text, ecLevel);
return matrixToDataUrl(matrix, { scale: opts.scale ?? 10, margin: opts.margin ?? 4 });
};
const qrToFile = (args) => {
const text = String(args[0] ?? "");
const filePath = String(args[1] ?? "qr.svg");
const opts = parseQROptions(args[2]);
const ecLevel = opts.errorCorrectionLevel ?? "M";
const matrix = generateQRMatrix(text, ecLevel);
const svgWidth = opts.width ?? (matrix.length + (opts.margin ?? 4) * 2) * (opts.scale ?? 10);
const svg = matrixToSvg(matrix, {
width: svgWidth,
margin: opts.margin ?? 4,
darkColor: opts.color?.dark ?? "#000000",
lightColor: opts.color?.light ?? "#ffffff",
});
writeFileSync(filePath, svg, "utf-8");
return filePath;
};
const qrToSvg = (args) => {
const text = String(args[0] ?? "");
const opts = parseQROptions(args[1]);
const ecLevel = opts.errorCorrectionLevel ?? "M";
const matrix = generateQRMatrix(text, ecLevel);
return matrixToSvg(matrix, {
margin: opts.margin ?? 4,
darkColor: opts.color?.dark ?? "#000000",
lightColor: opts.color?.light ?? "#ffffff",
});
};
const qrToTerminal = (args) => {
const text = String(args[0] ?? "");
const matrix = generateQRMatrix(text, "M");
return matrixToTerminal(matrix);
};
// ============================================================================
// Barcode validation functions (pure JS, unchanged)
// ============================================================================
function ean13Check(digits) {
let sum = 0;
for (let i = 0; i < 12; i++)
sum += Number(digits[i]) * (i % 2 === 0 ? 1 : 3);
return (10 - (sum % 10)) % 10;
}
const ean13Validate = (args) => {
const code = String(args[0] ?? "").replace(/\D/g, "");
if (code.length !== 13)
return false;
return ean13Check(code) === Number(code[12]);
};
const ean13Checksum = (args) => {
const code = String(args[0] ?? "").replace(/\D/g, "");
if (code.length < 12)
return null;
return String(ean13Check(code));
};
const upcValidate = (args) => {
const code = String(args[0] ?? "").replace(/\D/g, "");
if (code.length !== 12)
return false;
return ean13Check("0" + code) === Number(code[11]);
};
const upcChecksum = (args) => {
const code = String(args[0] ?? "").replace(/\D/g, "");
if (code.length < 11)
return null;
return String(ean13Check("0" + code));
};
const isbn10Validate = (args) => {
const isbn = String(args[0] ?? "").replace(/[-\s]/g, "");
if (isbn.length !== 10)
return false;
let sum = 0;
for (let i = 0; i < 10; i++) {
const c = isbn[i];
const val = c === "X" || c === "x" ? 10 : Number(c);
if (isNaN(val))
return false;
sum += val * (10 - i);
}
return sum % 11 === 0;
};
const isbn13Validate = (args) => ean13Validate(args);
const isbn10to13 = (args) => {
const isbn = String(args[0] ?? "").replace(/[-\s]/g, "");
if (isbn.length !== 10)
return null;
const base = "978" + isbn.substring(0, 9);
return base + String(ean13Check(base));
};
const isbn13to10 = (args) => {
const isbn = String(args[0] ?? "").replace(/[-\s]/g, "");
if (isbn.length !== 13 || !isbn.startsWith("978"))
return null;
const base = isbn.substring(3, 12);
let sum = 0;
for (let i = 0; i < 9; i++)
sum += Number(base[i]) * (10 - i);
const check = (11 - (sum % 11)) % 11;
return base + (check === 10 ? "X" : String(check));
};
const luhn = (args) => {
const num = String(args[0] ?? "").replace(/\D/g, "");
let sum = 0;
let alt = false;
for (let i = num.length - 1; i >= 0; i--) {
let n = Number(num[i]);
if (alt) {
n *= 2;
if (n > 9)
n -= 9;
}
sum += n;
alt = !alt;
}
return sum % 10 === 0;
};
const luhnGenerate = (args) => {
const num = String(args[0] ?? "").replace(/\D/g, "");
for (let d = 0; d <= 9; d++) {
if (luhn([num + String(d)]) === true)
return num + String(d);
}
return num + "0";
};
// ============================================================================
// Exports
// ============================================================================
export const BarcodeFunctions = { qrGenerate, qrToFile, qrToSvg, qrToTerminal, ean13Validate, ean13Checksum, upcValidate, upcChecksum, isbn10Validate, isbn13Validate, isbn10to13, isbn13to10, luhn, luhnGenerate };
export const BarcodeFunctionMetadata = {
qrGenerate: { description: "Generate QR code as data URL", parameters: [{ name: "text", dataType: "string", description: "Text to encode", formInputType: "text", required: true }, { name: "options", dataType: "object", description: "{width, margin, scale, errorCorrectionLevel, color}", formInputType: "text", required: false }], returnType: "string", returnDescription: "Data URL (base64 PNG)", example: 'barcode.qrGenerate "https://example.com"' },
qrToFile: { description: "Generate QR code to SVG file", parameters: [{ name: "text", dataType: "string", description: "Text", formInputType: "text", required: true }, { name: "filePath", dataType: "string", description: "Output path", formInputType: "text", required: true }, { name: "options", dataType: "object", description: "QR options", formInputType: "text", required: false }], returnType: "string", returnDescription: "File path", example: 'barcode.qrToFile "https://example.com" "./qr.svg"' },
qrToSvg: { description: "Generate QR code as SVG", parameters: [{ name: "text", dataType: "string", description: "Text", formInputType: "text", required: true }], returnType: "string", returnDescription: "SVG string", example: 'barcode.qrToSvg "hello"' },
qrToTerminal: { description: "Generate QR for terminal", parameters: [{ name: "text", dataType: "string", description: "Text", formInputType: "text", required: true }], returnType: "string", returnDescription: "Terminal string", example: 'barcode.qrToTerminal "hello"' },
ean13Validate: { description: "Validate EAN-13 barcode", parameters: [{ name: "code", dataType: "string", description: "13-digit code", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.ean13Validate "4006381333931"' },
ean13Checksum: { description: "Calculate EAN-13 check digit", parameters: [{ name: "code", dataType: "string", description: "12-digit code", formInputType: "text", required: true }], returnType: "string", returnDescription: "Check digit", example: 'barcode.ean13Checksum "400638133393"' },
upcValidate: { description: "Validate UPC-A barcode", parameters: [{ name: "code", dataType: "string", description: "12-digit code", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.upcValidate "012345678905"' },
upcChecksum: { description: "Calculate UPC-A check digit", parameters: [{ name: "code", dataType: "string", description: "11-digit code", formInputType: "text", required: true }], returnType: "string", returnDescription: "Check digit", example: 'barcode.upcChecksum "01234567890"' },
isbn10Validate: { description: "Validate ISBN-10", parameters: [{ name: "isbn", dataType: "string", description: "ISBN-10", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.isbn10Validate "0-306-40615-2"' },
isbn13Validate: { description: "Validate ISBN-13", parameters: [{ name: "isbn", dataType: "string", description: "ISBN-13", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.isbn13Validate "978-0-306-40615-7"' },
isbn10to13: { description: "Convert ISBN-10 to ISBN-13", parameters: [{ name: "isbn10", dataType: "string", description: "ISBN-10", formInputType: "text", required: true }], returnType: "string", returnDescription: "ISBN-13", example: 'barcode.isbn10to13 "0306406152"' },
isbn13to10: { description: "Convert ISBN-13 to ISBN-10", parameters: [{ name: "isbn13", dataType: "string", description: "ISBN-13", formInputType: "text", required: true }], returnType: "string", returnDescription: "ISBN-10 or null", example: 'barcode.isbn13to10 "9780306406157"' },
luhn: { description: "Validate Luhn checksum", parameters: [{ name: "number", dataType: "string", description: "Number string", formInputType: "text", required: true }], returnType: "boolean", returnDescription: "true if valid", example: 'barcode.luhn "4539578763621486"' },
luhnGenerate: { description: "Generate Luhn check digit", parameters: [{ name: "number", dataType: "string", description: "Number without check digit", formInputType: "text", required: true }], returnType: "string", returnDescription: "Number with check digit", example: 'barcode.luhnGenerate "453957876362148"' },
};
export const BarcodeModuleMetadata = {
description: "QR code generation, EAN/UPC barcode validation, ISBN conversion, and Luhn checksum",
methods: ["qrGenerate", "qrToFile", "qrToSvg", "qrToTerminal", "ean13Validate", "ean13Checksum", "upcValidate", "upcChecksum", "isbn10Validate", "isbn13Validate", "isbn10to13", "isbn13to10", "luhn", "luhnGenerate"],
};
//# sourceMappingURL=barcode.js.map
{"version":3,"file":"barcode.js","sourceRoot":"","sources":["../src/barcode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,+EAA+E;AAC/E,kCAAkC;AAClC,2DAA2D;AAC3D,kDAAkD;AAClD,+EAA+E;AAE/E,6BAA6B;AAE7B,MAAM,SAAS,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAErE,0BAA0B;AAC1B,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,+BAA+B;AAC/B,MAAM,cAAc,GAAG,+CAA+C,CAAC;AAEvE,8EAA8E;AAC9E,MAAM,eAAe,GAA6B;IAChD,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC5B,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IAChC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;CACzB,CAAC;AAaF,0CAA0C;AAC1C,MAAM,eAAe,GAAG;IACtB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;CAC9C,CAAC;AAEF,qGAAqG;AACrG,iCAAiC;AACjC,MAAM,gBAAgB,GAAiB;IACrC,YAAY;IACZ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,YAAY;IACZ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,YAAY;IACZ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,YAAY;IACZ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,YAAY;IACZ,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,YAAY;IACZ,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,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"}
import type { ModuleAdapter } from "@wiredwp/robinpath";
declare const BarcodeModule: ModuleAdapter;
export default BarcodeModule;
export { BarcodeModule };
export { BarcodeFunctions, BarcodeFunctionMetadata, BarcodeModuleMetadata } from "./barcode.js";
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,QAAA,MAAM,aAAa,EAAE,aAA+K,CAAC;AACrM,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
import { BarcodeFunctions, BarcodeFunctionMetadata, BarcodeModuleMetadata } from "./barcode.js";
const BarcodeModule = { name: "barcode", functions: BarcodeFunctions, functionMetadata: BarcodeFunctionMetadata, moduleMetadata: BarcodeModuleMetadata, global: false };
export default BarcodeModule;
export { BarcodeModule };
export { BarcodeFunctions, BarcodeFunctionMetadata, BarcodeModuleMetadata } from "./barcode.js";
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAChG,MAAM,aAAa,GAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAA8B,EAAE,cAAc,EAAE,qBAA4B,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACrM,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}