JSPM

@christianpasinrey/vue-code-parser

1.0.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q25871F
  • License MIT

Composable para Vue 3 que permite detectar, validar y parsear códigos de barras EAN, DataMatrix y QR (GS1).

Package Exports

  • @christianpasinrey/vue-code-parser
  • @christianpasinrey/vue-code-parser/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@christianpasinrey/vue-code-parser) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

🎯 vue-code-parser

🧩 Composable para Vue 3 para detectar, validar y parsear códigos de barras (EAN-13, EAN-14), QR y DataMatrix (GS1).

Este paquete te permite trabajar con inputs escaneados o digitados que contienen información estructurada como GTIN, LOTE, FECHA, SERIAL, etc., incluyendo parsing avanzado de códigos GS1.


🚀 Instalación

npm install vue-code-parser

🧠 ¿Qué hace?

Detecta el tipo de código escaneado (EAN, QR, DataMatrix) y lo convierte en un objeto legible:

  • ✅ Validación EAN-13 y EAN-14 con cálculo de dígito de control
  • ✅ Parsing de DataMatrix (con soporte GS1 y AI como 01, 10, 17, etc.)
  • ✅ Detección de QR y extracción del payload
  • ✅ Buffer con debounce para evitar repeticiones en escáneres
  • ✅ Manejo de caracteres invisibles (como charCode === 29)

🧰 Uso básico

import { useCodeParser } from "vue-code-parser";

const {
  handleInput,
  parsedResult,
  isParsedResultArray,
  detectType,
  isQr,
  checkInvisibleChars
} = useCodeParser();

// En algún método:
handleInput(']d20112345678901234101725010110ABC123+')
  .then(() => {
    console.log(parsedResult.value);
  });

🧾 Resultado esperado (DataMatrix GS1)

[
  { code: "01", value: "12345678901234", name: "Global Trade Item Number", description: "GTIN" },
  { code: "17", value: "250101", name: "Expiration date (YYMMDD)", description: "FECHA DE CACUCIDAD" },
  { code: "10", value: "ABC123", name: "Batch or lot number", description: "LOTE" }
]

📦 API completa

Propiedad Tipo Descripción
handleInput(code) Promise<unknown> Procesa el código escaneado con debounce.
parsedResult Ref<string \| CodePart[] \| null> Resultado parseado del código (string plano o array de partes).
isParsedResultArray ComputedRef<boolean> Indica si el resultado es una lista de partes (DataMatrix).
detectType(code) string \| undefined Devuelve el tipo de código detectado: EAN-13, EAN-14, DataMatrix o QR.
isQr Ref<boolean> Indica si el último código detectado es QR.
checkInvisibleChars(event) string Devuelve "*" si el charCode del evento es 29.

🧩 Tipos

interface CodePart {
  code: string;
  value: string;
  name: string;
  description: string;
}

🏷️ Códigos soportados (GS1 AIs)

Código Descripción Longitud fija
01 GTIN ✅ 16
10 Lote ❌ variable
11 Fecha de producción (YYMMDD) ✅ 8
17 Fecha de caducidad (YYMMDD) ✅ 8
21 Número de serie ❌ variable
712 Código nacional (NPC) ❌ variable

🧪 Ejemplo de integración con input de escáner

<template>
  <input
    @keypress="(e) => inputBuffer += checkInvisibleChars(e)"
    @keydown.enter.prevent="handleInput(inputBuffer)"
    v-model="inputBuffer"
  />
</template>

<script setup lang="ts">
import { ref } from "vue";
import { useCodeParser } from "vue-code-parser";

const inputBuffer = ref("");
const { handleInput, checkInvisibleChars, parsedResult } = useCodeParser();
</script>

📃 Licencia

MIT © Christian


🤝 Contribuir

¡Pull requests y feedback son bienvenidos! Si encuentras un código no compatible, puedes abrir un issue o PR con los nuevos GS1 AI.