From 9970036d203ba2d0a46b35ba6fad21d49441cdd4 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sun, 27 Jul 2025 17:03:10 -0700 Subject: hai --- lib/leftpadesque/debug.ts | 8 ++++++++ lib/leftpadesque/index.ts | 3 +++ lib/leftpadesque/memoize.ts | 14 ++++++++++++++ lib/leftpadesque/prepend.ts | 5 +++++ 4 files changed, 30 insertions(+) create mode 100644 lib/leftpadesque/debug.ts create mode 100644 lib/leftpadesque/index.ts create mode 100644 lib/leftpadesque/memoize.ts create mode 100644 lib/leftpadesque/prepend.ts (limited to 'lib/leftpadesque') diff --git a/lib/leftpadesque/debug.ts b/lib/leftpadesque/debug.ts new file mode 100644 index 0000000..074e567 --- /dev/null +++ b/lib/leftpadesque/debug.ts @@ -0,0 +1,8 @@ +const _hasEnv = true; // Node.js always has access to environment variables + +const _env: 'development' | 'production' = + _hasEnv && (process.env.ENVIRONMENT ?? '').toLowerCase().includes('prod') ? 'production' : 'development'; +export const isProd = () => _env === 'production'; + +const _debug = !isProd() || (_hasEnv && ['y', 't'].some((process.env.DEBUG ?? '').toLowerCase().startsWith)); +export const isDebug = () => _debug; diff --git a/lib/leftpadesque/index.ts b/lib/leftpadesque/index.ts new file mode 100644 index 0000000..1a644cb --- /dev/null +++ b/lib/leftpadesque/index.ts @@ -0,0 +1,3 @@ +export * from './prepend'; +export * from './debug'; +export * from './memoize'; diff --git a/lib/leftpadesque/memoize.ts b/lib/leftpadesque/memoize.ts new file mode 100644 index 0000000..2f0e87a --- /dev/null +++ b/lib/leftpadesque/memoize.ts @@ -0,0 +1,14 @@ +import type { Callable } from '@emprespresso/pengueno'; + +export const memoize = >(fn: F): F => { + const cache = new Map(); + return ((...args: unknown[]): R => { + const key = JSON.stringify(args); + if (cache.has(key)) { + return cache.get(key)!; + } + const res = fn(...args); + cache.set(key, res); + return res; + }) as F; +}; diff --git a/lib/leftpadesque/prepend.ts b/lib/leftpadesque/prepend.ts new file mode 100644 index 0000000..1819536 --- /dev/null +++ b/lib/leftpadesque/prepend.ts @@ -0,0 +1,5 @@ +export const prependWith = (arr: string[], prep: string) => + Array(arr.length * 2) + .fill(0) + .map((_, i) => i % 2 === 0) + .map((isPrep, i) => (isPrep ? prep : arr[Math.floor(i / 2)]!)); -- cgit v1.2.3-70-g09d2