diff --git a/.changeset/hot-fishes-retire.md b/.changeset/hot-fishes-retire.md new file mode 100644 index 000000000..778a5d5d4 --- /dev/null +++ b/.changeset/hot-fishes-retire.md @@ -0,0 +1,5 @@ +--- +trigger.dev: patch +--- + +Fix TypeScript inclusion in tsconfig.json for `cli-v3 init` diff --git a/packages/cli-v3/src/commands/init.ts b/packages/cli-v3/src/commands/init.ts index 675728a8e..3611b0486 100644 --- a/packages/cli-v3/src/commands/init.ts +++ b/packages/cli-v3/src/commands/init.ts @@ -5,7 +5,7 @@ import { recordSpanException } from "@trigger.dev/core/v3/workers"; import chalk from "chalk"; import { Command } from "commander"; import { execa } from "execa"; -import { applyEdits, modify } from "jsonc-parser"; +import { applyEdits, modify, findNodeAtLocation, parseTree, getNodeValue } from "jsonc-parser"; import { writeFile } from "node:fs/promises"; import { join, relative, resolve } from "node:path"; import terminalLink from "terminal-link"; @@ -329,8 +329,29 @@ async function addConfigFileToTsConfig(dir: string, options: InitCommandOptions) }); const tsconfigContent = await readFile(tsconfigPath); + const tsconfigContentTree = parseTree(tsconfigContent, undefined); + if (!tsconfigContentTree) { + span.end(); - const edits = modify(tsconfigContent, ["include", -1], "trigger.config.ts", { + return; + } + + const tsconfigIncludeOption = findNodeAtLocation(tsconfigContentTree, ["include"]); + if (!tsconfigIncludeOption) { + span.end(); + + return; + } + + const tsConfigFileName = "trigger.config.ts"; + const tsconfigIncludeOptionValue: string[] = getNodeValue(tsconfigIncludeOption); + if (tsconfigIncludeOptionValue.includes(tsConfigFileName)) { + span.end(); + + return; + } + + const edits = modify(tsconfigContent, ["include", -1], tsConfigFileName, { isArrayInsertion: true, formattingOptions: { tabSize: 2,