diff --git a/src/app/components/generator/SchemaGenerator.tsx b/src/app/components/generator/SchemaGenerator.tsx index 0d87c44a..70963bb5 100644 --- a/src/app/components/generator/SchemaGenerator.tsx +++ b/src/app/components/generator/SchemaGenerator.tsx @@ -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 } } diff --git a/src/app/components/previews/Deepslate.ts b/src/app/components/previews/Deepslate.ts index 7135dc7d..fd9ccbc6 100644 --- a/src/app/components/previews/Deepslate.ts +++ b/src/app/components/previews/Deepslate.ts @@ -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> @@ -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 } } diff --git a/src/app/services/DataFetcher.ts b/src/app/services/DataFetcher.ts index b68b53c2..28a9d405 100644 --- a/src/app/services/DataFetcher.ts +++ b/src/app/services/DataFetcher.ts @@ -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)}`) } diff --git a/src/app/services/Sharing.ts b/src/app/services/Sharing.ts index 1b780eaf..5cdae21b 100644 --- a/src/app/services/Sharing.ts +++ b/src/app/services/Sharing.ts @@ -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) {