Skip to content

Instantly share code, notes, and snippets.

View samkcarlile's full-sized avatar
👽

Sam Carlile samkcarlile

👽
View GitHub Profile
@samkcarlile
samkcarlile / join.ts
Last active May 3, 2022 03:07
Weird `join` implementation
const dogs = [
{ name: 'Fido', favorites: ['sam', 'mark', 'bob'] },
{ name: 'Happy', favorites: ['mark'] },
{ name: 'Buddy', favorites: ['bob'] },
{ name: 'Oscar', favorites: ['mark', 'sam', 'bob'] },
];
const friends = [
{ name: 'sam', age: 22, toes: 5 },
{ name: 'mark', age: 37, toes: 9 },
@samkcarlile
samkcarlile / range.ts
Created May 4, 2022 16:16
The missing `range` iterator
export function range(start: number, stop = start, step = 1) {
start = stop === start ? 0 : start;
const end = stop === start ? start : stop;
return {
*[Symbol.iterator]() {
for (let i = start; i < end; i += step) yield i;
},
};
}
@samkcarlile
samkcarlile / tokenize.ts
Last active February 10, 2023 21:54
TypeScript Tokenizer
type TokenSpec<T = any> = { match: RegExp; value: (s: string) => T };
type TokenConfig = Record<string, RegExp | TokenSpec>;
type TokenTypes<T extends TokenConfig> = {
[Type in keyof T]: T[Type] extends TokenSpec
? { type: Type; value: ReturnType<T[Type]['value']> }
: { type: Type; value: string };
}[keyof T];
/**
* @param str The input string
// tree node type
type Node = {
  id: number;
  children: () => Promise<Node[]>
}

// results array
const results: Node[] = [];
@samkcarlile
samkcarlile / typedObjectPathValue.ts
Created August 29, 2025 06:01
Typed Object Path Value
type ObjectPathValue<T, U extends readonly string[]> = U extends [
infer FirstProp extends keyof T,
...infer RestProps extends readonly string[]
]
? ObjectPathValue<T[FirstProp], RestProps>
: T;
function $get<T extends object, U extends readonly string[]>(
target: T,
path: [...U]
@samkcarlile
samkcarlile / git_functions.zsh
Created September 6, 2025 16:23
useful git zsh functions
unalias gbl
function gbl() {
# todo: colorize branches by last commit
# todo: show 10 by default
gb --sort=committerdate |
tail -n 5 |
gum filter --limit=1 --header="Type to checkout a branch" --placeholder="" |
xargs -I _ git checkout _ || echo Current branch already checked out.
}