-
-
Notifications
You must be signed in to change notification settings - Fork 58
Expand file tree
/
Copy pathfind_unused_keys.js
More file actions
89 lines (79 loc) · 2.24 KB
/
find_unused_keys.js
File metadata and controls
89 lines (79 loc) · 2.24 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
import fs from 'fs'
import path from 'path'
const locales = JSON.parse(fs.readFileSync('public/locales/en.json', 'utf8'))
const allKeys = []
function flatten(obj, prefix = '') {
for (const key in obj) {
const fullKey = prefix ? `${prefix}.${key}` : key
if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
flatten(obj[key], fullKey)
} else {
allKeys.push(fullKey)
}
}
}
flatten(locales)
const dynamicPrefixes = [
'dashboard.',
'profileSettings.',
'apiNotifications.',
'experiments.status.',
'alert.metrics.',
'alert.conditions.',
'project.',
'project.mapping.',
'project.contains.',
'organisations.role.',
'auth.signup.features.',
'footer.',
'project.settings.roles.',
'main.faq.items.',
'main.web.features.',
'main.sessions.features.',
'performance.fast.list.',
'errors.fast.list.',
'startups.whyUs.',
'smbs.whyUs.',
'marketers.whyUs.',
'experiments.multipleVariantOptions.',
'experiments.featureFlagMode.',
'experiments.exposureTrigger.',
'experiments.status.',
'project.settings.tabs.',
'project.settings.difficultyLevels.',
]
// Exact keys that are dynamically constructed and should be excluded
const dynamicExactKeys = ['common.is', 'common.isNot', 'common.connected', 'common.notConnected']
function getFiles(dir) {
let results = []
const list = fs.readdirSync(dir)
list.forEach((file) => {
file = path.join(dir, file)
const stat = fs.statSync(file)
if (stat && stat.isDirectory()) {
results = results.concat(getFiles(file))
} else {
if (file.match(/\.(ts|tsx|json|html)$/) && !file.endsWith('en.json') && !file.includes('node_modules')) {
results.push(file)
}
}
})
return results
}
const files = getFiles('app')
const fileContents = files.map((f) => fs.readFileSync(f, 'utf8'))
const unusedKeys = allKeys.filter((key) => {
if (dynamicPrefixes.some((p) => key.startsWith(p))) {
return false
}
if (dynamicExactKeys.includes(key)) {
return false
}
const isUsed = fileContents.some((content) => content.includes(key))
if (isUsed) {
return false
}
return true
})
fs.writeFileSync('unused_keys.txt', unusedKeys.join('\n'))
console.log(`Stored ${unusedKeys.length} unused keys in unused_keys.txt`)