Files
discord-decomp/sources/lib/Frecency.tsx
T
2026-07-27 16:20:00 +03:00

358 lines
13 KiB
TypeScript

/* Metro module 4393; source: lib/Frecency.tsx; dependencies: [6, 7, 22, 3738, 2] */
function _fun37159(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#37159, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:6, offset: 0x0109d4e2, size: 150 bytes, params: 8, frame: 18
const Object = global.Object;
Object.defineProperty(exports, '__esModule', {value: true});
const env0_2 = importDefault(6) /* metro dependency 6 */;
const env0_3 = importDefault(7) /* metro dependency 7 */;
const DEFAULT_FRECENCY = function(a0, a1, a2) {
var Math = global.Math;
return Math.ceil(a0 * (a1 / a2.numOfRecentUses));
};
const DEFAULT_WEIGHT = function(a0) {
return a0 <= 3 ? 100 : a0 <= 15 ? 70 : a0 <= 30 ? 50 : a0 <= 45 ? 30 : a0 <= 80 ? 10 : 1;
};
const value = _fun37162();
(require(2) /* metro dependency 2 */).fileFinishedImporting('lib/Frecency.tsx');
exports.default = value;
}
function _fun37162() { // fn#37162, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:277, offset: 0x0109d5ed, size: 250 bytes, params: 1, frame: 15
return env0_3(Frecency, [{key: 'overwriteHistory', value: function(a0, a1) {
var value = a0;
var env0_0 = this;
var defaultImport = importDefault(dependencyMap[2]);
this.usageHistory = defaultImport.mapValues(value ?? ({}), _fun37165);
if (a1 != null) {
a1.forEach(_fun37166);
}
this.markDirty();
}}, {key: 'markDirty', value: function() {
this.dirty = true;
var version = this.version;
this.version = typeof version === 'bigint' ? version + 1n : +version + 1;
}}, {key: 'isDirty', value: function() {
return this.dirty;
}}, {key: 'track', value: value_37169}, {key: 'getEntry', value: function(a0) {
var r0;
var value = null;
if (value == a0) {
r0 = value;
} else {
if (this.dirty) {
this.compute();
}
r0 = global.Object.prototype.hasOwnProperty.call(this.usageHistory, a0) ? this.usageHistory[a0] : undefined;
}
return r0;
}}, {key: 'getScore', value: function(a0) {
var value = this.getEntry(a0);
var value2 = null;
return value2 != value ? value.score : value2;
}}, {key: 'getFrecency', value: function(a0) {
var value = this.getEntry(a0);
var value2 = null;
return value2 != value ? value.frecency : value2;
}}, {key: 'compute', value: value_37173}, {key: 'frequently', get: function() {
if (this.dirty) {
this.compute();
}
return this._frequently;
}, set: function(a0) {
this._frequently = a0;
}}]);
}
function Frecency({computeBonus, computeWeight = DEFAULT_WEIGHT, computeFrecency, calculateMaxTotalUse, lookupKey, afterCompute, numFrequentlyItems, maxSamples}) { // fn#37163, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:298, offset: 0x0109d6e7, size: 202 bytes, params: 2, frame: 21
const r7 = computeFrecency !== undefined ? computeFrecency : DEFAULT_FRECENCY;
calculateMaxTotalUse = !(calculateMaxTotalUse === undefined) && calculateMaxTotalUse;
numFrequentlyItems = numFrequentlyItems === undefined ? 32 : numFrequentlyItems;
maxSamples = maxSamples === undefined ? 10 : maxSamples;
const value = environment.__proto__;
env1_2(this, Frecency);
this.computeBonus = computeBonus;
this.computeWeight = computeWeight;
this.computeFrecency = r7;
this.calculateMaxTotalUse = calculateMaxTotalUse;
this.afterCompute = afterCompute;
this.lookupKey = lookupKey;
this.usageHistory = {};
this.frequently = [];
this.maxSamples = maxSamples;
this.numFrequentlyItems = numFrequentlyItems;
this.dirty = false;
this.version = 0;
}
function value_37164(a0, a1) { // fn#37164, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:785, offset: 0x0109d7b1, size: 102 bytes, params: 3, frame: 18
const value = a0;
const defaultImport = importDefault(22) /* metro dependency 22 */;
this.usageHistory = defaultImport.mapValues(value ?? ({}), function(a0) {
var r2;
var object = {};
copyDataProperties(object, a0, r2);
object['frecency'] = -1;
return object;
});
if (a1 != null) {
a1.forEach(_fun37166);
}
this.markDirty();
}
function value_37169(a0) { // fn#37169, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:1104, offset: 0x0109d886, size: 357 bytes, params: 2, frame: 21
var r1;
var r10;
var r8;
var r6;
var r3;
var object2;
var Object;
var hasOwn;
var usageHistory;
var property;
var totalUses;
var recentUses;
var push;
var sort;
var Date;
var now;
var length;
var maxSamples;
var shift;
var markDirty;
let value = a1;
const value2 = undefined;
reducibleJoin2: while (true) {
if (value !== value2) {
r1 = value;
break reducibleJoin2;
}
r1 = {};
break reducibleJoin2;
}
const timestamp = r1.timestamp;
const usesSinceLastTrack = r1.usesSinceLastTrack;
reducibleJoin17: while (true) {
if (a0 == null) {
break reducibleJoin17;
}
Object = global.Object;
hasOwn = Object.hasOwn;
usageHistory = this.usageHistory;
reducibleJoin5: while (true) {
if (Reflect.apply(hasOwn, Object, [usageHistory, a0])) {
usageHistory = this.usageHistory;
property = usageHistory[a0];
r10 = property;
break reducibleJoin5;
}
r10 = value2;
break reducibleJoin5;
}
if (r10 == null) {
object2 = {};
value = 1;
r8 = usesSinceLastTrack ?? value;
object2.totalUses = r8;
reducibleJoin15: while (true) {
if (timestamp != null) {
r6 = timestamp;
break reducibleJoin15;
}
Date = global.Date;
now = Date.now;
value = Reflect.apply(now, Date, []);
r6 = value;
break reducibleJoin15;
}
object2.recentUses = [r6];
object2.frecency = -1;
object2.score = 0;
r3 = object2;
} else {
r10.frecency = -1;
totalUses = r10.totalUses;
value = 1;
r1 = usesSinceLastTrack ?? value;
r10.totalUses = totalUses + r1;
if (timestamp == null) {
recentUses = r10.recentUses;
push = recentUses.push;
Date = global.Date;
now = Date.now;
Reflect.apply(push, recentUses, [Reflect.apply(now, Date, [])]);
} else {
recentUses = r10.recentUses;
push = recentUses.push;
Reflect.apply(push, recentUses, [timestamp]);
recentUses = r10.recentUses;
sort = recentUses.sort;
Reflect.apply(sort, recentUses, []);
}
recentUses = r10.recentUses;
length = recentUses.length;
maxSamples = this.maxSamples;
if (length > maxSamples) {
reducibleLoop11: while (true) {
recentUses = r10.recentUses;
shift = recentUses.shift;
Reflect.apply(shift, recentUses, []);
recentUses = r10.recentUses;
length = recentUses.length;
maxSamples = this.maxSamples;
if (length > maxSamples) {
continue reducibleLoop11;
}
r3 = r10;
break reducibleLoop11;
}
} else {
r3 = r10;
}
}
usageHistory = this.usageHistory;
usageHistory[a0] = r3;
markDirty = this.markDirty;
Reflect.apply(markDirty, this, []);
break reducibleJoin17;
}
return value2;
}
function value_37173() { // fn#37173, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:1928, offset: 0x0109da89, size: 307 bytes, params: 1, frame: 19
var environment;
var defaultImport;
var maxBy;
var Object;
var value4;
let value = environment.__proto__;
const env0_1 = (importDefault(3738) /* metro dependency 3738 */)();
if (this.calculateMaxTotalUse) {
defaultImport = importDefault(22) /* metro dependency 22 */;
maxBy = defaultImport.maxBy;
Object = global.Object;
value4 = Reflect.apply(maxBy, defaultImport, [Object.values(this.usageHistory), function(a0) {
return a0.totalUses;
}]);
}
value = importDefault(22) /* metro dependency 22 */;
value.forEach(this.usageHistory, _fun37175);
value = importDefault(22) /* metro dependency 22 */;
value = value(this.usageHistory);
value = value.map(_fun37177);
value = value.filter(function(a0) {
return a0 !== null;
});
value = value.sortBy(function(a0) {
var r0;
var r1;
var r2;
var item3;
var value3;
var iterator = a0[Symbol.iterator]();
var iterator2 = iterator.next;
var item2 = Reflect.apply(iterator2, iterator, []);
var item = item2.value;
item2 = item2.done ? undefined : iterator;
var value = undefined;
var value2 = item2 === value;
if (value2) {
r0 = value;
r1 = item2;
r2 = value2;
} else {
item3 = Reflect.apply(iterator2, item2, []);
item = item3.value;
item3 = item3.done ? undefined : item2;
value3 = item3 === value;
if (value3) {
r0 = value;
r1 = item3;
r2 = value3;
} else {
r0 = item;
r1 = item3;
r2 = value3;
}
}
if (!r2) {
r1.return();
}
return -r0;
});
value = value.map(function(a0) {
var iterator = a0[Symbol.iterator]();
var item2 = iterator.next();
var item = item2.value;
item2 = item2.done ? undefined : iterator;
var value = undefined;
var value2 = item2 === value;
var r0 = value2 ? value : item;
if (!value2) {
item2.return();
}
return r0;
});
value = value.take(this.numFrequentlyItems);
this.frequently = value.value();
this.dirty = false;
this.afterCompute(this.usageHistory, this._frequently);
}
function _fun37166({key, timestamp}) { // fn#37166, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:896, offset: 0x0109d834, size: 41 bytes, params: 2, frame: 14
const binding = env0_0;
return binding.track(key, {timestamp: timestamp});
}
function _fun37175(a0, a1) { // fn#37175, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:2091, offset: 0x0109dbc7, size: 251 bytes, params: 3, frame: 21
var environment;
var binding;
var value2;
var value3;
const env0_0 = a0;
const totalUses2 = a0.totalUses;
const recentUses = a0.recentUses;
if (a0.frecency === -1) {
binding = env0_0;
var env0_1 = binding.computeBonus(a1) / 100;
a0.score = 0;
value2 = environment.__proto__.__proto__;
value3 = undefined;
(importDefault(22) /* metro dependency 22 */).forEach(recentUses, _fun37176);
if (a0.score > 0) {
if (a0.recentUses.length > 0) {
binding = env0_0;
a0.frecency = binding.computeFrecency(totalUses2, a0.score, {numOfRecentUses: recentUses.length,
maxTotalUse: env0_2 == null ? value3 : env0_2.totalUses});
}
env0_0.usageHistory[a1] = a0;
} else {
delete env0_0.usageHistory[a1];
}
}
}
function _fun37177(a0, a1) { // fn#37177, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:2571, offset: 0x0109dd3f, size: 56 bytes, params: 3, frame: 11
const value = env0_0.lookupKey(a1);
const value2 = null;
return value2 == value ? value2 : [value, a0.frecency];
}
function _fun37176(a0, a1) { // fn#37176, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4565:2213, offset: 0x0109dcc2, size: 125 bytes, params: 3, frame: 16
let value = environment.__proto__;
if (a1 >= env1_0.maxSamples) {
return false;
}
let binding = env1_0;
const computeWeight = binding.computeWeight;
const binding2 = env1_1;
const diff = binding2.diff;
value = environment.__proto__.__proto__.__proto__;
value = importDefault(3738) /* metro dependency 3738 */;
value = value(a0);
value = Reflect.apply(computeWeight, binding, [Reflect.apply(diff, binding2, [value, 'days'])]);
binding = env0_0;
binding.score = binding.score + env0_1 * value;
}