Skip to content

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

Package listing

@kentcdodds/lineage

src/version.ts

31 lines · 816 B · TypeScript
import { getSetting, setSetting } from './storage.ts'
import {
	emptyVersion,
	normalizeVersion,
	type AppVersion,
} from './version-shape.ts'

export type { AppVersion } from './version-shape.ts'
export { emptyVersion, normalizeVersion }

const KEY = 'app_version'

export async function getAppVersion(): Promise<AppVersion> {
	const raw = await getSetting(KEY)
	if (!raw) return emptyVersion()
	try {
		return normalizeVersion(JSON.parse(raw) as Partial<AppVersion>)
	} catch {
		return emptyVersion()
	}
}

export async function setAppVersion(input: Partial<AppVersion> & { sha: string }): Promise<AppVersion> {
	const next = normalizeVersion({
		...(await getAppVersion()),
		...input,
		publishedAt: input.publishedAt || new Date().toISOString(),
	})
	await setSetting(KEY, JSON.stringify(next))
	return next
}