genshin-manager
Version:
<div align="center"> <p> <a href="https://www.npmjs.com/package/genshin-manager"><img src="https://img.shields.io/npm/v/genshin-manager.svg?maxAge=3600" alt="npm version" /></a> <a href="https://www.npmjs.com/package/genshin-manager"><img src="https:
202 lines (201 loc) • 6.98 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Client = exports.ClientEvents = void 0;
const node_cron_1 = __importDefault(require("node-cron"));
const path_1 = __importDefault(require("path"));
const ts_deepmerge_1 = require("ts-deepmerge");
const AssetCacheManager_1 = require("../client/AssetCacheManager");
const AudioAssets_1 = require("../models/assets/AudioAssets");
const ImageAssets_1 = require("../models/assets/ImageAssets");
/**
* Client events
* @see {@link Client}
*/
var ClientEvents;
(function (ClientEvents) {
/**
* When the cache update starts, fires
* @event BEGIN_UPDATE_CACHE
* @listener
* | param | type | description |
* | --- | --- | --- |
* | version | string | Game version of assets to cache |
*/
ClientEvents["BEGIN_UPDATE_CACHE"] = "BEGIN_UPDATE_CACHE";
/**
* When the cache update ends, fires
* @event END_UPDATE_CACHE
* @listener
* | param | type | description |
* | --- | --- | --- |
* | version | string | Game version of assets to cache |
*/
ClientEvents["END_UPDATE_CACHE"] = "END_UPDATE_CACHE";
/**
* When the assets update starts, fires
* @event BEGIN_UPDATE_ASSETS
* @listener
* | param | type | description |
* | --- | --- | --- |
* | version | string | Game version of new assets |
*/
ClientEvents["BEGIN_UPDATE_ASSETS"] = "BEGIN_UPDATE_ASSETS";
/**
* When the assets update ends, fires
* @event END_UPDATE_ASSETS
* @listener
* | param | type | description |
* | --- | --- | --- |
* | version | string | Game version of new assets |
*/
ClientEvents["END_UPDATE_ASSETS"] = "END_UPDATE_ASSETS";
})(ClientEvents || (exports.ClientEvents = ClientEvents = {}));
/**
* Class of the client
* @description This is the main body of `Genshin-Manager` where cache information is stored
*/
class Client extends AssetCacheManager_1.AssetCacheManager {
/**
* Create a Client
* @param option Client option
*/
constructor(option) {
const mergeOption = ts_deepmerge_1.merge.withOptions({ mergeArrays: false }, Client.defaultOption, option !== null && option !== void 0 ? option : {});
mergeOption.downloadLanguages = [
...new Set([
mergeOption.defaultLanguage,
...mergeOption.downloadLanguages,
]),
];
if (!mergeOption.autoFetchLatestAssetsByCron) {
mergeOption.autoFixTextMap = false;
mergeOption.autoFixExcelBin = false;
}
Object.values(ClientEvents).forEach((event) => {
Client._assetEventEmitter.on(event, (version) => {
this.emit(event, version);
});
});
super(mergeOption);
this.option = mergeOption;
}
/**
* Cached game version
* @returns Cached game version
* @example `5.1.0`
*/
get gameVersion() {
return AssetCacheManager_1.AssetCacheManager.gameVersion;
}
/**
* Change cached languages
* @param language Country code
* @example
* ```ts
* const client = new Client()
* await client.deploy()
* await client.changeLanguage('JP')
* ```
*/
changeLanguage(language) {
return __awaiter(this, void 0, void 0, function* () {
if (yield Client.setTextMapToCache(language)) {
this.option.autoFixTextMap = false;
yield Client.setTextMapToCache(language);
this.option.autoFixTextMap = true;
}
});
}
/**
* Deploy assets to cache & Update assets
* @example
* ```ts
* const client = new Client()
* await client.deploy()
* ```
*/
deploy() {
return __awaiter(this, void 0, void 0, function* () {
yield Client.updateCache();
if (this.option.autoFetchLatestAssetsByCron) {
node_cron_1.default.schedule(this.option.autoFetchLatestAssetsByCron, () => {
void (() => __awaiter(this, void 0, void 0, function* () {
yield Client.updateCache();
}))();
});
}
yield Promise.all([
ImageAssets_1.ImageAssets.deploy(this.option),
AudioAssets_1.AudioAssets.deploy(this.option),
]);
});
}
}
exports.Client = Client;
/**
* Default option
*/
Client.defaultOption = {
fetchOption: {
headers: {
'user-agent': `genshin-manager@${process.env.npm_package_version}`,
},
},
downloadLanguages: [
'EN',
'RU',
'VI',
'TH',
'PT',
'KR',
'JP',
'ID',
'FR',
'ES',
'DE',
'CHT',
'CHS',
],
defaultImageBaseURL: 'https://gi.yatta.top/assets/UI',
defaultAudioBaseURL: 'https://gi.yatta.top/assets/Audio',
imageBaseURLByRegex: {
'https://enka.network/ui': [
/^UI_(AvatarIcon_Side|Costume)_/,
/^UI_AvatarIcon_(.+)_Card$/,
/^UI_AvatarIcon_(.+)_Circle/,
/^UI_NameCardPic_(.+)_Alpha/,
/^UI_EquipIcon_(.+)_Awaken/,
],
'https://res.cloudinary.com/genshin/image/upload/sprites': [
/^Eff_UI_Talent_/,
/^UI_(TowerPic|TowerBlessing|GcgIcon|Gcg_Cardtable|Gcg_CardBack)_/,
],
'https://gi.yatta.top/assets/UI/monster': [
/^UI_(MonsterIcon|AnimalIcon)_/,
],
'https://gi.yatta.top/assets/UI/gcg': [/^UI_Gcg_CardFace_/],
'https://gi.yatta.top/assets/UI/reliquary': [/^UI_RelicIcon_/],
'https://gi.yatta.top/assets/UI/namecard': [/^UI_NameCard/],
},
audioBaseURLByRegex: {},
defaultLanguage: 'EN',
showFetchCacheLog: true,
autoFetchLatestAssetsByCron: '0 0 0 * * 3', //Every Wednesday 00:00:00
autoCacheImage: true,
autoCacheAudio: true,
autoFixTextMap: true,
autoFixExcelBin: true,
assetCacheFolderPath: path_1.default.resolve(__dirname, '..', '..', 'cache'),
};