#!/usr/bin/env node import { readFile } from "node:fs/promises"; import yaml from "yaml"; import { setMetaSchemaOutputFormat, validate } from "@hyperjump/json-schema/openapi-3-1"; import { BASIC } from "@hyperjump/json-schema/experimental"; const defaultOutputFormat = BASIC; if (process.argv.length < 3) { console.log(`Usage: validate [--schema=schema] [--format=${defaultOutputFormat}] path-to-file.yaml`); console.log("\t--schema: (schema (default) | schema-base) The name of the schema file to use"); console.log(`\t--format: (Default: ${defaultOutputFormat}) The JSON Schema output format to use. Options: FLAG, BASIC, DETAILED, VERBOSE`); process.exit(1); } const args = process.argv.reduce((acc, arg) => { if (!arg.startsWith("--")) return acc; const [argName, argValue] = arg.substring(2).split("=", 2); return { ...acc, [argName]: argValue }; }, {}); const schemaType = args.schema || "schema"; const outputFormat = args.format || defaultOutputFormat; // Config setMetaSchemaOutputFormat(outputFormat); // Compile / meta-validate const validateOpenApi = await validate(`./schemas/v3.1/${schemaType}.json`); // Validate instance const instanceYaml = await readFile(`${process.argv[process.argv.length - 1]}`, "utf8"); const instance = yaml.parse(instanceYaml); const results = validateOpenApi(instance, outputFormat); console.log(JSON.stringify(results, null, " "));