aboutsummaryrefslogtreecommitdiff
path: root/node_modules/he/bin
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/he/bin')
-rwxr-xr-xnode_modules/he/bin/he148
1 files changed, 148 insertions, 0 deletions
diff --git a/node_modules/he/bin/he b/node_modules/he/bin/he
new file mode 100755
index 000000000..cfdfd6c31
--- /dev/null
+++ b/node_modules/he/bin/he
@@ -0,0 +1,148 @@
+#!/usr/bin/env node
+(function() {
+
+ var fs = require('fs');
+ var he = require('../he.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(
+ 'he v%s - https://mths.be/he',
+ he.version
+ );
+ log([
+ '\nUsage:\n',
+ '\the [--escape] string',
+ '\the [--encode] [--use-named-refs] [--everything] [--allow-unsafe] [--decimal] string',
+ '\the [--decode] [--attribute] [--strict] string',
+ '\the [-v | --version]',
+ '\the [-h | --help]',
+ '\nExamples:\n',
+ '\the --escape \\<img\\ src\\=\\\'x\\\'\\ onerror\\=\\"prompt\\(1\\)\\"\\>',
+ '\techo \'&copy; &#x1D306;\' | he --decode'
+ ].join('\n'));
+ return process.exit(option ? 0 : 1);
+ }
+
+ if (/^(?:-v|--version)$/.test(option)) {
+ log('v%s', he.version);
+ return process.exit(0);
+ }
+
+ strings.forEach(function(string) {
+ // Process options
+ if (string == '--escape') {
+ action = 'escape';
+ return;
+ }
+ if (string == '--encode') {
+ action = 'encode';
+ return;
+ }
+ if (string == '--use-named-refs') {
+ action = 'encode';
+ options.useNamedReferences = true;
+ return;
+ }
+ if (string == '--everything') {
+ action = 'encode';
+ options.encodeEverything = true;
+ return;
+ }
+ if (string == '--allow-unsafe') {
+ action = 'encode';
+ options.allowUnsafeSymbols = true;
+ return;
+ }
+ if (string == '--decimal') {
+ action = 'encode';
+ options.decimal = true;
+ return;
+ }
+ if (string == '--decode') {
+ action = 'decode';
+ return;
+ }
+ if (string == '--attribute') {
+ action = 'decode';
+ options.isAttributeValue = true;
+ return;
+ }
+ if (string == '--strict') {
+ action = 'decode';
+ options.strict = true;
+ return;
+ }
+ // Process string(s)
+ var result;
+ if (!action) {
+ log('Error: he requires at least one option and a string argument.');
+ log('Try `he --help` for more information.');
+ return process.exit(1);
+ }
+ try {
+ result = he[action](string, options);
+ log(result);
+ count++;
+ } catch(error) {
+ log(error.message + '\n');
+ log('Error: failed to %s.', action);
+ log('If you think this is a bug in he, please report it:');
+ log('https://github.com/mathiasbynens/he/issues/new');
+ log(
+ '\nStack trace using he@%s:\n',
+ he.version
+ );
+ log(error.stack);
+ return process.exit(1);
+ }
+ });
+ if (!count) {
+ log('Error: he requires a string argument.');
+ log('Try `he --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 don’t actively support. However, we don’t 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();
+ }
+
+}());