UNPKG

unix-print

Version:

Utility for Unix-like operating systems to print PDF files from Node.js and Electron

213 lines (204 loc) 6.54 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); var __require = typeof require !== "undefined" ? require : (x) => { throw new Error('Dynamic require of "' + x + '" is not supported'); }; var __export = (target, all) => { __markAsModule(target); for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __reExport = (target, module2, desc) => { if (module2 && typeof module2 === "object" || typeof module2 === "function") { for (let key of __getOwnPropNames(module2)) if (!__hasOwnProp.call(target, key) && key !== "default") __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); } return target; }; var __toModule = (module2) => { return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); }; var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; // src/index.ts __export(exports, { getDefaultPrinter: () => getDefaultPrinter, getPrinters: () => getPrinters, isPrintComplete: () => parse_response_default, print: () => print }); // src/print/print.ts var import_fs = __toModule(require("fs")); // src/utils/exec-async.ts var import_child_process = __toModule(require("child_process")); "use strict"; function execAsync(cmd) { return new Promise((resolve, reject) => { (0, import_child_process.exec)(cmd, { env: { SOFTWARE: "", LANG: "C" } }, (err, stdout, stderr) => { if (err) { reject(err); } else { resolve({ stdout, stderr }); } }); }); } // src/print/print.ts function print(file, printer, options) { return __async(this, null, function* () { if (!file) throw "No file specified"; if (!import_fs.default.existsSync(file)) throw "No such file"; const args = [`'${file}'`]; if (printer) { args.push("-d", printer); } if (options) { if (!Array.isArray(options)) throw "options should be an array"; options.forEach((arg) => args.push(arg)); } return execAsync(`lp ${args.join(" ")}`); }); } // src/utils/parse-printer-attribute.ts function parsePrinterAttribute(stdout, attribute) { const attributeLine = stdout.split("\n").slice(1).find((line) => line.indexOf(attribute) !== -1); return attributeLine ? attributeLine.split(":")[1].trim() : ""; } // src/get-default-printer/get-default-printer.ts function getDefaultPrinter() { return __async(this, null, function* () { try { const { stdout } = yield execAsync("lpstat -d"); const printer = getPrinterName(stdout); if (!printer) return null; return yield getPrinterData(printer); } catch (error) { throw error; } }); } function getPrinterName(output) { const startIndex = output.indexOf(":"); return startIndex === -1 ? "" : output.substr(startIndex + 1).trim(); } function getPrinterData(printer) { return __async(this, null, function* () { const { stdout } = yield execAsync(`lpstat -lp ${printer}`); return { printer, status: stdout.split(/.*is\s(\w+)\..*/gm)[1], description: parsePrinterAttribute(stdout, "Description"), alerts: parsePrinterAttribute(stdout, "Alerts"), connection: parsePrinterAttribute(stdout, "Connection") }; }); } // src/get-printers/get-printers.ts function getPrinters() { return __async(this, null, function* () { try { const { stdout } = yield execAsync("lpstat -lp"); const isThereAnyPrinter = stdout.match("printer"); if (!isThereAnyPrinter) return []; return stdout.split(/^printer(.)/gm).filter((line) => line.trim().length).map((line) => ({ printer: line.substr(0, line.indexOf(" ")), status: line.split(/.*is\s(\w+)\..*/gm)[1], description: parsePrinterAttribute(line, "Description"), alerts: parsePrinterAttribute(line, "Alerts"), connection: parsePrinterAttribute(line, "Connection") })); } catch (error) { throw error; } }); } // src/utils/parse-response.ts function isPrintComplete(printResponse) { return __async(this, null, function* () { const requestId = getRequestId(printResponse); if (!requestId) { return false; } const args = new Array(); const { printer } = splitRequestId(requestId); if (printer) { args.push("-o", printer); } const { stdout } = yield execAsync(`lpstat ${args.join(" ")}`); if (!stdout) { return true; } try { const lines = stdout.split("\n"); for (let i = 0; i < lines.length; i++) { if (lines[i].includes(requestId)) { return false; } } return true; } catch (err) { return true; } }); } function getRequestId(printResponse) { const res = printResponse.stdout; if (res) { try { const requestId = res.split(" ")[3]; return printerNameRegex.test(requestId) ? requestId : null; } catch (err) { return null; } } return null; } function splitRequestId(requestId) { const splitByHyphen = requestId.split("-"); const jobId = splitByHyphen[splitByHyphen.length - 1]; const printer = requestId.slice(0, requestId.length - (jobId.length + 1)); return { jobId, printer }; } var printerNameRegex = /^[\w\.\/_@.\/@#$&+-]+-[0-9]+$/; var parse_response_default = isPrintComplete; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { getDefaultPrinter, getPrinters, isPrintComplete, print });