lean4-code-actions
Version:
Refactorings and snippets for Lean 4
21 lines (14 loc) • 751 B
text/typescript
import { ensure } from 'libs/utils/ensure'
import { z } from 'zod'
export const OriginalSlugSchema = z.string().min(1)
export type OriginalSlug = z.infer<typeof OriginalSlugSchema>
export interface WithOriginalSlug { originalSlug: OriginalSlug }
export function validateExternalSlug(externalSlug: OriginalSlug): OriginalSlug {
return OriginalSlugSchema.parse(externalSlug)
}
export function byOriginalSlug(originalSlug: OriginalSlug) {
return (object: WithOriginalSlug) => object.originalSlug === originalSlug
}
export function getByOriginalSlug<Obj extends WithOriginalSlug>(objects: Obj[], originalSlug: OriginalSlug) {
return ensure(objects.find(byOriginalSlug(originalSlug)), new Error(`Cannot get object by slug: ${originalSlug}`))
}