import React from 'react'; import classnames from 'classnames'; import { Tooltip as ReactTippy } from 'react-tippy'; import { readPartitionsFile } from '../../common/partitions-file'; type Summary = { numConvertedModules: number; numModules: number; }; function calculatePercentageComplete(summary: Summary) { return ((summary.numConvertedModules / summary.numModules) * 100).toFixed(1); } export default function App() { const partitions = readPartitionsFile(); const allModules = partitions.flatMap((partition) => { return partition.children; }); const overallTotal = { numConvertedModules: allModules.filter((module) => module.hasBeenConverted) .length, numModules: allModules.length, }; return ( <>

Extension TypeScript Migration Status

OVERALL: {overallTotal.numConvertedModules}/{overallTotal.numModules} ( {calculatePercentageComplete(overallTotal)}%)

What is this?

This is a dashboard that tracks the status of converting the extension codebase from JavaScript to TypeScript. It is updated whenever a new commit is pushed to the codebase, so it always represents the current work.

Each box

 
on this page represents a file that either we want to convert or we've already converted to TypeScript (hover over a box to see the filename). Boxes that are
 
greyed out are test or Storybook files.

These boxes are further partitioned by level. The level of a file is how many files you have to import before you reach that file in the whole codebase. For instance, if we have a file{' '} foo.js, and that file imports bar.js and{' '} baz.js, and baz.js imports{' '} qux.js, then:

This level assignment can be used to determine a priority for converting the remaining JavaScript files. Files which have fewer dependencies should in theory be easier to convert, so files with a higher level should be converted first. In other words,{' '} you should be able to start from the top and go down .

{partitions.map((partition) => { return (
level {partition.level}
{partition.children.map(({ name, hasBeenConverted }) => { const isTest = /\.test\.(?:js|tsx?)/u.test(name); const isStorybookModule = /\.stories\.(?:js|tsx?)/u.test( name, ); return (
); })}
); })}
); }