Remove unnecessary json parsing for presets and snippets

This commit is contained in:
Misode
2024-10-26 23:01:49 +02:00
parent e130cb59eb
commit 4d9e9fa40c
4 changed files with 12 additions and 12 deletions
@@ -42,13 +42,13 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
const ignoreChange = useRef(false) const ignoreChange = useRef(false)
const { value: docAndNode } = useAsync(async () => { const { value: docAndNode } = useAsync(async () => {
let data: unknown = undefined let text: string | undefined = undefined
if (currentPreset && sharedSnippetId) { if (currentPreset && sharedSnippetId) {
setSharedSnippetId(undefined) setSharedSnippetId(undefined)
return AsyncCancel return AsyncCancel
} }
if (currentPreset) { if (currentPreset) {
data = await loadPreset(currentPreset) text = await loadPreset(currentPreset)
ignoreChange.current = true ignoreChange.current = true
} else if (sharedSnippetId) { } else if (sharedSnippetId) {
const snippet = await getSnippet(sharedSnippetId) const snippet = await getSnippet(sharedSnippetId)
@@ -73,22 +73,22 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
} }
Analytics.openSnippet(gen.id, sharedSnippetId, version) Analytics.openSnippet(gen.id, sharedSnippetId, version)
ignoreChange.current = true ignoreChange.current = true
data = snippet.data text = snippet.text
} else if (file) { } else if (file) {
if (project.version && project.version !== version) { if (project.version && project.version !== version) {
changeVersion(project.version, false) changeVersion(project.version, false)
return AsyncCancel return AsyncCancel
} }
ignoreChange.current = true ignoreChange.current = true
data = file.data text = JSON.stringify(file.data, null, 2)
} }
if (!service || !uri) { if (!service || !uri) {
return AsyncCancel return AsyncCancel
} }
if (data) { if (text !== undefined) {
await service.writeFile(uri, JSON.stringify(data, null, 2)) await service.writeFile(uri, text)
} }
// TODO: if data is undefined, set to generator's default // TODO: if text is undefined, set to generator's default
const docAndNode = await service.getFile(uri, () => '{}') const docAndNode = await service.getFile(uri, () => '{}')
Analytics.setGenerator(gen.id) Analytics.setGenerator(gen.id)
return docAndNode return docAndNode
@@ -182,6 +182,7 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
} catch (e) { } catch (e) {
setError(`Cannot load preset ${id} in ${version}`) setError(`Cannot load preset ${id} in ${version}`)
setCurrentPreset(undefined, true) setCurrentPreset(undefined, true)
return undefined
} }
} }
+2 -2
View File
@@ -1,7 +1,7 @@
import * as deepslate19 from 'deepslate/worldgen' import * as deepslate19 from 'deepslate/worldgen'
import { clamp, computeIfAbsent, computeIfAbsentAsync, deepClone, deepEqual, isObject, square } from '../../Utils.js'
import type { VersionId } from '../../services/index.js' import type { VersionId } from '../../services/index.js'
import { checkVersion, fetchAllPresets, fetchPreset } from '../../services/index.js' import { checkVersion, fetchAllPresets, fetchPreset } from '../../services/index.js'
import { clamp, computeIfAbsent, computeIfAbsentAsync, deepClone, deepEqual, isObject, safeJsonParse, square } from '../../Utils.js'
export type ProjectData = Record<string, Record<string, unknown>> export type ProjectData = Record<string, Record<string, unknown>>
@@ -131,7 +131,7 @@ export class Deepslate {
const preset = biomeState.preset.replace(/^minecraft:/, '') const preset = biomeState.preset.replace(/^minecraft:/, '')
const biomes = await computeIfAbsentAsync(this.presetCache, `${version}-${preset}`, async () => { const biomes = await computeIfAbsentAsync(this.presetCache, `${version}-${preset}`, async () => {
const dimension = await fetchPreset(version, 'dimension', preset === 'overworld' ? 'overworld' : 'the_nether') const dimension = await fetchPreset(version, 'dimension', preset === 'overworld' ? 'overworld' : 'the_nether')
return dimension.generator.biome_source.biomes return safeJsonParse(dimension)?.generator.biome_source.biomes
}) })
biomeState = { type: biomeState.type, biomes } biomeState = { type: biomeState.type, biomes }
} }
+1 -1
View File
@@ -139,7 +139,7 @@ export async function fetchPreset(versionId: VersionId, registry: string, id: st
url = `${mcmeta(version, type)}/${type}/minecraft/${registry}/${id}.json` url = `${mcmeta(version, type)}/${type}/minecraft/${registry}/${id}.json`
} }
const res = await fetch(url) const res = await fetch(url)
return await res.json() return await res.text()
} catch (e) { } catch (e) {
throw new Error(`Error occurred while fetching ${registry} preset ${id}: ${message(e)}`) throw new Error(`Error occurred while fetching ${registry} preset ${id}: ${message(e)}`)
} }
+1 -2
View File
@@ -1,5 +1,4 @@
import lz from 'lz-string' import lz from 'lz-string'
import { safeJsonParse } from '../Utils.js'
import type { VersionId } from './Versions.js' import type { VersionId } from './Versions.js'
const API_PREFIX = 'https://snippets.misode.workers.dev' const API_PREFIX = 'https://snippets.misode.workers.dev'
@@ -30,7 +29,7 @@ export async function getSnippet(id: string) {
const snippet = await fetchApi(`/${id}`) const snippet = await fetchApi(`/${id}`)
return { return {
...snippet, ...snippet,
data: safeJsonParse(lz.decompressFromBase64(snippet.data) ?? '{}') ?? {}, text: lz.decompressFromBase64(snippet.data) ?? '{}',
} }
} catch (e) { } catch (e) {
if (e instanceof Error) { if (e instanceof Error) {