| 'use strict'; | 
| const singleComment = Symbol('singleComment'); | 
| const multiComment = Symbol('multiComment'); | 
| const stripWithoutWhitespace = () => ''; | 
| const stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\S/g, ' '); | 
|   | 
| const isEscaped = (jsonString, quotePosition) => { | 
|     let index = quotePosition - 1; | 
|     let backslashCount = 0; | 
|   | 
|     while (jsonString[index] === '\\') { | 
|         index -= 1; | 
|         backslashCount += 1; | 
|     } | 
|   | 
|     return Boolean(backslashCount % 2); | 
| }; | 
|   | 
| module.exports = (jsonString, options = {}) => { | 
|     if (typeof jsonString !== 'string') { | 
|         throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``); | 
|     } | 
|   | 
|     const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; | 
|   | 
|     let insideString = false; | 
|     let insideComment = false; | 
|     let offset = 0; | 
|     let result = ''; | 
|   | 
|     for (let i = 0; i < jsonString.length; i++) { | 
|         const currentCharacter = jsonString[i]; | 
|         const nextCharacter = jsonString[i + 1]; | 
|   | 
|         if (!insideComment && currentCharacter === '"') { | 
|             const escaped = isEscaped(jsonString, i); | 
|             if (!escaped) { | 
|                 insideString = !insideString; | 
|             } | 
|         } | 
|   | 
|         if (insideString) { | 
|             continue; | 
|         } | 
|   | 
|         if (!insideComment && currentCharacter + nextCharacter === '//') { | 
|             result += jsonString.slice(offset, i); | 
|             offset = i; | 
|             insideComment = singleComment; | 
|             i++; | 
|         } else if (insideComment === singleComment && currentCharacter + nextCharacter === '\r\n') { | 
|             i++; | 
|             insideComment = false; | 
|             result += strip(jsonString, offset, i); | 
|             offset = i; | 
|             continue; | 
|         } else if (insideComment === singleComment && currentCharacter === '\n') { | 
|             insideComment = false; | 
|             result += strip(jsonString, offset, i); | 
|             offset = i; | 
|         } else if (!insideComment && currentCharacter + nextCharacter === '/*') { | 
|             result += jsonString.slice(offset, i); | 
|             offset = i; | 
|             insideComment = multiComment; | 
|             i++; | 
|             continue; | 
|         } else if (insideComment === multiComment && currentCharacter + nextCharacter === '*/') { | 
|             i++; | 
|             insideComment = false; | 
|             result += strip(jsonString, offset, i + 1); | 
|             offset = i + 1; | 
|             continue; | 
|         } | 
|     } | 
|   | 
|     return result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset)); | 
| }; |