UNPKG

pogo-data-generator

Version:
85 lines (84 loc) 3.3 kB
"use strict"; 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; }