UNPKG

extra-asciinema

Version:

asciinema is a terminal screen recorder.

164 lines (158 loc) 5.18 kB
'use strict'; var path = require('path'); var cp = require('child_process'); var fs = require('fs'); var os = require('os'); function _interopNamespaceDefault(e) { var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return Object.freeze(n); } var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path); var cp__namespace = /*#__PURE__*/_interopNamespaceDefault(cp); var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs); var os__namespace = /*#__PURE__*/_interopNamespaceDefault(os); function escapePath(p) { return p.replace(/[`$&{}[;|]/g, ""); } function recCmd(f, o = null) { var o = o || {}; if (o.input) { var pth = escapePath(o.input); var dir = path__namespace.dirname(pth); var fil = path__namespace.basename(pth); o.command = `cd "${dir}" && cat "${fil}" | node -i`; } o.overwrite = true; o.yes = true; var args = ["rec"]; if (f) args.push(f); if (o.stdin) args.push("--stdin"); if (o.append) args.push("--append"); if (o.raw) args.push("--raw"); if (o.overwrite) args.push("--overwrite"); if (o.command) args.push("--command", o.command); if (o.env) args.push("-env", o.env); if (o.title) args.push("--title", o.title); if (o.idleTimeLimit) args.push("--idle-time-limit", "" + o.idleTimeLimit); if (o.yes) args.push("--yes"); if (o.quiet) args.push("--quiet"); return args; } function rec(f = null, o = null, fn = null) { var f = f || path__namespace.join(fs__namespace.mkdtempSync(path__namespace.join(os__namespace.tmpdir(), "asciinema-")), "0.cast"); var p = new Promise((fres, frej) => { cp__namespace.execFile("asciinema", recCmd(f, o), { encoding: "utf8" }, (err) => { if (err) return frej(err); fres(f); }); }); return fn ? p.then(a => fn(null, a), fn) : p; } function recSync(f, o = null) { var f = f || path__namespace.join(fs__namespace.mkdtempSync(path__namespace.join(os__namespace.tmpdir(), "asciinema-")), "0.cast"); cp__namespace.execFileSync("asciinema", recCmd(f, o), { encoding: "utf8" }); return f; } function cat(f, fn = null) { var p = new Promise((fres, frej) => { cp__namespace.execFile("asciinema", ["cat", f], { encoding: "utf8" }, (err, stdout) => { if (err) return frej(err); fres(stdout); }); }); return fn ? p.then(a => fn(null, a), fn) : p; } function catSync(f) { return cp__namespace.execFileSync("asciinema", ["cat", f], { encoding: "utf8" }); } function retimeData(d, o = null) { var o = o || {}; var { input } = o, i = 0; var output = "", t = o.delay || 0; var rate = [o.outputRate || 0.1, o.inputRate || 0.1]; var delay = [o.outputDelay || 0.1, o.inputDelay || 1]; var oldState = 0, state = 0; for (var l of d.split(/\r?\n/g)) { if (l.startsWith("{") || l.trim() === "") { output += l + "\n"; continue; } var [, , x] = JSON.parse(l); var x1 = x.replace(/\r*\n/g, "\n"); if (input) { var i1 = input.substring(i, i + x1.length); i += x1 === i1 ? x1.length : 0; state = x1 === i1 ? 1 : 0; } if (state !== oldState) t += delay[state]; output += JSON.stringify([t, "o", x]) + "\n"; t += rate[state]; oldState = state; if (!input) { if (x.endsWith("\u001b[3G")) state = 1; else if (x === "\r\r\n") state = 0; } } return output; } async function retime(f, o = null) { var d = await fs__namespace.promises.readFile(f, "utf8"); d = retimeData(d, o); await fs__namespace.promises.writeFile(f, d); } function retimeSync(f, o = null) { var d = fs__namespace.readFileSync(f, "utf8"); d = retimeData(d, o); fs__namespace.writeFileSync(f, d); } function upload(f, fn = null) { var p = new Promise((fres, frej) => { cp__namespace.execFile("asciinema", ["upload", f], { encoding: "utf8" }, (err, stdout) => { if (err) return frej(err); fres(stdout.replace(/.*?(https?:\S+).*/s, "$1")); }); }); return fn ? p.then(a => fn(null, a), fn) : p; } function uploadSync(f) { var stdout = cp__namespace.execFileSync("asciinema", ["upload", f], { encoding: "utf8" }); return stdout.replace(/.*?(https?:\S+).*/s, "$1"); } exports.cat = cat; exports.catSync = catSync; exports.rec = rec; exports.recSync = recSync; exports.retime = retime; exports.retimeData = retimeData; exports.retimeSync = retimeSync; exports.upload = upload; exports.uploadSync = uploadSync;