use-monaco
Version:
[](https://npm.im/use-monaco)
64 lines • 2.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseJSONWithComments = void 0;
function parseJSONWithComments(json) {
var tokenizer = /"|(\/\*)|(\*\/)|(\/\/)|\n|\r/g, in_string = false, in_multiline_comment = false, in_singleline_comment = false, tmp, tmp2, new_str = [], ns = 0, from = 0, lc, rc;
tokenizer.lastIndex = 0;
while ((tmp = tokenizer.exec(json))) {
// @ts-ignore
lc = RegExp.leftContext;
// @ts-ignore
rc = RegExp.rightContext;
if (!in_multiline_comment && !in_singleline_comment) {
tmp2 = lc.substring(from);
if (!in_string) {
tmp2 = tmp2.replace(/(\n|\r|\s)*/g, '');
}
new_str[ns++] = tmp2;
}
from = tokenizer.lastIndex;
if (tmp[0] == '"' && !in_multiline_comment && !in_singleline_comment) {
tmp2 = lc.match(/(\\)*$/);
if (!in_string || !tmp2 || tmp2[0].length % 2 == 0) {
// start of string with ", or unescaped " character found to end string
in_string = !in_string;
}
from--; // include " character in next catch
rc = json.substring(from);
}
else if (tmp[0] == '/*' &&
!in_string &&
!in_multiline_comment &&
!in_singleline_comment) {
in_multiline_comment = true;
}
else if (tmp[0] == '*/' &&
!in_string &&
in_multiline_comment &&
!in_singleline_comment) {
in_multiline_comment = false;
}
else if (tmp[0] == '//' &&
!in_string &&
!in_multiline_comment &&
!in_singleline_comment) {
in_singleline_comment = true;
}
else if ((tmp[0] == '\n' || tmp[0] == '\r') &&
!in_string &&
!in_multiline_comment &&
in_singleline_comment) {
in_singleline_comment = false;
}
else if (!in_multiline_comment &&
!in_singleline_comment &&
!/\n|\r|\s/.test(tmp[0])) {
new_str[ns++] = tmp[0];
}
}
new_str[ns++] = rc;
return new_str.join('').replace(/,}/, '}');
}
exports.default = parseJSONWithComments;
exports.parseJSONWithComments = parseJSONWithComments;
//# sourceMappingURL=strip-comments.js.map