From f85a4de3bb386a5eccbee5b33c10a27c77e77cc5 Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Thu, 23 May 2024 11:01:25 -0400 Subject: [PATCH] feat(codemod): add missing package names (#8186) ### Description Codemod to add missing name (or fix duplicates) --- .../correct-names/package.json | 10 ++ .../correct-names/packages/ui/package.json | 6 + .../correct-names/packages/utils/package.json | 6 + .../duplicate-names/package.json | 10 ++ .../packages/apps/docs/package.json | 6 + .../packages/apps/web/package.json | 6 + .../duplicate-names/packages/ui/package.json | 6 + .../packages/utils/package.json | 6 + .../missing-names/package.json | 10 ++ .../missing-names/packages/ui/package.json | 5 + .../missing-names/packages/utils/package.json | 5 + .../__tests__/add-package-names.test.ts | 117 ++++++++++++++++ .../__tests__/generate-package-name.test.ts | 29 ++++ packages/turbo-codemod/src/cli.ts | 12 +- .../src/transforms/add-package-manager.ts | 4 +- .../src/transforms/add-package-names.ts | 127 ++++++++++++++++++ .../src/transforms/clean-globs.ts | 8 +- .../src/transforms/create-turbo-config.ts | 4 +- .../migrate-env-var-dependencies.ts | 4 +- .../src/transforms/rename-output-mode.ts | 4 +- .../src/transforms/set-default-outputs.ts | 4 +- .../src/transforms/stabilize-env-mode.ts | 4 +- .../transform-env-literals-to-wildcards.ts | 4 +- .../generators/templates/transformer.hbs | 15 ++- 24 files changed, 385 insertions(+), 27 deletions(-) create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/packages/ui/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/packages/utils/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/apps/docs/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/apps/web/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/ui/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/utils/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/packages/ui/package.json create mode 100644 packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/packages/utils/package.json create mode 100644 packages/turbo-codemod/__tests__/add-package-names.test.ts create mode 100644 packages/turbo-codemod/__tests__/generate-package-name.test.ts create mode 100644 packages/turbo-codemod/src/transforms/add-package-names.ts diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/package.json new file mode 100644 index 0000000000000..4da92049f9be5 --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/package.json @@ -0,0 +1,10 @@ +{ + "name": "root", + "workspaces": [ + "packages/*" + ], + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {}, + "packageManager": "npm@1.2.3" +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/packages/ui/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/packages/ui/package.json new file mode 100644 index 0000000000000..0a833e899ae58 --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/packages/ui/package.json @@ -0,0 +1,6 @@ +{ + "name": "ui", + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/packages/utils/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/packages/utils/package.json new file mode 100644 index 0000000000000..f980397cf1c01 --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/correct-names/packages/utils/package.json @@ -0,0 +1,6 @@ +{ + "name": "utils", + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/package.json new file mode 100644 index 0000000000000..4da92049f9be5 --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/package.json @@ -0,0 +1,10 @@ +{ + "name": "root", + "workspaces": [ + "packages/*" + ], + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {}, + "packageManager": "npm@1.2.3" +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/apps/docs/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/apps/docs/package.json new file mode 100644 index 0000000000000..3abadc5cc44c3 --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/apps/docs/package.json @@ -0,0 +1,6 @@ +{ + "name": "@acme/docs", + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/apps/web/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/apps/web/package.json new file mode 100644 index 0000000000000..3abadc5cc44c3 --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/apps/web/package.json @@ -0,0 +1,6 @@ +{ + "name": "@acme/docs", + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/ui/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/ui/package.json new file mode 100644 index 0000000000000..fe616c702a22a --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/ui/package.json @@ -0,0 +1,6 @@ +{ + "name": "some-pkg", + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/utils/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/utils/package.json new file mode 100644 index 0000000000000..fe616c702a22a --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/duplicate-names/packages/utils/package.json @@ -0,0 +1,6 @@ +{ + "name": "some-pkg", + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/package.json new file mode 100644 index 0000000000000..4da92049f9be5 --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/package.json @@ -0,0 +1,10 @@ +{ + "name": "root", + "workspaces": [ + "packages/*" + ], + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {}, + "packageManager": "npm@1.2.3" +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/packages/ui/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/packages/ui/package.json new file mode 100644 index 0000000000000..2e5879a21b308 --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/packages/ui/package.json @@ -0,0 +1,5 @@ +{ + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/packages/utils/package.json b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/packages/utils/package.json new file mode 100644 index 0000000000000..2e5879a21b308 --- /dev/null +++ b/packages/turbo-codemod/__tests__/__fixtures__/add-package-names/missing-names/packages/utils/package.json @@ -0,0 +1,5 @@ +{ + "version": "1.0.0", + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/turbo-codemod/__tests__/add-package-names.test.ts b/packages/turbo-codemod/__tests__/add-package-names.test.ts new file mode 100644 index 0000000000000..ea3b98a20568c --- /dev/null +++ b/packages/turbo-codemod/__tests__/add-package-names.test.ts @@ -0,0 +1,117 @@ +import { setupTestFixtures } from "@turbo/test-utils"; +import { transformer } from "../src/transforms/add-package-names"; + +describe("add-package-names", () => { + const { useFixture } = setupTestFixtures({ + directory: __dirname, + test: "add-package-names", + }); + + test("missing names", async () => { + // load the fixture for the test + const { root, readJson } = useFixture({ + fixture: "missing-names", + }); + + // run the transformer + const result = await transformer({ + root, + options: { force: false, dry: false, print: false }, + }); + + // result should be correct + expect(result.fatalError).toBeUndefined(); + expect(result.changes).toMatchInlineSnapshot(` + Object { + "packages/ui/package.json": Object { + "action": "modified", + "additions": 1, + "deletions": 0, + }, + "packages/utils/package.json": Object { + "action": "modified", + "additions": 1, + "deletions": 0, + }, + } + `); + + // validate unique names + const names = new Set(); + + for (const pkg of ["ui", "utils"]) { + const pkgJson = readJson<{ name: string }>( + `packages/${pkg}/package.json` + ); + expect(pkgJson?.name).toBeDefined(); + expect(names.has(pkgJson?.name)).toBe(false); + names.add(pkgJson?.name); + } + }); + + test("duplicate names", async () => { + // load the fixture for the test + const { root, readJson } = useFixture({ + fixture: "duplicate-names", + }); + + // run the transformer + const result = await transformer({ + root, + options: { force: false, dry: false, print: false }, + }); + + // result should be correct + expect(result.fatalError).toBeUndefined(); + expect(result.changes).toMatchInlineSnapshot(` + Object { + "packages/utils/package.json": Object { + "action": "modified", + "additions": 1, + "deletions": 1, + }, + } + `); + + // validate unique names + const names = new Set(); + + for (const pkg of ["ui", "utils"]) { + const pkgJson = readJson<{ name: string }>( + `packages/${pkg}/package.json` + ); + expect(pkgJson?.name).toBeDefined(); + expect(names.has(pkgJson?.name)).toBe(false); + names.add(pkgJson?.name); + } + }); + + test("correct names", async () => { + // load the fixture for the test + const { root, readJson } = useFixture({ + fixture: "correct-names", + }); + + // run the transformer + const result = await transformer({ + root, + options: { force: false, dry: false, print: false }, + }); + + // result should be correct + expect(result.fatalError).toBeUndefined(); + expect(result.changes).toMatchInlineSnapshot(`Object {}`); + + // validate unique names + const names = new Set(); + + for (const pkg of ["ui", "utils"]) { + const pkgJson = readJson<{ name: string }>( + `packages/${pkg}/package.json` + ); + expect(pkgJson?.name).toBeDefined(); + expect(names.has(pkgJson?.name)).toBe(false); + names.add(pkgJson?.name); + } + }); +}); diff --git a/packages/turbo-codemod/__tests__/generate-package-name.test.ts b/packages/turbo-codemod/__tests__/generate-package-name.test.ts new file mode 100644 index 0000000000000..9a4e210471113 --- /dev/null +++ b/packages/turbo-codemod/__tests__/generate-package-name.test.ts @@ -0,0 +1,29 @@ +import { getNewPkgName } from "../src/transforms/add-package-names"; + +describe("getNewPkgName", () => { + it.each([ + { + pkgPath: "/packages/ui/package.json", + pkgName: "old-name", + expected: "ui-old-name", + }, + // scoped + { + pkgPath: "/packages/ui/package.json", + pkgName: "@acme/name", + expected: "@acme/ui-name", + }, + // no name + { + pkgPath: "/packages/ui/package.json", + pkgName: undefined, + expected: "ui", + }, + ])( + "should return a new package name for pkgPath: $pkgPath and pkgName: $pkgName", + ({ pkgPath, pkgName, expected }) => { + const newName = getNewPkgName({ pkgPath, pkgName }); + expect(newName).toBe(expected); + } + ); +}); diff --git a/packages/turbo-codemod/src/cli.ts b/packages/turbo-codemod/src/cli.ts index ab7359889c373..8ef880d6057ab 100644 --- a/packages/turbo-codemod/src/cli.ts +++ b/packages/turbo-codemod/src/cli.ts @@ -36,7 +36,11 @@ codemodCli "Bypass Git safety checks and forcibly run codemods", false ) - .option("--dry", "Dry run (no changes are made to files)", false) + .option( + "--dry, --dry-run, -d", + "Dry run (no changes are made to files)", + false + ) .option("--print", "Print transformed files to your terminal", false) .action(migrate); @@ -52,7 +56,11 @@ codemodCli false ) .option("--list", "List all available transforms", false) - .option("--dry", "Dry run (no changes are made to files)", false) + .option( + "--dry, --dry-run, -d", + "Dry run (no changes are made to files)", + false + ) .option("--print", "Print transformed files to your terminal", false) .action(transform); diff --git a/packages/turbo-codemod/src/transforms/add-package-manager.ts b/packages/turbo-codemod/src/transforms/add-package-manager.ts index bfe8e59cf6cc5..c7e07085b1449 100644 --- a/packages/turbo-codemod/src/transforms/add-package-manager.ts +++ b/packages/turbo-codemod/src/transforms/add-package-manager.ts @@ -4,7 +4,7 @@ import { getWorkspaceDetails, type Project } from "@turbo/workspaces"; import { type PackageJson, getAvailablePackageManagers } from "@turbo/utils"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; import type { TransformerResults } from "../runner"; -import type { TransformerArgs } from "../types"; +import type { Transformer, TransformerArgs } from "../types"; // transformer details const TRANSFORMER = "add-package-manager"; @@ -66,7 +66,7 @@ export async function transformer({ return runner.finish(); } -const transformerMeta = { +const transformerMeta: Transformer = { name: TRANSFORMER, description: DESCRIPTION, introducedIn: INTRODUCED_IN, diff --git a/packages/turbo-codemod/src/transforms/add-package-names.ts b/packages/turbo-codemod/src/transforms/add-package-names.ts new file mode 100644 index 0000000000000..c58dd6b19a12f --- /dev/null +++ b/packages/turbo-codemod/src/transforms/add-package-names.ts @@ -0,0 +1,127 @@ +import path from "node:path"; +import { getWorkspaceDetails, type Project } from "@turbo/workspaces"; +import { readJson } from "fs-extra"; +import type { Transformer, TransformerArgs } from "../types"; +import type { TransformerResults } from "../runner"; +import { getTransformerHelpers } from "../utils/getTransformerHelpers"; + +// transformer details +const TRANSFORMER = "add-package-names"; +const DESCRIPTION = "Ensure all packages have a name in their package.json"; +const INTRODUCED_IN = "2.0.0"; + +interface PartialPackageJson { + name?: string; +} + +async function readPkgJson( + pkgJsonPath: string +): Promise { + try { + return (await readJson(pkgJsonPath)) as { name?: string }; + } catch (e) { + return null; + } +} + +export function getNewPkgName({ + pkgPath, + pkgName, +}: { + pkgPath: string; + pkgName?: string; +}): string { + // find the scope if it exists + let scope = ""; + let name = pkgName; + if (pkgName && pkgName.startsWith("@") && pkgName.includes("/")) { + const parts = pkgName.split("/"); + scope = `${parts[0]}/`; + name = parts[1]; + } + + const dirName = path.basename(path.dirname(pkgPath)); + if (pkgName) { + return `${scope}${dirName}-${name}`; + } + + return `${scope}${dirName}`; +} + +export async function transformer({ + root, + options, +}: TransformerArgs): Promise { + const { log, runner } = getTransformerHelpers({ + transformer: TRANSFORMER, + rootPath: root, + options, + }); + + log.info('Validating that each package has a unique "name"...'); + + let project: Project; + try { + project = await getWorkspaceDetails({ root }); + } catch (e) { + return runner.abortTransform({ + reason: `Unable to determine package manager for ${root}`, + }); + } + + const packagePaths: Array = [project.paths.packageJson]; + const packagePromises: Array> = [ + readPkgJson(project.paths.packageJson), + ]; + + // add all workspace package.json files + project.workspaceData.workspaces.forEach((workspace) => { + const pkgJsonPath = workspace.paths.packageJson; + packagePaths.push(pkgJsonPath); + packagePromises.push(readPkgJson(pkgJsonPath)); + }); + + // await, and then zip the paths and promise results together + const packageContent = await Promise.all(packagePromises); + const packageToContent = Object.fromEntries( + packagePaths.map((pkgJsonPath, idx) => [pkgJsonPath, packageContent[idx]]) + ); + + // wait for all package.json files to be read + const names = new Set(); + for (const [pkgJsonPath, pkgJsonContent] of Object.entries( + packageToContent + )) { + if (pkgJsonContent) { + // name is missing or isn't unique + if (!pkgJsonContent.name || names.has(pkgJsonContent.name)) { + const newName = getNewPkgName({ + pkgPath: pkgJsonPath, + pkgName: pkgJsonContent.name, + }); + runner.modifyFile({ + filePath: pkgJsonPath, + after: { + ...pkgJsonContent, + name: newName, + }, + }); + names.add(newName); + } else { + names.add(pkgJsonContent.name); + } + } + } + + return runner.finish(); +} + +const transformerMeta: Transformer = { + name: TRANSFORMER, + description: DESCRIPTION, + introducedIn: INTRODUCED_IN, + transformer, +}; + +// eslint-disable-next-line import/no-default-export -- transforms require default export +export default transformerMeta; diff --git a/packages/turbo-codemod/src/transforms/clean-globs.ts b/packages/turbo-codemod/src/transforms/clean-globs.ts index ecd16d63f199f..b5a663be10517 100644 --- a/packages/turbo-codemod/src/transforms/clean-globs.ts +++ b/packages/turbo-codemod/src/transforms/clean-globs.ts @@ -2,7 +2,7 @@ import path from "node:path"; import type { Schema as TurboJsonSchema } from "@turbo/types"; import { readJsonSync } from "fs-extra"; import { getTurboConfigs } from "@turbo/utils"; -import type { TransformerArgs } from "../types"; +import type { TransformerArgs, Transformer } from "../types"; import type { TransformerResults } from "../runner"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; @@ -82,9 +82,9 @@ export function fixGlobPattern(pattern: string): string { return oldPattern; } -const transformerMeta = { - name: `${TRANSFORMER}: ${DESCRIPTION}`, - value: TRANSFORMER, +const transformerMeta: Transformer = { + name: TRANSFORMER, + description: DESCRIPTION, introducedIn: INTRODUCED_IN, transformer, }; diff --git a/packages/turbo-codemod/src/transforms/create-turbo-config.ts b/packages/turbo-codemod/src/transforms/create-turbo-config.ts index 74f9d700a5c3c..a7a45d37e8ab0 100644 --- a/packages/turbo-codemod/src/transforms/create-turbo-config.ts +++ b/packages/turbo-codemod/src/transforms/create-turbo-config.ts @@ -4,7 +4,7 @@ import { type PackageJson } from "@turbo/utils"; import type { Schema } from "@turbo/types"; import type { TransformerResults } from "../runner"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; -import type { TransformerArgs } from "../types"; +import type { Transformer, TransformerArgs } from "../types"; // transformer details const TRANSFORMER = "create-turbo-config"; @@ -61,7 +61,7 @@ export function transformer({ return runner.finish(); } -const transformerMeta = { +const transformerMeta: Transformer = { name: TRANSFORMER, description: DESCRIPTION, introducedIn: INTRODUCED_IN, diff --git a/packages/turbo-codemod/src/transforms/migrate-env-var-dependencies.ts b/packages/turbo-codemod/src/transforms/migrate-env-var-dependencies.ts index f889fdbd172cd..b6f36f646cadd 100644 --- a/packages/turbo-codemod/src/transforms/migrate-env-var-dependencies.ts +++ b/packages/turbo-codemod/src/transforms/migrate-env-var-dependencies.ts @@ -4,7 +4,7 @@ import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { Schema as TurboJsonSchema, Pipeline } from "@turbo/types"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; import type { TransformerResults } from "../runner"; -import type { TransformerArgs } from "../types"; +import type { Transformer, TransformerArgs } from "../types"; // transformer details const TRANSFORMER = "migrate-env-var-dependencies"; @@ -169,7 +169,7 @@ export function transformer({ return runner.finish(); } -const transformerMeta = { +const transformerMeta: Transformer = { name: TRANSFORMER, description: DESCRIPTION, introducedIn: INTRODUCED_IN, diff --git a/packages/turbo-codemod/src/transforms/rename-output-mode.ts b/packages/turbo-codemod/src/transforms/rename-output-mode.ts index 45c230facf383..0ffeae82e770d 100644 --- a/packages/turbo-codemod/src/transforms/rename-output-mode.ts +++ b/packages/turbo-codemod/src/transforms/rename-output-mode.ts @@ -2,7 +2,7 @@ import path from "node:path"; import { readJsonSync, existsSync } from "fs-extra"; import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { Schema as TurboJsonSchema, OutputMode } from "@turbo/types"; -import type { TransformerArgs } from "../types"; +import type { Transformer, TransformerArgs } from "../types"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; import type { TransformerResults } from "../runner"; @@ -80,7 +80,7 @@ export function transformer({ return runner.finish(); } -const transformerMeta = { +const transformerMeta: Transformer = { name: TRANSFORMER, description: DESCRIPTION, introducedIn: INTRODUCED_IN, diff --git a/packages/turbo-codemod/src/transforms/set-default-outputs.ts b/packages/turbo-codemod/src/transforms/set-default-outputs.ts index 78d4f4ca3eb7e..5eb99ac776cd4 100644 --- a/packages/turbo-codemod/src/transforms/set-default-outputs.ts +++ b/packages/turbo-codemod/src/transforms/set-default-outputs.ts @@ -2,7 +2,7 @@ import path from "node:path"; import { readJsonSync, existsSync } from "fs-extra"; import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { Schema as TurboJsonSchema } from "@turbo/types"; -import type { TransformerArgs } from "../types"; +import type { Transformer, TransformerArgs } from "../types"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; import type { TransformerResults } from "../runner"; @@ -86,7 +86,7 @@ export function transformer({ return runner.finish(); } -const transformerMeta = { +const transformerMeta: Transformer = { name: TRANSFORMER, description: DESCRIPTION, introducedIn: INTRODUCED_IN, diff --git a/packages/turbo-codemod/src/transforms/stabilize-env-mode.ts b/packages/turbo-codemod/src/transforms/stabilize-env-mode.ts index 8a03579bd77e2..de69532b51e90 100644 --- a/packages/turbo-codemod/src/transforms/stabilize-env-mode.ts +++ b/packages/turbo-codemod/src/transforms/stabilize-env-mode.ts @@ -3,7 +3,7 @@ import { readJsonSync, existsSync } from "fs-extra"; import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { Schema as TurboJsonSchema } from "@turbo/types"; import type { RootSchema } from "@turbo/types/src/types/config"; -import type { TransformerArgs } from "../types"; +import type { Transformer, TransformerArgs } from "../types"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; import type { TransformerResults } from "../runner"; @@ -140,7 +140,7 @@ export function transformer({ return runner.finish(); } -const transformerMeta = { +const transformerMeta: Transformer = { name: TRANSFORMER, description: DESCRIPTION, introducedIn: INTRODUCED_IN, diff --git a/packages/turbo-codemod/src/transforms/transform-env-literals-to-wildcards.ts b/packages/turbo-codemod/src/transforms/transform-env-literals-to-wildcards.ts index 42563f244098d..d83e61ae0d3a3 100644 --- a/packages/turbo-codemod/src/transforms/transform-env-literals-to-wildcards.ts +++ b/packages/turbo-codemod/src/transforms/transform-env-literals-to-wildcards.ts @@ -3,7 +3,7 @@ import { readJsonSync, existsSync } from "fs-extra"; import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { EnvWildcard, Schema as TurboJsonSchema } from "@turbo/types"; import type { RootSchema } from "@turbo/types/src/types/config"; -import type { TransformerArgs } from "../types"; +import type { Transformer, TransformerArgs } from "../types"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; import type { TransformerResults } from "../runner"; @@ -112,7 +112,7 @@ export function transformer({ return runner.finish(); } -const transformerMeta = { +const transformerMeta: Transformer = { name: TRANSFORMER, description: DESCRIPTION, introducedIn: INTRODUCED_IN, diff --git a/packages/turbo-codemod/turbo/generators/templates/transformer.hbs b/packages/turbo-codemod/turbo/generators/templates/transformer.hbs index ba16d73f1ff73..145d5c058e5fb 100644 --- a/packages/turbo-codemod/turbo/generators/templates/transformer.hbs +++ b/packages/turbo-codemod/turbo/generators/templates/transformer.hbs @@ -1,5 +1,5 @@ -import { TransformerArgs } from "../types"; -import { TransformerResults } from "../runner"; +import type { Transformer, TransformerArgs } from "../types"; +import type { TransformerResults } from "../runner"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; // transformer details @@ -7,10 +7,10 @@ const TRANSFORMER = "{{ name }}"; const DESCRIPTION = "{{ description }}"; const INTRODUCED_IN = "{{ introducedIn }}"; -export function transformer({ +export async function transformer({ root, options, -}: TransformerArgs): TransformerResults { +}: TransformerArgs): Promise { const { log, runner } = getTransformerHelpers({ transformer: TRANSFORMER, rootPath: root, @@ -33,13 +33,14 @@ export function transformer({ return runner.finish(); } -const transformerMeta = { - name: `${TRANSFORMER}: ${DESCRIPTION}`, - value: TRANSFORMER, +const transformerMeta: Transformer = { + name: TRANSFORMER, + description: DESCRIPTION, introducedIn: INTRODUCED_IN, transformer, }; +// eslint-disable-next-line import/no-default-export -- transforms require default export export default transformerMeta;