Skip to content

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

Package listing

@kody/supabase

src/safety.ts

36 lines · 1002 B · TypeScript
import { optionalBoolean, type MutationFlags } from './types.ts'

export function readMutationFlags(input: Record<string, unknown>): MutationFlags {
	return {
		dryRun: optionalBoolean(input.dryRun, 'dryRun'),
		confirm: optionalBoolean(input.confirm, 'confirm'),
	}
}

export function assertMutationAllowed(
	flags: MutationFlags,
	label: string,
): { dryRun: boolean } {
	if (flags.dryRun) return { dryRun: true }
	if (flags.confirm) return { dryRun: false }
	throw new Error(
		`${label} is a mutation. Pass dryRun: true to preview, or confirm: true to run it live.`,
	)
}

export function assertFilteredWrite(
	input: {
		hasFilters: boolean
		allowUnfiltered?: boolean
		dryRun?: boolean
		confirm?: boolean
	},
	label: string,
) {
	if (input.hasFilters) return
	if (input.dryRun) return
	if (input.confirm && input.allowUnfiltered) return
	throw new Error(
		`${label} without filters would change every row. Add filters, or pass dryRun: true, or confirm: true with allowUnfiltered: true.`,
	)
}