monkeytype/backend/utils/misc.ts

83 lines
1.9 KiB
TypeScript
Raw Normal View History

import _ from "lodash";
import uaparser from "ua-parser-js";
export function roundTo2(num: number): number {
return _.round(num, 2);
}
export function stdDev(population: number[]): number {
const n = population.length;
if (n === 0) {
return 0;
}
const populationMean = mean(population);
const variance = _.sumBy(population, (x) => (x - populationMean) ** 2) / n;
return Math.sqrt(variance);
}
export function mean(population: number[]): number {
const n = population.length;
return n > 0 ? _.sum(population) / n : 0;
}
export function kogasa(cov: number): number {
return (
100 * (1 - Math.tanh(cov + Math.pow(cov, 3) / 3 + Math.pow(cov, 5) / 5))
);
}
export function identity(value: string): string {
return Object.prototype.toString
.call(value)
.replace(/^\[object\s+([a-z]+)\]$/i, "$1")
.toLowerCase();
}
export function base64UrlEncode(data: string): string {
return Buffer.from(data).toString("base64url");
}
export function base64UrlDecode(data: string): string {
return Buffer.from(data, "base64url").toString();
}
interface AgentLog {
ip: string | string[];
agent: string;
device?: string;
}
export function buildAgentLog(req: MonkeyTypes.Request): AgentLog {
const agent = uaparser(req.headers["user-agent"]);
const agentLog: AgentLog = {
ip:
req.headers["cf-connecting-ip"] ||
req.headers["x-forwarded-for"] ||
req.ip ||
"255.255.255.255",
agent: `${agent.os.name} ${agent.os.version} ${agent.browser.name} ${agent.browser.version}`,
};
const {
device: { vendor, model, type },
} = agent;
if (vendor) {
agentLog.device = `${vendor} ${model} ${type}`;
}
return agentLog;
}
v1.14.1 (#2745) * updated default config to fix incorrect font button being highlighted * Convert account controller to ts (#2731) * using modular sdk * removing last script * replacing more code * unused code * removed unused code * removed unused code * importing auth * using analytics controller * importing auth and analytics * importing auth * updated git ignore * fixed path * removed live config from gitignore * added error message when failing to initialize firebase * added live config using live config when building production * removed unused code * fixed incorrect function use * added example config * added a step to the contributing guide * optional steps * fixed path * using example in source code so that github actions dont cry like little babies * using function correctly * using function correctly * ignoring live * removed * added action webpack config * bruce said "no-no" This reverts commit 0a1e5e1660200fe30378d36cb6778772e2f79cc8. * Fix * Add ignore * updated instructions * using correct functions * using correct function * missing parameter * using correct function * using correct function * removed ts ignores * using new functions * removed refresh * using new functions * merge fix * fixed merge * regenereated lockfile * using correct function * defaulting to the email thats already entered * storing default snap in a file * optional parameter * made parameters non optional * converted file to ts * removed unused parameters * removed unnecessary optional chaining * destructuring array * added a function to create error message * removed type * removed duplicate gitignore * removed no check Co-authored-by: Bruception <bberr022@fiu.edu> * Include dev branch in CI (#2739) * Decreased filesize and introduced chunk splitting (#2732) Rizwanmustafa * Decreased filesize * Introduce splitting for vendors * Added HTML webpack plugin for dynamic change of chunkhash and minification on production * Added bundle analyzer plugin for webpack * Prevent analyzer from opening on its own * updated contributors list * Package lock update * Created separate webpack config for analysing bundle * Standardize paths in webpack base config * Added devtool in dev webpack config * Minor issues * Based audit config off of the production config, saved exact packages and renamed some constants * Saved exact version of packages * Rename Config * Added intellisense for webpack configs * Added script for using audit config * Simple changes * Removed unnecessary cd and replaced webpack with npx wepback * added npm script accessible from root dir since audit is now a separate script, reenabled auto opening Co-authored-by: Miodec <bartnikjack@gmail.com> * Enable live reloading (#2738) bruception * Enable live reloading * Update scripts and documentation * Fix resolve * Use resolve * Fix layoutfluid timer warnings (#2740) Ferotiq * reduced date-fns import size * using inline source map so that code is debuggable * removed tinycolor2 dependency * Migrate Chart.js to 3.7.1 (#2735) DanGonite57 * Migrate Chart.js to 3.7.1 * Show funbox label with StartGraphsAtZero disabled * Fix label positioners * Include dev branch in CI (#2739) * Remove draw animation * Avoid RangeError with no data * Disable account chart initial render animation * Add temporary type assertion for options.animation * Test disabling animations via updateColors * Test re-update chart after resetting animation duration * Test dataset specific animation duration * Disable animations for now * Remove unused annotation Co-authored-by: Bruce Berrios <58147810+Bruception@users.noreply.github.com> * installed dev dependency to stop audit from complaining * removed mr mime dev dependency regenerate package-lock * not updating live burst when its disabled * using vanilla js to increase performance * updating chart once instead of 3 times * made log async * increased minimum wordset length to disable repeating words to 4 this stops infinite A B C sequences closes #2742 * increased tick padding * added some padding to stop data points from being cut off * fixed account graphs not being responsive * removed unnecessary style * updated button active color * Server version (#2746) Bruception * Add server version * typo * Fix logic * Moved to utility * Actually save version * Move logic order * updated metric name * removed unnecessary else Co-authored-by: Bruception <bberr022@fiu.edu> Co-authored-by: Bruce Berrios <58147810+Bruception@users.noreply.github.com> Co-authored-by: Rizwan Mustafa <rizwanmustafa0000@gmail.com> Co-authored-by: Evan <64989416+Ferotiq@users.noreply.github.com> Co-authored-by: DanGonite57 <danzinc57@gmail.com>
2022-03-22 04:22:47 +08:00
export function padNumbers(
numbers: number[],
maxLength: number,
fillString: string
): string[] {
return numbers.map((number) =>
number.toString().padStart(maxLength, fillString)
);
}