You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							148 lines
						
					
					
						
							3.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							148 lines
						
					
					
						
							3.7 KiB
						
					
					
				
								#!/usr/bin/env node
							 | 
						|
								(function() {
							 | 
						|
								
							 | 
						|
									var fs = require('fs');
							 | 
						|
									var stringEscape = require('../jsesc.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(
							 | 
						|
												'jsesc v%s - https://mths.be/jsesc',
							 | 
						|
												stringEscape.version
							 | 
						|
											);
							 | 
						|
											log([
							 | 
						|
												'\nUsage:\n',
							 | 
						|
												'\tjsesc [string]',
							 | 
						|
												'\tjsesc [-s | --single-quotes] [string]',
							 | 
						|
												'\tjsesc [-d | --double-quotes] [string]',
							 | 
						|
												'\tjsesc [-w | --wrap] [string]',
							 | 
						|
												'\tjsesc [-e | --escape-everything] [string]',
							 | 
						|
												'\tjsesc [-t | --escape-etago] [string]',
							 | 
						|
												'\tjsesc [-6 | --es6] [string]',
							 | 
						|
												'\tjsesc [-l | --lowercase-hex] [string]',
							 | 
						|
												'\tjsesc [-j | --json] [string]',
							 | 
						|
												'\tjsesc [-o | --object] [stringified_object]', // `JSON.parse()` the argument
							 | 
						|
												'\tjsesc [-p | --pretty] [string]', // `compact: false`
							 | 
						|
												'\tjsesc [-v | --version]',
							 | 
						|
												'\tjsesc [-h | --help]',
							 | 
						|
												'\nExamples:\n',
							 | 
						|
												'\tjsesc \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
							 | 
						|
												'\tjsesc --json \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
							 | 
						|
												'\tjsesc --json --escape-everything \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
							 | 
						|
												'\tjsesc --double-quotes --wrap \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
							 | 
						|
												'\techo \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\' | jsesc'
							 | 
						|
											].join('\n'));
							 | 
						|
											return process.exit(1);
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										if (/^(?:-v|--version)$/.test(option)) {
							 | 
						|
											log('v%s', stringEscape.version);
							 | 
						|
											return process.exit(1);
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										strings.forEach(function(string) {
							 | 
						|
											// Process options
							 | 
						|
											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;
							 | 
						|
											}
							 | 
						|
											if (/^(?:-t|--escape-etago)$/.test(string)) {
							 | 
						|
												options.escapeEtago = true;
							 | 
						|
												return;
							 | 
						|
											}
							 | 
						|
											if (/^(?:-6|--es6)$/.test(string)) {
							 | 
						|
												options.es6 = true;
							 | 
						|
												return;
							 | 
						|
											}
							 | 
						|
											if (/^(?:-l|--lowercase-hex)$/.test(string)) {
							 | 
						|
												options.lowercaseHex = true;
							 | 
						|
												return;
							 | 
						|
											}
							 | 
						|
											if (/^(?:-j|--json)$/.test(string)) {
							 | 
						|
												options.json = true;
							 | 
						|
												return;
							 | 
						|
											}
							 | 
						|
											if (/^(?:-o|--object)$/.test(string)) {
							 | 
						|
												isObject = true;
							 | 
						|
												return;
							 | 
						|
											}
							 | 
						|
											if (/^(?:-p|--pretty)$/.test(string)) {
							 | 
						|
												isObject = true;
							 | 
						|
												options.compact = false;
							 | 
						|
												return;
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
											// Process string(s)
							 | 
						|
											var result;
							 | 
						|
											try {
							 | 
						|
												if (isObject) {
							 | 
						|
													string = JSON.parse(string);
							 | 
						|
												}
							 | 
						|
												result = stringEscape(string, options);
							 | 
						|
												log(result);
							 | 
						|
											} catch(error) {
							 | 
						|
												log(error.message + '\n');
							 | 
						|
												log('Error: failed to escape.');
							 | 
						|
												log('If you think this is a bug in jsesc, please report it:');
							 | 
						|
												log('https://github.com/mathiasbynens/jsesc/issues/new');
							 | 
						|
												log(
							 | 
						|
													'\nStack trace using jsesc@%s:\n',
							 | 
						|
													stringEscape.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) { // called from a non-TTY context
							 | 
						|
											timeout = setTimeout(function() {
							 | 
						|
												// if no piped data arrived after a while, handle shell arguments
							 | 
						|
												main();
							 | 
						|
											}, 250);
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										data = '';
							 | 
						|
										stdin.on('data', function(chunk) {
							 | 
						|
											clearTimeout(timeout);
							 | 
						|
											data += chunk;
							 | 
						|
										});
							 | 
						|
										stdin.on('end', function() {
							 | 
						|
											strings.push(data.trim());
							 | 
						|
											main();
							 | 
						|
										});
							 | 
						|
										stdin.resume();
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
								}());
							 |