Skip to content

Instantly share code, notes, and snippets.

View robinpokorny's full-sized avatar

Robin Pokorny robinpokorny

View GitHub Profile
@robinpokorny
robinpokorny / countBadges.js
Created July 10, 2024 10:13
Count repeated emojis (badges) with subscript
const subscriptNumber = (n) => n
.toString(10)
.split``
.map((i) => Number.parseInt(i, 10))
.map((i) => String.fromCharCode(0x2080 + i))
.join``
const countBadges = (badges) => Array
.from(
[...new Intl.Segmenter().segment(badges)]
@robinpokorny
robinpokorny / parseUuid7Date.js
Created May 8, 2023 12:30
Validate UUIDv7 and parse the timestamp
const uuid7Re = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
const parseUuid7Date = (uuid) => {
if (typeof uuid !== `string` || !uuid7Re.test(uuid)) {
throw new TypeError(`Expected UUIDv7. Received: ${String(uuid)} (${typeof uuid})`)
}
const timestampHex = uuid.slice(0, 13).replace(`-`, ``)
const timestamp = Number.parseInt(timestampHex, 16)
return new Date(timestamp)
@robinpokorny
robinpokorny / uuid4to7.js
Last active June 17, 2024 05:52
Convert UUIDv4 to UUIDv7 in JavaScript (or generate one) [RFC 9562]
const uuid4to7 = (uuid, now = Date.now()) => {
const ts = now.toString(16).padStart(12, `0`)
return `${ts.slice(0, 8)}-${ts.slice(8)}-7${uuid.slice(15)}`
}
// generate new UUIDv7
uuid4to7(crypto.randomUUID())
// Conforms to example in the spec RFC9562 A.6
@robinpokorny
robinpokorny / railway_oriented_typescript.ts
Created November 3, 2022 08:47
Heapcon 2022: Railway Oriented Typescript
/*
=============================
Railway Oriented Typescript
=============================
by @robinpokorny
*/
/* === 1. Union basics === */
const a: string | number = 42;
@robinpokorny
robinpokorny / mirrorGitHub.sh
Last active August 19, 2022 13:26
Mirror GitHub repos locally on NAS
#!/bin/bash
# Mirrors all GitHub repositories the current user has read access to.
# See license at the end of the file.
# Token from https://github.com/settings/tokens
OAUTH_TOKEN="<TODO TOKEN>"
# where should the files be saved
DIR="<TODO PATH>"
@robinpokorny
robinpokorny / index.ts
Last active June 13, 2022 08:51
WebExpo 2022: Railway Oriented Typescript
/*
=============================
Railway Oriented Typescript
=============================
by @robinpokorny
*/
/* === 1. Union basics === */
const a: string | number = 42;
@robinpokorny
robinpokorny / tagged_unions_showcase.ts
Last active January 23, 2022 12:03
Tagged Unions in TypeScript Showcase
// And you will know my name is TypeScript
// When I lay my Tagged Union upon thee
// by @robinpokorny
// 1. Union of literals
// The cornerstone of any nutritious breakfast.
type Burger1 = `McDonalds` | `BigKahuna`;
const brettsBreakfast1_1: Burger1 = `BigKahuna`;
const brettsBreakfast1_2: Burger1 = `Whooper`; // Caught
@robinpokorny
robinpokorny / first.js
Created October 13, 2021 15:16
Most profit from stock quotes [solution] [JS]
const sum = (a, b) => a + b
const getMostProfitFromStockQuotes = (quotes, current = 0) => {
if (quotes.length < 2) return current
const max = Math.max(...quotes)
const maxAt = quotes.indexOf(max)
const left = quotes.slice(0, maxAt)
@robinpokorny
robinpokorny / HttpStatusCode.ts
Created April 13, 2021 21:38
All HTTP status codes in TypeScript const Enums
export const enum InformationalResponse {
Continue = 100,
SwitchingProtocols = 101,
Processing = 102,
EarlyHints = 103,
}
export const enum Success {
OK = 200,
Created = 201,
@robinpokorny
robinpokorny / titlecaseWords.js
Created June 23, 2020 07:36
For vs map/filter/reduce
const words = ["hello", " ", "world"];
for (let i = 0; i <= words.length; i++) {
const word = words[i];
if (word.length <= 0) continue;
words[i] = uppercaseFirstLetter(word.trim());
}
const titlecasedWords = words
.filter(isNotEmpty)