Use Typescript to help migrate/upgrade code
I am tasked with migrating a large javascript codebase from using the beta version of firebase-functions
to the latest. Like most major upgrades, there are many API changes to deal with. Here's an example cloud function:
Beta version with node 6:
exports.dbCreate = functions.database.ref('/path').onCreate((event) => {
const createdData = event.data.val(); // data that was created
});
Latest version with node 10:
exports.dbCreate = functions.database.ref('/path').onCreate((snap, context) => {
const createdData = snap.val(); // data that was created
});
The parameters changed for
onCreate
.
In the real codebase there are hundreds of cloud functions like this and they all have varying API changes to be made. With no code-mod in sight, I'm on my own to figure out an effecient way to upgrade. Enter Typescript
.
After upgrading the dependencies to the latest versions I added a tsconfig:
{
"compilerOptions": {
"module": "commonjs",
"outDir": "lib",
"target": "es2017",
"allowJs": true,
"checkJs": true,
},
"include": ["src"]
}
The key is to enable
checkJs
so that the Typescript compiler reports errors in javascript files.
And running tsc --noEmit
against the codebase provided me with a list of 200+ compiler errors pointing me to every change required.