mirror of
https://github.com/misode/misode.github.io.git
synced 2026-05-02 07:55:29 +00:00
Remove unnecessary json parsing for presets and snippets
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user