UNPKG

react-native-epson-escposprinter

Version:
283 lines (273 loc) 9.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PrinterDiscovery = exports.FilterPortType = exports.FilterModel = exports.FilterEpson = exports.FilterDeviceType = void 0; exports.discoverPrinters = discoverPrinters; exports.getPrinterSeriesFromDeviceName = void 0; var _eventemitter = _interopRequireDefault(require("eventemitter3")); var _asyncIterator = require("./asyncIterator.js"); var _index = require("./errors/index.js"); var _NativeInterface = require("./NativeInterface.js"); var _PrinterConst = require("./PrinterConst.js"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } let FilterDeviceType = exports.FilterDeviceType = /*#__PURE__*/function (FilterDeviceType) { FilterDeviceType[FilterDeviceType["TYPE_ALL"] = 0] = "TYPE_ALL"; FilterDeviceType[FilterDeviceType["TYPE_PRINTER"] = 1] = "TYPE_PRINTER"; FilterDeviceType[FilterDeviceType["TYPE_HYBRID_PRINTER"] = 2] = "TYPE_HYBRID_PRINTER"; FilterDeviceType[FilterDeviceType["TYPE_DISPLAY"] = 3] = "TYPE_DISPLAY"; FilterDeviceType[FilterDeviceType["TYPE_KEYBOARD"] = 4] = "TYPE_KEYBOARD"; FilterDeviceType[FilterDeviceType["TYPE_SCANNER"] = 5] = "TYPE_SCANNER"; FilterDeviceType[FilterDeviceType["TYPE_SERIAL"] = 6] = "TYPE_SERIAL"; FilterDeviceType[FilterDeviceType["TYPE_CCHANGER"] = 7] = "TYPE_CCHANGER"; FilterDeviceType[FilterDeviceType["TYPE_POS_KEYBOARD"] = 8] = "TYPE_POS_KEYBOARD"; FilterDeviceType[FilterDeviceType["TYPE_CAT"] = 9] = "TYPE_CAT"; FilterDeviceType[FilterDeviceType["TYPE_MSR"] = 10] = "TYPE_MSR"; FilterDeviceType[FilterDeviceType["TYPE_OTHER_PERIPHERAL"] = 11] = "TYPE_OTHER_PERIPHERAL"; FilterDeviceType[FilterDeviceType["TYPE_GFE"] = 12] = "TYPE_GFE"; return FilterDeviceType; }({}); let FilterPortType = exports.FilterPortType = /*#__PURE__*/function (FilterPortType) { FilterPortType[FilterPortType["PORTTYPE_ALL"] = 0] = "PORTTYPE_ALL"; FilterPortType[FilterPortType["PORTTYPE_TCP"] = 1] = "PORTTYPE_TCP"; FilterPortType[FilterPortType["PORTTYPE_BLUETOOTH"] = 2] = "PORTTYPE_BLUETOOTH"; FilterPortType[FilterPortType["PORTTYPE_USB"] = 3] = "PORTTYPE_USB"; return FilterPortType; }({}); let FilterModel = exports.FilterModel = /*#__PURE__*/function (FilterModel) { FilterModel[FilterModel["MODEL_ALL"] = 0] = "MODEL_ALL"; return FilterModel; }({}); let FilterEpson = exports.FilterEpson = /*#__PURE__*/function (FilterEpson) { FilterEpson[FilterEpson["FILTER_NONE"] = 1] = "FILTER_NONE"; FilterEpson[FilterEpson["FILTER_NAME"] = 0] = "FILTER_NAME"; return FilterEpson; }({}); const getPrinterSeriesFromDeviceName = name => { switch (name) { case "TM-H6000IV": case "TM-H6000V": case "TM-H6000IV-DT": return _PrinterConst.PrinterSeries.TM_H6000; case "TM-L90": return _PrinterConst.PrinterSeries.TM_L90; case "TM-L90 Liner-Free Label Printer Model": return _PrinterConst.PrinterSeries.TM_L90LFC; case "TM-L100": return _PrinterConst.PrinterSeries.TM_L100; case "TM-m10": return _PrinterConst.PrinterSeries.TM_M10; case "TM-m30": return _PrinterConst.PrinterSeries.TM_M30; case "TM-m30II": case "TM-m30II-H": case "TM-m30II-NT": case "TM-m30II-S": case "TM-m30II-SL": return _PrinterConst.PrinterSeries.TM_M30II; case "TM-m30III": case "TM-m30III-H": return _PrinterConst.PrinterSeries.TM_M30III; case "TM-m50": return _PrinterConst.PrinterSeries.TM_M50; case "TM-m50II": case "TM-m50II-H": return _PrinterConst.PrinterSeries.TM_M50II; case "TM-M55": return _PrinterConst.PrinterSeries.TM_M55; case "TM-P20": return _PrinterConst.PrinterSeries.TM_P20; case "TM-P20II": return _PrinterConst.PrinterSeries.TM_P20II; case "TM-P60": case "TM-P60 (Receipt/Peeler)": return _PrinterConst.PrinterSeries.TM_P60; case "TM-P60II": case "TM-P60II (Receipt/Peeler)": return _PrinterConst.PrinterSeries.TM_P60II; case "TM-P80": return _PrinterConst.PrinterSeries.TM_P80; case "TM-P80II": return _PrinterConst.PrinterSeries.TM_P80II; case "TM-T20": case "TM-T20II": case "TM-T20II-i": case "TM-T20III": case "TM-T20IIIL": case "TM-T20IV-L": case "TM-T20X": case "TM-T20X-II": return _PrinterConst.PrinterSeries.TM_T20; case "TM-T60": return _PrinterConst.PrinterSeries.TM_T60; case "TM-T70": case "TM-T70-i": case "TM-T70II": case "TM-T70II-DT": case "TM-T70II-DT2": return _PrinterConst.PrinterSeries.TM_T70; case "TM-T81II": case "TM-T81III": return _PrinterConst.PrinterSeries.TM_T81; case "TM-T82": case "TM-T82II": case "TM-T82II-i": case "TM-T82III": case "TM-T82IIIL": case "TM-T82IV-L": case "TM-T82X": case "TM-T82X-II": return _PrinterConst.PrinterSeries.TM_T82; case "TM-T83II": case "TM-T83II-i": return _PrinterConst.PrinterSeries.TM_T83; case "TM-T83III": case "TM-T83IV": return _PrinterConst.PrinterSeries.TM_T83III; case "TM-T88IV": case "TM-T88V": case "TM-T88VI": case "TM-T88V-i": case "TM-T88VI-iHUB": case "TM-T88V-DT": case "TM-T88VI-DT2": return _PrinterConst.PrinterSeries.TM_T88; case "TM-T88VII": return _PrinterConst.PrinterSeries.TM_T88VII; case "TM-T90": return _PrinterConst.PrinterSeries.TM_T90; case "TM-T90KP": return _PrinterConst.PrinterSeries.TM_T90KP; case "TM-T100": return _PrinterConst.PrinterSeries.TM_T100; case "TM-U220": case "TM-U220-i": return _PrinterConst.PrinterSeries.TM_U220; case "TM-U220II": case "TM-U220IIB-i": return _PrinterConst.PrinterSeries.TM_U220II; case "TM-U330": return _PrinterConst.PrinterSeries.TM_U330; case "TS-100": return _PrinterConst.PrinterSeries.TS_100; case "EU-m30": return _PrinterConst.PrinterSeries.EU_M30; default: return undefined; } }; exports.getPrinterSeriesFromDeviceName = getPrinterSeriesFromDeviceName; const discoveryErrors = { [_index.ErrorCode.ERR_ILLEGAL]: `- Tried to start search when search had been already done. - Bluetooth is OFF. - There is no permission for the position information.` }; /** * A cache of discovered devices. * * Useful when multiple subscribers are active at the same time, we can only * have one active discovery service so we cache and share the result across * all subscribers. */ const cache = new Map(); /** * References to active subscribers for sharing the cache. */ const iterators = new Set(); /** * Reference to active event emitters for sharing the cache. */ const emitters = new Set(); /** * Epson's Discovery service requires a manual cooldown after stopping. */ let cooldown = null; let listener = null; const discoveryStart = async (filter = {}, options) => { if (iterators.size > 0 || emitters.size > 0) { return; } listener?.remove(); // HMR and React dev mode may cause multiple subscriptions listener = _NativeInterface.events.addListener("deviceFound", info => { for (const it of iterators) { it.push(info); } for (const it of emitters) { it.emit("deviceFound", info); } // [ ] Handles dedupe on network identity conflicts cache.set(info.target, info); }); // Let previous stop action to finish before starting a new one. await cooldown; if (options?.verbose) { console.debug(`Starting discovery service...`); } try { await _NativeInterface.NativeInterface.discoveryStart(filter); } catch (error) { throw (0, _index.getEpsonError)(error, discoveryErrors) || error; } }; const discoveryStop = async options => { if (iterators.size > 0 || emitters.size > 0) { return; } if (!listener) { return; } listener.remove(); listener = null; if (options?.verbose) { console.debug(`Stopping discovery service...`); } cooldown = _NativeInterface.NativeInterface.discoveryStop().then(() => new Promise(r => setTimeout(r, 100)), error => { throw (0, _index.getEpsonError)(error) || error; }).finally(() => { cache.clear(); cooldown = null; }); return cooldown; }; /** * Event emitter implementation of the printer discovery service. */ class PrinterDiscovery extends _eventemitter.default { #startPromise = null; constructor(filter, options) { super(); this.options = options; this.#startPromise = discoveryStart(filter, options); emitters.add(this); } async dispose() { await this.#startPromise; emitters.delete(this); await discoveryStop(this.options); } [Symbol.asyncDispose]() { return this.dispose(); } } /** * Asynchronous iterator for discovered printers. */ exports.PrinterDiscovery = PrinterDiscovery; async function discoverPrinters(filter, options) { if (Symbol.asyncIterator === undefined) { throw new Error(`AsyncIterator is not supported in your runtime, try PrinterDiscovery instead.`); } const iterator = (0, _asyncIterator.asyncIterableIteratorWithResolvers)({ dispose: async () => { iterators.delete(iterator); await discoveryStop(options); } }); await discoveryStart(filter, options); for (const value of cache.values()) { iterator.push(value); } iterators.add(iterator); return iterator; } //# sourceMappingURL=Discovery.js.map