UNPKG

@ombori/epc-ean

Version:

EPC Tag Data Standard encoding and decoding library, written in javascript

139 lines (138 loc) 5.22 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Cpi96 = void 0; const utils_1 = __importDefault(require("../utils/utils")); const epc_1 = require("../epc"); const type_1 = require("../type"); const partition_1 = require("../partition"); class Cpi96 extends epc_1.Epc { constructor(hexEpc) { super(Cpi96.TOTAL_BITS); if (hexEpc) { super.setFromHexString(hexEpc); } else { super.set(Cpi96.EPC_HEADER, epc_1.Epc.EPC_HEADER_OFFSET, epc_1.Epc.EPC_HEADER_END); } } clone() { return new Cpi96().setFromBitArray(this); } getType() { return type_1.Type.GPI96; } fromTagURI(uri) { const value = uri.split(':'); try { if (value[3] === this.TAG_URI) { const data = value[4].split('.'); const result = new Cpi96(); result.setFilter(parseInt(data[0])); result.setPartition(12 - data[1].length); result.setCompanyPrefix(parseInt(data[1])); result.setPartReference(parseInt(data[2])); result.setSerial(parseInt(data[3])); return result; } } catch (e) { // console.log(e) } throw new Error(`${uri} is not a known EPC tag URI scheme`); } toTagURI() { // F.C.P.S (Filter, Company, Part, Serial) let partition = Cpi96.PARTITIONS[this.getPartition()]; return Cpi96.TAG_URI_TEMPLATE(this.getFilter(), this.getSegmentString(partition.a), this.getSegment(partition.b), this.getSerial()); } toIdURI() { // C.P.S (Company, Part, Serial) let partition = Cpi96.PARTITIONS[this.getPartition()]; return Cpi96.PID_URI_TEMPLATE(this.getSegmentString(partition.a), this.getSegment(partition.b), this.getSerial()); } toBarcode() { return this.getCpi(); } getTotalBits() { return Cpi96.TOTAL_BITS; } getHeader() { return Cpi96.EPC_HEADER; } getPartition() { return super.get(Cpi96.PARTITION_OFFSET, Cpi96.PARTITION_END); } setPartition(value) { if (value < 0 || value >= Cpi96.PARTITIONS.length) { throw new Error(`Value '${value}' out of range (min: 0, max: ${Cpi96.PARTITIONS.length - 1})`); } super.set(value, Cpi96.PARTITION_OFFSET, Cpi96.PARTITION_END); return this; } getCpi() { let partition = Cpi96.PARTITIONS[this.getPartition()]; let companyPrefix = super.getSegmentString(partition.a); let asset = super.getSegment(partition.b); return companyPrefix + asset; } setCpi(cpi) { // ean let partition = Cpi96.PARTITIONS[this.getPartition()]; super.setSegment(cpi.substring(0, partition.a.digits), partition.a); let tmp = partition.a.digits + partition.b.digits; super.setSegment(cpi.substring(partition.a.digits, tmp), partition.b); return this; } getCompanyPrefix() { return super.getSegment(Cpi96.PARTITIONS[this.getPartition()].a); } setCompanyPrefix(value) { super.setSegment(value, Cpi96.PARTITIONS[this.getPartition()].a); return this; } getPartReference() { return super.getSegment(Cpi96.PARTITIONS[this.getPartition()].b); } setPartReference(value) { super.setSegment(value, Cpi96.PARTITIONS[this.getPartition()].b); return this; } getSerial() { return super.get(Cpi96.SERIAL_OFFSET, Cpi96.SERIAL_END); } setSerial(value) { if (value > Cpi96.MAX_SERIAL) throw new Error(`Value '${value}' out of range (min: 0, max: ${Cpi96.MAX_SERIAL})`); super.set(value, Cpi96.SERIAL_OFFSET, Cpi96.SERIAL_END); return this; } } exports.Cpi96 = Cpi96; Cpi96.EPC_HEADER = 0x3c; Cpi96.TOTAL_BITS = 96; Cpi96.PARTITION_OFFSET = 11; Cpi96.PARTITION_END = 14; Cpi96.SERIAL_OFFSET = 65; Cpi96.SERIAL_END = Cpi96.TOTAL_BITS; Cpi96.SERIAL_BITS = 31; Cpi96.MAX_SERIAL = utils_1.default.getMaxValue(Cpi96.SERIAL_BITS); Cpi96.TAG_URI = 'cpi-96'; Cpi96.TAG_URI_TEMPLATE = (filter, company, part, serial) => { return `urn:epc:tag:${this.TAG_URI}:${filter}.${company}.${part}.${serial}`; }; // F.C.P.S (Filter, Company, Part, Serial) Cpi96.PID_URI_TEMPLATE = (company, part, serial) => { return `urn:epc:id:cpi:${company}.${part}.${serial}`; }; // C.P.S (Company, Part, Serial) // Partition table columns: Company prefix, Item Reference Cpi96.PARTITIONS = [ new partition_1.Partition(Cpi96.PARTITION_END, 40, 12, 11, 3), new partition_1.Partition(Cpi96.PARTITION_END, 37, 11, 14, 4), new partition_1.Partition(Cpi96.PARTITION_END, 34, 10, 17, 5), new partition_1.Partition(Cpi96.PARTITION_END, 30, 9, 21, 6), new partition_1.Partition(Cpi96.PARTITION_END, 27, 8, 24, 7), new partition_1.Partition(Cpi96.PARTITION_END, 24, 7, 27, 8), new partition_1.Partition(Cpi96.PARTITION_END, 20, 6, 31, 9), ]; // 6 20 06 31 9