UNPKG

npmc

Version:

a package manager for JavaScript

99 lines (77 loc) 3.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _cliCursor = _interopRequireDefault(require("cli-cursor")); var _AppContext = _interopRequireDefault(require("./AppContext")); var _StdinContext = _interopRequireDefault(require("./StdinContext")); var _StdoutContext = _interopRequireDefault(require("./StdoutContext")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // Root component for all Ink apps // It renders stdin and stdout contexts, so that children can access them if needed // It also handles Ctrl+C exiting and cursor visibility class App extends _react.PureComponent { constructor(...args) { super(...args); _defineProperty(this, "handleSetRawMode", isEnabled => { const { stdin } = this.props; stdin.setEncoding('utf8'); stdin.setRawMode(isEnabled); if (isEnabled) { stdin.addListener('data', this.handleInput); } else { stdin.removeListener('data', this.handleInput); stdin.pause(); } }); _defineProperty(this, "handleInput", input => { // Exit on Ctrl+C if (input === '\x03' && this.props.exitOnCtrlC) { // eslint-disable-line unicorn/no-hex-escape this.handleExit(); } }); _defineProperty(this, "handleExit", () => { this.handleSetRawMode(false); this.props.onExit(); }); } render() { return _react.default.createElement(_AppContext.default.Provider, { value: { exit: this.handleExit } }, _react.default.createElement(_StdinContext.default.Provider, { value: { stdin: this.props.stdin, setRawMode: this.handleSetRawMode } }, _react.default.createElement(_StdoutContext.default.Provider, { value: { stdout: this.props.stdout } }, this.props.children))); } componentDidMount() { _cliCursor.default.hide(this.props.stdout); } componentWillUnmount() { _cliCursor.default.show(this.props.stdout); this.handleSetRawMode(false); } } exports.default = App; _defineProperty(App, "propTypes", { children: _propTypes.default.node.isRequired, stdin: _propTypes.default.object.isRequired, stdout: _propTypes.default.object.isRequired, exitOnCtrlC: _propTypes.default.bool.isRequired, onExit: _propTypes.default.func.isRequired });