Show only products in stock - one variant only
You're always using variants. Just that if you have no 'other' variants commerce hides that stuff away. But your product has a defaultVariant behind the scenes.

Adding…

.hasVariant({ hasStock: true })


…to your query should (I think) return your products that have ([hidden] variants in) stock.