UNPKG

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
"use strict"; /** * 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); }