diff options
Diffstat (limited to 'build/constants.js')
-rw-r--r-- | build/constants.js | 137 |
1 files changed, 71 insertions, 66 deletions
diff --git a/build/constants.js b/build/constants.js index 961e998..6344a12 100644 --- a/build/constants.js +++ b/build/constants.js @@ -6,16 +6,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.addCollections = exports.addStats = exports.fetchCollections = exports.fetchStats = void 0; +exports.addZones = exports.fetchZones = exports.addSkills = exports.fetchSkills = exports.addCollections = exports.fetchCollections = exports.addStats = exports.fetchStats = exports.addJSONConstants = void 0; const node_fetch_1 = __importDefault(require("node-fetch")); const https_1 = require("https"); const node_cache_1 = __importDefault(require("node-cache")); +const queue_promise_1 = __importDefault(require("queue-promise")); const httpsAgent = new https_1.Agent({ keepAlive: true }); const githubApiBase = 'https://api.github.com'; const owner = 'skyblockstats'; const repo = 'skyblock-constants'; +// we use a queue for editing so it doesnt hit the github ratelimit as much +const queue = new queue_promise_1.default({ + concurrent: 1, + interval: 500 +}); /** * Send a request to the GitHub API * @param method The HTTP method, for example GET, PUT, POST, etc @@ -48,7 +54,6 @@ async function fetchFile(path) { return fileCache.get(path); const r = await fetchGithubApi('GET', `/repos/${owner}/${repo}/contents/${path}`, { 'Accept': 'application/vnd.github.v3+json', - 'Authorization': undefined }); const data = await r.json(); const file = { @@ -79,9 +84,8 @@ async function editFile(file, message, newContent) { sha: data.content.sha }); } -/** Fetch all the known SkyBlock stats as an array of strings */ -async function fetchStats() { - const file = await fetchFile('stats.json'); +async function fetchJSONConstant(filename) { + const file = await fetchFile(filename); try { return JSON.parse(file.content); } @@ -90,72 +94,73 @@ async function fetchStats() { return []; } } -exports.fetchStats = fetchStats; -/** Fetch all the known SkyBlock collections as an array of strings */ -async function fetchCollections() { - const file = await fetchFile('collections.json'); - try { - return JSON.parse(file.content); - } - catch { - // probably invalid json, return an empty array - return []; - } +/** Add stats to skyblock-constants. This has caching so it's fine to call many times */ +async function addJSONConstants(filename, addingValues, units = 'stats') { + if (addingValues.length === 0) + return; // no stats provided, just return + queue.enqueue(async () => { + const file = await fetchFile(filename); + if (!file.path) + return; + let oldStats; + try { + oldStats = JSON.parse(file.content); + } + catch { + // invalid json, set it as an empty array + oldStats = []; + } + const updatedStats = oldStats + .concat(addingValues) + // remove duplicates + .filter((value, index, array) => array.indexOf(value) === index) + .sort((a, b) => a.localeCompare(b)); + const newStats = updatedStats.filter(value => !oldStats.includes(value)); + // there's not actually any new stats, just return + if (newStats.length === 0) + return; + const commitMessage = newStats.length >= 2 ? `Add ${newStats.length} new ${units}` : `Add '${newStats[0]}'`; + await editFile(file, commitMessage, JSON.stringify(updatedStats, null, 2)); + }); } -exports.fetchCollections = fetchCollections; +exports.addJSONConstants = addJSONConstants; +/** Fetch all the known SkyBlock stats as an array of strings */ +async function fetchStats() { + return await fetchJSONConstant('stats.json'); +} +exports.fetchStats = fetchStats; /** Add stats to skyblock-constants. This has caching so it's fine to call many times */ async function addStats(addingStats) { - if (addingStats.length === 0) - return; // no stats provided, just return - const file = await fetchFile('stats.json'); - if (!file.path) - return; - let oldStats; - try { - oldStats = JSON.parse(file.content); - } - catch { - // invalid json, set it as an empty array - oldStats = []; - } - const updatedStats = oldStats - .concat(addingStats) - // remove duplicates - .filter((value, index, array) => array.indexOf(value) === index) - .sort((a, b) => a.localeCompare(b)); - const newStats = updatedStats.filter(value => !oldStats.includes(value)); - // there's not actually any new stats, just return - if (newStats.length === 0) - return; - const commitMessage = newStats.length >= 2 ? `Add ${newStats.length} new stats` : `Add '${newStats[0]}'`; - await editFile(file, commitMessage, JSON.stringify(updatedStats, null, 2)); + await addJSONConstants('stats.json', addingStats, 'stats'); } exports.addStats = addStats; -/** Add stats to skyblock-constants. This has caching so it's fine to call many times */ +/** Fetch all the known SkyBlock collections as an array of strings */ +async function fetchCollections() { + return await fetchJSONConstant('collections.json'); +} +exports.fetchCollections = fetchCollections; +/** Add collections to skyblock-constants. This has caching so it's fine to call many times */ async function addCollections(addingCollections) { - if (addingCollections.length === 0) - return; // no stats provided, just return - const file = await fetchFile('collections.json'); - if (!file.path) - return; - let oldCollections; - try { - oldCollections = JSON.parse(file.content); - } - catch { - // invalid json, set it as an empty array - oldCollections = []; - } - const updatedCollections = oldCollections - .concat(addingCollections) - // remove duplicates - .filter((value, index, array) => array.indexOf(value) === index) - .sort((a, b) => a.localeCompare(b)); - const newCollections = updatedCollections.filter(value => !oldCollections.includes(value)); - // there's not actually any new stats, just return - if (newCollections.length === 0) - return; - const commitMessage = newCollections.length >= 2 ? `Add ${newCollections.length} new collections` : `Add '${newCollections[0]}'`; - await editFile(file, commitMessage, JSON.stringify(updatedCollections, null, 2)); + await addJSONConstants('collections.json', addingCollections, 'collections'); } exports.addCollections = addCollections; +/** Fetch all the known SkyBlock collections as an array of strings */ +async function fetchSkills() { + return await fetchJSONConstant('skills.json'); +} +exports.fetchSkills = fetchSkills; +/** Add skills to skyblock-constants. This has caching so it's fine to call many times */ +async function addSkills(addingSkills) { + await addJSONConstants('skills.json', addingSkills, 'skills'); +} +exports.addSkills = addSkills; +/** Fetch all the known SkyBlock collections as an array of strings */ +async function fetchZones() { + return await fetchJSONConstant('zones.json'); +} +exports.fetchZones = fetchZones; +/** Add skills to skyblock-constants. This has caching so it's fine to call many times */ +async function addZones(addingZones) { + await addJSONConstants('zones.json', addingZones, 'zones'); +} +exports.addZones = addZones; |