Skip to content

Instantly share code, notes, and snippets.

View xantiagoma's full-sized avatar

Santiago Montoya A. xantiagoma

View GitHub Profile
export function range(
end: number,
config?: { step?: number; direction?: "asc" | "desc" },
): Generator<number>;
export function range(
start: number,
end: number,
config?: { step?: number; direction?: "asc" | "desc" },
): Generator<number>;
export function* range(
export async function wait(ms: number): Promise<void>;
export async function wait<T>(ms: number, value: T): Promise<T>;
export async function wait<T>(
ms: number,
value?: T | undefined,
): Promise<T | undefined> {
return new Promise<T | undefined>((resolve) =>
setTimeout(
() => (value === undefined ? resolve(undefined) : resolve(value)),
ms,
@xantiagoma
xantiagoma / log.ts
Created February 7, 2025 03:47
Log and Return
export function log(): undefined;
export function log<T>(arg: T): T;
export function log<T extends readonly unknown[]>(...args: T): T;
export function log<T>(...args: T[]): T[] | T | undefined {
console.log(...args);
if (args.length === 0) return undefined;
if (args.length === 1) return args[0];
return args;
}
@xantiagoma
xantiagoma / makeDisposable.ts
Last active February 5, 2025 05:44
Wraps a resource to use new TypeScript / JavaScript (await) using keyword
import redis from "redis";
const { REDIS_PASSWORD } = process.env;
async function makeDisposable<T extends object>(
resource: T,
{
onDispose,
onInit,
}: {
onDispose?: (resource: T) => Promise<void>;
#!/bin/bash
# Default text and settings
custom_text="⏱️"
keep_last=false
show_done=true
done_text="✅"
# Parse arguments
while [[ $# -gt 0 ]]; do
export class Completer<T = unknown, E = unknown> {
private _promise: Promise<T>;
private _resolve!: (value: T | PromiseLike<T>) => void;
private _reject!: (reason?: E) => void;
constructor() {
this._promise = new Promise<T>((resolve, reject) => {
this._resolve = resolve;
this._reject = reject;
});
from __future__ import annotations
import asyncio
from typing import List, Any, Coroutine, TypeVar, Generic, TypeAlias
from dataclasses import dataclass
T = TypeVar('T')
@dataclass
class Fulfilled(Generic[T]):
value: T
export function asyncComponent<T>(
fn: (props: T) => Promise<JSX.Element>
): React.FC<T> {
return fn as any;
}
type IsId<T extends string = string> = T extends `${infer U}${infer V}`
? Includes<IdAlphabet, U> extends true
? V extends ""
? U
: IsId<V> extends never
? never
: `${U}${IsId<V>}`
: never
: never;
blueprint:
name: Zigbee2MQTT - Sonoff SNZB-01 Zigbee Wireless Switch
description: Automate your Sonoff SNZB-01 Zigbee Wireless Switch via Zigbee2MQTT.
domain: automation
input:
switch:
name: Sonoff SNZB-01 Zigbee Wireless Switch
description: Sonoff SNZB-01 Zigbee Wireless Switch to use
selector:
entity: