| import jq from "jq-web"; | |
| import toast from "react-hot-toast"; | |
| import useFile from "src/store/useFile"; | |
| import useJson from "src/store/useJson"; | |
| const useJsonQuery = () => { | |
| const getJson = useJson(state => state.getJson); | |
| const setContents = useFile(state => state.setContents); | |
| const transformer = async ({ value }) => { | |
| const { run } = await import("json_typegen_wasm"); | |
| return run("Root", value, JSON.stringify({ output_mode: "typescript/typealias" })); | |
| }; | |
| const updateJson = (query: string, cb?: () => void) => { | |
| try { | |
| const res = jq.json(JSON.parse(getJson()), query); | |
| setContents({ contents: JSON.stringify(res, null, 2) }); | |
| cb?.(); | |
| } catch (error) { | |
| console.error(error); | |
| toast.error("Unable to process the request."); | |
| } | |
| }; | |
| const getJsonType = async () => { | |
| const types = await transformer({ value: getJson() }); | |
| return types; | |
| }; | |
| return { updateJson, getJsonType }; | |
| }; | |
| export default useJsonQuery; | |