Projekt

Obecné

Profil

Stáhnout (3.74 KB) Statistiky
| Větev: | Revize:
1
#!/usr/bin/env node
2
(function() {
3

    
4
	var fs = require('fs');
5
	var stringEscape = require('../jsesc.js');
6
	var strings = process.argv.splice(2);
7
	var stdin = process.stdin;
8
	var data;
9
	var timeout;
10
	var isObject = false;
11
	var options = {};
12
	var log = console.log;
13

    
14
	var main = function() {
15
		var option = strings[0];
16

    
17
		if (/^(?:-h|--help|undefined)$/.test(option)) {
18
			log(
19
				'jsesc v%s - https://mths.be/jsesc',
20
				stringEscape.version
21
			);
22
			log([
23
				'\nUsage:\n',
24
				'\tjsesc [string]',
25
				'\tjsesc [-s | --single-quotes] [string]',
26
				'\tjsesc [-d | --double-quotes] [string]',
27
				'\tjsesc [-w | --wrap] [string]',
28
				'\tjsesc [-e | --escape-everything] [string]',
29
				'\tjsesc [-t | --escape-etago] [string]',
30
				'\tjsesc [-6 | --es6] [string]',
31
				'\tjsesc [-l | --lowercase-hex] [string]',
32
				'\tjsesc [-j | --json] [string]',
33
				'\tjsesc [-o | --object] [stringified_object]', // `JSON.parse()` the argument
34
				'\tjsesc [-p | --pretty] [string]', // `compact: false`
35
				'\tjsesc [-v | --version]',
36
				'\tjsesc [-h | --help]',
37
				'\nExamples:\n',
38
				'\tjsesc \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
39
				'\tjsesc --json \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
40
				'\tjsesc --json --escape-everything \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
41
				'\tjsesc --double-quotes --wrap \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
42
				'\techo \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\' | jsesc'
43
			].join('\n'));
44
			return process.exit(1);
45
		}
46

    
47
		if (/^(?:-v|--version)$/.test(option)) {
48
			log('v%s', stringEscape.version);
49
			return process.exit(1);
50
		}
51

    
52
		strings.forEach(function(string) {
53
			// Process options
54
			if (/^(?:-s|--single-quotes)$/.test(string)) {
55
				options.quotes = 'single';
56
				return;
57
			}
58
			if (/^(?:-d|--double-quotes)$/.test(string)) {
59
				options.quotes = 'double';
60
				return;
61
			}
62
			if (/^(?:-w|--wrap)$/.test(string)) {
63
				options.wrap = true;
64
				return;
65
			}
66
			if (/^(?:-e|--escape-everything)$/.test(string)) {
67
				options.escapeEverything = true;
68
				return;
69
			}
70
			if (/^(?:-t|--escape-etago)$/.test(string)) {
71
				options.escapeEtago = true;
72
				return;
73
			}
74
			if (/^(?:-6|--es6)$/.test(string)) {
75
				options.es6 = true;
76
				return;
77
			}
78
			if (/^(?:-l|--lowercase-hex)$/.test(string)) {
79
				options.lowercaseHex = true;
80
				return;
81
			}
82
			if (/^(?:-j|--json)$/.test(string)) {
83
				options.json = true;
84
				return;
85
			}
86
			if (/^(?:-o|--object)$/.test(string)) {
87
				isObject = true;
88
				return;
89
			}
90
			if (/^(?:-p|--pretty)$/.test(string)) {
91
				isObject = true;
92
				options.compact = false;
93
				return;
94
			}
95

    
96
			// Process string(s)
97
			var result;
98
			try {
99
				if (isObject) {
100
					string = JSON.parse(string);
101
				}
102
				result = stringEscape(string, options);
103
				log(result);
104
			} catch(error) {
105
				log(error.message + '\n');
106
				log('Error: failed to escape.');
107
				log('If you think this is a bug in jsesc, please report it:');
108
				log('https://github.com/mathiasbynens/jsesc/issues/new');
109
				log(
110
					'\nStack trace using jsesc@%s:\n',
111
					stringEscape.version
112
				);
113
				log(error.stack);
114
				return process.exit(1);
115
			}
116
		});
117
		// Return with exit status 0 outside of the `forEach` loop, in case
118
		// multiple strings were passed in.
119
		return process.exit(0);
120

    
121
	};
122

    
123
	if (stdin.isTTY) {
124
		// handle shell arguments
125
		main();
126
	} else {
127
		// Either the script is called from within a non-TTY context,
128
		// or `stdin` content is being piped in.
129
		if (!process.stdout.isTTY) { // called from a non-TTY context
130
			timeout = setTimeout(function() {
131
				// if no piped data arrived after a while, handle shell arguments
132
				main();
133
			}, 250);
134
		}
135

    
136
		data = '';
137
		stdin.on('data', function(chunk) {
138
			clearTimeout(timeout);
139
			data += chunk;
140
		});
141
		stdin.on('end', function() {
142
			strings.push(data.trim());
143
			main();
144
		});
145
		stdin.resume();
146
	}
147

    
148
}());
    (1-1/1)