Skip to content

Instantly share code, notes, and snippets.

View FaberVitale's full-sized avatar
🚀

Fabrizio Vitale FaberVitale

🚀
View GitHub Profile
@FaberVitale
FaberVitale / brew-docker.txt
Last active April 30, 2024 10:07
Useful Brew programs for macOs
docker
docker-buildx
docker-completion
docker-compose
docker-credential-helper
colima
@FaberVitale
FaberVitale / prime.ts
Last active April 4, 2024 18:37
prime numbers
function* primeNumbers() {
const primeList = [2, 3];
let nextCandidate = 4;
yield 1;
yield 2;
yield 3;
while(true) {
if(primeList.every(prime => nextCandidate % prime !== 0)) {
@FaberVitale
FaberVitale / poll.ts
Last active March 30, 2024 17:08
poll.ts
/**
* Returns a promise that resolves after `waitMs` milliseconds.
* @param waitMs the amount of milliseconds we need to wait.
*/
export const delay = (waitMs: number): Promise<void> => new Promise(resolve => setTimeout(resolve, waitMs));
export interface PollOptions {
waitMs: number;
onError?: (error: unknown, ctx: PollContext) => void;
}
@FaberVitale
FaberVitale / Promise2.ts
Created October 30, 2023 10:28
A partial Ecmascript promise implementation written in typescript
type InnerPromise2State<T> =
| {
type: "idle";
}
| { type: "resolved"; value: T }
| { type: "rejected"; error: unknown };
type Consumer<T> = (value: T) => void;
type Promise2Executor<T> = (
@FaberVitale
FaberVitale / clip-path-transitions.mjs
Created September 15, 2022 14:55
clip-path-transitions.mjs
import { linear } from 'https://cdn.jsdelivr.net/npm/svelte@3.50.1/easing/index.mjs';
function point(x, y) {
return {
x,
y,
};
}
function polygon(edges) {
/**
* Defines one or more key-value properties
*/
export type WithKeyValue<K extends string | number | symbol, Value> = {
[k in K]: Value;
};
@FaberVitale
FaberVitale / queryElement.ts
Created August 29, 2022 06:57
Simple selector function useful in testing environments. Throws error to indicate that the test has failed
/**
* Locates a descendant of `rootElement` given selector provided
* or throws error if output element is not found
* or is not an instance of input `DomElementClass`.
*
* ### Example
*
* ```ts
* const btn = queryElement(
* renderRes.container,
// @see https://kentcdodds.com/blog/how-to-use-react-context-effectively
// @see https://beta.reactjs.org/learn/scaling-up-with-reducer-and-context
import {
createContext,
Dispatch,
useReducer,
ReactNode,
useContext,
} from 'react';
@FaberVitale
FaberVitale / useEventListener.ts
Last active November 26, 2023 11:24
useEventListener | React
/* eslint-disable prefer-spread, consistent-return */
import { useEffect, useLayoutEffect, useRef } from 'react'
type Nullable<T> = T | null
type EventHandler<T, E> = (this: T, evt: E) => any
export type GetAddListenerOptions = {
(eventType: string): AddEventListenerOptions | boolean | undefined
}
@FaberVitale
FaberVitale / settings.json
Last active August 7, 2022 12:39
Minimal Vscode prettier extension integration
{
"editor.formatOnSave": true,
"typescript.preferences.importModuleSpecifier": "non-relative",
"editor.tabSize": 2,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},