I figured it out. I wrapped foldWidget in a function that receives the folded source code as a parameter.
And changed folded = folded.update({add: [foldWidget.range(e.value.from, e.value.to)]}) to:
let code = tr.state.doc.slice(e.value.from, e.value.to);
folded = folded.update({add: [foldWidget({code}).range(e.value.from, e.value.to)]})