codemirror-json-schema
Version:
Codemirror 6 extensions that provide full JSONSchema support for `@codemirror/lang-json` and `codemirror-json5`
50 lines (49 loc) • 1.78 kB
JavaScript
;
/**
* Mimics the behavior of `json-source-map`'s `parseJSONDocument` function using codemirror EditorState... for json5
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseJSON5DocumentState = parseJSON5DocumentState;
exports.parseJSON5Document = parseJSON5Document;
const codemirror_json5_1 = require("codemirror-json5");
const json5_1 = __importDefault(require("json5"));
const state_1 = require("@codemirror/state");
const best_effort_json_parser_1 = require("best-effort-json-parser");
const json_pointers_1 = require("../utils/json-pointers");
const constants_1 = require("../constants");
/**
* Return parsed data and json5 pointers for a given codemirror EditorState
* @group Utilities
*/
function parseJSON5DocumentState(state) {
const stateDoc = state.doc.toString();
let data = null;
try {
data = json5_1.default.parse(stateDoc);
}
catch (_a) {
// try again with best-effort strategy
try {
data = (0, best_effort_json_parser_1.parse)(stateDoc);
}
catch (_b) {
// return pointers regardless of whether JSON.parse succeeds
}
}
const pointers = (0, json_pointers_1.getJsonPointers)(state, constants_1.MODES.JSON5);
return { data, pointers };
}
/**
* Mimics the behavior of `json-source-map`'s `parseJSONDocument` function, for json5!
* @group Utilities
*/
function parseJSON5Document(jsonString) {
const state = state_1.EditorState.create({
doc: jsonString,
extensions: [(0, codemirror_json5_1.json5)()],
});
return parseJSON5DocumentState(state);
}