Skip to content

Instantly share code, notes, and snippets.

View monkpit's full-sized avatar

Kyle Pittman monkpit

  • Dallas, Texas, USA
View GitHub Profile
@monkpit
monkpit / refreshSandbox.sh
Created March 9, 2022 16:12
Force push all repos
#! /usr/bin/env bash
# Replace "*" as needed
for d in *; do (cd $d; git push -f) &; done; wait
@monkpit
monkpit / changeRemote.sh
Created January 18, 2022 17:28
Change git remote in all subdirectories
#! /usr/bin/env bash
# if all subfolders are JS projects with a package.json containing repository.url field
# and repository.url is something like "ssh://git@server/project" or "ssh://
REMOTE_PREFIX=<your git server prefix like git@server>
for repo in */; do
(
cd "$repo" || exit
@monkpit
monkpit / mergeExistingProps.js
Created December 8, 2021 23:52
Merge two objects (not recursive), but only keep properties that already exist on the target object.
const R = require('ramda');
const mergeExistingProps = (target, updater) => {
const targetClone = R.clone(target);
for (const prop in targetClone) {
if (Object.prototype.hasOwnProperty.call(updater, prop)) {
targetClone[prop] = updater[prop];
}
}
@monkpit
monkpit / pluck_jq.sh
Created October 21, 2021 17:15
Pluck props from array of objects with JQ
echo '[
{"a": "a", "b": "b", "c": "c"},
{"a": "1", "b": "2", "c": "3"},
{"a": "x", "b": "y", "c": "z"}
]' | jq ".[] | {b, c}"
# output:
# {
# "b": "b",
# "c": "c"
@monkpit
monkpit / session.spec.js
Last active August 24, 2021 16:50
Cypress cy.session command
const testUrl = 'https://todomvc.com/examples/typescript-react/';
const todos = {
A: ['foo', 'bar', 'baz'],
B: ['1', '2', '3']
};
const getTodos = () => cy.get('ul.todo-list li');
const addTodo = (text) => cy.get('input.new-todo').type(`${text}{enter}`);
@monkpit
monkpit / replaceMultiple.js
Created August 9, 2021 17:53
replaceMultiple - replace n pairs of regex/replace in an input string
const replaceMultiple = (input, ...regexReplacePairs) =>
regexReplacePairs.reduce((previous, [ regex, replace ] ) =>
previous.replace(regex, replace), input
);
const template = '<header> \n 12345 \n <body> \n --- \n <footer>';
const header = 'Welcome to my blog!';
const body = 'This is the body of my post.';
const footer = 'All rights reserved.';
@monkpit
monkpit / gist:a1709899ce633a0e383c9214c2f838df
Last active July 30, 2021 16:59
Build Markdown TOC for entire repo
#! /usr/bin/env bash
# Made to work on Mac version of `stat`
rm -f readme.md
# Static header contents go in readme.header.md
cat readme.header.md >> readme.md
mdFiles=$(find ./*/ -name \*.md)
@monkpit
monkpit / gist:fd4902e4141f9a102bb51cf50202d5fd
Last active July 28, 2021 15:18
Git - Add message to existing tag and update remote
# make sure the tag is updated from remote on local
git fetch
# retag with a message
git tag <tag name> <tag name>^{} -f -m "<new message>"
# might need to add -f to force-push
git push <tag name> <remote>
@monkpit
monkpit / fancy_prettier_PR.sh
Created July 27, 2021 15:34
Run prettier for PR files
#!/usr/bin/env bash
# chmod +x this and save in your PATH. Assumes `prettier` is in your `devDependencies` already
BASE=$(git merge-base master HEAD) # change master to whatever your trunk branch is
FILES=$(git diff --name-only $BASE HEAD | xargs)
npx prettier --list-different $FILES
# Want eslint too?
# npx eslint --ignore-path=.prettierignore $FILES
@monkpit
monkpit / addSizzle.js
Created July 8, 2021 19:08 — forked from kpittman-securus/addSizzle.js
Add Sizzle to window (jQuery selector engine)
const sizzleScript = document.createElement('script');
sizzleScript.src = 'https://cdn.jsdelivr.net/npm/sizzle@latest/dist/sizzle.min.js';
document.getElementsByTagName('head')[0].appendChild(sizzleScript);
window.sz = window.Sizzle;