Skip to content

Commit bba114b

Browse files
Fix migration tool compiler resolution (#1844)
1 parent 91075eb commit bba114b

2 files changed

Lines changed: 49 additions & 22 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@typespec/migrate",
5+
"comment": "Fix resolution of tsp version",
6+
"type": "none"
7+
}
8+
],
9+
"packageName": "@typespec/migrate"
10+
}

packages/migrate/src/cli.ts

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { findTypeSpecFiles } from "./utils.js";
1818

1919
interface Options {
2020
path: string;
21-
tspVersion: string;
21+
tspVersion?: string;
2222
}
2323

2424
async function main() {
@@ -34,35 +34,27 @@ async function main() {
3434
.option("tspVersion", {
3535
alias: "t",
3636
describe:
37-
"Specifies the TypeSpec compiler version used by the input. Defaults to the version of the compiler package in package.json.",
37+
"Specifies the TypeSpec compiler version used by the input(Version you want to upgrade from). Defaults to the version of the compiler package in package.json.",
3838
type: "string",
39-
default: "",
4039
})
4140
.help().argv;
4241

4342
const PackageJsonFile = "package.json";
44-
if (cliOptions.tspVersion.length === 0) {
43+
if (cliOptions.tspVersion === undefined) {
4544
// Locate current package.json
4645
const pkgFile = resolvePath(cliOptions.path, PackageJsonFile);
47-
const packageJson: NodePackage = JSON.parse(await readFile(pkgFile, "utf-8"));
48-
49-
// Locate current compiler version
50-
const CadlCompiler = "@cadl-lang/compiler";
51-
const TypeSpecCompiler = "@typespec/compiler";
52-
if (
53-
packageJson?.devDependencies !== undefined &&
54-
packageJson?.devDependencies[CadlCompiler] !== undefined
55-
) {
56-
cliOptions.tspVersion = packageJson.devDependencies[CadlCompiler];
57-
} else if (
58-
packageJson?.devDependencies !== undefined &&
59-
packageJson?.devDependencies[TypeSpecCompiler] !== undefined
60-
) {
61-
cliOptions.tspVersion = packageJson.devDependencies[TypeSpecCompiler];
62-
} else {
63-
console.error("Unable to find TypeSpec compiler version in package.json.");
64-
return;
46+
const packageJson = await readPackageJson(pkgFile);
47+
if (packageJson) {
48+
cliOptions.tspVersion = lookupExistingVersion(packageJson);
6549
}
50+
// Locate current compiler version
51+
}
52+
53+
if (cliOptions.tspVersion === undefined) {
54+
console.error(
55+
"Couldn't resolve TypeSpec compiler version to upgrade from. Use `--tspVersion` flag to specify it. (e.g. `--tspVersion=0.42.0` to upgrade from version 0.42.0)"
56+
);
57+
process.exit(1);
6658
}
6759

6860
if (!fs.existsSync(cliOptions.path)) {
@@ -127,6 +119,31 @@ async function main() {
127119
}
128120
}
129121

122+
async function readPackageJson(pkgFile: string): Promise<NodePackage | undefined> {
123+
try {
124+
return JSON.parse(await readFile(pkgFile, "utf-8"));
125+
} catch (e) {
126+
return undefined;
127+
}
128+
}
129+
function lookupExistingVersion(packageJson: NodePackage) {
130+
const CadlCompiler = "@cadl-lang/compiler";
131+
const TypeSpecCompiler = "@typespec/compiler";
132+
133+
const depKinds = ["devDependencies", "peerDependencies", "dependencies"] as const;
134+
for (const depKind of depKinds) {
135+
const deps = packageJson[depKind];
136+
if (deps === undefined) {
137+
continue;
138+
}
139+
const found = deps[CadlCompiler] ?? deps[TypeSpecCompiler];
140+
if (found) {
141+
return found;
142+
}
143+
}
144+
return undefined;
145+
}
146+
130147
main().catch((e) => {
131148
// eslint-disable-next-line no-console
132149
console.error(e);

0 commit comments

Comments
 (0)