zspecza / common-tags

🔖 Useful template literal tags for dealing with strings in ES2015+

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

New tag defaultEmpty

villelahdenvuo opened this issue · comments

It's very common pattern to want to append a string only if it's not empty, so I made a helper to do that:

function isEmptyValue(value: unknown): boolean {
	return value === undefined ||
		value === null ||
		(typeof value === 'number' && Number.isNaN(value)) ||
		(typeof value === 'object' && Object.keys(value).length === 0) ||
		(typeof value === 'string' && value.trim().length === 0);
}

function defaultEmpty(strings: string[], ...expressions: unknown[]): string {
	if (expressions.some(isEmptyValue)) return '';
	return String.raw({ raw: strings }, ...expressions)
}

Example:

const filters = Math.random() > 0.5 ? '' : `bar = 'baz'`;
`SELECT * FROM foo WHERE bar = 'foo' ${defaultEmpty`OR ${filters}`}`
// -> "SELECT * FROM foo WHERE bar = 'foo' OR bar = 'baz'"
// -> "SELECT * FROM foo WHERE bar = 'foo' "

Better name ideas are welcome.