[patch][codegen] don't reuse babel nodes in codegen for dependencies
--- Reusing optionalMemberExpression nodes recently led to a bug when compiling Forget playground. ```js // the two a?.b's here should be different nodes! if (a?.b !== $[0]) { // ... $[0] = a?.b; } ``` Forget playground uses `babel-plugin-react-forget` and `next/babel`. Reusing the same node in two positions in the AST lead to invalid mutations: - the first `a?.b` is visited and transpiled to `a === void 0 ? ...`, which (1) inserts nodes between the original node and its parent and (2) mutates `a?.b` in place to a non-optional call - the second `a?.b` in source gets updated to `a.b` and does not get visited again ```js // Source in `EditorImpl.tsx` compilerOutput.kind === "err" ? compilerOutput.error.details : [] // Forget transformed: if ($[2] !== compilerOutput.kind || $[3] !== compilerOutput.error?.details) { t4 = compilerOutput.kind === "err" ? compilerOutput.error.details : []; $[2] = compilerOutput.kind; // this is good! $[3] = compilerOutput.error?.details; $[4] = t4; } else { t4 = $[4]; } // After next/babel if ($[2] !== compilerOutput.kind || $[3] !== ((_compilerOutput$error = compilerOutput.error) === null || _compilerOutput$error === void 0 ? void 0 : _compilerOutput$error.details)) { t4 = compilerOutput.kind === "err" ? compilerOutput.error.details : []; $[2] = compilerOutput.kind; // Oh no!! $[3] = _compilerOutput$error.details; $[4] = t4; } else { t4 = $[4]; } ```