This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* A minimally opinionated argument parser with a stateless implementation. | |
* | |
* Author: James Abney | |
* License: MIT | |
*/ | |
import { Tokenizer, TokenSpec } from './tokenizer' | |
export interface IArg { | |
type: 'arg' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* A minimally opinionated argument parser. | |
* | |
* Author: James Abney | |
* License: MIT | |
*/ | |
import { Tokenizer, TokenSpec } from './tokenizer' | |
const tokens: TokenSpec<TokenType>[] = [ | |
[null, /^\s+/], // whitespace |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* A single token lookahead tokenizer. | |
* | |
* Author: James Abney | |
* License: MIT | |
*/ | |
export type Token<T extends string = string> = { readonly type: T; readonly value: string } | |
export type TokenSpec<T extends string = string> = readonly [name: T | null, match: RegExp] // empty name tokens are thrown away. | |
export class Tokenizer<T extends string = string> { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const normalizeStart = (length: number, start: number | undefined): number => { | |
start = start ?? 0; | |
if (start < 0) { | |
start = start + length; | |
} else if (start < -length) { | |
start = 0; | |
} else if (start >= length) { | |
start = length; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface IValueCache<T> { | |
get: () => T; | |
invalidate: () => void; | |
} | |
/** | |
* A simple cache that invalidates based on a timer. Every access of | |
* the value will refresh the timer. | |
* | |
* Even this simple class can be broken up into useful pieces and then |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* An experimental view that can iterate over a subset of an array. | |
* - Not unit tested, there are undoubtedly bugs. | |
*/ | |
"use strict"; | |
const clamp = (min: number, max: number, value: number) => { | |
return Math.min(max, Math.max(min, value)); | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
const crypto = require("crypto"); | |
/** | |
* @param {string|number} [seed] | |
* @param {number} [offset] | |
*/ | |
const createRng = (seed = 0, offset = 0) => { | |
const numBytes = 6; // 48 bits | |
const maxInt = 2 ** 48; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <algorithm> | |
#include <chrono> | |
#include <iomanip> | |
#include <iostream> | |
#include <numeric> | |
#include <thread> | |
#include <vector> | |
using namespace std; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Implement a simplified createSelector function mimicking the reselect module. | |
* | |
* Memoizes the result of a function called with a state object as its argument. | |
* The given function is only called when state values change. | |
*/ | |
/** | |
* A resolver returns a value from a state object (key/value pairs). | |
* |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Minimal implementation of react-redux style provider and connect function. | |
*/ | |
import React, { useState, useEffect, useContext } from 'react' | |
const StoreContext = React.createContext(null) | |
/** | |
* Wraps root component for providing store context, e.g., | |
* |
NewerOlder