Skip to content

Instantly share code, notes, and snippets.

View Oaphi's full-sized avatar
💭
☕ and 👩‍💻

Oleg Valter Oaphi

💭
☕ and 👩‍💻
  • Rocket
  • Saint Petersburg
View GitHub Profile
@Oaphi
Oaphi / SOmods.tex
Last active November 12, 2021 21:09 — forked from normalhuman/SOmods.tex
[2021 update] SO moderator timeline, from a template by Najib Idrissi. See http://meta.stackoverflow.com/a/311059
\documentclass[tikz]{standalone} % last update March 2016
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\title{Moderator chart}
\begin{document}
\definecolor{rows}{rgb}{0.95,0.95,0.95}
\definecolor{myblue}{rgb}{0.1,0.3,0.9}
\definecolor{mypurple}{rgb}{0.5,0.3,0.7}
\begin{tikzpicture}[scale=0.5]
% 1 horizontal unit = 1 month, 0 = january 2010
@Oaphi
Oaphi / interleave.ts
Created November 2, 2021 01:08
Interleave an array with a repeating element
const interleave = <T, U>(arr: T[], inserted: U) => {
let insertions = 0;
return arr.flatMap((val, idx) => {
const isEven = (idx + insertions) % 2;
if(isEven) insertions += 1;
return isEven ? [inserted, val] : val;
});
}
@Oaphi
Oaphi / html-tag-gulpfile.ts
Created October 20, 2021 09:15
Gulpfile for creating HTML tags from single-file scripts
import GulpClient = require("gulp");
import del from "del";
import { dest, series, src, watch } from "gulp";
import { appendText, prependText } from "gulp-append-prepend";
import rename from "gulp-rename";
import ts from "gulp-typescript";
const DIST = "dist";
const SOURCE = "src/*.ts";
@Oaphi
Oaphi / deep-omit.ts
Created October 17, 2021 23:11
Utility types and helper for deeply omitting a field from an object
type DeepKeyof<T, A = never> = { [P in keyof T]: T[P] extends object ? P extends A ? P : DeepKeyof<T[P], A | keyof T> | P : P }[keyof T];
type DeepOmit<T, U extends DeepKeyof<T>> = {
[P in keyof T as P extends U ? never : P]: T[P] extends object ?
keyof DeepOmit<T[P], Extract<U, DeepKeyof<T[P]>>> extends never ?
{} :
DeepOmit<T[P], Extract<U, DeepKeyof<T[P]>>> :
T[P]
};
@Oaphi
Oaphi / union-print.ts
Created October 2, 2021 04:12
Print string union
type PrintStringUnion<T extends string, S extends string = "|", A extends string = ""> = {
[P in T]: [T] extends [P] ? `${A}${P}` : PrintStringUnion<Exclude<T, P>, S, `${A}${P}${S}`>
}[T];
type TestUnion = "A" | "B" | "C" | "D" | "E";
type U = PrintStringUnion<TestUnion>;
const test1: U = "A|B|C|D|E"; // OK
@Oaphi
Oaphi / lens.ts
Created October 2, 2021 01:02
Deep lens into an object
type NestedObj = {
[x: string]: string | number | boolean | null | undefined | NestedObj;
};
const lens = (obj: NestedObj, path: string) => {
const parts = path.split(".");
const [lastPart] = parts.slice(-1);
let current: NestedObj = obj;
for (const part of parts) {
@Oaphi
Oaphi / bash-helpers.sh
Last active August 31, 2021 00:46
Various bash helpers
# extracts NPM environment variable names
npm_val() {
local value=$(ENV | grep -e "npm_package_$1" | cut -d "=" -f 2)
echo $value
}
# splits a string on dashes and rejoins with first letter uppercased
pretty() {
IFS=\-
local output
@Oaphi
Oaphi / E164format.ts
Last active June 13, 2021 15:06
Types for checking if phone is in E164 format
type Digit = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0";
type EveryOfType<A extends readonly any[], T> = keyof {
[P in Exclude<keyof A, keyof any[]> as A[P] extends T ? never : P]: P;
} extends never
? true
: false;
type SplitString<
T extends string,
@Oaphi
Oaphi / gulp.sh
Last active October 31, 2021 05:45
Gulp workflow
# if gulp CLI is not installed
npm i -g gulp-cli
# gulp package
npm i -D gulp @types/gulp
# TypeScript prerequisites
# ts-node is required for gulpfile.ts
npm i -D typescript ts-node
@Oaphi
Oaphi / utilityTypes.ts
Last active February 17, 2021 08:04
General-purpose utility types
type Invert<T> = { [ P in keyof T as Extract<T[P], string | number | symbol> ] : P };
type test1 = Invert<{ a: "ia", b: "ib", c: 1 }>; //{ ia: "a"; ib: "b"; 1: "c"; }
type DeepPath<T extends string[], U> = T extends [infer F, ...infer L]
? F extends string
? { [P in F]: L extends string[] ? DeepPath<L,U> : never }
: {}
: U;