UNPKG

labelmake

Version:

PDF generation library of declarative style programing.

161 lines 8.39 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createBarCode = exports.validateBarcodeInput = void 0; var node_bwipjs_1 = __importDefault(require("bwip-js/dist/node-bwipjs")); var bwip_js_1 = __importDefault(require("bwip-js/dist/bwip-js")); var util_1 = require("./util"); // GTIN-13, GTIN-8, GTIN-12, GTIN-14 var validateCheckDigit = function (input, checkDigitPos) { var passCheckDigit = true; if (input.length === checkDigitPos) { var ds = input.slice(0, -1).replace(/[^0-9]/g, ""); var sum = 0; var odd = 1; for (var i = ds.length - 1; i > -1; i -= 1) { sum += Number(ds[i]) * (odd ? 3 : 1); odd ^= 1; if (sum > 0xffffffffffff) { // ~2^48 at max sum %= 10; } } passCheckDigit = String(10 - (sum % 10)).slice(-1) === input.slice(-1); } return passCheckDigit; }; var validateBarcodeInput = function (type, input) { if (!input) return false; if (type === "qrcode") { // 500文字以下 return input.length < 500; } else if (type === "japanpost") { // 郵便番号は数字(0-9)のみ。住所表示番号は英数字(0-9,A-Z)とハイフン(-)が使用可能です。 var regexp = /^(\d{7})(\d|[A-Z]|-)+$/; return regexp.test(input); } else if (type === "ean13") { // 有効文字は数値(0-9)のみ。チェックデジットを含まない12桁orチェックデジットを含む13桁。 var regexp = /^\d{12}$|^\d{13}$/; return regexp.test(input) && validateCheckDigit(input, 13); } else if (type === "ean8") { // 有効文字は数値(0-9)のみ。チェックデジットを含まない7桁orチェックデジットを含む8桁。 var regexp = /^\d{7}$|^\d{8}$/; return regexp.test(input) && validateCheckDigit(input, 8); } else if (type === "code39") { // 有効文字は数字(0-9)。アルファベット大文字(A-Z)、記号(-.$/+%)、半角スペース。 var regexp = /^(\d|[A-Z]|\-|\.|\$|\/|\+|\%|\s)+$/; return regexp.test(input); } else if (type === "code128") { // 有効文字は漢字、ひらがな、カタカナ以外。 // https://qiita.com/graminume/items/2ac8dd9c32277fa9da64 return input.match(/([\u30a0-\u30ff\u3040-\u309f\u3005-\u3006\u30e0-\u9fcf]|[A-Za-z0-9!"#$%&'()*+,-./:;<=>?@[\]^_`{|}〜])+/) ? false : true; } else if (type === "nw7") { // 有効文字はNW-7は数字(0-9)と記号(-.$:/+)。 // スタートコード/ストップコードとして、コードの始まりと終わりはアルファベット(A-D)のいずれかを使用してください。 var regexp = /^[A-Da-d]([0-9\-\.\$\:\/\+])+[A-Da-d]$/; return regexp.test(input); } else if (type === "itf14") { // 有効文字は数値(0-9)のみ。 チェックデジットを含まない13桁orチェックデジットを含む14桁。 var regexp = /^\d{13}$|^\d{14}$/; return regexp.test(input) && validateCheckDigit(input, 14); } else if (type === "upca") { // 有効文字は数値(0-9)のみ。 チェックデジットを含まない11桁orチェックデジットを含む12桁。 var regexp = /^\d{11}$|^\d{12}$/; return regexp.test(input) && validateCheckDigit(input, 12); } else if (type === "upce") { // 有効文字は数値(0-9)のみ。 1桁目に指定できる数字(ナンバーシステムキャラクタ)は0のみ。 // チェックデジットを含まない7桁orチェックデジットを含む8桁。 var regexp = /^0(\d{6}$|\d{7}$)/; return regexp.test(input) && validateCheckDigit(input, 8); } return false; }; exports.validateBarcodeInput = validateBarcodeInput; var createBarCode = function (_a) { var type = _a.type, input = _a.input, width = _a.width, height = _a.height, backgroundColor = _a.backgroundColor; return __awaiter(void 0, void 0, void 0, function () { var bwipjsArg, res, canvas, dataUrl; return __generator(this, function (_b) { switch (_b.label) { case 0: if (!(input && (0, exports.validateBarcodeInput)(type, input))) return [3 /*break*/, 4]; bwipjsArg = { bcid: type === "nw7" ? "rationalizedCodabar" : type, text: input, scale: 5, width: width, height: height, includetext: true, }; if (backgroundColor) { bwipjsArg.backgroundcolor = backgroundColor; } res = void 0; if (!(typeof window !== "undefined")) return [3 /*break*/, 1]; canvas = document.createElement("canvas"); bwip_js_1.default.toCanvas(canvas, bwipjsArg); dataUrl = canvas.toDataURL("image/png"); res = (0, util_1.b64toUint8Array)(dataUrl).buffer; return [3 /*break*/, 3]; case 1: return [4 /*yield*/, node_bwipjs_1.default.toBuffer(bwipjsArg)]; case 2: res = _b.sent(); _b.label = 3; case 3: return [2 /*return*/, res]; case 4: return [2 /*return*/, null]; } }); }); }; exports.createBarCode = createBarCode; //# sourceMappingURL=barcode.js.map