Skip to content

Instantly share code, notes, and snippets.

View jeffskelton3's full-sized avatar
:shipit:

Jeff Skelton jeffskelton3

:shipit:
View GitHub Profile
@jeffskelton3
jeffskelton3 / delegate-pattern-typescript.ts
Last active January 17, 2024 11:05
Leveraging the delegate pattern in TypeScript is not as straight forward as it is in some other languages. There is no delegate keyword for instance and one is only able to extend one class at a time. Fortunately TypeScript does support mixins which give us the functionality we are looking for.
/**------------ DELEGATOR (aka MIXIN) --------------- */
const Delegate = (target: any, delegators: any[]) => {
delegators.forEach(delegator => {
Object.getOwnPropertyNames(delegator.prototype)
.filter(name => target.prototype[name] === undefined)
.forEach(name => {
target.prototype[name] = delegator.prototype[name];
});
});
};
function frg {
result=$(rg --ignore-case --color=always --line-number --no-heading "$@" |
fzf --ansi \
--color 'hl:-1:underline,hl+:-1:underline:reverse' \
--delimiter ':' \
--preview "bat --color=always {1} --theme='OneHalfDark' --highlight-line {2}" \
--preview-window 'up,60%,border-bottom,+{2}+3/3,~3')
file=${result%%:*}
linenumber=$(echo "${result}" | cut -d: -f2)
if [[ -n "$file" ]]; then
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/stylist-api',
createProxyMiddleware({
target: 'http://localhost:3000',
changeOrigin: true,
})
);
// import segment from 'segment'
const segment = {
init: () => console.log("initialized!!"),
trackEvent: (eventName: string, data: any) => console.log(data),
};
interface SegmentEvent {
name: string;
data: {};
interface HttpClient<Response, Options extends {} = {}> {
get: (url: string, options: Options) => Promise<Response>;
put: (url: string, options: Options) => Promise<Response>;
post: (url: string, options: Options) => Promise<Response>;
}
interface CurrencyFormatter {
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
if [[ -n "${TRACE-}" ]]; then
set -o xtrace
fi
if [[ "$1" =~ ^-*h(elp)?$ ]]; then
# unbind Ctrl+B as the default meta and instead use Ctrl+A
unbind C-b
set -g prefix C-a
set -g pane-border-status top
# split panes using | and -
bind \\ split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
import React, { useRef } from 'react';
interface WidgetProps {
url: string;
onWidgetReady: (api: any) => void;
}
type UnsubscribeCallback = Function;
type Subscribe = <T = string>(
const ele = document.getElementsByTagName('ul')[0];
ele.addEventListener('mouseup', () => {
const element = document.createElement("span");
element.className = 'highlight';
const textToHighLight = window.getSelection();
const range = textToHighLight.getRangeAt(0);
range.surroundContents(element);
// console.log(textToHighLight);
});
const contents = `
afder is bar and baz is {{biz}} {shouldnt find}{{but_this_should}}
{{blah}}
`;
const parseDatabaseFields = (input) => {
const pattern = '\{\{(.*?)\}\}';
const regex = new RegExp(pattern, 'gm');
let match;
const matches = [];