From 21b6e5404eb56f4b003f8cb582646e2132e1b660 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 18 Nov 2025 20:02:10 -0500 Subject: feat: add @opencode-ai/util package with utility functions --- packages/util/src/fn.ts | 11 +++++++++++ packages/util/src/iife.ts | 3 +++ packages/util/src/lazy.ts | 11 +++++++++++ 3 files changed, 25 insertions(+) create mode 100644 packages/util/src/fn.ts create mode 100644 packages/util/src/iife.ts create mode 100644 packages/util/src/lazy.ts (limited to 'packages/util/src') diff --git a/packages/util/src/fn.ts b/packages/util/src/fn.ts new file mode 100644 index 000000000..9efe4622f --- /dev/null +++ b/packages/util/src/fn.ts @@ -0,0 +1,11 @@ +import { z } from "zod" + +export function fn(schema: T, cb: (input: z.infer) => Result) { + const result = (input: z.infer) => { + const parsed = schema.parse(input) + return cb(parsed) + } + result.force = (input: z.infer) => cb(input) + result.schema = schema + return result +} diff --git a/packages/util/src/iife.ts b/packages/util/src/iife.ts new file mode 100644 index 000000000..ca9ae6c10 --- /dev/null +++ b/packages/util/src/iife.ts @@ -0,0 +1,3 @@ +export function iife(fn: () => T) { + return fn() +} diff --git a/packages/util/src/lazy.ts b/packages/util/src/lazy.ts new file mode 100644 index 000000000..935ebe0f9 --- /dev/null +++ b/packages/util/src/lazy.ts @@ -0,0 +1,11 @@ +export function lazy(fn: () => T) { + let value: T | undefined + let loaded = false + + return (): T => { + if (loaded) return value as T + loaded = true + value = fn() + return value as T + } +} -- cgit v1.2.3