diff -Nru node-external-editor-2.0.4+dfsg/debian/changelog node-external-editor-2.2.0+dfsg/debian/changelog --- node-external-editor-2.0.4+dfsg/debian/changelog 2019-08-03 13:42:58.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/debian/changelog 2020-03-13 12:53:31.000000000 +0000 @@ -1,3 +1,43 @@ +node-external-editor (2.2.0+dfsg-2) unstable; urgency=medium + + * Team upload + * Back to unstable + + -- Xavier Guimard Fri, 13 Mar 2020 13:53:31 +0100 + +node-external-editor (2.2.0+dfsg-1) experimental; urgency=medium + + * Team upload + * New upstream version 2.2.0+dfsg + * Refresh patches + * Require node-jschardet ≥ 2.1.1+repack-1~ + + -- Xavier Guimard Sat, 07 Mar 2020 11:22:32 +0100 + +node-external-editor (2.0.4+dfsg-5) unstable; urgency=medium + + * Team upload + * Back to unstable + + -- Xavier Guimard Sun, 23 Feb 2020 08:21:42 +0100 + +node-external-editor (2.0.4+dfsg-4) experimental; urgency=medium + + * Team upload + + [ Debian Janitor ] + * Set upstream metadata fields: Bug-Submit. + * Remove obsolete fields Contact, Name from debian/upstream/metadata + (already present in machine-readable debian/copyright). + * Update standards version to 4.4.1, no changes needed. + + [ Xavier Guimard ] + * Declare compliance with policy 4.5.0 + * Add "Rules-Requires-Root: no" + * Add fix for node-jschardet ≥ 2 + + -- Xavier Guimard Fri, 21 Feb 2020 00:39:55 +0100 + node-external-editor (2.0.4+dfsg-3) unstable; urgency=medium * Team upload diff -Nru node-external-editor-2.0.4+dfsg/debian/control node-external-editor-2.2.0+dfsg/debian/control --- node-external-editor-2.0.4+dfsg/debian/control 2019-07-31 20:00:10.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/debian/control 2020-03-07 10:20:19.000000000 +0000 @@ -1,33 +1,30 @@ Source: node-external-editor -Section: javascript -Priority: optional Maintainer: Debian Javascript Maintainers Uploaders: Paolo Greppi +Section: javascript Testsuite: autopkgtest-pkg-nodejs -Build-Depends: - debhelper-compat (= 12) - , dh-buildinfo +Priority: optional +Build-Depends: chai + , debhelper-compat (= 12) , coffeescript , mocha - , chai - , node-tmp , node-iconv-lite - , node-jschardet - , nodejs - , pkg-js-tools (>= 0.8.7) -Standards-Version: 4.4.0 -Homepage: https://github.com/mrkmg/node-external-editor#readme -Vcs-Git: https://salsa.debian.org/js-team/node-external-editor.git + , node-jschardet (>= 2.1.1+repack-1~) + , node-tmp + , pkg-js-tools (>= 0.9.20~) +Standards-Version: 4.5.0 Vcs-Browser: https://salsa.debian.org/js-team/node-external-editor +Vcs-Git: https://salsa.debian.org/js-team/node-external-editor.git +Homepage: https://github.com/mrkmg/node-external-editor#readme +Rules-Requires-Root: no Package: node-external-editor Architecture: all -Depends: - ${misc:Depends} - , nodejs - , node-tmp (>= 0.0.28) +Depends: ${misc:Depends} , node-iconv-lite - , node-jschardet + , node-jschardet (>= 2.1.1+repack-1~) + , node-tmp + , nodejs Description: Edit a string with the users preferred text editor Node.js module to edit a string with the users preferred text editor, using either $VISUAL or $ENVIRONMENT. diff -Nru node-external-editor-2.0.4+dfsg/debian/copyright node-external-editor-2.2.0+dfsg/debian/copyright --- node-external-editor-2.0.4+dfsg/debian/copyright 2019-07-30 11:31:25.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/debian/copyright 2020-02-21 07:25:32.000000000 +0000 @@ -10,6 +10,11 @@ Copyright: 2016 Kevin Gravier (https://mrkmg.com) License: Expat +Files: debian/* +Copyright: 2016 Paolo Greppi + 2020 Xavier Guimard +License: GPL-3.0+ + License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files @@ -31,10 +36,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Files: debian/* -Copyright: 2016 Paolo Greppi -License: GPL-3.0+ - License: GPL-3.0+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -47,7 +48,7 @@ GNU General Public License for more details. . You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff -Nru node-external-editor-2.0.4+dfsg/debian/patches/series node-external-editor-2.2.0+dfsg/debian/patches/series --- node-external-editor-2.0.4+dfsg/debian/patches/series 2019-07-30 11:31:25.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/debian/patches/series 2020-03-07 09:47:23.000000000 +0000 @@ -1 +1,2 @@ use-compiled-files-for-mocha.diff +#replace-chardet-by-jschardet.diff diff -Nru node-external-editor-2.0.4+dfsg/debian/patches/use-compiled-files-for-mocha.diff node-external-editor-2.2.0+dfsg/debian/patches/use-compiled-files-for-mocha.diff --- node-external-editor-2.0.4+dfsg/debian/patches/use-compiled-files-for-mocha.diff 2019-07-30 11:31:25.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/debian/patches/use-compiled-files-for-mocha.diff 2020-03-07 09:40:53.000000000 +0000 @@ -3,7 +3,7 @@ See https://github.com/mochajs/mocha/wiki/compilers-deprecation Author: Xavier Guimard Forwarded: not-needed -Last-Update: 2019-03-27 +Last-Update: 2020-03-07 --- a/test/spec/main.coffee +++ b/test/spec/main.coffee @@ -14,5 +14,5 @@ -ExternalEditor = require('../../src') +ExternalEditor = require('../../main') - describe 'main', -> - before -> + testingInput = 'aAbBcCdDeEfFgG' + expectedResult = 'aAbBcCdDeE' diff -Nru node-external-editor-2.0.4+dfsg/debian/upstream/metadata node-external-editor-2.2.0+dfsg/debian/upstream/metadata --- node-external-editor-2.0.4+dfsg/debian/upstream/metadata 2019-07-30 11:31:25.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/debian/upstream/metadata 2020-02-20 23:23:57.000000000 +0000 @@ -1,7 +1,6 @@ --- Archive: GitHub Bug-Database: https://github.com/mrkmg/node-external-editor/issues -Contact: https://github.com/mrkmg/node-external-editor/issues -Name: node-external-editor Repository: https://github.com/mrkmg/node-external-editor.git Repository-Browse: https://github.com/mrkmg/node-external-editor +Bug-Submit: https://github.com/mrkmg/node-external-editor/issues/new diff -Nru node-external-editor-2.0.4+dfsg/example_sync.js node-external-editor-2.2.0+dfsg/example_sync.js --- node-external-editor-2.0.4+dfsg/example_sync.js 2017-05-23 19:33:16.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/example_sync.js 2018-04-02 15:04:00.000000000 +0000 @@ -17,6 +17,10 @@ // Get response, remove all lines starting with #, remove any trailing newlines. var response = editor.run().replace(/^#.*\n?/gm, '').replace(/\n+$/g, '').trim(); + if (editor.last_exit_status !== 0) { + process.stderr.write("WARN: The editor exited with a non-zero status\n\n") + } + if (response.length === 0) { readline.moveCursor(process.stdout, 0, -1); process.stdout.write('Your message was empty, please try again. (press enter to launch your preferred editor)'); diff -Nru node-external-editor-2.0.4+dfsg/package.json node-external-editor-2.2.0+dfsg/package.json --- node-external-editor-2.0.4+dfsg/package.json 2017-05-23 19:33:16.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/package.json 2018-04-02 15:04:00.000000000 +0000 @@ -1,6 +1,6 @@ { "name": "external-editor", - "version": "2.0.4", + "version": "2.2.0", "description": "Edit a string with the users preferred text editor using $VISUAL or $ENVIRONMENT", "main": "main/index.js", "scripts": { @@ -26,15 +26,15 @@ }, "homepage": "https://github.com/mrkmg/node-external-editor#readme", "dependencies": { + "chardet": "^0.4.0", "iconv-lite": "^0.4.17", - "jschardet": "^1.4.2", - "tmp": "^0.0.31" + "tmp": "^0.0.33" }, "engines": { "node": ">=0.12" }, "devDependencies": { - "chai": "^3.5.0", + "chai": "^4.0.0", "coffee-script": "^1.10.0", "coffeelint": "^1.14.2", "mocha": "^3.2.0" diff -Nru node-external-editor-2.0.4+dfsg/package-lock.json node-external-editor-2.2.0+dfsg/package-lock.json --- node-external-editor-2.0.4+dfsg/package-lock.json 1970-01-01 00:00:00.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/package-lock.json 2018-04-02 15:04:00.000000000 +0000 @@ -0,0 +1,442 @@ +{ + "name": "external-editor", + "version": "2.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "assertion-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.3" + } + }, + "chardet": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.0.tgz", + "integrity": "sha1-C74TVaxE16PtSpJXB8TvcPgZD2w=" + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "dev": true + }, + "coffeelint": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/coffeelint/-/coffeelint-1.16.0.tgz", + "integrity": "sha1-g9jtHa/eOmd95E57ihi+YHdh5tg=", + "dev": true, + "requires": { + "coffee-script": "1.11.1", + "glob": "7.1.2", + "ignore": "3.3.5", + "optimist": "0.6.1", + "resolve": "0.6.3", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "coffee-script": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.11.1.tgz", + "integrity": "sha1-vxxHrWREOg2V0S3ysUfMCk2q1uk=", + "dev": true + } + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.3" + } + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "ignore": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", + "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mocha": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.8", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "he": "1.1.1", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, + "dependencies": { + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "resolve": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", + "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=", + "dev": true + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "type-detect": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", + "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff -Nru node-external-editor-2.0.4+dfsg/README.md node-external-editor-2.2.0+dfsg/README.md --- node-external-editor-2.0.4+dfsg/README.md 2017-05-23 19:33:16.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/README.md 2018-04-02 15:04:00.000000000 +0000 @@ -7,15 +7,15 @@ A node module to edit a string with a users preferred text editor using $VISUAL or $ENVIRONMENT. -Version: 2.0.1 +Version: 2.2.0 As of version 2.0.0, node 0.10 is no longer support. Minimum node version is now 0.12. -##Install +## Install `npm install external-editor --save` -##Usage +## Usage A simple example using the `.edit` convenience method @@ -29,8 +29,11 @@ try { var editor = new ExternalEditor(); - var text = editor.run() - // the text is also available in editor.text + var text = editor.run() // the text is also available in editor.text + + if (editor.last_exit_status !== 0) { + console.log("The editor exited with a non-zero code"); + } } catch (err) { if (err instanceOf ExternalEditor.CreateFileError) { console.log('Failed to create the temporary file'); @@ -57,8 +60,9 @@ } -####API +#### API **Static Methods** + - `edit(text)` - `text` (string) *Optional* Defaults to empty string - **Returns** (string) The contents of the file @@ -71,12 +75,14 @@ **Static Properties** + - `CreateFileError` Error thrown if the temporary file could not be created. - `ReadFileError` Error thrown if the temporary file could not be read. - `RemoveFileError` Error thrown if the temporary file could not be removed during cleanup. - `LaunchEditorError` Error thrown if the editor could not be launched. **Public Methods** + - `new ExternalEditor(text)` - `text` (string) *Optional* Defaults to empty string - Could throw `CreateFileError` @@ -91,18 +97,20 @@ - Could throw `RemoveFileError` **Public Properties** + - `text` (string) *readonly* The text in the temporary file. - `editor.bin` (string) The editor determined from the environment. - `editor.args` (array) Default arguments for the bin - `temp_file` (string) Path to temporary file. Can be changed, but be careful as the temporary file probably already exists and would need be removed manually. +- `last_exit_status` (number) The last exit code emitted from the editor. -##Errors +## Errors All errors have a simple message explaining what went wrong. They all also have an `original_error` property containing the original error thrown for debugging purposes. -##Why Synchronous? +## Why Synchronous? Everything is synchronous to make sure the editor has complete control of the stdin and stdout. Testing has shown async launching of the editor can lead to issues when using readline or other packages which try to read from stdin or @@ -114,11 +122,11 @@ listening to the stdin or you write to stdout, you will most likely have problem, so make sure to remove any other listeners on stdin, stdout, or stdin. -##Demo +## Demo [![asciicast](https://asciinema.org/a/a1qh9lypbe65mj0ivfuoslz2s.png)](https://asciinema.org/a/a1qh9lypbe65mj0ivfuoslz2s) -##License +## License The MIT License (MIT) diff -Nru node-external-editor-2.0.4+dfsg/shrinkwrap.yaml node-external-editor-2.2.0+dfsg/shrinkwrap.yaml --- node-external-editor-2.0.4+dfsg/shrinkwrap.yaml 2017-05-23 19:33:16.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/shrinkwrap.yaml 1970-01-01 00:00:00.000000000 +0000 @@ -1,157 +0,0 @@ -createdWith: pnpm@0.68.0 -dependencies: - chai@^3.5.0: 3.5.0 - coffee-script@^1.10.0: 1.12.6 - coffeelint@^1.14.2: 1.16.0 - iconv-lite@^0.4.17: 0.4.17 - jschardet@^1.4.2: 1.4.2 - mocha@^3.2.0: 3.4.1 - tmp@^0.0.31: 0.0.31 -packages: - /assertion-error/1.0.2: 13ca515d86206da0bac66e834dd397d87581094c - /balanced-match/0.4.2: cb3f3e3c732dc0f01ee70b403f302e61d7709838 - /brace-expansion/1.1.7: - dependencies: - balanced-match: 0.4.2 - concat-map: 0.0.1 - resolution: 3effc3c50e000531fb720eaff80f0ae8ef23cf59 - /browser-stdout/1.3.0: f351d32969d32fa5d7a5567154263d928ae3bd1f - /chai/3.5.0: - dependencies: - assertion-error: 1.0.2 - deep-eql: 0.1.3 - type-detect: 1.0.0 - resolution: 4d02637b067fe958bdbfdd3a40ec56fef7373247 - /coffee-script/1.11.1: bf1c47ad64443a0d95d12df2b147cc0a4daad6e9 - /coffee-script/1.12.6: 285a3f7115689065064d6bf9ef4572db66695cbf - /coffeelint/1.16.0: - dependencies: - coffee-script: 1.11.1 - glob: 7.1.2 - ignore: 3.3.3 - optimist: 0.6.1 - resolve: 0.6.3 - strip-json-comments: 1.0.4 - resolution: 83d8ed1dafde3a677de44e7b8a18be607761e6d8 - /commander/2.9.0: - dependencies: - graceful-readlink: 1.0.1 - resolution: 9c99094176e12240cb22d6c5146098400fe0f7d4 - /concat-map/0.0.1: d8a96bd77fd68df7793a73036a3ba0d5405d477b - /debug/2.6.0: - dependencies: - ms: 0.7.2 - resolution: bc596bcabe7617f11d9fa15361eded5608b8499b - /deep-eql/0.1.3: - dependencies: - type-detect: 0.1.1 - resolution: ef558acab8de25206cd713906d74e56930eb69f2 - /diff/3.2.0: c9ce393a4b7cbd0b058a725c93df299027868ff9 - /escape-string-regexp/1.0.5: 1b61c0562190a8dff6ae3bb2cf0200ca130b86d4 - /fs.realpath/1.0.0: 1504ad2523158caa40db4a2787cb01411994ea4f - /glob/7.1.1: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.3 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - resolution: 805211df04faaf1c63a3600306cdf5ade50b2ec8 - /glob/7.1.2: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.3 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - resolution: c19c9df9a028702d678612384a6552404c636d15 - /graceful-readlink/1.0.1: 4cafad76bc62f02fa039b2f94e9a3dd3a391a725 - /growl/1.9.2: 0ea7743715db8d8de2c5ede1775e1b45ac85c02f - /has-flag/1.0.0: 9d9e793165ce017a00f00418c43f942a7b1d11fa - /iconv-lite/0.4.17: 4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d - /ignore/3.3.3: 432352e57accd87ab3110e82d3fea0e47812156d - /inflight/1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - resolution: 49bd6331d7d02d0c09bc910a1075ba8165b56df9 - /inherits/2.0.3: 633c2c83e3da42a502f52466022480f4208261de - /jschardet/1.4.2: 2aa107f142af4121d145659d44f50830961e699a - /json3/3.3.2: 3c0434743df93e2f5c42aee7b19bcb483575f4e1 - /lodash._baseassign/3.2.0: - dependencies: - lodash._basecopy: 3.0.1 - lodash.keys: 3.1.2 - resolution: 8c38a099500f215ad09e59f1722fd0c52bfe0a4e - /lodash._basecopy/3.0.1: 8da0e6a876cf344c0ad8a54882111dd3c5c7ca36 - /lodash._basecreate/3.0.3: 1bc661614daa7fc311b7d03bf16806a0213cf821 - /lodash._getnative/3.9.1: 570bc7dede46d61cdcde687d65d3eecbaa3aaff5 - /lodash._isiterateecall/3.0.9: 5203ad7ba425fae842460e696db9cf3e6aac057c - /lodash.create/3.1.1: - dependencies: - lodash._baseassign: 3.2.0 - lodash._basecreate: 3.0.3 - lodash._isiterateecall: 3.0.9 - resolution: d7f2849f0dbda7e04682bb8cd72ab022461debe7 - /lodash.isarguments/3.1.0: 2f573d85c6a24289ff00663b491c1d338ff3458a - /lodash.isarray/3.0.4: 79e4eb88c36a8122af86f844aa9bcd851b5fbb55 - /lodash.keys/3.1.2: - dependencies: - lodash._getnative: 3.9.1 - lodash.isarguments: 3.1.0 - lodash.isarray: 3.0.4 - resolution: 4dbc0472b156be50a0b286855d1bd0b0c656098a - /minimatch/3.0.4: - dependencies: - brace-expansion: 1.1.7 - resolution: 5166e286457f03306064be5497e8dbb0c3d32083 - /minimist/0.0.10: de3f98543dbf96082be48ad1a0c7cda836301dcf - /minimist/0.0.8: 857fcabfc3397d2625b8228262e86aa7a011b05d - /mkdirp/0.5.1: - dependencies: - minimist: 0.0.8 - resolution: 30057438eac6cf7f8c4767f38648d6697d75c903 - /mocha/3.4.1: - dependencies: - browser-stdout: 1.3.0 - commander: 2.9.0 - debug: 2.6.0 - diff: 3.2.0 - escape-string-regexp: 1.0.5 - glob: 7.1.1 - growl: 1.9.2 - json3: 3.3.2 - lodash.create: 3.1.1 - mkdirp: 0.5.1 - supports-color: 3.1.2 - resolution: a3802b4aa381934cacb38de70cf771621da8f9af - /ms/0.7.2: ae25cf2512b3885a1d95d7f037868d8431124765 - /once/1.4.0: - dependencies: - wrappy: 1.0.2 - resolution: 583b1aa775961d4b113ac17d9c50baef9dd76bd1 - /optimist/0.6.1: - dependencies: - minimist: 0.0.10 - wordwrap: 0.0.3 - resolution: da3ea74686fa21a19a111c326e90eb15a0196686 - /os-tmpdir/1.0.2: bbe67406c79aa85c5cfec766fe5734555dfa1274 - /path-is-absolute/1.0.1: 174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f - /resolve/0.6.3: dd957982e7e736debdf53b58a4dd91754575dd46 - /strip-json-comments/1.0.4: 1e15fbcac97d3ee99bf2d73b4c656b082bbafb91 - /supports-color/3.1.2: - dependencies: - has-flag: 1.0.0 - resolution: 72a262894d9d408b956ca05ff37b2ed8a6e2a2d5 - /tmp/0.0.31: - dependencies: - os-tmpdir: 1.0.2 - resolution: 8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7 - /type-detect/0.1.1: 0ba5ec2a885640e470ea4e8505971900dac58822 - /type-detect/1.0.0: 762217cc06db258ec48908a1298e8b95121e8ea2 - /wordwrap/0.0.3: a3d5da6cd5c0bc0008d37234bbaf1bed63059107 - /wrappy/1.0.2: b5243d8f3ec1aa35f1364605bc0d1036e30ab69f -registry: 'https://registry.npmjs.org/' -version: 2 diff -Nru node-external-editor-2.0.4+dfsg/src/index.coffee node-external-editor-2.2.0+dfsg/src/index.coffee --- node-external-editor-2.0.4+dfsg/src/index.coffee 2017-05-23 19:33:16.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/src/index.coffee 2018-04-02 15:04:00.000000000 +0000 @@ -8,16 +8,14 @@ Temp = require 'tmp' SpawnSync = require('child_process').spawnSync Spawn = require('child_process').spawn -JSCharDet = require 'jschardet' IConvLite = require 'iconv-lite' +ChatDet = require 'chardet' CreateFileError = require './errors/CreateFileError' ReadFileError = require './errors/ReadFileError' RemoveFileError = require './errors/RemoveFileError' LaunchEditorError = require './errors/LaunchEditorError' -JSCharDet.Constants.MINIMUM_THRESHOLD = 0 - class ExternalEditor @edit: (text = '') -> editor = new ExternalEditor(text) @@ -27,15 +25,15 @@ @editAsync: (text = '', callback) -> editor = new ExternalEditor(text) - editor.runAsync (error_run, response) -> + editor.runAsync (error_run, text) -> if not error_run try editor.cleanup() + setImmediate(callback, null, text) if typeof callback is 'function' catch error_cleanup - callback(error_cleanup) if typeof callback is 'function' - callback(null, response) + setImmediate(callback, error_cleanup, null) if typeof callback is 'function' else - callback(error_run) of typeof callback is 'function' + setImmediate(callback, error_run, null) if typeof callback is 'function' @CreateFileError: CreateFileError @@ -48,6 +46,7 @@ editor: bin: undefined args: [] + last_exit_status: undefined constructor: (@text = '') -> @determineEditor() @@ -62,11 +61,11 @@ @launchEditorAsync => try @readTemporaryFile() - callback(null, @text) if typeof callback is 'function' + setImmediate(callback, null, @text) if typeof callback is 'function' catch error_read - callback(error_read) if typeof callback is 'function' + setImmediate(callback, error_read, null) if typeof callback is 'function' catch error_launch - callback(error_launch) if typeof callback is 'function' + setImmediate(callback, error_launch, null) if typeof callback is 'function' cleanup: => @removeTemporaryFile() @@ -75,21 +74,22 @@ ed = if /^win/.test process.platform then 'notepad' else 'vim' editor = process.env.VISUAL or process.env.EDITOR or ed args = editor.split /\s+/ - @bin = args.shift() - @args = args + @editor.bin = args.shift() + @editor.args = args createTemporaryFile: => try @temp_file = Temp.tmpNameSync {} - FS.writeFileSync(@temp_file, @text, encoding: 'utf8') + FS.writeFileSync @temp_file, @text, encoding: 'utf8' catch e throw new CreateFileError e readTemporaryFile: => try buffer = FS.readFileSync(@temp_file) - encoding = JSCharDet.detect(buffer) - @text = IConvLite.decode(buffer, encoding.encoding) + return @text = '' unless buffer.length + encoding = ChatDet.detect buffer + @text = IConvLite.decode buffer, encoding catch e throw new ReadFileError e @@ -101,14 +101,17 @@ launchEditor: => try - SpawnSync @bin, @args.concat([@temp_file]), stdio: 'inherit' + run = SpawnSync @editor.bin, @editor.args.concat([@temp_file]), stdio: 'inherit' + @last_exit_status = run.status catch e throw new LaunchEditorError e launchEditorAsync: (callback) => try - child_process = Spawn @bin, @args.concat([@temp_file]), stdio: 'inherit' - child_process.on 'exit', -> callback() if typeof callback is 'function' + child_process = Spawn @editor.bin, @editor.args.concat([@temp_file]), stdio: 'inherit' + child_process.on 'exit', (code) => + @last_exit_status = code + callback() if typeof callback is 'function' catch e throw new LaunchEditorError e diff -Nru node-external-editor-2.0.4+dfsg/test/spec/main.coffee node-external-editor-2.2.0+dfsg/test/spec/main.coffee --- node-external-editor-2.0.4+dfsg/test/spec/main.coffee 2017-05-23 19:33:16.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/test/spec/main.coffee 2018-04-02 15:04:00.000000000 +0000 @@ -4,13 +4,16 @@ IConvLite = require 'iconv-lite' ExternalEditor = require('../../src') +testingInput = 'aAbBcCdDeEfFgG' +expectedResult = 'aAbBcCdDeE' + describe 'main', -> before -> @previous_visual = process.env.VISUAL - process.env.VISUAL = 'truncate --size 1' + process.env.VISUAL = 'truncate --size 10' beforeEach -> - @editor = new ExternalEditor 'XXX' + @editor = new ExternalEditor testingInput afterEach -> @editor.cleanup() @@ -19,25 +22,28 @@ process.env.VISUAL = @previous_visual it 'convenience method ".edit"', -> - text = ExternalEditor.edit 'XXX' - assert.equal text, 'X' + text = ExternalEditor.edit testingInput + assert.equal text, expectedResult it 'convenience method ".editAsync"', (cb) -> - ExternalEditor.editAsync 'XXX', (e, text) -> - assert.equal text, 'X' + ExternalEditor.editAsync testingInput, (e, text) -> + assert.equal text, expectedResult cb() it 'writes original text to file', -> contents = readFileSync @editor.temp_file - assert.equal contents, 'XXX' + assert.equal contents, testingInput it 'run() returns correctly', -> text = @editor.run() - assert.equal text, 'X' + assert.equal text, expectedResult + assert.equal @editor.last_exit_status, 0 it 'runAsync() callbacks correctly', (cb) -> + ed = @editor @editor.runAsync (e, text) -> - assert.equal text, 'X' + assert.equal text, expectedResult + assert.equal ed.last_exit_status, 0 cb() it 'run() returns text same as editor.text', -> @@ -49,6 +55,25 @@ assert.equal text, @editor.text cb() +describe 'invalid exit code', -> + + beforeEach -> + @editor = new ExternalEditor testingInput + @editor.editor.bin = "bash" + @editor.editor.args = ["-c", "exit 1"] + + afterEach -> + @editor.cleanup() + + it 'run()', -> + @editor.run() + assert.equal @editor.last_exit_status, 1 + + it 'runAsync()', (cb) -> + @editor.runAsync => + assert.equal @editor.last_exit_status, 1 + cb() + describe 'charsets', -> before -> @previous_visual = process.env.VISUAL @@ -63,6 +88,11 @@ after -> process.env.VISUAL = @previous_visual + it 'empty', -> + writeFileSync(@editor.temp_file, '') + text = @editor.run() + assert.equal text, '' + it 'utf8', -> writeFileSync(@editor.temp_file, IConvLite.encode('काचं शक्नोम्यत्तुम् । नोपहिनस्ति माम् ॥', 'utf8'), encoding: 'binary') text = @editor.run() @@ -74,12 +104,12 @@ assert.equal text, 'काचं शक्नोम्यत्तुम् । नोपहिनस्ति माम् ॥' it 'win1252', -> - writeFileSync(@editor.temp_file, IConvLite.encode('abc 123 ‰åþ', 'win1252'), encoding: 'binary') + writeFileSync(@editor.temp_file, IConvLite.encode('Testing 1 2 3 ! @ #', 'win1252'), encoding: 'binary') text = @editor.run() - assert.equal text, 'abc 123 ‰åþ' + assert.equal text, 'Testing 1 2 3 ! @ #' it 'Big5', -> - writeFileSync(@editor.temp_file, IConvLite.encode('一一一一', 'Big5'), encoding: 'binary') + writeFileSync(@editor.temp_file, IConvLite.encode('能 脊 胼 胯 臭 臬 舀 舐 航 舫 舨 般 芻 茫 荒 荔', 'Big5'), encoding: 'binary') text = @editor.run() - assert.equal text, '一一一一' + assert.equal text, '能 脊 胼 胯 臭 臬 舀 舐 航 舫 舨 般 芻 茫 荒 荔' diff -Nru node-external-editor-2.0.4+dfsg/.travis.yml node-external-editor-2.2.0+dfsg/.travis.yml --- node-external-editor-2.0.4+dfsg/.travis.yml 2017-05-23 19:33:16.000000000 +0000 +++ node-external-editor-2.2.0+dfsg/.travis.yml 2018-04-02 15:04:00.000000000 +0000 @@ -1,5 +1,7 @@ sudo: false node_js: + - 9 + - 8 - 7 - 6 - 5