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

View File

@@ -42,13 +42,13 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
const ignoreChange = useRef(false)
const { value: docAndNode } = useAsync(async () => {
let data: unknown = undefined
let text: string | undefined = undefined
if (currentPreset && sharedSnippetId) {
setSharedSnippetId(undefined)
return AsyncCancel
}
if (currentPreset) {
data = await loadPreset(currentPreset)
text = await loadPreset(currentPreset)
ignoreChange.current = true
} else if (sharedSnippetId) {
const snippet = await getSnippet(sharedSnippetId)
@@ -73,22 +73,22 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
}
Analytics.openSnippet(gen.id, sharedSnippetId, version)
ignoreChange.current = true
data = snippet.data
text = snippet.text
} else if (file) {
if (project.version && project.version !== version) {
changeVersion(project.version, false)
return AsyncCancel
}
ignoreChange.current = true
data = file.data
text = JSON.stringify(file.data, null, 2)
}
if (!service || !uri) {
return AsyncCancel
}
if (data) {
await service.writeFile(uri, JSON.stringify(data, null, 2))
if (text !== undefined) {
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, () => '{}')
Analytics.setGenerator(gen.id)
return docAndNode
@@ -182,6 +182,7 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
} catch (e) {
setError(`Cannot load preset ${id} in ${version}`)
setCurrentPreset(undefined, true)
return undefined
}
}

View File

@@ -1,7 +1,7 @@
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 { 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>>
@@ -131,7 +131,7 @@ export class Deepslate {
const preset = biomeState.preset.replace(/^minecraft:/, '')
const biomes = await computeIfAbsentAsync(this.presetCache, `${version}-${preset}`, async () => {
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 }
}

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`
}
const res = await fetch(url)
return await res.json()
return await res.text()
} catch (e) {
throw new Error(`Error occurred while fetching ${registry} preset ${id}: ${message(e)}`)
}

View File

@@ -1,5 +1,4 @@
import lz from 'lz-string'
import { safeJsonParse } from '../Utils.js'
import type { VersionId } from './Versions.js'
const API_PREFIX = 'https://snippets.misode.workers.dev'
@@ -30,7 +29,7 @@ export async function getSnippet(id: string) {
const snippet = await fetchApi(`/${id}`)
return {
...snippet,
data: safeJsonParse(lz.decompressFromBase64(snippet.data) ?? '{}') ?? {},
text: lz.decompressFromBase64(snippet.data) ?? '{}',
}
} catch (e) {
if (e instanceof Error) {