Files
openrusrouter-mcp/scripts/gen-types.mjs
T
vasyanskandClaude Opus 5.5 ade6eb82df Заведи каркас пакета и утилитный слой MCP-сервера
package.json, tsconfig, eslint, генерация типов из OpenAPI-спеки,
модули config/redact/errors/money/sanitize/cache с тестами и
обезличенные фикстуры живых ответов API openrusrouter.ru.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 10:48:00 +07:00

31 lines
1.8 KiB
JavaScript

#!/usr/bin/env node
// Генерирует типы TypeScript из публичной OpenAPI-спеки openrusrouter.ru.
// Источник переопределяется переменной SPEC_URL (например, локальный стенд).
// Результат коммитится: сборка пакета не должна зависеть от сети.
import { mkdirSync, writeFileSync } from "node:fs";
import { dirname, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import openapiTS, { astToString } from "openapi-typescript";
const DEFAULT_SPEC_URL = "https://openrusrouter.ru/docs/spec.json";
const specUrl = new URL(process.env.SPEC_URL || DEFAULT_SPEC_URL);
if (specUrl.protocol !== "https:" && specUrl.protocol !== "file:" &&
!(specUrl.protocol === "http:" && ["localhost", "127.0.0.1", "[::1]"].includes(specUrl.hostname))) {
console.error(`gen-types: недопустимый SPEC_URL (${specUrl.protocol}//${specUrl.host}) — нужен https или http://localhost`);
process.exit(1);
}
const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
const out = resolve(root, "src/generated/openapi.d.ts");
const ast = await openapiTS(specUrl);
const header =
"/**\n" +
" * Сгенерировано scripts/gen-types.mjs из OpenAPI-спеки openrusrouter.ru — не править руками.\n" +
" * Внимание: спека расходится с реальными ответами в части полей (см. test/fixtures);\n" +
" * источник правды о форме ответа — фикстуры живых ответов, а не эти типы.\n" +
" */\n";
mkdirSync(dirname(out), { recursive: true });
writeFileSync(out, header + astToString(ast));
console.error(`gen-types: записано ${out}`);