-
Notifications
You must be signed in to change notification settings - Fork 36
/
remove-typescript.mjs
86 lines (70 loc) · 2.24 KB
/
remove-typescript.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { exec } from "node:child_process";
import fs from "fs/promises";
import path from "node:path";
import { cwd } from "node:process";
import util from "node:util";
const appPath = path.join(cwd());
// remove typescript
const filesToRemove = ["tsconfig.*", "*.ts", "env.d.ts"];
const execPromise = util.promisify(exec);
async function removeTypeScript(folderPath) {
console.log("Initiated TS removal for ", folderPath);
try {
// installs
await execPromise(
"npm install && npx tsc && npx prettier --write . && npx eslint --fix",
{
cwd: folderPath,
}
);
// remove files
await execPromise(
`npx rimraf -g ${filesToRemove.join(
" "
)} && npx rimraf -g "!(node_modules)**/**/*.ts" && npm uninstall rimraf typescript @sanity/types @portabletext/types`,
{
cwd: folderPath,
}
);
// recursively loop through src folder to find all astro file paths
const astroFilePaths = [];
async function scanFolderForAstroFiles(folder) {
const files = await fs
.readdir(path.resolve(folder), {
withFileTypes: true,
})
.catch((err) => console.log(err));
if (files) {
for (const file of files) {
if (file.isFile() && file.name.endsWith(".astro")) {
astroFilePaths.push(path.resolve(folder, file.name));
continue;
}
if (file.isDirectory()) {
await scanFolderForAstroFiles(path.resolve(folder, file.name));
}
}
}
}
await scanFolderForAstroFiles(path.resolve(folderPath, "src"));
for (const astroFilePath of astroFilePaths) {
const file = await fs.readFile(astroFilePath, {
encoding: "utf8",
});
// remove typescript
const newAstroFile = file
.replace(/^\s*interface\s+\w+\s*\{\s*[\s\S]*?\s*\}\s*$/gm, "")
.replace(/^type\s+.*?;\s*$/gm, "")
.replace(
/^.*import\s+type\s*\{\s*Post\s*\}\s*from\s*"\.\.\/utils\/sanity".*\n?/gm,
""
)
.replace(/as\s+(?:{\s*.*?\s*}|[\w]+);/gm, "");
fs.writeFile(astroFilePath, newAstroFile);
}
console.log("Finished");
} catch (error) {
console.log(error);
}
}
await removeTypeScript(appPath);