pogo-data-generator
Version:
Pokemon GO project data generator
85 lines (84 loc) • 3.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createNodeApkCache = createNodeApkCache;
exports.primeApkCache = primeApkCache;
const promises_1 = require("node:fs/promises");
const node_os_1 = __importDefault(require("node:os"));
const node_path_1 = __importDefault(require("node:path"));
const Apk_1 = __importDefault(require("./classes/Apk"));
const isApkTextCacheFile = (value) => {
if (!value || typeof value !== 'object') {
return false;
}
const candidate = value;
return (typeof candidate.apkFilename === 'string' &&
!!candidate.texts &&
typeof candidate.texts === 'object');
};
const defaultNodeApkCachePath = () => {
if (process.platform === 'darwin') {
return node_path_1.default.join(node_os_1.default.homedir(), 'Library', 'Caches', 'pogo-data-generator');
}
if (process.platform === 'win32') {
return node_path_1.default.join(process.env.LOCALAPPDATA || node_path_1.default.join(node_os_1.default.homedir(), 'AppData', 'Local'), 'pogo-data-generator');
}
return node_path_1.default.join(process.env.XDG_CACHE_HOME || node_path_1.default.join(node_os_1.default.homedir(), '.cache'), 'pogo-data-generator');
};
function createNodeApkCache({ apkCachePath, } = {}) {
const resolvedPath = node_path_1.default.resolve(apkCachePath || node_path_1.default.join(defaultNodeApkCachePath(), 'apk-texts.json'));
return {
async load(expectedFilename) {
try {
const cached = await (0, promises_1.readFile)(resolvedPath, 'utf8');
const parsed = JSON.parse(cached);
if (!isApkTextCacheFile(parsed)) {
return null;
}
if (expectedFilename && parsed.apkFilename !== expectedFilename) {
return null;
}
return parsed.texts;
}
catch {
return null;
}
},
async save(apkFilename, texts) {
try {
await (0, promises_1.mkdir)(node_path_1.default.dirname(resolvedPath), { recursive: true });
const payload = {
apkFilename,
texts,
};
await (0, promises_1.writeFile)(resolvedPath, JSON.stringify(payload), 'utf8');
}
catch (e) {
console.warn(e, 'Issue with writing APK text cache');
}
},
};
}
async function primeApkCache({ force, apkCachePath, } = {}) {
const apk = new Apk_1.default();
const apkCache = createNodeApkCache({ apkCachePath });
const latestFilename = await apk.getLatestApkFilename();
if (!latestFilename) {
return (await apkCache.load()) || {};
}
if (!force) {
const cached = await apkCache.load(latestFilename);
if (cached) {
return cached;
}
}
await apk.fetchApk(latestFilename);
await apk.extractTexts();
apk.cleanup();
if (apk.apkFilename) {
await apkCache.save(apk.apkFilename, apk.texts);
}
return apk.texts;
}