From b75ca72ea77e0794671dd3cfad2eb5418d6b7c3f Mon Sep 17 00:00:00 2001 From: Sergey Krylov Date: Tue, 13 Oct 2026 20:52:05 +0300 Subject: [PATCH] build: use native openapi-typescript --check (#60) --- .ai/conventions/data.md | 3 ++- package.json | 2 +- scripts/check-openapi.mjs | 45 --------------------------------------- scripts/test-eslint.mjs | 2 +- 4 files changed, 4 insertions(+), 48 deletions(-) delete mode 100644 scripts/check-openapi.mjs diff --git a/.ai/conventions/data.md b/.ai/conventions/data.md index 8c07414..34b6e01 100644 --- a/.ai/conventions/data.md +++ b/.ai/conventions/data.md @@ -30,7 +30,8 @@ backend checkout и не проверяют backend runtime OpenAPI; измен shape/status/route сохраняет публичный контракт предоставленного snapshot. Одна UI-модель не требует менять API. `openapi:generate` работает offline от snapshot; -`openapi:check` генерирует во временный каталог и сравнивает, не меняя tracked files. +`openapi:check` запускает native `--check` того же CLI и падает при устаревших +generated types, не меняя tracked files. ## Auth и invalidation diff --git a/package.json b/package.json index e1b8e0a..81fb376 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "test:coverage": "npm run build:packages && vitest run --coverage", "test:lint": "node --test scripts/test-eslint.mjs", "openapi:generate": "openapi-typescript src/shared/api/spec/openapi.json -o src/shared/api/generated/schema.d.ts", - "openapi:check": "node scripts/check-openapi.mjs", + "openapi:check": "openapi-typescript src/shared/api/spec/openapi.json -o src/shared/api/generated/schema.d.ts --check", "knip": "npm run build:packages && knip", "deps": "npm run build:packages && depcruise src packages --config dependency-cruiser.cjs --output-type err-long", "verify": "npm run build:packages && npm run openapi:check && tsc -b --noEmit && eslint . --max-warnings=0 && npm run test:lint && vitest run --coverage && knip && depcruise src packages --config dependency-cruiser.cjs --output-type err-long && depcruise src packages .storybook/preview.tsx --config .storybook/dependency-cruiser.cjs --output-type err-long && tsc -b && vite build && storybook build --output-dir storybook-static --disable-telemetry", diff --git a/scripts/check-openapi.mjs b/scripts/check-openapi.mjs deleted file mode 100644 index d9a9ac5..0000000 --- a/scripts/check-openapi.mjs +++ /dev/null @@ -1,45 +0,0 @@ -import { spawnSync } from "node:child_process"; -import { mkdtemp, readFile, rm } from "node:fs/promises"; -import { tmpdir } from "node:os"; -import nodePath from "node:path"; - -const temporaryDirectory = await mkdtemp( - nodePath.join(tmpdir(), "wealth-ledger-openapi-"), -); - -const generatedPath = nodePath.join(temporaryDirectory, "schema.d.ts"); -const committedPath = nodePath.resolve("src/shared/api/generated/schema.d.ts"); -const cliPath = nodePath.resolve("node_modules/openapi-typescript/bin/cli.js"); -let exitCode = 0; - -try { - const generated = spawnSync( - process.execPath, - [cliPath, "src/shared/api/spec/openapi.json", "-o", generatedPath], - { encoding: "utf8" }, - ); - - if (generated.status === 0) { - const [committed, current] = await Promise.all([ - readFile(committedPath, "utf8"), - // eslint-disable-next-line security/detect-non-literal-fs-filename -- Path is built from this check’s private mkdtemp directory and fixed filenames. - readFile(generatedPath, "utf8"), - ]); - - if (committed !== current) { - console.error( - "Generated OpenAPI types are stale. Run `npm run openapi:generate` and commit the result.", - ); - exitCode = 1; - } - } - else { - process.stderr.write(generated.stderr || generated.stdout); - exitCode = generated.status ?? 1; - } -} -finally { - await rm(temporaryDirectory, { force: true, recursive: true }); -} - -process.exitCode = exitCode; diff --git a/scripts/test-eslint.mjs b/scripts/test-eslint.mjs index 65fdbe7..9737b8d 100644 --- a/scripts/test-eslint.mjs +++ b/scripts/test-eslint.mjs @@ -85,7 +85,7 @@ test("ESLint enforces the frontend profile and excludes generated artifacts", as "security/detect-non-literal-regexp", ], [ - "scripts/check-openapi.mjs", + "scripts/test-pre-commit.mjs", "import { exec } from \"node:child_process\"; exec(process.argv[2]);", "security/detect-child-process", ], -- 2.54.0