react-native-epson-escposprinter
Version:
A Turbo Module wrapper for the Epson ePOS Printer SDK.
283 lines (273 loc) • 9.43 kB
JavaScript
"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