Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/FoxxMD/multi-scrobbler. Scrobble plays from multiple sources to multiple clients docs.multi-scrobbler.app
Something went wrong. Try again.
2.3 kB · 65 lines
TypeScript
at database
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465import { resolve } from "path";import { projectDir } from "../common/index.js";import { Definition as TSJDefinition, createFormatter, CompletedConfig as TSJCompletedConfig, DEFAULT_CONFIG, createProgram, createParser, SchemaGenerator, LiteralType, LiteralTypeFormatter} from "ts-json-schema-generator";import { MaybeLogger } from '../common/MaybeLogger.js';
// https://github.com/vega/ts-json-schema-generator/issues/1899#issuecomment-2407674526// https://github.com/vega/ts-json-schema-generator?tab=readme-ov-file#custom-formattingclass CustomLiteralTypeFormatter extends LiteralTypeFormatter { public getDefinition(type: LiteralType): TSJDefinition { const result = super.getDefinition(type);
if ("const" in result && result.const) { return { type: result.type, enum: [result.const] }; }
return result; }}
const tsjConfig: TSJCompletedConfig = { ...DEFAULT_CONFIG, sortProps: false, additionalProperties: true, markdownDescription: true, minify: false, topRef: false, path: resolve(projectDir, "src/backend/common/infrastructure/config/aioConfig.ts"), tsconfig: resolve(projectDir, "src/backend/tsconfig.json"),};
const formatter = createFormatter(tsjConfig, (fmt, circularReferenceTypeFormatter) => { fmt.addTypeFormatter(new CustomLiteralTypeFormatter());});
let vegaGenerator: SchemaGenerator;
export const createVegaGenerator = (logger: MaybeLogger = new MaybeLogger()) => { if(vegaGenerator === undefined) { logger.info('Generating schema definitions...'); const program = createProgram(tsjConfig); const parser = createParser(program, tsjConfig); vegaGenerator = new SchemaGenerator(program, parser, formatter, tsjConfig); logger.info('Schema definitions generated'); } return vegaGenerator;}
export const getTypeSchemaFromConfigGenerator = (type: string, logger: MaybeLogger = new MaybeLogger()): any => { const generator = createVegaGenerator(logger); const schema = generator.createSchema(type) return schema;}
export const getSchemaForType = (type: string, logger: MaybeLogger = new MaybeLogger()): any => { return getTypeSchemaFromConfigGenerator(type, logger);}