@hopla/labels
v1.0.0
Published
Shared label-PDF core for PhoneTest + SheetCompare — CODE128 barcode + pdf-lib product-label generator (Workers-safe, bring-your-own-font).
Maintainers
Readme
@hopla/labels
Shared label-PDF core for PhoneTest and SheetCompare — a CODE128 barcode
encoder + a pdf-lib product-label generator. Pure and
Cloudflare-Workers-safe (no fs, no Buffer, no node:*, no DOM), so the
same code runs in the Electron main process and inside a CF Worker.
Install
npm i @hopla/labelsPeer dependencies
pdf-lib and @pdf-lib/fontkit are peer dependencies — install them in the
consuming project (both apps already pin these):
npm i pdf-lib@^1.17.1 @pdf-lib/fontkit@^1.1.1Cloudflare Workers
Workers consumers must enable nodejs_compat (fontkit's font registration needs
it):
// wrangler.jsonc
{ "compatibility_flags": ["nodejs_compat"] }Usage
import { generateLabelsPdf, type ProductLabelData } from '@hopla/labels';
const labels: ProductLabelData[] = [/* one per device */];
// BRING YOUR OWN FONT — see "Fonts" below.
const pdfBytes: Uint8Array = await generateLabelsPdf(labels, {
fontBytes: mySfProTextRegularTtf, // Uint8Array
});generateLabelsPdf returns a Uint8Array (drop it straight into
new Response(pdfBytes) in a Worker, or write it to disk in Electron). Each
ProductLabelData renders one 50.8mm × 101.6mm (144pt × 288pt) page.
Barcode primitives
import { drawBarcode, encode, BAR_WIDTH_REDUCTION } from '@hopla/labels';drawBarcode renders a CODE128 barcode onto a pdf-lib page. Numeric payloads
(IMEIs) use CODE128C (denser, scans reliably on 203 dpi thermal printers);
non-numeric payloads fall back to CODE128B. A small Bar Width Reduction
(BAR_WIDTH_REDUCTION, in pt) compensates thermal ink spread.
Fonts (bring-your-own)
The package does not bundle a body font. The label's legacy look uses Apple's
SF Pro Text, which is Apple-licensed — redistributing the font file as a
standalone npm artifact is restricted. So the font is injected: each app
ships its own copy and passes the TrueType bytes via opts.fontBytes. The logo
and status icons (own art) are bundled.
License
MIT © Phones.Trade
