Skip to content

Instantly share code, notes, and snippets.

@sina-salahshour
sina-salahshour / request-api.ts
Created May 13, 2025 13:21
RequestFetcherBuilder
import {z} from 'zod'
type getParams<T> = T extends `${infer Path}/?${infer Search}` ?
[
...getPathParams<Path>,
...getSearchParams<`?${Search}`>
]: T extends `${infer Path}?${infer Search}` ?
[
...getPathParams<Path>,
...getSearchParams<`?${Search}`>
]: T extends `${infer Path}/` ?
from typing import Callable
from dataclasses import dataclass
type Subscription = Callable[[], None]
@dataclass(eq=False)
class Dependency:
subscriptions: set[Subscription]
type Unshift<X, Arr extends unknown[]> = [X, ...Arr];
type Push<X, Arr extends unknown[]> = [...Arr, X];
type Tail<X> = X extends [infer _Head, ...infer Res] ? Res : never;
type Head<X> = X extends [infer Res, ...infer _Tail] ? Res : never;
type Reverse<X extends unknown[]> = X extends [] ? [] : X extends [infer Head, ...infer Tail] ? Push<Head, Reverse<Tail>> : [];

tailwindcss config for svelte

additional plugins:

  • css import
  • css modules
  • nested css

dev dependencies

tailwindcss postcss autoprefixer postcss-import postcss-load-config postcss-nested svelte-preprocess svelte-preprocess-cssmodules
@sina-salahshour
sina-salahshour / create-svelte-store.ts
Created April 29, 2023 12:17
redux like store for svelte
import { writable, type Writable } from 'svelte/store';
type Args<T> = T extends (...args: [...infer R]) => void ? R : never;
function createReducer<P>(type: string) {
return function (payload: P) {
return {
type,
payload
};
import { useMemo, useRef } from "react";
import type { MutableRefObject, RefObject } from "react";
export interface AsyncMutableRefObject<T> extends MutableRefObject<T> {
readonly asyncCurrent: Promise<Exclude<T, null | undefined>>;
}
export interface AsyncRefObject<T> extends RefObject<T> {
readonly asyncCurrent: Promise<Exclude<T, null | undefined>>;
}
@sina-salahshour
sina-salahshour / use-query-value.util.ts
Created April 4, 2023 16:30
next 13 useQueryValue
import { usePathname, useRouter, useSearchParams } from "next/navigation";
interface QueryValueOptions<T> {
serializer: (value: T) => string;
deserializer: (value: string) => T;
}
type UseQueryReturn<T> = [value: T[], setValue: (value: T[]) => void];
const defaultSerializer = (value: any) => String(value);
const defaultDeserializer = (value: string) => String(value);
@sina-salahshour
sina-salahshour / kafka-docker-compose.yaml
Last active January 14, 2023 18:50
kafka docker file for nestjs
# https://kafka.js.org/docs/running-kafka-in-development
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper:latest
ports:
- 2181:2181
volumes:
- ./_data/zookeeper/data:/data
kafka: