1- import { EditorState } from "@codemirror/state" ;
2- import { gutter , EditorView , lineNumbers } from "@codemirror/view" ;
3- import { basicSetup } from "codemirror" ;
4- import { history } from "@codemirror/commands" ;
5- import { autocompletion , closeBrackets } from "@codemirror/autocomplete" ;
1+ import { EditorState , StateEffect , StateField } from "@codemirror/state" ;
2+ import {
3+ gutter ,
4+ EditorView ,
5+ lineNumbers ,
6+ drawSelection ,
7+ keymap ,
8+ highlightActiveLineGutter ,
9+ } from "@codemirror/view" ;
10+ // import { basicSetup } from "@codemirror/basic-setup";
611import { lintGutter } from "@codemirror/lint" ;
7- import { bracketMatching , syntaxHighlighting } from "@codemirror/language" ;
12+ import { lintKeymap } from "@codemirror/lint" ;
13+ import { defaultKeymap , history , historyKeymap } from "@codemirror/commands" ;
14+ import {
15+ syntaxHighlighting ,
16+ indentOnInput ,
17+ bracketMatching ,
18+ foldGutter ,
19+ foldKeymap ,
20+ } from "@codemirror/language" ;
821import { oneDarkHighlightStyle , oneDark } from "@codemirror/theme-one-dark" ;
22+ import {
23+ autocompletion ,
24+ completionKeymap ,
25+ closeBrackets ,
26+ closeBracketsKeymap ,
27+ } from "@codemirror/autocomplete" ;
28+
929import { JSONSchema7 } from "json-schema" ;
1030
1131// sample data
1232import { jsonText , json5Text } from "./sample-text" ;
1333import packageJsonSchema from "./package.schema.json" ;
1434
1535// json4
16- import { jsonSchema } from "../src" ;
36+ import { jsonSchema , updateSchema } from "../src/index " ;
1737
1838// json5
1939import { json5Schema } from "../src/json5" ;
@@ -27,12 +47,25 @@ const schema = packageJsonSchema as JSONSchema7;
2747const commonExtensions = [
2848 gutter ( { class : "CodeMirror-lint-markers" } ) ,
2949 bracketMatching ( ) ,
30- basicSetup ,
50+ highlightActiveLineGutter ( ) ,
51+ // basicSetup,
3152 closeBrackets ( ) ,
3253 history ( ) ,
3354 autocompletion ( ) ,
3455 lineNumbers ( ) ,
3556 lintGutter ( ) ,
57+ indentOnInput ( ) ,
58+ drawSelection ( ) ,
59+ foldGutter ( ) ,
60+ keymap . of ( [
61+ ...closeBracketsKeymap ,
62+ ...defaultKeymap ,
63+ ...historyKeymap ,
64+ ...foldKeymap ,
65+ ...completionKeymap ,
66+ ...lintKeymap ,
67+ ] ) ,
68+
3669 oneDark ,
3770 EditorView . lineWrapping ,
3871 EditorState . tabSize . of ( 2 ) ,
@@ -48,7 +81,7 @@ const state = EditorState.create({
4881 extensions : [ commonExtensions , jsonSchema ( schema ) ] ,
4982} ) ;
5083
51- new EditorView ( {
84+ const editor1 = new EditorView ( {
5285 state,
5386 parent : document . querySelector ( "#editor" ) ! ,
5487} ) ;
@@ -61,12 +94,31 @@ const json5State = EditorState.create({
6194 extensions : [ commonExtensions , json5Schema ( schema ) ] ,
6295} ) ;
6396
64- new EditorView ( {
97+ const editor2 = new EditorView ( {
6598 state : json5State ,
6699 parent : document . querySelector ( "#editor-json5" ) ! ,
67100} ) ;
101+ const handleSchema = ( newSchema : JSONSchema7 ) => {
102+ updateSchema ( editor1 , newSchema ) ;
103+ updateSchema ( editor2 , newSchema ) ;
104+ } ;
68105
106+ handleSchema ( schema ) ;
107+ // new EditorState.fi(editor1, editor2);
69108// Hot Module Replacement
70109// if (module.hot) {
71110// module.hot.accept();
72111// }
112+
113+ const schemaSelect = document . getElementById ( "schema-selection" ) ;
114+
115+ schemaSelect ! . onchange = async ( e ) => {
116+ const val = e . target ! . value ! ;
117+ if ( ! val ) {
118+ return ;
119+ }
120+ const data = await (
121+ await fetch ( `https://json.schemastore.org/${ val } ` )
122+ ) . json ( ) ;
123+ handleSchema ( data ) ;
124+ } ;
0 commit comments