Son CV dans un terminal web en Javascript! https://terminal-cv.gregandev.fr
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

180 lines
4.6 KiB

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._setStdio = _setStdio;
exports.writeOut = writeOut;
exports.persistMessage = persistMessage;
exports.updateSpinner = updateSpinner;
exports.persistSpinner = persistSpinner;
exports.resetWindow = resetWindow;
exports.table = table;
exports.isTTY = void 0;
function _readline() {
const data = _interopRequireDefault(require("readline"));
_readline = function () {
return data;
};
return data;
}
function _ora() {
const data = _interopRequireDefault(require("ora"));
_ora = function () {
return data;
};
return data;
}
function _stringWidth() {
const data = _interopRequireDefault(require("string-width"));
_stringWidth = function () {
return data;
};
return data;
}
var _utils = require("./utils");
var emoji = _interopRequireWildcard(require("./emoji"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const isTTY = // $FlowFixMe
process.env.NODE_ENV !== 'test' && process.stdout.isTTY;
exports.isTTY = isTTY;
let stdout = process.stdout;
let stderr = process.stderr; // Some state so we clear the output properly
let lineCount = 0;
let errorLineCount = 0;
let statusPersisted = false;
function _setStdio(stdoutLike, stderrLike) {
stdout = stdoutLike;
stderr = stderrLike;
}
let spinner = (0, _ora().default)({
color: 'green',
stream: stdout,
discardStdin: false
});
let persistedMessages = [];
function writeOut(message, isError = false) {
let processedMessage = message + '\n';
let hasSpinner = spinner.isSpinning; // Stop spinner so we don't duplicate it
if (hasSpinner) {
spinner.stop();
}
let lines = (0, _utils.countLines)(message);
if (isError) {
stderr.write(processedMessage);
errorLineCount += lines;
} else {
stdout.write(processedMessage);
lineCount += lines;
} // Restart the spinner
if (hasSpinner) {
spinner.start();
}
}
function persistMessage(message) {
if (persistedMessages.includes(message)) return;
persistedMessages.push(message);
writeOut(message);
}
function updateSpinner(message) {
// This helps the spinner play well with the tests
if (!isTTY) {
writeOut(message);
return;
}
spinner.text = message + '\n';
if (!spinner.isSpinning) {
spinner.start();
}
}
function persistSpinner(name, status, message) {
spinner.stopAndPersist({
symbol: emoji[status],
text: message
});
statusPersisted = true;
}
function clearStream(stream, lines) {
if (!isTTY) return;
_readline().default.moveCursor(stream, 0, -lines);
_readline().default.clearScreenDown(stream);
} // Reset the window's state
function resetWindow() {
if (!isTTY) return; // If status has been persisted we add a line
// Otherwise final states would remain in the terminal for rebuilds
if (statusPersisted) {
lineCount++;
statusPersisted = false;
}
clearStream(stderr, errorLineCount);
errorLineCount = 0;
clearStream(stdout, lineCount);
lineCount = 0;
for (let m of persistedMessages) {
writeOut(m);
}
}
function table(columns, table) {
// Measure column widths
let colWidths = [];
for (let row of table) {
let i = 0;
for (let item of row) {
colWidths[i] = Math.max(colWidths[i] || 0, (0, _stringWidth().default)(item));
i++;
}
} // Render rows
for (let row of table) {
let items = row.map((item, i) => {
// Add padding between columns unless the alignment is the opposite to the
// next column and pad to the column width.
let padding = !columns[i + 1] || columns[i + 1].align === columns[i].align ? 4 : 0;
return (0, _utils.pad)(item, colWidths[i] + padding, columns[i].align);
});
writeOut(items.join(''));
}
}