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' "
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:
Example:
Better name ideas are welcome.