@hot-updater/plugin-core
Version:
React Native OTA solution for self-hosted
39 lines (38 loc) • 1.94 kB
JavaScript
//#region src/queryBundles.ts
const compareValue = (value, expected, comparator) => {
if (expected === void 0) return true;
switch (comparator) {
case "eq": return value === expected;
case "gt": return value.localeCompare(expected) > 0;
case "gte": return value.localeCompare(expected) >= 0;
case "lt": return value.localeCompare(expected) < 0;
case "lte": return value.localeCompare(expected) <= 0;
}
};
function bundleIdMatchesFilter(id, filter) {
if (!filter) return true;
if (filter.in && !filter.in.includes(id)) return false;
return compareValue(id, filter.eq, "eq") && compareValue(id, filter.gt, "gt") && compareValue(id, filter.gte, "gte") && compareValue(id, filter.lt, "lt") && compareValue(id, filter.lte, "lte");
}
function bundleMatchesQueryWhere(bundle, where) {
if (!where) return true;
if (where.channel !== void 0 && bundle.channel !== where.channel) return false;
if (where.platform !== void 0 && bundle.platform !== where.platform) return false;
if (where.enabled !== void 0 && bundle.enabled !== where.enabled) return false;
if (!bundleIdMatchesFilter(bundle.id, where.id)) return false;
if (where.targetAppVersionNotNull === true && bundle.targetAppVersion === null) return false;
if (where.targetAppVersion !== void 0 && bundle.targetAppVersion !== where.targetAppVersion) return false;
if (where.targetAppVersionIn && !where.targetAppVersionIn.includes(bundle.targetAppVersion ?? "")) return false;
if (where.fingerprintHash !== void 0 && bundle.fingerprintHash !== where.fingerprintHash) return false;
return true;
}
function sortBundles(bundles, orderBy) {
const direction = orderBy?.direction ?? "desc";
if (orderBy && orderBy.field !== "id") return bundles;
return bundles.slice().sort((a, b) => {
const result = a.id.localeCompare(b.id);
return direction === "asc" ? result : -result;
});
}
//#endregion
export { bundleIdMatchesFilter, bundleMatchesQueryWhere, sortBundles };