Blame view

node_modules/cssesc/bin/cssesc 3.16 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
  #!/usr/bin/env node
  (function() {
  
  	var fs = require('fs');
  	var cssesc = require('../cssesc.js');
  	var strings = process.argv.splice(2);
  	var stdin = process.stdin;
  	var data;
  	var timeout;
  	var isObject = false;
  	var options = {};
  	var log = console.log;
  
  	var main = function() {
  		var option = strings[0];
  
  		if (/^(?:-h|--help|undefined)$/.test(option)) {
  			log(
  				'cssesc v%s - http://mths.be/cssesc',
  				cssesc.version
  			);
  			log([
  				'\nUsage:\n',
  				'\tcssesc [string]',
  				'\tcssesc [-i | --identifier] [string]',
  				'\tcssesc [-s | --single-quotes] [string]',
  				'\tcssesc [-d | --double-quotes] [string]',
  				'\tcssesc [-w | --wrap] [string]',
  				'\tcssesc [-e | --escape-everything] [string]',
  				'\tcssesc [-v | --version]',
  				'\tcssesc [-h | --help]',
  				'\nExamples:\n',
  				'\tcssesc \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
  				'\tcssesc --identifier \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
  				'\tcssesc --escape-everything \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
  				'\tcssesc --double-quotes --wrap \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
  				'\techo \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\' | cssesc'
  			].join('\n'));
  			return process.exit(1);
  		}
  
  		if (/^(?:-v|--version)$/.test(option)) {
  			log('v%s', cssesc.version);
  			return process.exit(1);
  		}
  
  		strings.forEach(function(string) {
  			// Process options
  			if (/^(?:-i|--identifier)$/.test(string)) {
  				options.isIdentifier = true;
  				return;
  			}
  			if (/^(?:-s|--single-quotes)$/.test(string)) {
  				options.quotes = 'single';
  				return;
  			}
  			if (/^(?:-d|--double-quotes)$/.test(string)) {
  				options.quotes = 'double';
  				return;
  			}
  			if (/^(?:-w|--wrap)$/.test(string)) {
  				options.wrap = true;
  				return;
  			}
  			if (/^(?:-e|--escape-everything)$/.test(string)) {
  				options.escapeEverything = true;
  				return;
  			}
  
  			// Process string(s)
  			var result;
  			try {
  				result = cssesc(string, options);
  				log(result);
  			} catch(error) {
  				log(error.message + '\n');
  				log('Error: failed to escape.');
  				log('If you think this is a bug in cssesc, please report it:');
  				log('https://github.com/mathiasbynens/cssesc/issues/new');
  				log(
  					'\nStack trace using cssesc@%s:\n',
  					cssesc.version
  				);
  				log(error.stack);
  				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();
  	}
  
  }());