Skip to content

Instantly share code, notes, and snippets.

@zirkelc
zirkelc / github-release-tools.md
Created October 23, 2024 11:44
GitHub Release Automation Tools
@zirkelc
zirkelc / list-all-files.ts
Created October 11, 2024 07:55
Recursive generator function to list all files in a directory in Node.js
import fs from 'node:fs/promises';
import path from 'node:path';
async function* readAllFiles(dir: string): AsyncGenerator<string> {
// use fs.readdirSync() to avoid async
const files = await fs.readdir(dir, { withFileTypes: true });
for (const file of files) {
if (file.isDirectory()) {
yield* readAllFiles(path.join(dir, file.name));
@zirkelc
zirkelc / browser.ts
Last active May 18, 2024 07:30
Puppeteer: set browser language for Chrome
/*
* There are multiple options to affect the user language on Chrome.
*/
const LANG = 'de';
/*
* Set `--lang=de'` when starting Chrome
* https://peter.sh/experiments/chromium-command-line-switches/#lang)
*/
@zirkelc
zirkelc / s3-download.sh
Created March 21, 2024 12:23
Raycast Script for S3 Download
#!/bin/bash
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title S3 Download
# @raycast.mode fullOutput
# Optional parameters:
# @raycast.icon 🤖
# @raycast.packageName AWS
@zirkelc
zirkelc / generics.ts
Created January 6, 2024 15:24
Infer type of unused generic parameters
/* object types */
// generic parameters T1, T2, T3 are not used in the actual type definition
type GenericObject<T1 extends any, T2 extends any, T3 extends any> = {};
const obj: GenericObject<{ a: string }, number[], boolean> = {};
type InferT1FromGenricObject<TObj> = TObj extends GenericObject<infer T1, any, any> ? T1 : never;
type InferT2FromGenricObject<TObj> = TObj extends GenericObject<any, infer T2, any> ? T2 : never;
type InferT3FromGenricObject<TObj> = TObj extends GenericObject<any, any, infer T3> ? T3 : never;
@zirkelc
zirkelc / list.txt
Created July 7, 2022 13:46 — forked from shortjared/list.txt
List of AWS Service Principals
a4b.amazonaws.com
access-analyzer.amazonaws.com
account.amazonaws.com
acm-pca.amazonaws.com
acm.amazonaws.com
airflow-env.amazonaws.com
airflow.amazonaws.com
alexa-appkit.amazon.com
alexa-connectedhome.amazon.com
amazonmq.amazonaws.com
@zirkelc
zirkelc / index.test.ts
Created May 18, 2022 12:51
Custom matcher in Jest
import fetch from 'cross-fetch';
type Todo = {
id: number;
userId: number;
title: string;
completed: boolean;
};
interface CustomMatchers<R = unknown> {
@zirkelc
zirkelc / severless.ts
Last active February 13, 2023 09:27
Serverless Step Function Type Defintions
import type { AWS } from '@serverless/typescript';
export interface CustomServerless extends AWS {
stepFunctions: {
stateMachines: StateMachines;
validate?: boolean;
};
}
type StateMachines = {
@zirkelc
zirkelc / post-merge.sh
Created December 27, 2021 10:40
Run npm install automatically after git pull if package-lock.json has changed
#!/bin/zsh
. "$(dirname "$0")/_/husky.sh"
IFS=$'\n'
# regex supports mono-repos with a package.json at root-level and at package-level
PACKAGE_LOCK_REGEX="(^packages\/.*\/package-lock\.json)|(^package-lock\.json)"
# extract all paths to package-lock.json files
PACKAGES=("$(git diff --name-only HEAD@{1} HEAD | grep -E "$PACKAGE_LOCK_REGEX")")
if [[ ${PACKAGES[@]} ]]; then
@zirkelc
zirkelc / LICENSE
Created December 22, 2020 15:02 — forked from zorrodg/LICENSE
CLI Integration Test Helper
MIT License
Copyright © 2019 Andrés Zorro
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions: