Skip to content

Instantly share code, notes, and snippets.

View aztack's full-sized avatar
🎯
Focusing

Wang Weihua aztack

🎯
Focusing
View GitHub Profile
@aztack
aztack / readable.ts
Last active May 8, 2024 07:35
Wrap promise for React Suspense
export function readable<R, E = unknown>(
promise: Promise<R>,
onSuccess?: (result: R) => void,
onError?: (error: E) => void)
{
let status = 'pending';
let result: R;
const suspender = promise.then(result => {
status = 'fulfilled';
onSuccess && onSuccess(result);
@aztack
aztack / Vite-watch-external-plugin.js
Created April 24, 2024 09:32
Vite-watch-external-plugin.js
function watchExternal(paths: string[]): Plugin {
console.log('Watching external paths: ', paths);
return {
name: 'watch-external',
configureServer(server) {
// Server is the Vite dev server instance
// Start watching external files
paths.forEach(path => {
if (!fs.existsSync(path)) {
console.warn(redBright(`${path}`))
@aztack
aztack / useArrayCompare
Created April 15, 2024 07:12
useArrayCompare
function useArrayCompare<T>(value: T[]) {
const ref = useRef<T[]>(value);
if (value.length !== ref.current.length ||value.sort().join(',') !== ref.current.join(',')) {
ref.current = value;
}
return ref.current;
}
@aztack
aztack / find-get-commits-by-file-name.js
Last active March 10, 2024 07:01
Print git changes by file name
const { execSync } = require('child_process');
// Replace the array with the usernames of the developers whose commits you want to fetch
const developers = ['developer1', 'developer2', 'developer3'];
function getCommitsByDevelopers() {
const commits = [];
for (const developer of developers) {
const gitCommand = `git log --author="${developer}" --pretty=format:"%h"`;
const commitHashes = execSync(gitCommand).toString().trim().split('\n');
GOOS=windows GOARCH=amd64 go build
// jonschlinkert/is-object
type IsObjectObject<T> = T extends
| AnyArray
| AnyFunction
| boolean
| null
| number
| string
| symbol
| undefined
#!/bin/bash
ancestor_branch=${1:-"origin/develop-sdk"}
# Find the latest common ancestor commit
joint_commit=$(git merge-base HEAD $ancestor_branch)
echo $joint_commit
# Get the list of commit hashes from current HEAD to the joint commit
commit_hashes=$(git rev-list --ancestry-path ${joint_commit}..HEAD)
import { useState, useEffect } from 'react';
function useDebouncedValue<T>(value: T, delay: number): T {
const [debouncedValue, setDebouncedValue] = useState(value);
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
@aztack
aztack / gist:4ddcfb9b400e94eac7dbe7f243f85b96
Created October 16, 2023 06:59
Yeoman Generator Overwrite without Prompt
class extends Generator {
writing() {
// enable force overwrite
this.conflicter.force = true;
this.fs.copyTpl(
this.templatePath('_package.json'),
this.destinationPath('package.json'),
{ appname: 'your_appname' }
);
import readline from 'node:readline';
function printProgress(text: string) {
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0, undefined);
process.stdout.write(text);
};