Skip to content

Instantly share code, notes, and snippets.

View InfiniteXyy's full-sized avatar
🐿️
Learn to be a indie game developer

InfiniteXyy InfiniteXyy

🐿️
Learn to be a indie game developer
View GitHub Profile
@InfiniteXyy
InfiniteXyy / tslint.json
Created July 22, 2019 07:39
tslint and airbnb config and prettier
{
"defaultSeverity": "error",
"extends": [
"tslint:recommended",
"tslint-config-airbnb",
"tslint-config-prettier"
],
"jsRules": {},
"rules": {
...
@InfiniteXyy
InfiniteXyy / simple-react-without-diff.js
Last active April 14, 2020 15:45
A simple implementation of React (&Hooks) without diff. (only 50 lines)
let hooks = [];
let hookIndex = 0;
let currentVNode = null;
let currentContainer = null;
function renderVNode(vnode) {
if (typeof vnode !== "object") return document.createTextNode(vnode);
if (typeof vnode.tag === "function") vnode = vnode.tag(vnode.props);
// init element
const node = document.createElement(vnode.tag);
@InfiniteXyy
InfiniteXyy / ts_fp.ts
Created September 28, 2020 10:19
TypeScript functional programming
type Equals<A, B> = A extends B ? (B extends A ? true: false) : false
type Zero = "ZERO"
type AddOne<T> = () => T
type MinusOne<T> = T extends () => infer R ? R : never
type Add<A, B> = B extends Zero ? A : Add<AddOne<A>, MinusOne<B>>
@InfiniteXyy
InfiniteXyy / proxy.ps1
Last active September 30, 2020 02:33
use powershell under proxy
netsh winhttp set proxy http://xxxx
netsh winhttp reset proxy
class MyPromise<T> {
status: "PENDING" | "FULFILLED" | "REJECTED" = "PENDING";
subjects: { complete: (value: T) => void }[] = [];
result?: T;
constructor(executor: (resolve: (result: MyPromise<T> | T) => void) => void) {
const resolver = (result: MyPromise<T> | T) => {
if (result instanceof MyPromise) {
result.then(resolver);
} else {
this.result = result;
function myAsync(generatorFactory) {
return (...args) => {
const generator = generatorFactory(...args);
const resolve = (result) => {
if (result.done) {
return Promise.resolve(result.value);
}
return Promise.resolve(result.value)
.then((resolvedValue) => resolve(generator.next(resolvedValue)))
.catch((error) => generator.throw(error));
@InfiniteXyy
InfiniteXyy / Inspiration.md
Created October 16, 2020 10:20
一些标题党的想法~
  • 用Web技术设计slides,让你的演讲充满交互性 https://revealjs.com/
  • 用svelte编写高性能且清凉的交互式组件,用在React、Vue中 https://svelte.dev/
  • 用headless ui + tailwindcss编写可以自定义样式的纯逻辑UI组件 https://tailwindcss.com/
  • 用TypeScript4.0编写复杂类型,头脑体操 https://github.com/type-challenges
  • Vue3 composition api和React hooks的异同
  • jsx也能写业务逻辑?用jsx写rxjs pipeline
  • 服务端也能实现的composition api?一种没有中间件的扁平化服务端模型
  • WASM是什么?用后端语言Rust写一个前端demo
  • webworker是什么?前端脚本无法操作DOM?尝试写一个基于worker的数据驱动的前端框架
  • ESBuild太快了,为什么个人项目我放弃webpack + babel
import { fromEvent } from "rxjs";
import { debounceTime, tap } from "rxjs/operators";
const React = {
createElement(type, props, ...children) {
const operator = type.call(null, props);
if (children.length !== 0) {
return operator.pipe(...children);
}
return operator;
// forked from https://github.com/ahejlsberg/tsconf2020-demos/blob/master/template/main.ts
type SubKeys<T, K extends string> = K extends keyof T ? `${K}.${PathKeys<T[K]>}` : never
type PathKeys<T> = object extends T
? string
: T extends readonly any[]
? Extract<keyof T, `${number}`> | SubKeys<T, Extract<keyof T, `${number}`>>
: T extends object
? Extract<keyof T, string> | SubKeys<T, Extract<keyof T, string>>
: never
@InfiniteXyy
InfiniteXyy / useSubscriber.tsx
Created January 24, 2021 13:07
subscribe everything with "$"
import React, { useCallback, useEffect, useRef, useState } from "react";
import { timer } from "rxjs";
import { take, map } from "rxjs/operators";
type Subscription = { unsubscribe: () => void }
type Observable<T> = { subscribe: (next: (value: T) => void) => Subscription }
const useSubscriber = () => {
const [, forceRefresh] = useState({});
const subscriptionsRef = useRef(new Map<Observable<any>, Subscription>());