-
Notifications
You must be signed in to change notification settings - Fork 40
/
index.js
48 lines (40 loc) · 1.14 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import "./index.css";
import { jsonToSchema } from "../lib";
const setup = () => {
const jsonTextarea = document.getElementById("json");
const graphqlTextarea = document.getElementById("graphql");
const setGraphQLResult = () => {
if (!jsonTextarea.value) {
graphqlTextarea.value = "";
return;
}
try {
const jsonObject = JSON.parse(jsonTextarea.value);
jsonTextarea.value = JSON.stringify(jsonObject, null, 2);
jsonTextarea.classList.remove("invalid");
const schema = jsonToSchema({ jsonInput: jsonTextarea.value });
graphqlTextarea.value = schema.value;
} catch (error) {
jsonTextarea.classList.add("invalid");
graphqlTextarea.value = `Bad JSON:\n${error.message}`;
return;
}
};
const typingTimerLength = 1000;
let timerId = null;
jsonTextarea.addEventListener(
"input",
() => {
if (timerId) {
clearTimeout(timerId);
timerId = null;
}
timerId = setTimeout(() => {
setGraphQLResult();
}, typingTimerLength);
},
false
);
setGraphQLResult();
};
document.addEventListener("DOMContentLoaded", setup);