UNPKG

@point-of-sale/webserial-receipt-printer

Version:

This is an library that allows you to print to a receipt printer using WebSerial. This can either be a printer connected using a serial port, or a printer connected in any other way where the driver sets up a virtual serial port for compatiblitity reasons

3 lines (2 loc) 2.13 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).WebSerialReceiptPrinter=e()}(this,(function(){"use strict";class t{constructor(t){this._events={}}on(t,e){this._events[t]=this._events[t]||[],this._events[t].push(e)}emit(t,...e){let i=this._events[t];i&&i.forEach((t=>{setTimeout((()=>t(...e)),0)}))}}class e{}return class extends e{#t;#e={};#i=null;#s=null;#n=[];#r={running:!1,closing:!1};constructor(e){super(),this.#t=new t,this.#e=Object.assign({baudRate:9600,bufferSize:255,dataBits:8,flowControl:"none",parity:"none",stopBits:1},e),navigator.serial.addEventListener("disconnect",(t=>{this.#i==t.target&&this.#t.emit("disconnected")}))}async connect(){try{let t=await navigator.serial.requestPort();t&&await this.#o(t)}catch(t){console.log("Could not connect! "+t)}}async reconnect(t){if(!t.vendorId||!t.productId)return;let e=(await navigator.serial.getPorts()).filter((e=>{let i=e.getInfo();return i.usbVendorId==t.vendorId&&i.usbProductId==t.productId}));1==e.length&&await this.#o(e[0])}async#o(t){this.#i=t,this.#r.closing=!1,await this.#i.open(this.#e);let e=this.#i.getInfo();this.#t.emit("connected",{type:"serial",vendorId:e.usbVendorId||null,productId:e.usbProductId||null,language:null,codepageMapping:null})}async disconnect(){this.#i&&(this.#r.closing=!0,this.#s.cancel(),await this.#s.closed,await this.#i.close(),this.#i=null,this.#t.emit("disconnected"))}async listen(){return this.#a(),!0}async#a(){for(;this.#i.readable&&!1===this.#r.closing;){this.#s=this.#i.readable.getReader();try{for(;;){const{value:t,done:e}=await this.#s.read();if(e)break;t&&this.#t.emit("data",t)}}catch(t){}finally{this.#s.releaseLock()}}}async print(t){this.#n.push(t),this.run()}async run(){if(this.#r.closing)return;if(this.#r.running)return;this.#r.running=!0;const t=this.#i.writable.getWriter();let e;for(;e=this.#n.shift();)await t.write(e);t.releaseLock(),this.#r.running=!1}addEventListener(t,e){this.#t.on(t,e)}}})); //# sourceMappingURL=webserial-receipt-printer.umd.js.map