Attempts to get the path to the file that called the function that called this function.
npm i gist:b82256d70c5d9bed769b94a8d72bb38a
(function() { | |
if (typeof URL != 'function') { | |
rewriteURL(); | |
} else if (!('searchParams' in new URL(window.location))) { | |
rewriteURL(); | |
} | |
function rewriteURL() { | |
// Overwrite URL if no searchParams property exists. |
@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; | |
} |
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; | |
}, {})); | |
} |
/** | |
* 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, |
/** | |
* 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 |
/** | |
* Construct a type based off T where TDefinedField is defined when | |
* T matches TDefinedState. | |
* | |
* @example | |
* ```ts | |
* type Payload = DefinedWhen< | |
* { | |
* isFetched: boolean; | |
* hasError: boolean; |
/** | |
* Conducts a binary search on a sorted array of items to find the index of a | |
* specific target. If the target is not found, it returns the nearest index | |
* based on the comparator function. | |
* | |
* @param items - The sorted array of items to search within. | |
* @param compare - A comparator function that returns: | |
* - a negative number if `item` is less than the target, | |
* - a positive number if `item` is greater than the target, | |
* - and 0 if `item` is equal to the target. |
import os from "node:os"; | |
import path from "node:path"; | |
/** | |
* Get the path to an app specific config directory based on operating system | |
* standards. | |
* @param projectName | |
* @returns | |
*/ | |
export function getOSConfigDir(projectName: string): string { |
/** | |
* Converts a hyphenated string to camel case. | |
* | |
* @example | |
* camelCase('foo-bar') // 'fooBar' | |
*/ | |
export function camelCase<S>(str: S): CamelCase<S> { | |
return ( | |
typeof str === 'string' | |
? str.toLowerCase().replace(/-+([^-])/g, (_, c) => c.toUpperCase()) |