diff --git a/eslint.config.ts b/eslint.config.ts index 11f859398..64afb7443 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -83,25 +83,24 @@ export default withNuxt( }, }, eslintPluginJsonSchemaValidator.configs['flat/base'], - // ! JSON Schema generation fails and causes ESLint to crash - // { - // name: 'pronouns-page/validation', - // files: ['locale/**/*.suml'], - // rules: { - // 'json-schema-validator/no-invalid': ['error', { - // schemas: [ - // { - // fileMatch: ['locale/*/config.suml'], - // schema: 'locale/config.schema.json', - // }, - // { - // fileMatch: ['locale/*/nouns/nounsData.suml'], - // schema: 'locale/nounsData.schema.json', - // }, - // ], - // }], - // }, - // }, + { + name: 'pronouns-page/validation', + files: ['locale/**/*.suml'], + rules: { + 'json-schema-validator/no-invalid': ['error', { + schemas: [ + { + fileMatch: ['locale/*/config.suml'], + schema: 'locale/config.schema.json', + }, + { + fileMatch: ['locale/*/nouns/nounsData.suml'], + schema: 'locale/nounsData.schema.json', + }, + ], + }], + }, + }, ) .override('nuxt/javascript', { rules: { diff --git a/locale/generate.ts b/locale/generate.ts index 5ef365085..8f835728a 100644 --- a/locale/generate.ts +++ b/locale/generate.ts @@ -1,6 +1,6 @@ import fs from 'fs/promises'; -// import { createGenerator } from 'ts-json-schema-generator'; +import { createGenerator } from 'ts-json-schema-generator'; import type { Config } from '~~/locale/config.ts'; import localeDescriptions from '~~/locale/locales.ts'; @@ -8,21 +8,20 @@ import { loadSuml } from '~~/server/loader.ts'; const __dirname = new URL('.', import.meta.url).pathname; -// const generateJsonSchema = async (path: string, typeName: string) => { -// const schema = createGenerator({ -// path, -// tsconfig: `${__dirname}/../.nuxt/tsconfig.node.json`, -// strictTuples: true, -// markdownDescription: true, -// // speed up schema generation; type checking happens separately -// skipTypeCheck: true, -// }).createSchema(typeName); - -// await fs.writeFile( -// `${__dirname}/${typeName[0].toLowerCase()}${typeName.substring(1)}.schema.json`, -// `${JSON.stringify(schema, null, 4)}\n`, -// ); -// }; +const generateJsonSchema = async (path: string, typeName: string) => { + const schema = createGenerator({ + path, + tsconfig: `${__dirname}/../.nuxt/tsconfig.node.json`, + strictTuples: true, + markdownDescription: true, + // speed up schema generation; type checking happens separately + skipTypeCheck: true, + }).createSchema(typeName); + await fs.writeFile( + `${__dirname}/${typeName[0].toLowerCase()}${typeName.substring(1)}.schema.json`, + `${JSON.stringify(schema, null, 4)}\n`, + ); +}; const generateFontsModule = async () => { const configByLocale = Object.fromEntries(await Promise.all(localeDescriptions.map(async (locale) => { @@ -39,8 +38,7 @@ const generateFontsModule = async () => { }; await Promise.all([ - // ! throws errors - // generateJsonSchema(`${__dirname}/config.ts`, 'Config'), - // generateJsonSchema(`${__dirname}/../src/nouns.ts`, 'NounsData'), + generateJsonSchema(`${__dirname}/config.ts`, 'Config'), + generateJsonSchema(`${__dirname}/../src/nouns.ts`, 'NounsData'), generateFontsModule(), ]);