65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
/**
|
|
* This script is used to find unused language keys in the javascript files. It will take a main language (en.js) and compare with the other languages.
|
|
*
|
|
* Usage: node devops/localization/unused-language-keys.js
|
|
* Example: node devops/localization/unused-language-keys.js
|
|
*
|
|
* Copyright (c) 2024 by Umbraco HQ
|
|
*/
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import glob from 'tiny-glob';
|
|
|
|
const mainLanguage = 'en.js';
|
|
|
|
const __dirname = import.meta.dirname;
|
|
const languageFolder = path.join(__dirname, '../../dist-cms/assets/lang');
|
|
|
|
// Check that the languageFolder exists
|
|
if (!fs.existsSync(languageFolder)) {
|
|
console.error(`The language folder does not exist: ${languageFolder}. You need to build the project first by running 'npm run build'`);
|
|
process.exit(1);
|
|
}
|
|
|
|
const mainKeys = (await import(path.join(languageFolder, mainLanguage))).default;
|
|
const mainMap = buildMap(mainKeys);
|
|
const keys = Array.from(mainMap.keys());
|
|
const usedKeys = new Set();
|
|
|
|
const elementAndControllerFiles = await glob(`${__dirname}/../../src/**/*.ts`, { filesOnly: true });
|
|
|
|
console.log(`Checking ${elementAndControllerFiles.length} files for unused keys`);
|
|
|
|
// Find all the keys used in the javascript files
|
|
const filePromise = Promise.all(elementAndControllerFiles.map(async (file) => {
|
|
// Check if each key is in the file (simple)
|
|
const fileContent = fs.readFileSync(file, 'utf8');
|
|
keys.forEach((key) => {
|
|
if (fileContent.includes(key)) {
|
|
usedKeys.add(key);
|
|
}
|
|
});
|
|
}));
|
|
|
|
await filePromise;
|
|
|
|
const unusedKeys = Array.from(mainMap.keys()).filter((key) => !usedKeys.has(key));
|
|
|
|
console.log(`\n${mainLanguage}:`);
|
|
console.log(`Used keys in ${mainLanguage}:`);
|
|
console.log(usedKeys);
|
|
console.log(`Unused keys in ${mainLanguage}:`);
|
|
console.log(unusedKeys);
|
|
|
|
function buildMap(keys) {
|
|
const map = new Map();
|
|
|
|
for (const key in keys) {
|
|
for (const subKey in keys[key]) {
|
|
map.set(`${key}_${subKey}`, keys[key][subKey]);
|
|
}
|
|
}
|
|
|
|
return map;
|
|
}
|