in packages/angular_devkit/core/src/json/parser.ts [766:842]
function _readValue(context: JsonParserContext, comments = _readBlanks(context)): JsonAstNode {
let result: JsonAstNode;
// Clean up before.
const char = _peek(context);
switch (char) {
case undefined:
throw new UnexpectedEndOfInputException(context);
case '-':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
result = _readNumber(context, comments);
break;
case '.':
case '+':
if ((context.mode & JsonParseMode.LaxNumberParsingAllowed) == 0) {
throw new InvalidJsonCharacterException(context);
}
result = _readNumber(context, comments);
break;
case "'":
case '"':
result = _readString(context, comments);
break;
case 'I':
if ((context.mode & JsonParseMode.NumberConstantsAllowed) == 0) {
throw new InvalidJsonCharacterException(context);
}
result = _readNumber(context, comments);
break;
case 'N':
if ((context.mode & JsonParseMode.NumberConstantsAllowed) == 0) {
throw new InvalidJsonCharacterException(context);
}
result = _readNaN(context, comments);
break;
case 't':
result = _readTrue(context, comments);
break;
case 'f':
result = _readFalse(context, comments);
break;
case 'n':
result = _readNull(context, comments);
break;
case '[':
result = _readArray(context, comments);
break;
case '{':
result = _readObject(context, comments);
break;
default:
throw new InvalidJsonCharacterException(context);
}
// Clean up after.
_readBlanks(context);
return result;
}