npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@trin4ik/gs1parser

v0.1.1

Published

GS1 string parser with separator restoration for barcode scanners

Readme

GS1 Parser

Библиотека TypeScript/JavaScript для парсинга GS1 строк от сканеров штрих-кодов и восстановления правильных разделителей. Обрабатывает случаи, когда сканеры заменяют ASCII 29 (Group Separator) на другие символы.

📖 English version

Возможности

  • ✅ Парсинг GS1 строк с фиксированными и переменными Application Identifiers (AI)
  • ✅ Восстановление правильных разделителей между AI
  • ✅ Обработка артефактов сканера (пробелы, "029", и т.д.)
  • ✅ Поддержка кастомных паттернов замены сканера
  • ✅ Приоритизация AI 91-99 для правильного размещения разделителей (привет, Честный Знак)
  • ✅ Комплексная обработка ошибок
  • ✅ Поддержка TypeScript с полными определениями типов
  • ✅ Обширное покрытие тестами

Установка

npm install @trin4ik/gs1parser

Быстрый старт

import { GS1Parser, parseGS1 } from '@trin4ik/gs1parser';

// Использование класса
const parser = new GS1Parser();
const result = parser.parse('010123456789012891INTERNAL92DATA');

// Или использование удобной функции
const result = parseGS1('010123456789012891INTERNAL92DATA');

console.log(result);
// {
//   success: true,
//   tokens: [
//     { ai: '01', value: '01234567890128', variable: false, startPos: 0, endPos: 16 },
//     { ai: '91', value: 'INTERNAL', variable: true, startPos: 16, endPos: 24 },
//     { ai: '92', value: 'DATA', variable: true, startPos: 24, endPos: 28 }
//   ],
//   cleanedString: '0101234567890128{GS}91INTERNAL{GS}92DATA'
// }

Справочник API

Класс GS1Parser

Конструктор

new GS1Parser(config?: GS1ParserConfig)

Параметры конфигурации:

  • separator?: string - Кастомный разделитель вместо {GS} (по умолчанию: '{GS}')
  • prioritize9199?: boolean - Приоритизировать ли AI 91-99 при поиске границ (по умолчанию: true)
  • scannerReplacements?: Record<string, string> - Кастомные паттерны замены сканера

Методы

parse(input: string): GS1ParseResult

Парсит GS1 строку и возвращает результат.

Параметры:

  • input: string - GS1 строка для парсинга

Возвращает:

{
  success: boolean;
  tokens: GS1Token[];
  cleanedString: string;
  error?: string;
}
addScannerReplacement(pattern: string, replacement: string): void

Добавляет кастомный паттерн замены сканера.

removeScannerReplacement(pattern: string): boolean

Удаляет паттерн замены сканера.

getScannerReplacements(): Map<string, string>

Возвращает все текущие паттерны замены сканера.

Удобная функция

parseGS1(input: string, config?: GS1ParserConfig): GS1ParseResult

Быстрая функция парсинга, которая создает экземпляр парсера и парсит входную строку.

Типы

GS1Token

{
  ai: string;           // Application Identifier (например, "01", "10", "91")
  value: string;        // Значение AI
  variable: boolean;    // Является ли это AI с переменной длиной
  startPos: number;     // Начальная позиция в исходной строке
  endPos: number;       // Конечная позиция в исходной строке
}

GS1ParseResult

{
  success: boolean;     // Успешен ли парсинг
  tokens: GS1Token[];   // Массив распарсенных токенов
  cleanedString: string; // Очищенная строка с правильными разделителями
  error?: string;       // Сообщение об ошибке, если парсинг не удался
}

GS1ParserConfig

{
  separator?: string;   // Кастомный разделитель вместо {GS}
  prioritize9199?: boolean; // Приоритизировать ли AI 91-99
  scannerReplacements?: Record<string, string>; // Кастомные замены сканера
}

Примеры

Базовое использование

import { GS1Parser } from '@trin4ik/gs1parser';

const parser = new GS1Parser();
const result = parser.parse('010123456789012817123456');

if (result.success) {
  console.log('Токены:', result.tokens);
  console.log('Очищенная строка:', result.cleanedString);
} else {
  console.error('Ошибка парсинга:', result.error);
}

Кастомная конфигурация

import { GS1Parser } from '@trin4ik/gs1parser';

const parser = new GS1Parser({
  separator: '|',
  prioritize9199: false,
  scannerReplacements: {
    'XXX': '',
    'YYY': ''
  }
});

const result = parser.parse('0101234567890128XXX91123456');
// Результат: '0101234567890128|91123456'

Обработка артефактов сканера

import { GS1Parser } from '@trin4ik/gs1parser';

const parser = new GS1Parser();

// Обработка общих замен сканера
parser.addScannerReplacement('029', '');  // Некоторые сканеры отправляют "029"
parser.addScannerReplacement(' ', '');    // Некоторые сканеры отправляют пробелы

const result = parser.parse('0101234567890128 029 91123456');
// Результат: '0101234567890128{GS}91123456'

Работа с AI переменной длины

import { GS1Parser } from '@trin4ik/gs1parser';

const parser = new GS1Parser();
const result = parser.parse('011234567890123210BATCH12321SERIAL456');

console.log(result.tokens);
// [
//   { ai: '01', value: '12345678901232', variable: false },
//   { ai: '10', value: 'BATCH123', variable: true },
//   { ai: '21', value: 'SERIAL456', variable: true }
// ]

Поддерживаемые Application Identifiers

Библиотека поддерживает комплексный набор GS1 Application Identifiers, включая:

AI с фиксированной длиной

  • 00 (SSCC) - 18 цифр
  • 01 (GTIN) - 14 цифр
  • 02 (CONTENT) - 14 цифр
  • 11-17 (Даты) - 6 цифр (YYMMDD)
  • 20 (VARIANT) - 2 цифры
  • 310n-369n (Меры) - 6 цифр
  • 410-417 (GLN) - 13 цифр
  • И многие другие... (полный список)

AI с переменной длиной

  • 10 (BATCH/LOT) - до 20 символов
  • 21 (SERIAL) - до 20 символов
  • 91-99 (INTERNAL) - до 90 символов
  • 400-403 (Order/Route) - до 30 символов
  • И многие другие... (полный список)

Обработка ошибок

Парсер предоставляет подробные сообщения об ошибках для распространенных проблем:

  • Неверный тип входных данных
  • Неизвестные Application Identifiers
  • Обрезанные AI с фиксированной длиной
  • Неверные последовательности цифр
  • Некорректно сформированные строки

Разработка

Сборка

npm run build

Тестирование

npm test

Проверка типов

npx tsc --noEmit

Лицензия

MIT

Вклад в проект

Вклады приветствуются! Не стесняйтесь отправлять Pull Request.