Skip to content

Instantly share code, notes, and snippets.

View ryangoree's full-sized avatar
🌎

Ryan Goree ryangoree

🌎
View GitHub Profile
@ryangoree
ryangoree / ANSI.md
Created June 3, 2025 20:16 — forked from fnky/ANSI.md
ANSI Escape Codes

ANSI Escape Sequences

Standard escape codes are prefixed with Escape:

  • Ctrl-Key: ^[
  • Octal: \033
  • Unicode: \u001b
  • Hexadecimal: \x1B
  • Decimal: 27
@ryangoree
ryangoree / KeyMap.ts
Last active May 18, 2025 01:03
A utility type to ensure a type is defined with all given keys.
/**
* Get {@linkcode T}, ensuring that all keys from {@linkcode K} are present. If
* any keys are missing, a type error will be thrown.
*
* @typeParam K - The keys to ensure are present.
* @typeParam T - An object that should contain all keys from {@linkcode K}.
* @typeParam TDefault - The default value to use for missing keys.
*
* @example
* ```ts
@ryangoree
ryangoree / ExtractFiltered.ts
Last active March 27, 2025 19:53
Extracts and transforms members of a union type `T` based on a filter type `F`.
/**
* Extracts and transforms members of a union type `T` based on a filter type
* `F`. It's similar to `Extract<T, U>` but rather than omitting members of `T`
* that aren't wholly assignable to `U`, (e.g., omitting `{ a: string }` when
* `U` is `{ a: 'foo' }`), it narrows values of `T` that the filter type `F` is
* assignable to (e.g., `{ a: string }` is narrowed to `{ a: 'foo' }`).
*
* For each member in `T` (distributing over unions), if it includes all
* required keys (as determined by {@linkcode RequiredValueKey<F>}), the type is
* transformed by applying the filter:
@ryangoree
ryangoree / DeepValue.ts
Created March 4, 2025 02:42
Get a union of value types for `T` by unwrapping it recursively.
/**
* Get a union of value types for `T` by unwrapping it recursively.
*
* @example
* ```ts
* type Scalar = string;
* type ScalarValue = DeepValue<Scalar>;
* // => string
*
* type NestedArray = [string, [number, [boolean]]];
@ryangoree
ryangoree / privacy-pools-ceremony_attestation.log
Created February 28, 2025 18:13
Attestation for Privacy Pools Ceremony MPC Phase 2 Trusted Setup ceremony
Hey, I'm ryangoree-3289505 and I have contributed to the Privacy Pools Ceremony.
The following are my contribution signatures:
Circuit # 1 (withdraw)
Contributor # 499
Contribution Hash: 2a9dc7df 157d1efd e26552c4 3b1f5ee8
b16eaf2c f9eef243 44e49d7f 0f76aeeb
10f8272f b1e8363a 3a739711 574bf433
e0242565 275625c4 e7dbeb83 331dc5c1
@ryangoree
ryangoree / README.md
Last active February 27, 2025 01:27
Util types for unions

Union Types

A tiny set of utility types for working with unions.

📦 Install

npm i gist:5d48bb3b92fa02cd9eb34ee87d3c7050
@ryangoree
ryangoree / anvil-reverse-proxy.ts
Last active February 23, 2025 23:49
Reverse proxy for monitoring RPC requests to a local anvil server
import { createWriteStream, writeFileSync } from 'node:fs';
import { createServer, request } from 'node:http';
// Settings //
const TARGET_HOST = '127.0.0.1';
const TARGET_PORT = 8545;
const PROXY_PORT = 8546;
// Server //
@ryangoree
ryangoree / Slice.ts
Last active January 24, 2025 21:01
Get a sliced subset of a tuple type.
type BuildTuple<
L extends number,
T extends any[] = [],
F = unknown,
> = `${L}` extends `-${number}`
? never
: T["length"] extends L
? T
: BuildTuple<L, [...T, F], F>;
@ryangoree
ryangoree / Length.ts
Created January 24, 2025 01:39
Get the length of a string.
/**
* Get the length of a string.
*
* @example
* ```ts
* type L = Length<"hello">; // 5
* ```
*/
type Length<
T extends string,
@ryangoree
ryangoree / Extended.ts
Last active January 24, 2025 21:28
Get a superset of `T` that allows for arbitrary properties.
/**
* Get a superset of `T` that allows for arbitrary properties.
*
* @example
*
* ```ts
* interface Order {
* account: `0x${string}`;
* amount: bigint;
* }