Skip to content

Instantly share code, notes, and snippets.

View ryangoree's full-sized avatar
🌎

Ryan Goree ryangoree

🌎
View GitHub Profile
@ryangoree
ryangoree / DefinedWhen.ts
Last active February 24, 2025 00:47
Experiment for dynamic interfaces
/**
* Construct a type based off T where TDefinedField is defined when
* T matches TDefinedState.
*
* @example
* ```ts
* type Payload = DefinedWhen<
* {
* isFetched: boolean;
* hasError: boolean;
@ryangoree
ryangoree / convert.ts
Last active December 5, 2024 06:27
Deep convert function with converted types
/**
* Recursively converts a type to a new type. The `predicateFn` is
* used to determine if the `converterFn` should be run on the value.
*
* The function first checks the value itself, if the `predicateFn` returns
* false and the value is an array or object, the function will recursively
* check each item in the array or object.
*
* @param value - The value to convert primitive types in.
* @param predicateFn - A function that returns true if the `converterFn` should
@ryangoree
ryangoree / formatBytes.js
Last active March 13, 2023 20:00
formatBytes - Format bytes as human-readable text.
/**
* Format bytes as human-readable text.
* @param {number} bytes Number of bytes.
* @param {number} decimalPlaces Number of decimal places to display.
* @param {number} baseQuantity Number of bytes in a kilobyte.
* @param {string[]} sizes The unites to use for each power of the baseQuantity.
* @return {string} Formatted byte size.
*/
export const formatBytes = (
bytes,
function groupStrings(strings) {
return Object.values(strings.sort().reduce((a, str) => {
const s = str.toLowerCase();
const f = s[0];
a[f] = a[f] ? [...a[f], s] : [s];
return a;
}, {}));
}
@ryangoree
ryangoree / sass-grid.scss
Last active October 11, 2021 09:22
Sass Grid Mixin
@mixin grid($cols, $rowGap: 0, $colGap: 0, $flexGrow: false) {
display: flex;
gap: #{$rowGap}px #{$colGap}px;
flex-wrap: wrap;
.col {
flex-basis: calc((100% - #{$colGap}px * (#{$cols} - 1)) / #{$cols});
@if $flexGrow == true {
flex-grow: 1;
}
@ryangoree
ryangoree / url-api-polyfill.js
Last active February 11, 2025 16:23
URL Polyfill
(function() {
if (typeof URL != 'function') {
rewriteURL();
} else if (!('searchParams' in new URL(window.location))) {
rewriteURL();
}
function rewriteURL() {
// Overwrite URL if no searchParams property exists.