-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathzzzBump.ts
More file actions
120 lines (94 loc) · 3.08 KB
/
Copy pathzzzBump.ts
File metadata and controls
120 lines (94 loc) · 3.08 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import { spawn } from "child_process"
import fs from "fs"
async function revertPackage(): Promise<boolean> {
return new Promise((resolve) => {
const revertetd = spawn(`git checkout HEAD -- package.json}`, {
shell: true,
stdio: "inherit"
})
revertetd.on("close", (code) => {
if (code === 0) {
console.log("`package.json` restored.")
resolve(true)
} else {
console.error(`Process exited with code ${code}`)
resolve(false)
}
})
})
}
interface PackageNames {
prodDeps: string
devDeps: string
}
async function packageReset(): Promise<PackageNames | null> {
const revertedPackage = await revertPackage()
if (!revertedPackage) return null
const packageFile = fs.readFileSync("./package.json", "utf-8")
const packageList = JSON.parse(packageFile)
const prodDepsObj = { ...packageList["dependencies"] }
const devDepsObj = { ...packageList["devDependencies"] }
delete packageList["dependencies"]
delete packageList["devDependencies"]
const prodDepsArr = Object.keys(prodDepsObj).filter((k) => k !== "webfont-awesome-pro")
const devDepsArr = Object.keys(devDepsObj)
const prodDeps = prodDepsArr.join(" ")
const devDeps = devDepsArr.join(" ")
fs.writeFileSync("./package.json", JSON.stringify(packageList, null, 2), "utf-8")
console.log("Rewrote `package.json`")
return { prodDeps, devDeps }
}
async function removeFiles(file: string): Promise<boolean> {
return new Promise((resolve) => {
console.log(`Removing ${file}`)
const fileExists = fs.existsSync(`${file}`)
if (!fileExists) return resolve(true)
const destroyPackage = spawn(`rm -rf ${file}`, {
shell: true,
stdio: "inherit"
})
destroyPackage.on("close", (code) => {
if (code === 0) {
console.log(`${file} removed.`)
resolve(true)
} else {
console.error(`Process exited with code ${code}`)
resolve(false)
}
})
})
}
async function installPackage(cmd: string): Promise<boolean> {
return new Promise((resolve) => {
const install = spawn(`${cmd}`, {
shell: true,
stdio: "inherit"
})
install.on("close", (code) => {
if (code === 0) {
console.log("Packages installed successfully.")
resolve(true)
} else {
console.error(`Process exited with code ${code}`)
resolve(false)
}
})
})
}
async function startCmd(): Promise<void> {
const removedModules = await removeFiles("node_modules")
if (!removedModules) return
const removedLock = await removeFiles("package-lock.json")
if (!removedLock) return
const resetingPackage = await packageReset()
if (!resetingPackage) return
const { prodDeps, devDeps } = resetingPackage
const installProd = await installPackage(`npm install ${prodDeps}`)
if (!installProd) return
const installFapro = await installPackage(`npm install --save-exact webfont-awesome-pro`)
if (!installFapro) return
const instalDev = await installPackage(`npm install --save-dev ${devDeps}`)
if (!instalDev) return
console.log("Process finished.")
}
startCmd()