2020-12-03 10:55:06 +00:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
// Modules from file
|
|
|
|
const shared = require("../shared.js");
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Convert prefixes and platform tags from string to ID and vice versa.
|
|
|
|
*/
|
|
|
|
class PrefixParser {
|
|
|
|
constructor() {
|
|
|
|
}
|
|
|
|
|
|
|
|
//#region Private methods
|
|
|
|
/**
|
|
|
|
* @private
|
|
|
|
* Gets the key associated with a given value from a dictionary.
|
|
|
|
* @param {Object} object Dictionary to search
|
|
|
|
* @param {Any} value Value associated with the key
|
|
|
|
* @returns {String|undefined} Key found or undefined
|
|
|
|
*/
|
|
|
|
_getKeyByValue(object, value) {
|
|
|
|
return Object.keys(object).find(key => object[key] === value);
|
|
|
|
}
|
2020-12-03 11:35:50 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @private
|
|
|
|
* Makes an array of strings uppercase.
|
|
|
|
* @param {String[]} a
|
|
|
|
* @returns {String[]}
|
|
|
|
*/
|
|
|
|
_toUpperCaseArray(a) {
|
|
|
|
// If the array is empty, return
|
|
|
|
if (a.length === 0) return [];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Makes a string uppercase.
|
|
|
|
* @param {String} s
|
|
|
|
* @returns {String}
|
|
|
|
*/
|
|
|
|
function toUpper(s) {
|
|
|
|
return s.toUpperCase();
|
|
|
|
}
|
|
|
|
return a.map(toUpper);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @private
|
|
|
|
* Check if `dict` contains `value` as a value.
|
|
|
|
* @param {Object.<number, string>} dict
|
|
|
|
* @param {String} value
|
|
|
|
*/
|
|
|
|
_valueInDict(dict, value) {
|
|
|
|
const array = Object.values(dict);
|
|
|
|
const upperArr = this._toUpperCaseArray(array);
|
|
|
|
const element = value.toUpperCase();
|
|
|
|
return upperArr.includes(element);
|
|
|
|
}
|
2020-12-03 10:55:06 +00:00
|
|
|
//#endregion Private methods
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @public
|
|
|
|
* Convert a list of prefixes to their respective IDs.
|
|
|
|
* @param {String[]} prefixes
|
|
|
|
*/
|
|
|
|
prefixesToIDs(prefixes) {
|
|
|
|
const ids = [];
|
|
|
|
for(const p of prefixes) {
|
|
|
|
// Check what dict contains the value
|
|
|
|
let dict = null;
|
2020-12-03 11:35:50 +00:00
|
|
|
if (this._valueInDict(shared.statuses, p)) dict = shared.statuses;
|
|
|
|
else if (this._valueInDict(shared.engines, p)) dict = shared.engines;
|
|
|
|
else if (this._valueInDict(shared.tags, p)) dict = shared.tags;
|
|
|
|
else if (this._valueInDict(shared.others, p)) dict = shared.others;
|
2020-12-03 10:55:06 +00:00
|
|
|
else continue;
|
|
|
|
|
|
|
|
// Extract the key from the dict
|
|
|
|
const key = this._getKeyByValue(dict, p);
|
|
|
|
if(key) ids.push(parseInt(key));
|
|
|
|
}
|
2020-12-03 10:59:27 +00:00
|
|
|
return ids;
|
2020-12-03 10:55:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @public
|
|
|
|
* It converts a list of IDs into their respective prefixes.
|
|
|
|
* @param {number[]} ids
|
|
|
|
*/
|
|
|
|
idsToPrefixes(ids) {
|
|
|
|
const prefixes = [];
|
|
|
|
for(const id of ids) {
|
|
|
|
// Check what dict contains the key
|
|
|
|
let dict = null;
|
2020-12-03 11:35:50 +00:00
|
|
|
if (Object.keys(shared.statuses).includes(id.toString())) dict = shared.statuses;
|
|
|
|
else if (Object.keys(shared.engines).includes(id.toString())) dict = shared.engines;
|
|
|
|
else if (Object.keys(shared.tags).includes(id.toString())) dict = shared.tags;
|
|
|
|
else if (Object.keys(shared.others).includes(id.toString())) dict = shared.others;
|
2020-12-03 10:55:06 +00:00
|
|
|
else continue;
|
|
|
|
|
|
|
|
// Check if the key exists in the dict
|
|
|
|
if (id in dict) prefixes.push(dict[id]);
|
|
|
|
}
|
2020-12-03 10:59:27 +00:00
|
|
|
return prefixes;
|
2020-12-03 10:55:06 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = PrefixParser;
|