| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 'use strict';var singleComment = 1;var multiComment = 2;function stripWithoutWhitespace() {	return '';}function stripWithWhitespace(str, start, end) {	return str.slice(start, end).replace(/\S/g, ' ');}module.exports = function (str, opts) {	opts = opts || {};	var currentChar;	var nextChar;	var insideString = false;	var insideComment = false;	var offset = 0;	var ret = '';	var strip = opts.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace;	for (var i = 0; i < str.length; i++) {		currentChar = str[i];		nextChar = str[i + 1];		if (!insideComment && currentChar === '"') {			var escaped = str[i - 1] === '\\' && str[i - 2] !== '\\';			if (!escaped) {				insideString = !insideString;			}		}		if (insideString) {			continue;		}		if (!insideComment && currentChar + nextChar === '//') {			ret += str.slice(offset, i);			offset = i;			insideComment = singleComment;			i++;		} else if (insideComment === singleComment && currentChar + nextChar === '\r\n') {			i++;			insideComment = false;			ret += strip(str, offset, i);			offset = i;			continue;		} else if (insideComment === singleComment && currentChar === '\n') {			insideComment = false;			ret += strip(str, offset, i);			offset = i;		} else if (!insideComment && currentChar + nextChar === '/*') {			ret += str.slice(offset, i);			offset = i;			insideComment = multiComment;			i++;			continue;		} else if (insideComment === multiComment && currentChar + nextChar === '*/') {			i++;			insideComment = false;			ret += strip(str, offset, i + 1);			offset = i + 1;			continue;		}	}	return ret + (insideComment ? strip(str.substr(offset)) : str.substr(offset));};
 |