std

Browse the standard library for Andromeda

utils/mod.ts
/**
 * No-op function
 *
 * @example
 * ```ts
 * import { noop } from "https://tryandromeda.dev/std/utils/mod.ts";
 * noop(); // does nothing
 * ```
 */
export function noop(): void {}

/**
 * Identity function
 *
 * @example
 * ```ts
 * import { identity } from "https://tryandromeda.dev/std/utils/mod.ts";
 * const n = identity(5); // 5
 * const s = identity('a'); // 'a'
 * ```
 */
export function identity<T>(x: T): T {
  return x;
}

/**
 * Deep clone v1 (JSON-safe)
 *
 * Note: this method uses JSON serialization so it won't preserve functions,
 * Dates, Maps, Sets, or prototype chains.
 *
 * @example
 * ```ts
 * import { clone } from "https://tryandromeda.dev/std/utils/mod.ts";
 * const a = { x: 1, nested: { y: 2 } };
 * const b = clone(a);
 * b.nested.y = 3;
 * console.log(a.nested.y); // 2 (original not modified)
 * ```
 */
export function clone<T>(obj: T): T {
  return JSON.parse(JSON.stringify(obj));
}

/**
 * Safe access: returns fallback if access throws or is undefined
 *
 * @example
 * ```ts
 * import { safeGet } from "https://tryandromeda.dev/std/utils/mod.ts";
 * const o = { a: { b: 1 } } as any;
 * // normal access
 * const v1 = safeGet(() => o.a.b, 0); // 1
 * // missing path throws or returns undefined, safeGet returns fallback
 * const v2 = safeGet(() => o.x.y, 42); // 42
 * // accessor that throws
 * const v3 = safeGet(() => { throw new Error('fail'); }, 'fallback'); // 'fallback'
 * ```
 */
export function safeGet<T>(fn: () => T, fallback: T): T {
  try {
    const v = fn();
    return v === undefined ? fallback : v;
  } catch (_e) {
    return fallback;
  }
}