Skip to content

Instantly share code, notes, and snippets.

View pesterev's full-sized avatar
🌯

Vladimir Pesterev pesterev

🌯
View GitHub Profile
@pesterev
pesterev / main.swift
Created February 12, 2024 11:13
nvim-reminders-xpc
//
// main.swift
// nvim-reminders-xpc
//
// Created by . on 2/11/24.
//
import XPC
import EventKit
@pesterev
pesterev / camel-case-keys.ts
Last active October 7, 2021 14:36
Convert Object Type keys from snake_case to camelCase on Type-Level
type CamelCaseKeys<T extends unknown> = {
[K in keyof T as CamelCaseKey<K>]: T[K]
}
type CamelCaseKey<T> = T extends `${infer T0}_${infer T1}` ? `${T0}${CamelCaseKeyN<T1>}` : T
type CamelCaseKeyN<T> = T extends `${infer T0}_${infer T1}` ? `${Sentence<T0>}${CamelCaseKeyN<T1>}` : Sentence<T>
type Sentence<T> = T extends `${infer T0}${infer T1}` ? `${Uppercase<T0>}${T1}` : T
@pesterev
pesterev / unique-tuple.ts
Created December 3, 2020 16:03
Type-level Unique for tuples
type UniqueParser0<T, R extends unknown[], M> = Readonly<T> extends readonly [] ? T : UniqueParser1<T, R, M>
type UniqueParser1<T, R extends unknown[], M> = Readonly<T> extends readonly [infer _] ? T : UniqueParserN<T, R, M>
type UniqueParserN<T, R extends unknown[], M> = Readonly<T> extends readonly [infer A, ...infer B] ? A extends M ? UniqueParserTerm<B, R, M> : UniqueParserTerm<B, [...R, A], M | A> : never
type UniqueParserTerm<T, R extends unknown[], M> = Readonly<T> extends readonly [] ? R : UniqueParserN<T, R, M>
export type UniqueTuple<T> = UniqueParser0<T, [], never>
@pesterev
pesterev / JSONParser.hs
Last active April 6, 2022 12:35
JSON parser from scratch
module JSONParser
( JSONValue
, Parser(..)
, parseExact
, parseWhile
, separateBy
, jsonNull
, jsonBool
, jsonNumber
, jsonString