Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"changes": [
{
"packageName": "@typespec/migrate",
"comment": "Fix resolution of tsp version",
"type": "none"
}
],
"packageName": "@typespec/migrate"
}
61 changes: 39 additions & 22 deletions packages/migrate/src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { findTypeSpecFiles } from "./utils.js";

interface Options {
path: string;
tspVersion: string;
tspVersion?: string;
}

async function main() {
Expand All @@ -34,35 +34,27 @@ async function main() {
.option("tspVersion", {
alias: "t",
describe:
"Specifies the TypeSpec compiler version used by the input. Defaults to the version of the compiler package in package.json.",
"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.",
type: "string",
default: "",
})
.help().argv;

const PackageJsonFile = "package.json";
if (cliOptions.tspVersion.length === 0) {
if (cliOptions.tspVersion === undefined) {
// Locate current package.json
const pkgFile = resolvePath(cliOptions.path, PackageJsonFile);
const packageJson: NodePackage = JSON.parse(await readFile(pkgFile, "utf-8"));

// Locate current compiler version
const CadlCompiler = "@cadl-lang/compiler";
const TypeSpecCompiler = "@typespec/compiler";
if (
packageJson?.devDependencies !== undefined &&
packageJson?.devDependencies[CadlCompiler] !== undefined
) {
cliOptions.tspVersion = packageJson.devDependencies[CadlCompiler];
} else if (
packageJson?.devDependencies !== undefined &&
packageJson?.devDependencies[TypeSpecCompiler] !== undefined
) {
cliOptions.tspVersion = packageJson.devDependencies[TypeSpecCompiler];
} else {
console.error("Unable to find TypeSpec compiler version in package.json.");
return;
const packageJson = await readPackageJson(pkgFile);
if (packageJson) {
cliOptions.tspVersion = lookupExistingVersion(packageJson);
}
// Locate current compiler version
}

if (cliOptions.tspVersion === undefined) {
console.error(
"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)"
);
process.exit(1);
}

if (!fs.existsSync(cliOptions.path)) {
Expand Down Expand Up @@ -127,6 +119,31 @@ async function main() {
}
}

async function readPackageJson(pkgFile: string): Promise<NodePackage | undefined> {
try {
return JSON.parse(await readFile(pkgFile, "utf-8"));
} catch (e) {
return undefined;
}
}
function lookupExistingVersion(packageJson: NodePackage) {
const CadlCompiler = "@cadl-lang/compiler";
const TypeSpecCompiler = "@typespec/compiler";

const depKinds = ["devDependencies", "peerDependencies", "dependencies"] as const;
for (const depKind of depKinds) {
const deps = packageJson[depKind];
if (deps === undefined) {
continue;
}
const found = deps[CadlCompiler] ?? deps[TypeSpecCompiler];
if (found) {
return found;
}
}
return undefined;
}

main().catch((e) => {
// eslint-disable-next-line no-console
console.error(e);
Expand Down