Skip to content

Instantly share code, notes, and snippets.

View QuarkGluonPlasma's full-sized avatar

QuarkGluonPlasma

View GitHub Profile
@QuarkGluonPlasma
QuarkGluonPlasma / RepeatStr.ts
Created April 19, 2021 16:37
重复字符串的TS类型
type SpilitStrToTupleByItem<Str extends string, StrItem extends string, TupleRes extends string[] = []> = Str extends `${infer RestStr}${StrItem}` ?
SpilitStrToTupleByItem<RestStr,StrItem,[...TupleRes, 'ssh']>: TupleRes;
type RepeatCount<Str extends string, StrItem extends string> = Str extends "" ? 0 : SpilitStrToTupleByItem<Str, StrItem>['length'];
type RepeatStr<Str extends string, Count extends number, StrItem extends string = Str> = RepeatCount<Str, StrItem> extends Count ? Str : RepeatStr<`${Str}${StrItem}`, Count, StrItem> ;
type r = RepeatStr<'Abc', 3>;
@QuarkGluonPlasma
QuarkGluonPlasma / CancableTest.js
Last active April 7, 2021 10:41
可取消的promise
function cancable(p) {
var cancel;
var promise = new Promise((resolve, reject) => {
p.then(resolve, reject);
cancel = reject;
});
return {
promise: promise,
cancel: cancel
};
@QuarkGluonPlasma
QuarkGluonPlasma / parse.js
Created April 1, 2021 04:11
抽象了下vue template compiler的大概结构
function parse(template, options) {
// 处理options
var stack = [];
var currentParent;
var root;
function closeElement(element) {
currentParent.children.push(element);
element.parent = currentParent;
}
parseHTML(template, {
@QuarkGluonPlasma
QuarkGluonPlasma / getScreenshotData.ts
Last active March 31, 2021 10:41
获取electron窗口截图,转成base64
import { desktopCapturer } from 'electron';
let video: HTMLVideoElement;
/**
* 获取窗口截图,转成base64
* @param document
*/
export default function getScreenshotData(document: Document) {
@QuarkGluonPlasma
QuarkGluonPlasma / arr_ast_walker.js
Created March 17, 2021 12:20
数组ast的遍历方式
var walkers = {
"string": function(str) {
return [ "string", str ];
},
"num": function(num) {
return [ "num", num ];
},
"name": function(name) {
return [ "name", name ];
},
@QuarkGluonPlasma
QuarkGluonPlasma / 结果
Last active March 17, 2021 08:08
基于base54算法实现的标识符混淆,支持toplevel设置
const parser = require('@babel/parser');
const traverse = require('@babel/traverse').default;
const generate = require('@babel/generator').default;
const code1 = `
const ssh = 'sshssh';
(function parc(moo, man){
try {
console.log(ssh);
var foobar = 10;
function bbb() {
@QuarkGluonPlasma
QuarkGluonPlasma / testBase54.js
Last active March 17, 2021 07:17
base54,混淆名字生成算法
var base54 = (function(){
var DIGITS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_";
return function(num) {
var ret = "";
do {
ret = DIGITS.charAt(num % 54) + ret;
num = Math.floor(num / 54);
} while (num > 0);
return ret;
};