This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export type Abstract<T = any> = abstract new (...params: any[]) => T; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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} | |
? [ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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]>) => { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export type ArrayInfer<T> = T extends (infer U)[] ? U : never |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const container = new Map() | |
const relations = new Map() | |
export const use = <T>(type: Key<T>): T => { | |
const concrete = container.get(type) | |
if (!concrete) throw `Provider ${type.name} não registrado` | |
return concrete | |
} | |
const provide = <T>({for: key, use}: For<T>) => { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const App = () => { | |
const title = "TSX Vanilla"; | |
return ( | |
<> | |
<h1>{title}</h1> | |
</> | |
); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8" /> | |
<link rel="icon" type="image/svg+xml" href="/ts.svg" /> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
<title>Vite + TS</title> | |
<style> | |
body { | |
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; |
NewerOlder