Viewing old revision of Module:Utils
You are viewing an old revision of this page from 2/26/2026, 3:50:27 PM.
View latest versionfunction resolveArgs(args) {
if (typeof args == "string") return { "0": args };
return args;
}
function isModuleEmpty(mod) {
return !mod || Object.keys(mod).length === 0;
}
async function resolveData(moduleName, test = false, version) {
const versionsModuleName = test ? `TEST/Versions` : `Versions`;
const Versions = await requireData(versionsModuleName);
const LatestGameVersion = Versions.latest;
const VersionEntries = Versions.versions || [];
if (version) {
const forcedName = test ? `TEST/${moduleName}/data/${version}` : `${moduleName}/data/${version}`;
if (!availablePages.has(`Module:${forcedName}`)) return { data: {}, version };
return { data: await requireData(forcedName), version }
}
const requireName = test ? `TEST/${moduleName}/data/${LatestGameVersion}` : `${moduleName}/data/${LatestGameVersion}`;
if (availablePages.has(`Module:${requireName}`)) return { data: await requireData(requireName), version: LatestGameVersion };
// Fallback: iterate versions list in order
for (const entry of VersionEntries) {
const v = entry.id;
const candidateName = test ? `TEST/${moduleName}/data/${v}` : `${moduleName}/data/${v}`
if (availablePages.has(`Module:${candidateName}`)) return { data: await requireData(candidateName), version: v };
}
return { data: {}, version: null };
}
function sortObjectByKey(obj) {
return Object.keys(obj).sort().reduce((result, key) => {
result[key] = obj[key];
return result;
}, {});
}
function filterObjectByProperty(obj, key, value) {
return Object.fromEntries(
Object.entries(obj).filter(([_, v]) => v[key] === value)
);
}
function sortObject(obj, compareFunction) {
// Turn the object into an array of objects
const entries = Object.entries(obj);
// Sort the array using the provided compare function
entries.sort((a, b) => compareFunction(a[1], b[1]));
// Convert the sorted array back into an object
return Object.fromEntries(entries);
}
function findByProperty(obj, key, value) {
return Object.values(obj).find(item => item[key] === value);
}
async function resolveItemByGuid(guid, options = {}) {
if (!guid) return null;
const { test = false, version } = options;
// Load all item modules for the same version
const [
{ data: TradeItems },
{ data: Equipment },
{ data: Consumables }
] = await Promise.all([
resolveData("Trade_Items", test, version),
resolveData("Equipment", test, version),
resolveData("Consumables", test, version)
]);
// GUID lookup (assuming normalized by GUID as key)
return (
TradeItems?.[guid] ||
Equipment?.[guid] ||
Consumables?.[guid] ||
null
);
}
exports = {
resolveArgs,
isModuleEmpty,
resolveData,
sortObjectByKey,
filterObjectByProperty,
sortObject,
findByProperty,
resolveItemByGuid
}