You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { consola } from 'consola';
|
|
import { colors } from 'consola/utils';
|
|
import { diff } from 'just-diff';
|
|
import { unset } from 'lodash';
|
|
import { existsSync } from 'node:fs';
|
|
|
|
import {
|
|
entryLocaleJsonFilepath,
|
|
i18nConfig,
|
|
outputLocaleJsonFilepath,
|
|
srcDefaultLocales,
|
|
} from './const';
|
|
import { readJSON, tagWhite, writeJSON } from './utils';
|
|
|
|
export const genDiff = () => {
|
|
consola.start(`Diff between Dev/Prod local...`);
|
|
|
|
const resources = require(srcDefaultLocales);
|
|
const data = Object.entries(resources.default);
|
|
|
|
for (const [ns, devJSON] of data) {
|
|
const filepath = entryLocaleJsonFilepath(`${ns}.json`);
|
|
if (!existsSync(filepath)) continue;
|
|
const prodJSON = readJSON(filepath);
|
|
|
|
const diffResult = diff(prodJSON, devJSON as any);
|
|
const remove = diffResult.filter((item) => item.op === 'remove');
|
|
if (remove.length === 0) {
|
|
consola.success(tagWhite(ns), colors.gray(filepath));
|
|
continue;
|
|
}
|
|
|
|
const clearLocals = [];
|
|
|
|
for (const locale of [i18nConfig.entryLocale, ...i18nConfig.outputLocales]) {
|
|
const localeFilepath = outputLocaleJsonFilepath(locale, `${ns}.json`);
|
|
if (!existsSync(localeFilepath)) continue;
|
|
const localeJSON = readJSON(localeFilepath);
|
|
|
|
for (const item of remove) {
|
|
unset(localeJSON, item.path);
|
|
}
|
|
|
|
writeJSON(localeFilepath, localeJSON);
|
|
clearLocals.push(locale);
|
|
}
|
|
consola.info('clear', clearLocals);
|
|
consola.success(tagWhite(ns), colors.gray(filepath));
|
|
}
|
|
};
|