Skip to content

Instantly share code, notes, and snippets.

View jtmthf's full-sized avatar

Jack Moore jtmthf

View GitHub Profile
export function all<T>(
iterable: Iterable<T>
): iterable is Iterable<Exclude<T, Falsy>>;
export function all<T, V extends T>(
iterable: Iterable<T>,
keyFn: TypePredicate<V, T>
): iterable is Iterable<V>;
export function all<T>(
iterable: Iterable<T>,
keyFn: Predicate<T> | keyof T
import { useEffect, useState, useCallback, DependencyList } from 'react';
function useLazy<T>(factory: () => T, deps: DependencyList | undefined): () => T {
const [state, setState] = useState<{ used: false } | { used: true; value: T }>({ used: false });
useEffect(() => {
setState({ used: false })
}, deps);
return useCallback(() => {
function* chunk<T>(iterable: Iterable<T>, size = 1): Iterable<Array<T>> {
let buffer: T[] = [];
for (const value of iterable) {
buffer.push(value);
if (buffer.length === size) {
yield buffer;
}
buffer = [];
}
function* enumerate<T>(iterable: Iterable<T>) {
let index = 0;
for (const item of iterable) {
yield [index++, item] as const;
}
}
function findMap<T, S extends T, R>(
iterable: Iterable<T>,
predicate: (item: T, index: number) => item is S,
const splice = (start: number) => (deleteCount = Infinity) => <T>(
...items: T[]
) => (array: T[]) => [
...array.slice(0, start),
...items,
...array.slice(start + deleteCount)
];
const handler: ProxyHandler<URLSearchParams> = {
get(target, prop: string) {
const values = target.getAll(prop);
return values.length === 1 ? values[0] : values;
},
set(target, prop: string, value) {
target.delete(prop);
Array.isArray(value) ? value.forEach(v => target.append(prop, v)) : target.set(prop, value.toString())
return true;
},
function get(obj: any, path: string[] | string, defaultValue?: any): any {
const [key, ...rest] = Array.isArray(path)
? path
: path.split(/\.|\[(\d+)\]/).filter(Boolean);
const value = obj[key];
if (value === undefined) {
return defaultValue;
}
return rest.length === 0 ? value : get(value, rest, defaultValue);
}
@jtmthf
jtmthf / yat-nit.sh
Last active September 5, 2018 14:51
# Add to your .bashrc or .zshrc
# Use like 'yat react'
# Will install the package and its typings if needed
# requires jq to be installed
# for yarn (yarn add w/ types)
function yat() {
yarn add $1
if ! cat node_modules/$1/package.json | jq -e 'select((.types != null) or .typings != null)' > /dev/null;
then
const next = jest.fn();
const baseAction = {
type: OrderDetailsActionConstants.INITIATE_ORDER_DETAILS_RETRIEVAL,
orderId: 'orderId',
patientId: 'patientId',
encounterId: 'encounterId'
};
const action = Object.assign({}, baseAction, toRemove: 'toRemove');
serializeInitiateOrderDetailsRetrievalAction()(next)(action);
import * as React from 'react';
import { Component, ComponentClass, SFC } from 'react';
type Constructor<T = {}> = new (...args: any[]) => T;
type TagProps<Tag extends keyof JSX.IntrinsicElements> = {
is: Tag;
innerRef?: JSX.IntrinsicElements[Tag]['ref'];
} & JSX.IntrinsicElements[Tag];