Skip to content

Commit

Permalink
fix(codemod): support jsonc when parsing root turbo.json (#8279)
Browse files Browse the repository at this point in the history
### Description

Add a new utility for parsing `turbo.json` that uses JSON5.parse to
support comments. This is already used for parsing workspace
`turbo.json`s:
https://github.com/vercel/turbo/blob/main/packages/turbo-utils/src/getTurboConfigs.ts#L95


Future work is probably unifying all of these read methods to a single
one.

### Testing Instructions

Added comment to top level to `turbo-1` fixture. This is a good
candidate since the major version upgrade runs all codemods.

👀
  • Loading branch information
chris-olszewski committed Jun 3, 2024
1 parent 261c325 commit 61a4118
Show file tree
Hide file tree
Showing 13 changed files with 32 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"$schema": "https://turbo.build/schema.json",
// A comment which we allow
"pipeline": {
"build": {
"outputs": [".next/**", "!.next/cache/**"]
Expand Down
1 change: 1 addition & 0 deletions packages/turbo-codemod/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"gradient-string": "^2.0.0",
"inquirer": "^8.2.4",
"inquirer-file-tree-selection-prompt": "^1.0.19",
"json5": "^2.2.3",
"is-git-clean": "^1.1.0",
"ora": "4.1.1",
"semver": "^7.3.7",
Expand Down
4 changes: 2 additions & 2 deletions packages/turbo-codemod/src/transforms/clean-globs.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import path from "node:path";
import type { SchemaV1 } from "@turbo/types/src/types/config";
import { readJsonSync } from "fs-extra";
import { getTurboConfigs } from "@turbo/utils";
import type { TransformerArgs, Transformer } from "../types";
import type { TransformerResults } from "../runner";
import { getTransformerHelpers } from "../utils/getTransformerHelpers";
import { loadTurboJson } from "../utils/loadTurboJson";

// transformer details
const TRANSFORMER = "clean-globs";
Expand All @@ -24,7 +24,7 @@ export function transformer({

const turboConfigPath = path.join(root, "turbo.json");

const turboJson = readJsonSync(turboConfigPath) as SchemaV1;
const turboJson: SchemaV1 = loadTurboJson(turboConfigPath);
runner.modifyFile({
filePath: turboConfigPath,
after: migrateConfig(turboJson),
Expand Down
3 changes: 2 additions & 1 deletion packages/turbo-codemod/src/transforms/migrate-dot-env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type { LegacySchema } from "@turbo/types/src/types/config";
import type { Transformer, TransformerArgs } from "../types";
import { getTransformerHelpers } from "../utils/getTransformerHelpers";
import type { TransformerResults } from "../runner";
import { loadTurboJson } from "../utils/loadTurboJson";

// transformer details
const TRANSFORMER = "migrate-dot-env";
Expand Down Expand Up @@ -78,7 +79,7 @@ export function transformer({
});
}

const turboJson = readJsonSync(turboConfigPath) as TurboJsonSchema;
const turboJson: TurboJsonSchema = loadTurboJson(turboConfigPath);
runner.modifyFile({
filePath: turboConfigPath,
after: migrateConfig(turboJson),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type { SchemaV1 } from "@turbo/types/src/types/config";
import { getTransformerHelpers } from "../utils/getTransformerHelpers";
import type { TransformerResults } from "../runner";
import type { Transformer, TransformerArgs } from "../types";
import { loadTurboJson } from "../utils/loadTurboJson";

// transformer details
const TRANSFORMER = "migrate-env-var-dependencies";
Expand Down Expand Up @@ -145,7 +146,7 @@ export function transformer({
});
}

let turboJson = readJsonSync(turboConfigPath) as SchemaV1;
let turboJson: SchemaV1 = loadTurboJson(turboConfigPath);
if (hasLegacyEnvVarDependencies(turboJson).hasKeys) {
turboJson = migrateConfig(turboJson);
}
Expand Down
3 changes: 2 additions & 1 deletion packages/turbo-codemod/src/transforms/rename-output-mode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type { SchemaV1 } from "@turbo/types/src/types/config";
import type { Transformer, TransformerArgs } from "../types";
import { getTransformerHelpers } from "../utils/getTransformerHelpers";
import type { TransformerResults } from "../runner";
import { loadTurboJson } from "../utils/loadTurboJson";

// transformer details
const TRANSFORMER = "rename-output-mode";
Expand Down Expand Up @@ -62,7 +63,7 @@ export function transformer({
});
}

const turboJson = readJsonSync(turboConfigPath) as SchemaV1;
const turboJson: SchemaV1 = loadTurboJson(turboConfigPath);
runner.modifyFile({
filePath: turboConfigPath,
after: migrateConfig(turboJson),
Expand Down
5 changes: 3 additions & 2 deletions packages/turbo-codemod/src/transforms/rename-pipeline.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import path from "node:path";
import { readJsonSync, existsSync } from "fs-extra";
import { existsSync } from "fs-extra";
import { getTurboConfigs } from "@turbo/utils";
import type { Schema, SchemaV1 } from "@turbo/types/src/types/config";
import type { Transformer, TransformerArgs } from "../types";
import { getTransformerHelpers } from "../utils/getTransformerHelpers";
import type { TransformerResults } from "../runner";
import { loadTurboJson } from "../utils/loadTurboJson";

// transformer details
const TRANSFORMER = "rename-pipeline";
Expand Down Expand Up @@ -35,7 +36,7 @@ export function transformer({
});
}

const turboJson = readJsonSync(turboConfigPath) as SchemaV1;
const turboJson: SchemaV1 = loadTurboJson(turboConfigPath);
runner.modifyFile({
filePath: turboConfigPath,
after: migrateConfig(turboJson),
Expand Down
3 changes: 2 additions & 1 deletion packages/turbo-codemod/src/transforms/set-default-outputs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import type { SchemaV1 } from "@turbo/types/src/types/config";
import type { Transformer, TransformerArgs } from "../types";
import { getTransformerHelpers } from "../utils/getTransformerHelpers";
import type { TransformerResults } from "../runner";
import { loadTurboJson } from "../utils/loadTurboJson";

const DEFAULT_OUTPUTS = ["dist/**", "build/**"];

Expand Down Expand Up @@ -68,7 +69,7 @@ export function transformer({
});
}

const turboJson = readJsonSync(turboConfigPath) as SchemaV1;
const turboJson: SchemaV1 = loadTurboJson(turboConfigPath);
runner.modifyFile({
filePath: turboConfigPath,
after: migrateConfig(turboJson),
Expand Down
3 changes: 2 additions & 1 deletion packages/turbo-codemod/src/transforms/stabilize-env-mode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import type { SchemaV1, RootSchemaV1 } from "@turbo/types/src/types/config";
import type { Transformer, TransformerArgs } from "../types";
import { getTransformerHelpers } from "../utils/getTransformerHelpers";
import type { TransformerResults } from "../runner";
import { loadTurboJson } from "../utils/loadTurboJson";

// transformer details
const TRANSFORMER = "stabilize-env-mode";
Expand Down Expand Up @@ -118,7 +119,7 @@ export function transformer({
});
}

const turboJson = readJsonSync(turboConfigPath) as SchemaV1;
const turboJson: SchemaV1 = loadTurboJson(turboConfigPath);
runner.modifyFile({
filePath: turboConfigPath,
after: migrateRootConfig(turboJson),
Expand Down
5 changes: 3 additions & 2 deletions packages/turbo-codemod/src/transforms/stabilize-ui.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import path from "node:path";
import { readJsonSync, existsSync } from "fs-extra";
import { existsSync } from "fs-extra";
import type { RootSchema } from "@turbo/types/src/types/config";
import type { Transformer, TransformerArgs } from "../types";
import { getTransformerHelpers } from "../utils/getTransformerHelpers";
import type { TransformerResults } from "../runner";
import { loadTurboJson } from "../utils/loadTurboJson";

// transformer details
const TRANSFORMER = "stabilize-ui";
Expand Down Expand Up @@ -42,7 +43,7 @@ export function transformer({
});
}

const turboJson = readJsonSync(turboConfigPath) as RootSchema;
const turboJson: RootSchema = loadTurboJson(turboConfigPath);
runner.modifyFile({
filePath: turboConfigPath,
after: migrateConfig(turboJson),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type { RootSchemaV1, SchemaV1 } from "@turbo/types/src/types/config";
import type { Transformer, TransformerArgs } from "../types";
import { getTransformerHelpers } from "../utils/getTransformerHelpers";
import type { TransformerResults } from "../runner";
import { loadTurboJson } from "../utils/loadTurboJson";

// transformer details
const TRANSFORMER = "transform-env-literals-to-wildcards";
Expand Down Expand Up @@ -91,7 +92,7 @@ export function transformer({
});
}

const turboJson = readJsonSync(turboConfigPath) as SchemaV1;
const turboJson: SchemaV1 = loadTurboJson(turboConfigPath);
runner.modifyFile({
filePath: turboConfigPath,
after: migrateRootConfig(turboJson),
Expand Down
7 changes: 7 additions & 0 deletions packages/turbo-codemod/src/utils/loadTurboJson.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { readFileSync } from "fs-extra";
import { parse as JSON5Parse } from "json5";

export function loadTurboJson<T>(filePath: string): T {
const contents = readFileSync(filePath, "utf8");
return JSON5Parse(contents);
}
3 changes: 3 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 61a4118

Please sign in to comment.