diff --git a/package-lock.json b/package-lock.json index a024e9d9..e5ae7bbc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,12 +10,12 @@ "license": "MIT", "dependencies": { "@giscus/react": "^2.2.3", - "@spyglassmc/core": "^0.4.14", - "@spyglassmc/java-edition": "^0.3.17", - "@spyglassmc/json": "^0.3.16", - "@spyglassmc/locales": "^0.3.8", - "@spyglassmc/mcdoc": "^0.3.17", - "@spyglassmc/nbt": "^0.3.17", + "@spyglassmc/core": "^0.4.15", + "@spyglassmc/java-edition": "^0.3.19", + "@spyglassmc/json": "^0.3.17", + "@spyglassmc/locales": "^0.3.9", + "@spyglassmc/mcdoc": "^0.3.18", + "@spyglassmc/nbt": "^0.3.18", "@zip.js/zip.js": "^2.4.5", "brace": "^0.11.1", "buffer": "^6.0.3", @@ -740,11 +740,11 @@ } }, "node_modules/@spyglassmc/core": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@spyglassmc/core/-/core-0.4.14.tgz", - "integrity": "sha512-5PIicwc5a8IubXdHCzm4FBjYmhsGH0xGXIk3A+XyQtPTriC6qVd0cdba5pjRPsmUkGA3S2qE2bj/J0qnNJ5dqA==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/@spyglassmc/core/-/core-0.4.15.tgz", + "integrity": "sha512-3nupUJN13rtOgch0NEzTg56oj/hf+jM966lmRNmAiMjb/hUbu8ohDjWMRDxx2Pvdekif/e6jRHNel6bvulA3cQ==", "dependencies": { - "@spyglassmc/locales": "0.3.8", + "@spyglassmc/locales": "0.3.9", "base64-arraybuffer": "^1.0.2", "binary-search": "^1.3.6", "chokidar": "^3.5.2", @@ -758,59 +758,59 @@ } }, "node_modules/@spyglassmc/java-edition": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@spyglassmc/java-edition/-/java-edition-0.3.17.tgz", - "integrity": "sha512-XO7bX/xowN21lwdtqP+6NsGAtfrdXWRcXoe8ByHUxHqtFXwp1ifSY7Lg76nlUm/FSOMM2QXUEh3QDj2Wr0wJyA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@spyglassmc/java-edition/-/java-edition-0.3.19.tgz", + "integrity": "sha512-CHFFGAveCDw9PtqrTbMC9N6rkCk8C/INOvUClnpoIex+++Epj3TOgZgU/uC6iKkFhb0PfGbBWnVqwkvVkf9Muw==", "dependencies": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/json": "0.3.16", - "@spyglassmc/locales": "0.3.8", - "@spyglassmc/mcdoc": "0.3.17", - "@spyglassmc/mcfunction": "0.2.16", - "@spyglassmc/nbt": "0.3.17" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/json": "0.3.17", + "@spyglassmc/locales": "0.3.9", + "@spyglassmc/mcdoc": "0.3.18", + "@spyglassmc/mcfunction": "0.2.17", + "@spyglassmc/nbt": "0.3.18" } }, "node_modules/@spyglassmc/json": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@spyglassmc/json/-/json-0.3.16.tgz", - "integrity": "sha512-rBOeXWjPn1xsuaYECqkX+iclNf0EYqCq6jj8zb1+9IeaEeYSVOEUevKvYNqtk0++5UPBruXbBAOuJI08GRMQWQ==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@spyglassmc/json/-/json-0.3.17.tgz", + "integrity": "sha512-F28eajPqmhTaPBGTHoE3aUvg/Q/VApcY0fF3b6jIY+3Lu2fF9idyDKe87A9Eqj3eKiNMcJBzeWf/ai8xICs3Vg==", "dependencies": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/locales": "0.3.8", - "@spyglassmc/mcdoc": "0.3.17" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/locales": "0.3.9", + "@spyglassmc/mcdoc": "0.3.18" } }, "node_modules/@spyglassmc/locales": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@spyglassmc/locales/-/locales-0.3.8.tgz", - "integrity": "sha512-xkoNkiMbrCmQkdpIedfvr12irHYSL5i8hZiBeDrjPmxN3hXa5+iZrCTeHgO1iEYiuNbKIyxaSpVNAXqj5c4ShA==" + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@spyglassmc/locales/-/locales-0.3.9.tgz", + "integrity": "sha512-91ncF6pe2d3LynVXf9MvKcbKCKOFJkTOcyTv1TS+sEHMyfPXCr5ryavOrRRkXCIuaA9S6eNkOa8na85f7gjhLA==" }, "node_modules/@spyglassmc/mcdoc": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@spyglassmc/mcdoc/-/mcdoc-0.3.17.tgz", - "integrity": "sha512-qX0pamJ6VNzq1F7Ea5lpUY/iQIu8C46bp0XzvQn4rHGKyrl6rty5wo7K9H8gmvuE6CXuq3ion+nP47Dpny8Fqg==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@spyglassmc/mcdoc/-/mcdoc-0.3.18.tgz", + "integrity": "sha512-UkEZhe+bzamCm5KFenPXF+HvwJg4xvgwQFjZvxzv9Fpw8rY6dd9eaSkVPzJn6QkLKJG8bh+rs/MkM4pxnwpEKA==", "dependencies": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/locales": "0.3.8" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/locales": "0.3.9" } }, "node_modules/@spyglassmc/mcfunction": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/@spyglassmc/mcfunction/-/mcfunction-0.2.16.tgz", - "integrity": "sha512-Iwo8Akp/MuIsDkzzCumHfPNK9zgxsVw5sVEq1H6f3RWPJFrnhwx0bQRR80pqjiHhIuli/g2pxv195wsAU1PDHA==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@spyglassmc/mcfunction/-/mcfunction-0.2.17.tgz", + "integrity": "sha512-8nyfeAXGxj7OhjSWWLMUaKTr8vLXxS+eECYzSE/sMCmNPYSm3anBEzR9gGHeU1NuSV01YmrBPIGFtj2AjXAEbA==", "dependencies": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/locales": "0.3.8" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/locales": "0.3.9" } }, "node_modules/@spyglassmc/nbt": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@spyglassmc/nbt/-/nbt-0.3.17.tgz", - "integrity": "sha512-Jk8yjN5HFy/GF6fUjP0oJatz4oNJ1EE6NtfpctjeznQLNG51Xj/FDeJybnKYksM+V/nj7eth9mLyRjkMcTUcAw==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@spyglassmc/nbt/-/nbt-0.3.18.tgz", + "integrity": "sha512-w/bNVACn4FVbfKQeEfuzC9eJXVdKVMKgGMS4PglEvBZ8lnPQROPstixgTUK1cR92htmeZDv30mjqpFlP8iP/Hg==", "dependencies": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/locales": "0.3.8", - "@spyglassmc/mcdoc": "0.3.17" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/locales": "0.3.9", + "@spyglassmc/mcdoc": "0.3.18" } }, "node_modules/@types/diff": { @@ -5169,11 +5169,11 @@ } }, "@spyglassmc/core": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@spyglassmc/core/-/core-0.4.14.tgz", - "integrity": "sha512-5PIicwc5a8IubXdHCzm4FBjYmhsGH0xGXIk3A+XyQtPTriC6qVd0cdba5pjRPsmUkGA3S2qE2bj/J0qnNJ5dqA==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/@spyglassmc/core/-/core-0.4.15.tgz", + "integrity": "sha512-3nupUJN13rtOgch0NEzTg56oj/hf+jM966lmRNmAiMjb/hUbu8ohDjWMRDxx2Pvdekif/e6jRHNel6bvulA3cQ==", "requires": { - "@spyglassmc/locales": "0.3.8", + "@spyglassmc/locales": "0.3.9", "base64-arraybuffer": "^1.0.2", "binary-search": "^1.3.6", "chokidar": "^3.5.2", @@ -5187,59 +5187,59 @@ } }, "@spyglassmc/java-edition": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@spyglassmc/java-edition/-/java-edition-0.3.17.tgz", - "integrity": "sha512-XO7bX/xowN21lwdtqP+6NsGAtfrdXWRcXoe8ByHUxHqtFXwp1ifSY7Lg76nlUm/FSOMM2QXUEh3QDj2Wr0wJyA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@spyglassmc/java-edition/-/java-edition-0.3.19.tgz", + "integrity": "sha512-CHFFGAveCDw9PtqrTbMC9N6rkCk8C/INOvUClnpoIex+++Epj3TOgZgU/uC6iKkFhb0PfGbBWnVqwkvVkf9Muw==", "requires": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/json": "0.3.16", - "@spyglassmc/locales": "0.3.8", - "@spyglassmc/mcdoc": "0.3.17", - "@spyglassmc/mcfunction": "0.2.16", - "@spyglassmc/nbt": "0.3.17" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/json": "0.3.17", + "@spyglassmc/locales": "0.3.9", + "@spyglassmc/mcdoc": "0.3.18", + "@spyglassmc/mcfunction": "0.2.17", + "@spyglassmc/nbt": "0.3.18" } }, "@spyglassmc/json": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@spyglassmc/json/-/json-0.3.16.tgz", - "integrity": "sha512-rBOeXWjPn1xsuaYECqkX+iclNf0EYqCq6jj8zb1+9IeaEeYSVOEUevKvYNqtk0++5UPBruXbBAOuJI08GRMQWQ==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@spyglassmc/json/-/json-0.3.17.tgz", + "integrity": "sha512-F28eajPqmhTaPBGTHoE3aUvg/Q/VApcY0fF3b6jIY+3Lu2fF9idyDKe87A9Eqj3eKiNMcJBzeWf/ai8xICs3Vg==", "requires": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/locales": "0.3.8", - "@spyglassmc/mcdoc": "0.3.17" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/locales": "0.3.9", + "@spyglassmc/mcdoc": "0.3.18" } }, "@spyglassmc/locales": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@spyglassmc/locales/-/locales-0.3.8.tgz", - "integrity": "sha512-xkoNkiMbrCmQkdpIedfvr12irHYSL5i8hZiBeDrjPmxN3hXa5+iZrCTeHgO1iEYiuNbKIyxaSpVNAXqj5c4ShA==" + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@spyglassmc/locales/-/locales-0.3.9.tgz", + "integrity": "sha512-91ncF6pe2d3LynVXf9MvKcbKCKOFJkTOcyTv1TS+sEHMyfPXCr5ryavOrRRkXCIuaA9S6eNkOa8na85f7gjhLA==" }, "@spyglassmc/mcdoc": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@spyglassmc/mcdoc/-/mcdoc-0.3.17.tgz", - "integrity": "sha512-qX0pamJ6VNzq1F7Ea5lpUY/iQIu8C46bp0XzvQn4rHGKyrl6rty5wo7K9H8gmvuE6CXuq3ion+nP47Dpny8Fqg==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@spyglassmc/mcdoc/-/mcdoc-0.3.18.tgz", + "integrity": "sha512-UkEZhe+bzamCm5KFenPXF+HvwJg4xvgwQFjZvxzv9Fpw8rY6dd9eaSkVPzJn6QkLKJG8bh+rs/MkM4pxnwpEKA==", "requires": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/locales": "0.3.8" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/locales": "0.3.9" } }, "@spyglassmc/mcfunction": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/@spyglassmc/mcfunction/-/mcfunction-0.2.16.tgz", - "integrity": "sha512-Iwo8Akp/MuIsDkzzCumHfPNK9zgxsVw5sVEq1H6f3RWPJFrnhwx0bQRR80pqjiHhIuli/g2pxv195wsAU1PDHA==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@spyglassmc/mcfunction/-/mcfunction-0.2.17.tgz", + "integrity": "sha512-8nyfeAXGxj7OhjSWWLMUaKTr8vLXxS+eECYzSE/sMCmNPYSm3anBEzR9gGHeU1NuSV01YmrBPIGFtj2AjXAEbA==", "requires": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/locales": "0.3.8" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/locales": "0.3.9" } }, "@spyglassmc/nbt": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@spyglassmc/nbt/-/nbt-0.3.17.tgz", - "integrity": "sha512-Jk8yjN5HFy/GF6fUjP0oJatz4oNJ1EE6NtfpctjeznQLNG51Xj/FDeJybnKYksM+V/nj7eth9mLyRjkMcTUcAw==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@spyglassmc/nbt/-/nbt-0.3.18.tgz", + "integrity": "sha512-w/bNVACn4FVbfKQeEfuzC9eJXVdKVMKgGMS4PglEvBZ8lnPQROPstixgTUK1cR92htmeZDv30mjqpFlP8iP/Hg==", "requires": { - "@spyglassmc/core": "0.4.14", - "@spyglassmc/locales": "0.3.8", - "@spyglassmc/mcdoc": "0.3.17" + "@spyglassmc/core": "0.4.15", + "@spyglassmc/locales": "0.3.9", + "@spyglassmc/mcdoc": "0.3.18" } }, "@types/diff": { diff --git a/package.json b/package.json index 339ff8a9..21db4bf5 100644 --- a/package.json +++ b/package.json @@ -16,12 +16,12 @@ "license": "MIT", "dependencies": { "@giscus/react": "^2.2.3", - "@spyglassmc/core": "^0.4.14", - "@spyglassmc/java-edition": "^0.3.17", - "@spyglassmc/json": "^0.3.16", - "@spyglassmc/locales": "^0.3.8", - "@spyglassmc/mcdoc": "^0.3.17", - "@spyglassmc/nbt": "^0.3.17", + "@spyglassmc/core": "^0.4.15", + "@spyglassmc/java-edition": "^0.3.19", + "@spyglassmc/json": "^0.3.17", + "@spyglassmc/locales": "^0.3.9", + "@spyglassmc/mcdoc": "^0.3.18", + "@spyglassmc/nbt": "^0.3.18", "@zip.js/zip.js": "^2.4.5", "brace": "^0.11.1", "buffer": "^6.0.3", diff --git a/src/app/components/generator/FileCreation.tsx b/src/app/components/generator/FileCreation.tsx index 062a8450..5bf97df5 100644 --- a/src/app/components/generator/FileCreation.tsx +++ b/src/app/components/generator/FileCreation.tsx @@ -38,7 +38,8 @@ export function FileCreation({ docAndNode, gen, method }: Props) { return } const id = Identifier.parse(fileId.includes(':') || project.namespace === undefined ? fileId : `${project.namespace}:${fileId}`) - const uri = `${getProjectRoot(project)}data/${id.namespace}/${genPath(gen, version)}/${id.path}.json` + const pack = gen.tags?.includes('assets') ? 'assets' : 'data' + const uri = `${getProjectRoot(project)}${pack}/${id.namespace}/${genPath(gen, version)}/${id.path}.json` Analytics.saveProjectFile(method) const text = docAndNode.doc.getText() client.fs.writeFile(uri, text).then(() => { diff --git a/src/app/components/generator/ProjectPanel.tsx b/src/app/components/generator/ProjectPanel.tsx index 3693d636..8cbf2c66 100644 --- a/src/app/components/generator/ProjectPanel.tsx +++ b/src/app/components/generator/ProjectPanel.tsx @@ -72,7 +72,7 @@ export function ProjectPanel() { const res = service?.dissectUri(uri) if (res?.ok) { // This is pretty hacky, improve this in the future when spyglass has a "constructUri" function - const oldSuffix = `/${res.namespace}/${res.path}/${res.identifier}${res.ext}` + const oldSuffix = `${res.pack}/${res.namespace}/${res.path}/${res.identifier}${res.ext}` if (!uri.endsWith(oldSuffix)) { console.warn(`Expected ${uri} to end with ${oldSuffix}`) return @@ -80,7 +80,7 @@ export function ProjectPanel() { const onRename = (newId: string) => { const prefix = uri.substring(0, uri.length - oldSuffix.length) const { namespace, path } = Identifier.parse(newId) - const newUri = prefix + `/${namespace}/${res.path}/${path}${res.ext}` + const newUri = prefix + `${res.pack}/${namespace}/${res.path}/${path}${res.ext}` service?.renameFile(uri, newUri).then(() => { setProjectUri(newUri) }) diff --git a/src/app/services/Spyglass.ts b/src/app/services/Spyglass.ts index a19cb601..4eb8f11d 100644 --- a/src/app/services/Spyglass.ts +++ b/src/app/services/Spyglass.ts @@ -10,7 +10,7 @@ import * as zip from '@zip.js/zip.js' import { TextDocument } from 'vscode-languageserver-textdocument' import type { ConfigGenerator } from '../Config.js' import siteConfig from '../Config.js' -import { computeIfAbsent, genPath, message } from '../Utils.js' +import { computeIfAbsent, genPath } from '../Utils.js' import type { VersionMeta } from './DataFetcher.js' import { fetchBlockStates, fetchRegistries, fetchVanillaMcdoc, fetchVersions, getVersionChecksum } from './DataFetcher.js' import { IndexedDbFileSystem, MixedFileSystem } from './FileSystem.js' @@ -240,7 +240,8 @@ export class SpyglassService { if (gen.id === 'pack_mcmeta') { return `${UNSAVED_URI}pack.mcmeta` } - return `${UNSAVED_URI}data/draft/${genPath(gen, this.version)}/draft.json` + const pack = gen.tags?.includes('assets') ? 'assets' : 'data' + return `${UNSAVED_URI}${pack}/draft/${genPath(gen, this.version)}/draft.json` } public watchFile(uri: string, handler: (docAndNode: core.DocAndNode) => void) { @@ -291,22 +292,6 @@ export class SpyglassService { world: { category: 'world', }, - // TODO: move these to the assets folder - atlases: { - category: 'atlas', - }, - blockstates: { - category: 'block_definition', - }, - font: { - category: 'font', - }, - items: { - category: 'item_definition', - }, - models: { - category: 'model', - }, // Partner resources ...Object.fromEntries(siteConfig.generators.filter(gen => gen.dependency).map(gen => [gen.path ?? gen.id, { @@ -397,55 +382,7 @@ const initialize: core.ProjectInitializer = async (ctx) => { meta.registerSymbolRegistrar('mcmeta-summary', { checksum: versionChecksum, - registrar: je.dependency.symbolRegistrar(summary), - }) - - meta.registerSymbolRegistrar('mcdoc-block-states', { - checksum: versionChecksum, - registrar: (symbols) => { - const uri = 'mcmeta://summary/block_states.json' - symbols.query(uri, 'mcdoc/dispatcher', 'mcdoc:block_states').enter({ - usage: { type: 'declaration' }, - }).onEach(Object.entries(summary.blocks), ([id, [properties]], blockQuery) => { - const data: mcdoc.binder.TypeDefSymbolData = { typeDef: { - kind: 'struct', - fields: Object.entries(properties).map(([propKey, propValues]) => ({ - kind: 'pair', - key: propKey, - optional: true, - type: { - kind: 'union', - members: propValues.map(value => ({ - kind: 'literal', value: { kind: 'string', value }, - })), - }, - })), - } } - blockQuery.member(id, (stateQuery) => { - stateQuery.enter({ - data: { data }, - usage: { type: 'declaration' }, - }) - }) - }) - symbols.query(uri, 'mcdoc/dispatcher', 'mcdoc:block_state_keys').enter({ - usage: { type: 'declaration' }, - }).onEach(Object.entries(summary.blocks), ([id, [properties]], blockQuery) => { - const data: mcdoc.binder.TypeDefSymbolData = { typeDef: { - kind: 'union', - members: Object.keys(properties).map(propKey => ({ - kind: 'literal', - value: { kind: 'string', value: propKey }, - })), - } } - blockQuery.member(id, (stateQuery) => { - stateQuery.enter({ - data: { data }, - usage: { type: 'declaration' }, - }) - }) - }) - }, + registrar: je.dependency.symbolRegistrar(summary, release), }) registerAttributes(meta, release, versions) @@ -455,17 +392,6 @@ const initialize: core.ProjectInitializer = async (ctx) => { je.mcf.initialize(ctx, summary.commands, release) nbt.initialize(ctx) - // Until spyglass registers these correctly - meta.registerFormatter('json:file', (node, ctx) => { - return ctx.meta.getFormatter(node.children[0].type)(node.children[0], ctx) - }) - meta.registerFormatter('json:string', (node) => { - return JSON.stringify(node.value) - }) - meta.registerFormatter('error', () => { - return '' - }) - return { loadedVersion: release } } @@ -527,21 +453,4 @@ function registerAttributes(meta: core.MetaRegistry, release: ReleaseVersion, ve } }, }) - - // Until spyglass implements this attribute itself - mcdoc.runtime.registerAttribute(meta, 'regex_pattern', () => undefined, { - checker: (_, typeDef) => { - if (typeDef.kind !== 'literal' || typeDef.value.kind !== 'string') { - return undefined - } - const pattern = typeDef.value.value - return (node, ctx) => { - try { - RegExp(pattern) - } catch (e) { - ctx.err.report(message(e), node, 2) - } - } - }, - }) }