|
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; |
|
|