diff --git a/package-lock.json b/package-lock.json index 571c0d8d..bac5819c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,14 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@mcschema/core": "^0.12.16", + "@mcschema/core": "^0.12.17", "@mcschema/java-1.15": "^0.2.2", "@mcschema/java-1.16": "^0.6.5", "@mcschema/java-1.17": "^0.2.24", "@mcschema/java-1.18": "^0.2.2", "@mcschema/locales": "^0.1.38", + "buffer": "^6.0.3", + "comment-json": "^4.1.1", "deepslate": "^0.9.0-beta.6", "deepslate-rs": "^0.1.6", "howler": "^2.2.3", @@ -323,9 +325,9 @@ } }, "node_modules/@mcschema/core": { - "version": "0.12.16", - "resolved": "https://registry.npmjs.org/@mcschema/core/-/core-0.12.16.tgz", - "integrity": "sha512-iZwNW7VvBBSa4npt0lqI+zxnJ6FoxcbODeON3Tcvdt2OrJSqqqo0ZLYVnwj1ugF9TqVgVDM0w/4Qb2PGe518gg==" + "version": "0.12.17", + "resolved": "https://registry.npmjs.org/@mcschema/core/-/core-0.12.17.tgz", + "integrity": "sha512-viG+TsWcZ6aSsXNQ5Ipwk91Yb1m4zSA1sVAsDaFTX9/C3dflk9PKHKUaMP+SV89AxHVqLC9YlR3jde3y7azE3A==" }, "node_modules/@mcschema/java-1.15": { "version": "0.2.2", @@ -810,6 +812,11 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==" + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -843,6 +850,25 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -888,6 +914,29 @@ "url": "https://opencollective.com/browserslist" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -950,6 +999,21 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, + "node_modules/comment-json": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.1.1.tgz", + "integrity": "sha512-v8gmtPvxhBlhdRBLwdHSjGy9BgA23t9H1FctdQKyUrErPjSrJcdDMqBq9B4Irtm7w3TNYLQJNH6ARKnpyag1sA==", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.2", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -965,6 +1029,11 @@ "safe-buffer": "~5.1.1" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1686,11 +1755,38 @@ "node": ">=4" } }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/howler": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.3.tgz", "integrity": "sha512-QM0FFkw0LRX1PR8pNzJVAY25JhIWvbKMBFM4gqk+QdV+kPXOhleWGCB6AiAF/goGjIHK2e/nIElplvjQwhr0jg==" }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -2208,6 +2304,14 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -2986,9 +3090,9 @@ } }, "@mcschema/core": { - "version": "0.12.16", - "resolved": "https://registry.npmjs.org/@mcschema/core/-/core-0.12.16.tgz", - "integrity": "sha512-iZwNW7VvBBSa4npt0lqI+zxnJ6FoxcbODeON3Tcvdt2OrJSqqqo0ZLYVnwj1ugF9TqVgVDM0w/4Qb2PGe518gg==" + "version": "0.12.17", + "resolved": "https://registry.npmjs.org/@mcschema/core/-/core-0.12.17.tgz", + "integrity": "sha512-viG+TsWcZ6aSsXNQ5Ipwk91Yb1m4zSA1sVAsDaFTX9/C3dflk9PKHKUaMP+SV89AxHVqLC9YlR3jde3y7azE3A==" }, "@mcschema/java-1.15": { "version": "0.2.2", @@ -3340,6 +3444,11 @@ "sprintf-js": "~1.0.2" } }, + "array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==" + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -3365,6 +3474,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3397,6 +3511,15 @@ "node-releases": "^1.1.71" } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3446,6 +3569,18 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, + "comment-json": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.1.1.tgz", + "integrity": "sha512-v8gmtPvxhBlhdRBLwdHSjGy9BgA23t9H1FctdQKyUrErPjSrJcdDMqBq9B4Irtm7w3TNYLQJNH6ARKnpyag1sA==", + "requires": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.2", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3461,6 +3596,11 @@ "safe-buffer": "~5.1.1" } }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -4006,11 +4146,21 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==" + }, "howler": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.3.tgz", "integrity": "sha512-QM0FFkw0LRX1PR8pNzJVAY25JhIWvbKMBFM4gqk+QdV+kPXOhleWGCB6AiAF/goGjIHK2e/nIElplvjQwhr0jg==" }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -4393,6 +4543,11 @@ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", diff --git a/package.json b/package.json index d0236aa4..390fed41 100644 --- a/package.json +++ b/package.json @@ -15,12 +15,14 @@ "author": "Misode", "license": "MIT", "dependencies": { - "@mcschema/core": "^0.12.16", + "@mcschema/core": "^0.12.17", "@mcschema/java-1.15": "^0.2.2", "@mcschema/java-1.16": "^0.6.5", "@mcschema/java-1.17": "^0.2.24", "@mcschema/java-1.18": "^0.2.2", "@mcschema/locales": "^0.1.38", + "buffer": "^6.0.3", + "comment-json": "^4.1.1", "deepslate": "^0.9.0-beta.6", "deepslate-rs": "^0.1.6", "howler": "^2.2.3", diff --git a/src/app/components/generator/SourcePanel.tsx b/src/app/components/generator/SourcePanel.tsx index 61331f3e..e6e3cbaf 100644 --- a/src/app/components/generator/SourcePanel.tsx +++ b/src/app/components/generator/SourcePanel.tsx @@ -1,4 +1,5 @@ import { DataModel, ModelPath } from '@mcschema/core' +import json from 'comment-json' import yaml from 'js-yaml' import { useCallback, useEffect, useRef, useState } from 'preact/hooks' import { Btn, BtnMenu } from '..' @@ -23,8 +24,8 @@ const FORMATS: Record string, }> = { json: { - parse: JSON.parse, - stringify: (v, i) => JSON.stringify(v, null, i), + parse: json.parse, + stringify: (v, i) => json.stringify(v, null, i), }, yaml: { parse: yaml.load, diff --git a/src/app/pages/Home.tsx b/src/app/pages/Home.tsx index f7ea1e1b..64988bcf 100644 --- a/src/app/pages/Home.tsx +++ b/src/app/pages/Home.tsx @@ -11,7 +11,6 @@ type HomeProps = { export function Home({ lang, changeTitle }: HomeProps) { const loc = locale.bind(null, lang) changeTitle(loc('title.home')) - console.log(config.generators) return
diff --git a/src/app/schema/transformOutput.ts b/src/app/schema/transformOutput.ts index 3b90d11c..d39b9b73 100644 --- a/src/app/schema/transformOutput.ts +++ b/src/app/schema/transformOutput.ts @@ -16,9 +16,13 @@ export const transformOutput: Hook<[any, OutputProps], any> = { list({ children }, path, value, props) { if (!Array.isArray(value)) return value - return value.map((obj, index) => + const res = value.map((obj, index) => children.hook(this, path.push(index), obj.node, props) ) + for (const a of Object.getOwnPropertySymbols(value)) { + res[a as any] = value[a as any] + } + return res }, map({ children, config }, path, value, props) { @@ -31,6 +35,9 @@ export const transformOutput: Hook<[any, OutputProps], any> = { } res[f] = children.hook(this, path.push(f), value[f], props) }) + for (const a of Object.getOwnPropertySymbols(value)) { + res[a as any] = value[a] + } return res }, @@ -48,6 +55,9 @@ export const transformOutput: Hook<[any, OutputProps], any> = { res[f] = out } }) + for (const a of Object.getOwnPropertySymbols(value)) { + res[a as any] = value[a] + } return res }, }