diff options
Diffstat (limited to 'tools/node_modules/eslint/node_modules/external-editor/main/index.js')
-rw-r--r-- | tools/node_modules/eslint/node_modules/external-editor/main/index.js | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/tools/node_modules/eslint/node_modules/external-editor/main/index.js b/tools/node_modules/eslint/node_modules/external-editor/main/index.js new file mode 100644 index 0000000000..0ec45e3a8b --- /dev/null +++ b/tools/node_modules/eslint/node_modules/external-editor/main/index.js @@ -0,0 +1,219 @@ +// Generated by CoffeeScript 1.12.7 + +/* + ExternalEditor + Kevin Gravier <kevin@mrkmg.com> + MIT + */ + +(function() { + var ChatDet, CreateFileError, ExternalEditor, FS, IConvLite, LaunchEditorError, ReadFileError, RemoveFileError, Spawn, SpawnSync, Temp, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + FS = require('fs'); + + Temp = require('tmp'); + + SpawnSync = require('child_process').spawnSync; + + Spawn = require('child_process').spawn; + + IConvLite = require('iconv-lite'); + + ChatDet = require('chardet'); + + CreateFileError = require('./errors/CreateFileError'); + + ReadFileError = require('./errors/ReadFileError'); + + RemoveFileError = require('./errors/RemoveFileError'); + + LaunchEditorError = require('./errors/LaunchEditorError'); + + ExternalEditor = (function() { + ExternalEditor.edit = function(text) { + var editor; + if (text == null) { + text = ''; + } + editor = new ExternalEditor(text); + editor.run(); + editor.cleanup(); + return editor.text; + }; + + ExternalEditor.editAsync = function(text, callback) { + var editor; + if (text == null) { + text = ''; + } + editor = new ExternalEditor(text); + return editor.runAsync(function(error_run, response) { + var error_cleanup; + if (!error_run) { + try { + editor.cleanup(); + } catch (error) { + error_cleanup = error; + if (typeof callback === 'function') { + callback(error_cleanup); + } + } + return callback(null, response); + } else { + return callback(error_run) in typeof callback === 'function'; + } + }); + }; + + ExternalEditor.CreateFileError = CreateFileError; + + ExternalEditor.ReadFileError = ReadFileError; + + ExternalEditor.RemoveFileError = RemoveFileError; + + ExternalEditor.LaunchEditorError = LaunchEditorError; + + ExternalEditor.prototype.text = ''; + + ExternalEditor.prototype.temp_file = void 0; + + ExternalEditor.prototype.editor = { + bin: void 0, + args: [] + }; + + function ExternalEditor(text1) { + this.text = text1 != null ? text1 : ''; + this.launchEditorAsync = bind(this.launchEditorAsync, this); + this.launchEditor = bind(this.launchEditor, this); + this.removeTemporaryFile = bind(this.removeTemporaryFile, this); + this.readTemporaryFile = bind(this.readTemporaryFile, this); + this.createTemporaryFile = bind(this.createTemporaryFile, this); + this.determineEditor = bind(this.determineEditor, this); + this.cleanup = bind(this.cleanup, this); + this.runAsync = bind(this.runAsync, this); + this.run = bind(this.run, this); + this.determineEditor(); + this.createTemporaryFile(); + } + + ExternalEditor.prototype.run = function() { + this.launchEditor(); + return this.readTemporaryFile(); + }; + + ExternalEditor.prototype.runAsync = function(callback) { + var error_launch; + try { + return this.launchEditorAsync((function(_this) { + return function() { + var error_read; + try { + _this.readTemporaryFile(); + if (typeof callback === 'function') { + return callback(null, _this.text); + } + } catch (error) { + error_read = error; + if (typeof callback === 'function') { + return callback(error_read); + } + } + }; + })(this)); + } catch (error) { + error_launch = error; + if (typeof callback === 'function') { + return callback(error_launch); + } + } + }; + + ExternalEditor.prototype.cleanup = function() { + return this.removeTemporaryFile(); + }; + + ExternalEditor.prototype.determineEditor = function() { + var args, ed, editor; + ed = /^win/.test(process.platform) ? 'notepad' : 'vim'; + editor = process.env.VISUAL || process.env.EDITOR || ed; + args = editor.split(/\s+/); + this.bin = args.shift(); + return this.args = args; + }; + + ExternalEditor.prototype.createTemporaryFile = function() { + var e; + try { + this.temp_file = Temp.tmpNameSync({}); + return FS.writeFileSync(this.temp_file, this.text, { + encoding: 'utf8' + }); + } catch (error) { + e = error; + throw new CreateFileError(e); + } + }; + + ExternalEditor.prototype.readTemporaryFile = function() { + var buffer, e, encoding; + try { + buffer = FS.readFileSync(this.temp_file); + if (!buffer.length) { + return this.text = ''; + } + encoding = ChatDet.detect(buffer); + return this.text = IConvLite.decode(buffer, encoding); + } catch (error) { + e = error; + throw new ReadFileError(e); + } + }; + + ExternalEditor.prototype.removeTemporaryFile = function() { + var e; + try { + return FS.unlinkSync(this.temp_file); + } catch (error) { + e = error; + throw new RemoveFileError(e); + } + }; + + ExternalEditor.prototype.launchEditor = function() { + var e; + try { + return SpawnSync(this.bin, this.args.concat([this.temp_file]), { + stdio: 'inherit' + }); + } catch (error) { + e = error; + throw new LaunchEditorError(e); + } + }; + + ExternalEditor.prototype.launchEditorAsync = function(callback) { + var child_process, e; + try { + child_process = Spawn(this.bin, this.args.concat([this.temp_file]), { + stdio: 'inherit' + }); + return child_process.on('exit', function() { + if (typeof callback === 'function') { + return callback(); + } + }); + } catch (error) { + e = error; + throw new LaunchEditorError(e); + } + }; + + return ExternalEditor; + + })(); + + module.exports = ExternalEditor; + +}).call(this); |