Skip to content

transformer: invalid output by async-to-generator transform for recursive async calls #21125

Description

@sapphi-red

Input

const typeNext = async () => {
    await new Promise(resolve => setTimeout(resolve, 1000));
    console.log('typeNext');
    typeNext();
};

typeNext();

Actual Output

import _asyncToGenerator from "@oxc-project/runtime/helpers/asyncToGenerator";
const typeNext = function() {
	var _ref = _asyncToGenerator(function* () {
		yield new Promise((resolve) => setTimeout(resolve, 1e3));
		console.log("typeNext");
		typeNext();
	});
	return function typeNext() {
		return _ref.apply(this, arguments);
	};
}();
typeNext();

playground
This references typeNext in TDZ.

Expected Output

import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
const _typeNext = function () {
  var _ref = _asyncToGenerator(function* () {
    yield new Promise(resolve => setTimeout(resolve, 1000));
    console.log('typeNext');
    _typeNext();
  });
  return function typeNext() {
    return _ref.apply(this, arguments);
  };
}();
_typeNext();

Babel REPL

Originally reported at vitejs/vite#22183

Metadata

Metadata

Assignees

Labels

A-transformerArea - Transformer / Transpiler

Type

Fields

Priority

None yet

Effort

None yet

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions