Neah/node_modules/quoted-printable/bin/quoted-printable
2025-04-20 21:50:30 +02:00

117 lines
3.3 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
(function() {
var fs = require('fs');
var utf8 = require('utf8');
var quotedPrintable = require('../quoted-printable.js');
var strings = process.argv.splice(2);
var stdin = process.stdin;
var data;
var timeout;
var action;
var options = {};
var log = console.log;
var main = function() {
var option = strings[0];
var count = 0;
if (/^(?:-h|--help|undefined)$/.test(option)) {
log(
'quoted-printable v%s - https://mths.be/quoted-printable',
quotedPrintable.version
);
log([
'\nEncode or decode messages using the `Quoted-Printable` encoding (and UTF-8).',
'\nUsage:\n',
'\tquoted-printable [-e | --encode] string',
'\tquoted-printable [-d | --decode] string',
'\tquoted-printable [-v | --version]',
'\tquoted-printable [-h | --help]',
'\nExamples:\n',
'\tquoted-printable --encode \'foo = bar ©\'',
'\techo \'foo =3D bar =C2=A9\' | quoted-printable --decode',
].join('\n'));
return process.exit(1);
}
if (/^(?:-v|--version)$/.test(option)) {
log('v%s', quotedPrintable.version);
return process.exit(1);
}
strings.forEach(function(string) {
// Process options
if (string == '-e' || string == '--encode') {
action = 'encode';
return;
}
if (string == '-d' || string == '--decode') {
action = 'decode';
return;
}
// Process string(s)
var result;
if (!action) {
log('Error: quoted-printable requires at least one option and a string argument.');
log('Try `quoted-printable --help` for more information.');
return process.exit(1);
}
try {
if (action == 'encode') {
result = quotedPrintable.encode(utf8.encode(string, options));
} else if (action == 'decode') {
result = utf8.decode(quotedPrintable.decode(string, options));
}
log(result);
count++;
} catch (exception) {
log(exception.message + '\n');
log('Error: failed to %s.', action);
log('If you think this is a bug in quoted-printable, please report it:');
log('https://github.com/mathiasbynens/quoted-printable/issues/new');
log('\nStack trace using quoted-printable@%s:\n', quotedPrintable.version);
log(exception.stack);
return process.exit(1);
}
});
if (!count) {
log('Error: quoted-printable requires a string argument.');
log('Try `quoted-printable --help` for more information.');
return process.exit(1);
}
// Return with exit status 0 outside of the `forEach` loop, in case
// multiple strings were passed in.
return process.exit(0);
};
if (stdin.isTTY) {
// handle shell arguments
main();
} else {
// Either the script is called from within a non-TTY context, or `stdin`
// content is being piped in.
if (!process.stdout.isTTY) {
// The script was called from a non-TTY context. This is a rather uncommon
// use case we dont actively support. However, we dont want the script
// to wait forever in such cases, so…
timeout = setTimeout(function() {
// …if no piped data arrived after a whole minute, handle shell
// arguments instead.
main();
}, 60000);
}
data = '';
stdin.on('data', function(chunk) {
clearTimeout(timeout);
data += chunk;
});
stdin.on('end', function() {
strings.push(data.trim());
main();
});
stdin.resume();
}
}());