trustwallet-assets/script/generic/logo-size.ts
Adam R ec1fe7f6ee
[internal] Script restructuring/refactoring (#4070)
* Make non-mandatory action interface elements optional.

* Remove one unused import

* Scripts main renamed to entrypoint.

* Script common rename to generic

* Move generic scripts from action to generic.

* Move chain-specific scripts to blockchain.

Co-authored-by: Catenocrypt <catenocrypt@users.noreply.github.com>
2020-09-23 15:47:24 +02:00

97 lines
3.8 KiB
TypeScript

import * as bluebird from "bluebird";
import {
chainsPath,
getChainLogoPath,
getChainAssetsPath,
getChainAssetLogoPath,
getChainValidatorsListPath,
getChainValidatorAssetLogoPath
} from "../generic/repo-structure";
import {
readDirSync,
readFileSync,
isPathExistsSync
} from "../generic/filesystem";
import { checkResizeIfTooLarge } from "../generic/image";
import { ActionInterface, CheckStepInterface } from "../generic/interface";
// return name of large logo, or empty
async function checkDownsize(chains, checkOnly: boolean): Promise<string[]> {
console.log(`Checking all logos for size ...`);
let totalCountChecked = 0;
let totalCountTooLarge = 0;
let totalCountUpdated = 0;
const largePaths: string[] = [];
await bluebird.map(chains, async chain => {
let countChecked = 0;
let countTooLarge = 0;
let countUpdated = 0;
const path = getChainLogoPath(chain);
countChecked++;
const [tooLarge, updated] = await checkResizeIfTooLarge(path, checkOnly);
if (tooLarge) { largePaths.push(path); }
countTooLarge += tooLarge ? 1 : 0;
countUpdated += updated ? 1 : 0;
// Check and resize if needed chain assets
const assetsPath = getChainAssetsPath(chain);
if (isPathExistsSync(assetsPath)) {
await bluebird.mapSeries(readDirSync(assetsPath), async asset => {
const path = getChainAssetLogoPath(chain, asset);
countChecked++;
const [tooLarge, updated] = await checkResizeIfTooLarge(path, checkOnly);
if (tooLarge) { largePaths.push(path); }
countTooLarge += tooLarge ? 1 : 0;
countUpdated += updated ? 1 : 0;
})
}
// Check and resize if needed chain validators image
const chainValidatorsList = getChainValidatorsListPath(chain);
if (isPathExistsSync(chainValidatorsList)) {
const validatorsList = JSON.parse(readFileSync(getChainValidatorsListPath(chain)));
await bluebird.mapSeries(validatorsList, async ({ id }) => {
const path = getChainValidatorAssetLogoPath(chain, id);
countChecked++;
const [tooLarge, updated] = await checkResizeIfTooLarge(path, checkOnly);
if (tooLarge) { largePaths.push(path); }
countTooLarge += tooLarge ? 1 : 0;
countUpdated += updated ? 1 : 0;
})
}
totalCountChecked += countChecked;
totalCountTooLarge += countTooLarge;
totalCountUpdated += countUpdated;
if (countTooLarge > 0 || countUpdated > 0) {
console.log(`Checking logos on chain ${chain} completed, ${countChecked} checked, ${countTooLarge} too large, ${largePaths}, ${countUpdated} logos updated`);
}
});
console.log(`Checking logos completed, ${totalCountChecked} logos checked, ${totalCountTooLarge} too large, ${totalCountUpdated} logos updated`);
return largePaths;
}
export class LogoSize implements ActionInterface {
getName(): string { return "Logo sizes"; }
getSanityChecks(): CheckStepInterface[] {
return [
{
getName: () => { return "Check that logos are not too large"},
check: async () => {
const foundChains = readDirSync(chainsPath);
const largePaths = await checkDownsize(foundChains, true);
const errors: string[] = largePaths.map(p => `Logo too large: ${p}`);
return [errors, []];
}
},
];
}
async sanityFix(): Promise<void> {
const foundChains = readDirSync(chainsPath);
await checkDownsize(foundChains, false);
}
}