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

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));
}
};