Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kentcdodds/lineage

src/commentary.ts

42 lines · 1.3 KB · TypeScript
import { deleteCommentary, listCommentaries, upsertCommentary } from './storage.ts'

/**
 * List, add, update, or delete graph commentaries stored in package storage.
 * Use after ingesting a commit that deserves a short label and longer narrative.
 *
 * @param input - Omit fields to list; pass sha/label/narrative to upsert; pass id+remove to delete
 * @returns The commentary list, or the written/removed record
 *
 * @example
 * import commentary from 'kody:@kentcdodds/lineage/commentary'
 *
 * const saved = await commentary({
 *   sha: 'abc123',
 *   label: 'Worker split',
 *   narrative: 'The monolith was carved into the first dedicated worker package.',
 * })
 */
export default async function commentary(
	input: {
		id?: string
		sha?: string
		label?: string
		narrative?: string
		remove?: boolean
	} = {},
) {
	if (input.remove && input.id) {
		const removed = await deleteCommentary(input.id)
		return { ok: true, removed, id: input.id }
	}
	if (input.sha && input.label && input.narrative) {
		const saved = await upsertCommentary({
			id: input.id,
			sha: input.sha,
			label: input.label,
			narrative: input.narrative,
		})
		return { ok: true, commentary: saved, commentaries: await listCommentaries() }
	}
	return { ok: true, commentaries: await listCommentaries() }
}