Skip to content

Instantly share code, notes, and snippets.

View HeGanjie's full-sized avatar

Bruce He HeGanjie

View GitHub Profile
@HeGanjie
HeGanjie / index.ts
Created March 18, 2022 02:28
intercept object function call
function interceptFuncCall(object: any, fnName: any, fnReplace: (originalObj: any, ...originalArgs: any[]) => any) {
const obj = new Proxy(object, {
get: function(target, propKey, receiver) {
if (propKey === fnName) {
return function() {
return fnReplace(target, ...arguments)
}
}
const val = Reflect.get(target, propKey, receiver)
return val
@HeGanjie
HeGanjie / importCompat.ts
Created October 29, 2021 08:50
dynamic import compact chrome 63
async function importCompat(nodeBookModuleUrl: string) {
try {
// const { default: notebook } = await import(/*webpackIgnore: true*/ nodeBookModuleUrl)
// 用 eval 绕过打包逻辑
return await eval(`import('${nodeBookModuleUrl}')`)
} catch (e) {
// https://github.com/guybedford/es-module-shims#shim-mode-option
window.esmsInitOptions = {
shimMode: true // default false
} as any
@HeGanjie
HeGanjie / geo2screen.ts
Created September 11, 2021 02:06
自适应坐标转换工具类
import * as d3Scale from "d3-scale"
import _ from "lodash";
export interface MappingInfo {
onWindowSize: number[]
screenA: number[]
geoA: number[]
screenB: number[]
geoB: number[]
}
@HeGanjie
HeGanjie / tailwind.config.js
Last active July 12, 2021 05:51
tailwindcss with px2rem
module.exports = {
purge: ['./src/**/*.html', './src/**/*.tsx', './src/**/*.ts'],
darkMode: false, // or 'media' or 'class'
theme: {
// https://github.com/tailwindlabs/tailwindcss/issues/1232
// using px2rem, 1rem = 100px for 1920 screen
fontSize: {
"xs": "0.12rem",
"sm": "0.14rem",
"base": "0.16rem",
@HeGanjie
HeGanjie / document.ejs
Last active December 13, 2020 04:07
rem 全屏自适应逻辑,1080p下 1rem=100px
<!doctype html>
<html style="font-size: 100px">
<head>
<meta charset="utf-8" />
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<% if (context.title != null) { %>
<title><%= context.title %></title>
<% } %>
// in: [['xxx'], ['yyy', 'zzz'], ...]
// out: [['xxx', 'yyy', ...], ['xxx', 'zzz', ...]]
function calcCombination(options) {
if (_.isEmpty(options)) {
return [[]]
}
let [firstOpt, ...rest] = options
let remainCombinations = calcCombination(rest)
return _.flatMap(remainCombinations, rc => {
return firstOpt.map(o1 => [o1, ...rc])
# https://unix.stackexchange.com/questions/10428/simple-way-to-create-a-tunnel-from-one-local-port-to-another
ssh -L -R # limit for 0.0.0.0
watch -n0 busybox nc -l -p 3389 -e /bin/nc 127.0.0.1 8000 # have restart time gap
socat tcp-listen:443,reuseaddr,fork tcp:localhost:8080 # need install
# can not install socat, compile yourself? https://github.com/cornerpirate/socat-shell
@HeGanjie
HeGanjie / common-styled-component.jsx
Last active February 23, 2020 05:30
Allow you quickly style a div like this: <Box mg10x pd20y textCenter width300 itblock font20 color-white bold />
import styled from '@emotion/styled'
import _ from 'lodash'
const DirectDict = {
t: [0],
r: [1],
b: [2],
l: [3],
x: [1, 3],
@HeGanjie
HeGanjie / a.sh
Created April 23, 2018 02:50
quick run typescript
npx -p typescript -p ts-node -c "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/server/app.ts"
debug:
npm i ts-node --no-save
npx -p typescript -p ts-node -c 'node -r ts-node/register --inspect-brk src/server/app.ts'
npx webpack --progress
@HeGanjie
HeGanjie / app.js
Last active February 1, 2018 10:32
Lite http dynamic proxy in js
// https://imququ.com/post/web-proxy.html
// test cmd:
// curl --proxytunnel -x http://localhost:8000 --proxy-basic --proxy-user a:b httpbin.org/get
var http = require('http')
var net = require('net')
var url = require('url')
function connect(cReq, cSock) {
let u = url.parse('http://' + cReq.url)