From b593bea8ca06159a6364c691dd2a9ee362f88be8 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 11 May 2026 08:09:17 +0200 Subject: [PATCH] fix(generators): wire lint+typecheck into pipeline and fix uncovered errors The turbo/generators package shipped without `lint` or `typecheck` scripts, so `pnpm lint` / `pnpm typecheck` at the root silently skipped it. This masked 2 ESLint errors (unused imports) and 11 TypeScript errors (relative imports missing the `.js` extension required by `moduleResolution: NodeNext`, plus JSON imports missing the `with { type: "json" }` attribute). - Add `lint` and `typecheck` scripts to turbo/generators/package.json so the turbo pipeline picks them up (lint: 14/14, was 13/13). - Add `.js` extensions to 7 relative imports across config.test.ts, lib/core-package-utils.test.ts, lib/snapshot.test.ts, and the 4 e2e tests. - Add `with { type: "json" }` attributes to 4 snapshot JSON imports in the e2e tests. - Remove unused `existsSync` and `splicePluginImportsAt` imports from lib/core-package-utils.test.ts. - Declare `@repo/core-typescript` + `typescript` devDependencies so the generators package can run `tsc --noEmit` for typecheck. Co-Authored-By: Claude Opus 4.7 (1M context) --- pnpm-lock.yaml | 6 ++++++ turbo/generators/__tests__/core-package-events.e2e.test.ts | 4 ++-- .../generators/__tests__/core-package-realtime.e2e.test.ts | 4 ++-- turbo/generators/__tests__/core-package-trpc.e2e.test.ts | 4 ++-- turbo/generators/__tests__/core-package-ui.e2e.test.ts | 4 ++-- turbo/generators/config.test.ts | 2 +- turbo/generators/lib/core-package-utils.test.ts | 4 +--- turbo/generators/lib/snapshot.test.ts | 2 +- turbo/generators/package.json | 6 +++++- 9 files changed, 22 insertions(+), 14 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e29d964..60fc197 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -751,6 +751,12 @@ importers: '@repo/core-eslint': specifier: workspace:* version: link:../../packages/core-eslint + '@repo/core-typescript': + specifier: workspace:* + version: link:../../packages/core-typescript + typescript: + specifier: ^5.8.0 + version: 5.9.3 vitest: specifier: ^3.1.0 version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0) diff --git a/turbo/generators/__tests__/core-package-events.e2e.test.ts b/turbo/generators/__tests__/core-package-events.e2e.test.ts index e5b7c1e..8c7fbf0 100644 --- a/turbo/generators/__tests__/core-package-events.e2e.test.ts +++ b/turbo/generators/__tests__/core-package-events.e2e.test.ts @@ -4,8 +4,8 @@ import { tmpdir } from "node:os"; import { execSync } from "node:child_process"; import { join, resolve } from "node:path"; import { fileURLToPath } from "node:url"; -import { computeSnapshot } from "../lib/snapshot"; -import expectedSnapshot from "../__snapshots__/core-package/events.snapshot.json"; +import { computeSnapshot } from "../lib/snapshot.js"; +import expectedSnapshot from "../__snapshots__/core-package/events.snapshot.json" with { type: "json" }; // Repo root is 2 levels up from turbo/generators/__tests__ const REPO_ROOT = resolve(fileURLToPath(import.meta.url), "..", "..", "..", ".."); diff --git a/turbo/generators/__tests__/core-package-realtime.e2e.test.ts b/turbo/generators/__tests__/core-package-realtime.e2e.test.ts index 7fe157d..d976b44 100644 --- a/turbo/generators/__tests__/core-package-realtime.e2e.test.ts +++ b/turbo/generators/__tests__/core-package-realtime.e2e.test.ts @@ -4,8 +4,8 @@ import { tmpdir } from "node:os"; import { execSync } from "node:child_process"; import { join, resolve } from "node:path"; import { fileURLToPath } from "node:url"; -import { computeSnapshot } from "../lib/snapshot"; -import expectedSnapshot from "../__snapshots__/core-package/realtime.snapshot.json"; +import { computeSnapshot } from "../lib/snapshot.js"; +import expectedSnapshot from "../__snapshots__/core-package/realtime.snapshot.json" with { type: "json" }; // Repo root is 2 levels up from turbo/generators/__tests__ const REPO_ROOT = resolve(fileURLToPath(import.meta.url), "..", "..", "..", ".."); diff --git a/turbo/generators/__tests__/core-package-trpc.e2e.test.ts b/turbo/generators/__tests__/core-package-trpc.e2e.test.ts index 60310a8..55774e3 100644 --- a/turbo/generators/__tests__/core-package-trpc.e2e.test.ts +++ b/turbo/generators/__tests__/core-package-trpc.e2e.test.ts @@ -4,8 +4,8 @@ import { tmpdir } from "node:os"; import { execSync } from "node:child_process"; import { join, resolve } from "node:path"; import { fileURLToPath } from "node:url"; -import { computeSnapshot } from "../lib/snapshot"; -import expectedSnapshot from "../__snapshots__/core-package/trpc.snapshot.json"; +import { computeSnapshot } from "../lib/snapshot.js"; +import expectedSnapshot from "../__snapshots__/core-package/trpc.snapshot.json" with { type: "json" }; // Repo root is 2 levels up from turbo/generators/__tests__ const REPO_ROOT = resolve(fileURLToPath(import.meta.url), "..", "..", "..", ".."); diff --git a/turbo/generators/__tests__/core-package-ui.e2e.test.ts b/turbo/generators/__tests__/core-package-ui.e2e.test.ts index e46c39b..ac85741 100644 --- a/turbo/generators/__tests__/core-package-ui.e2e.test.ts +++ b/turbo/generators/__tests__/core-package-ui.e2e.test.ts @@ -4,8 +4,8 @@ import { tmpdir } from "node:os"; import { execSync } from "node:child_process"; import { join, resolve } from "node:path"; import { fileURLToPath } from "node:url"; -import { computeSnapshot } from "../lib/snapshot"; -import expectedSnapshot from "../__snapshots__/core-package/ui.snapshot.json"; +import { computeSnapshot } from "../lib/snapshot.js"; +import expectedSnapshot from "../__snapshots__/core-package/ui.snapshot.json" with { type: "json" }; // Repo root is 2 levels up from turbo/generators/__tests__ const REPO_ROOT = resolve(fileURLToPath(import.meta.url), "..", "..", "..", ".."); diff --git a/turbo/generators/config.test.ts b/turbo/generators/config.test.ts index 025b026..69b1db9 100644 --- a/turbo/generators/config.test.ts +++ b/turbo/generators/config.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from "vitest"; import type { PlopTypes } from "@turbo/gen"; -import generator from "./config"; +import generator from "./config.js"; describe("core-package generator", () => { it("is registered with realtime and events in choices list", () => { diff --git a/turbo/generators/lib/core-package-utils.test.ts b/turbo/generators/lib/core-package-utils.test.ts index f21f53c..54f7f03 100644 --- a/turbo/generators/lib/core-package-utils.test.ts +++ b/turbo/generators/lib/core-package-utils.test.ts @@ -1,6 +1,5 @@ import { describe, it, expect } from "vitest"; import { - existsSync, mkdtempSync, mkdirSync, writeFileSync, @@ -12,10 +11,9 @@ import { assertOptionalPackageNotPresent, addToTranspilePackages, splicePluginRulesAt, - splicePluginImportsAt, addBoundariesEntry, emitTemplateTree, -} from "./core-package-utils"; +} from "./core-package-utils.js"; describe("assertOptionalPackageNotPresent", () => { it("throws if packages// exists in cwd", () => { diff --git a/turbo/generators/lib/snapshot.test.ts b/turbo/generators/lib/snapshot.test.ts index 19c3d34..5715472 100644 --- a/turbo/generators/lib/snapshot.test.ts +++ b/turbo/generators/lib/snapshot.test.ts @@ -2,7 +2,7 @@ import { describe, it, expect } from "vitest"; import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; -import { computeSnapshot } from "./snapshot"; +import { computeSnapshot } from "./snapshot.js"; describe("computeSnapshot", () => { it("returns sorted file paths + sha256 hashes", () => { diff --git a/turbo/generators/package.json b/turbo/generators/package.json index 4108f79..8b6d077 100644 --- a/turbo/generators/package.json +++ b/turbo/generators/package.json @@ -4,13 +4,17 @@ "version": "0.0.0", "type": "module", "scripts": { - "test": "vitest run" + "lint": "eslint .", + "test": "vitest run", + "typecheck": "tsc --noEmit" }, "dependencies": { "@turbo/gen": "^2.4.0" }, "devDependencies": { "@repo/core-eslint": "workspace:*", + "@repo/core-typescript": "workspace:*", + "typescript": "^5.8.0", "vitest": "^3.1.0" } }