basant307/AI_Governance_Project
045
1'use strict';2const singleComment = Symbol('singleComment');3const multiComment = Symbol('multiComment');4const stripWithoutWhitespace = () => '';5const stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\S/g, ' ');6 7const isEscaped = (jsonString, quotePosition) => {8 let index = quotePosition - 1;9 let backslashCount = 0;10 11 while (jsonString[index] === '\\') {12 index -= 1;13 backslashCount += 1;14 }15 16 return Boolean(backslashCount % 2);17};18 19module.exports = (jsonString, options = {}) => {20 if (typeof jsonString !== 'string') {21 throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``);22 }23 24 const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace;25 26 let insideString = false;27 let insideComment = false;28 let offset = 0;29 let result = '';30 31 for (let i = 0; i < jsonString.length; i++) {32 const currentCharacter = jsonString[i];33 const nextCharacter = jsonString[i + 1];34 35 if (!insideComment && currentCharacter === '"') {36 const escaped = isEscaped(jsonString, i);37 if (!escaped) {38 insideString = !insideString;39 }40 }41 42 if (insideString) {43 continue;44 }45 46 if (!insideComment && currentCharacter + nextCharacter === '//') {47 result += jsonString.slice(offset, i);48 offset = i;49 insideComment = singleComment;50 i++;51 } else if (insideComment === singleComment && currentCharacter + nextCharacter === '\r\n') {52 i++;53 insideComment = false;54 result += strip(jsonString, offset, i);55 offset = i;56 continue;57 } else if (insideComment === singleComment && currentCharacter === '\n') {58 insideComment = false;59 result += strip(jsonString, offset, i);60 offset = i;61 } else if (!insideComment && currentCharacter + nextCharacter === '/*') {62 result += jsonString.slice(offset, i);63 offset = i;64 insideComment = multiComment;65 i++;66 continue;67 } else if (insideComment === multiComment && currentCharacter + nextCharacter === '*/') {68 i++;69 insideComment = false;70 result += strip(jsonString, offset, i + 1);71 offset = i + 1;72 continue;73 }74 }75 76 return result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset));77};78 