Skip to content

Instantly share code, notes, and snippets.

View guiseek's full-sized avatar
🌱
Winners don't care what others think, the real battle is overcoming yourself.

Guilherme Siquinelli guiseek

🌱
Winners don't care what others think, the real battle is overcoming yourself.
View GitHub Profile
@guiseek
guiseek / main.ts
Created April 2, 2025 19:57
DI Skills
type Concrete<T> = new (...params: any[]) => T;
type Abstract<T> = abstract new (...params: any[]) => T;
type Factory<T> = (...params: any[]) => T;
type AsyncFactory<T> = (...params: any[]) => Promise<T>;
type Ref<T> = Concrete<T> | Abstract<T>;
type Use<T> = Concrete<T>;
export type Abstract<T, P extends unknown[] = never[]> = abstract new (
...args: P
) => T;
@guiseek
guiseek / di.ts
Created March 23, 2025 06:21
Tiny Dependency Injection
import { Abstract, AsyncFactory, Constructor, Factory, Params } from './types';
import { validate } from './validate';
import { Token } from './token';
type Ref<T> = Token<T> | Abstract<T> | Constructor<T>;
type Use<T> = Constructor<T> | Factory<T> | AsyncFactory<T> | T;
interface Config<T> {
ref: Ref<T>;
@guiseek
guiseek / logger.ts
Created March 10, 2025 03:11
NodeJS Console Table Logger
import { createWriteStream, PathLike } from "node:fs";
import { Console } from "node:console";
export const logger = <T>(path: PathLike, data: T[]) => {
const stream = createWriteStream(path);
const console = new Console(stream);
console.table(data);
@guiseek
guiseek / abstract.ts
Created November 14, 2024 08:11
Create providers
export type Abstract<T = any> = abstract new (...params: any[]) => T;
import {Abstract} from './abstract'
import {Type} from './type'
export type AbstractConstructorParams<T extends Type> =
ConstructorParameters<T> extends {
length: 1
}
? [Abstract<ConstructorParameters<T>[0]>]
: ConstructorParameters<T> extends {length: 2}
? [
@guiseek
guiseek / action.ts
Created August 15, 2024 07:49
State
import {Callback} from './callback'
export class Action<T> {
constructor(public type: string, public value: T) {}
}
export const createAction = <T>(type: string) => {
return class extends Action<T> {
constructor(value: T) {
super(type, value)
@guiseek
guiseek / merge.ts
Created August 3, 2024 22:59
merge form input events
interface Callback<T> {
(value: T): void;
}
function merge<T>(form: HTMLFormElement) {
const watchers = new Set<Callback<T>>();
const fields = Array.from(form.elements) as HTMLInputElement[];
const value = <T>(form: HTMLFormElement) => {
const data = new FormData(form);
@guiseek
guiseek / define.ts
Created June 11, 2024 17:31
Define typed custom element
type Tag = `${string}-${string}`;
type TagMap = HTMLElementTagNameMap;
interface CustomElement<T> extends CustomElementConstructor {
new (...params: any[]): T;
}
function define<S extends Tag, K extends keyof TagMap>(selector: S, is?: K) {
return (target: CustomElement<TagMap[K]>) => {