SyncValsverifier → artifact → classifier → verdict
SyncVals · Trajectory

evanw-esbuild-4417

codex gpt-5.5 ✓ resolved GOOD_SUCCESS ↑ View task
Solved from the instruction alone, tests/ and solution/ were withheld from the agent's workspace and restored only for grading.
Reward = tests/test.sh exit code (0 → resolved); the classification below is post-hoc and cannot change it.
Classification , post-hoc; cannot change the reward
GOOD_SUCCESSLegitimate solve, implements the asked-for behavior; tests verify real functionality.
SubtypeLegitimate Solution - Hard Task Solved
EvidenceAll 6 tests passed: test_async_generator_lowering_matches_native, test_bundled_output_uses_lowered_async_generator_helpers, test_case_roster_actually_ran, test_output_is_json_trace, test_async_generator_compatibility_targets_still_require_lowering, test_no_hardcoded_hidden_literals. Agent's final summary shows implementation of promise-valued queue in __asyncGenerator (runtime.go:417) with comprehensive regression test suite (runtime_test.go:38) comparing native Node traces against lowered es2017/es2015 output for concurrent calls, delegated generators, queued return/throw, for-await loops, cleanup yields, and value passthrough.
Root causeAgent successfully implemented a complex async generator lowering fix involving promise-chaining semantics for concurrent iterator method calls, which required deep understanding of JavaScript async generators, esbuild's lowering pipeline, and careful ordering of microtask vs synchronous execution. The comprehensive test suite validates behavioral correctness by comparing execution traces against native Node.js, confirming the solution handles all specified edge cases correctly.
RecommendationN/A - task is fine
Trajectory
Tool-by-tool agent trajectory
59 tool calls · 2 tool types · 79 steps
<permissions instructions> Filesystem sandboxing defines which files can be read or written. `sandbox_mode` is `danger-full-access`: No filesystem sandboxing - all commands are permitted. Network access is enabled. Approval policy is currently never. Do not provide the `sandbox_permissions` for any reason, commands will be rejected. </permissions instructions><apps_instructions> ## Apps (Connectors) Apps (Connectors) can be explicitly triggered in user messages in the format `[$app-name](app://{connector_id})`. Apps can also be implicitly triggered as long as the context suggests usage of available apps. An app is equivalent to a set of MCP tools within the `codex_apps` MCP. An installed app's MCP tools are either provided to you already, or can be lazy-loaded through the `tool_search` tool. If `tool_search` is available, the apps that are searchable by `tools_search` will be listed by it. Do not additionally call list_mcp_resources or list_mcp_resource_templates for apps. </apps_instructions><skills_instructions> ## Skills A skill is a set of instructions provided through a `SKILL.md` source. Below is the list of skills that can be used. Each entry includes a name, description, and source locator. `file` locators are on the host filesystem, `environment resource` locators are owned by an execution environment, `orchestrator resource` locators are opaque non-filesystem resources, and `custom resource` locators use their provider's access mechanism. ### Available skills - imagegen: Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG/vector/code-native assets, extending an established icon or logo system, or building the visual directly in HTML/CSS/canvas. (file: /tmp/codex-home/skills/.system/imagegen/SKILL.md) - openai-docs: Use when the user asks how to build with OpenAI products or APIs, asks about Codex itself or choosing Codex surfaces, needs up-to-date official documentation with citations, help choosing the latest model for a use case, or model upgrade and prompt-upgrade guidance; use OpenAI docs MCP tools for non-Codex docs questions, use the Codex manual helper first for broad Codex self-knowledge, and restrict fallback browsing to official OpenAI domains. (file: /tmp/codex-home/skills/.system/openai-docs/SKILL.md) - plugin-creator: Create and scaffold plugin directories for Codex with a required `.codex-plugin/plugin.json`, optional plugin folders/files, valid manifest defaults, and personal-marketplace entries by default. Use when Codex needs to create a new personal plugin, add optional plugin structure, generate or update marketplace entries for plugin ordering and availability metadata, or update an existing local plugin during development with the CLI-driven cachebuster and reinstall flow. (file: /tmp/codex-home/skills/.system/plugin-creator/SKILL.md) - skill-creator: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Codex's capabilities with specialized knowledge, workflows, or tool integrations. (file: /tmp/codex-home/skills/.system/skill-creator/SKILL.md) - skill-installer: Install Codex skills into $CODEX_HOME/skills from a curated list or a [code-host] repo path. Use when a user asks to list installable skills, install a curated skill, or install a skill from another repo (including private repos). (file: /tmp/codex-home/skills/.system/skill-installer/SKILL.md) ### How to use skills - Discovery: The list above is the skills available in this session (name + description + source locator). `file` entries live on the host filesystem, `environment resource` entries are owned by their execution environment, `orchestrator resource` entries must be accessed through `skills.list` and `skills.read`, and `custom resource` entries use their provider's access mechanism. - Trigger rules: If the user names a skill (with `$SkillName` or plain text) OR the task clearly matches a skill's description shown above, you must use that skill for that turn. Multiple mentions mean use them all. Do not carry skills across turns unless re-mentioned. - Missing/blocked: If a named skill isn't in the list or its source can't be read, say so briefly and continue with the best fallback. - How to use a skill (progressive disclosure): 1) After deciding to use a skill, the main agent must read its `SKILL.md` completely before taking task actions. For a `file` entry, open the listed path. For an `environment resource`, use the filesystem of the owning environment. For an `orchestrator resource`, call `skills.list` with `{"authority":{"kind":"orchestrator"}}`, select the matching package, and pass its `main_resource` to `skills.read`. If a read is truncated or paginated, continue until EOF. 2) When `SKILL.md` references another resource, use the same access mechanism. Resolve relative paths against a filesystem-backed skill directory. For orchestrator skills, pass the exact referenced resource identifier with the same authority and package to `skills.read`; do not treat `skill://` identifiers as filesystem paths. 3) If `SKILL.md` points to extra folders such as `references/`, use its routing instructions to identify the resources required for the task. The main agent must read each required instruction or reference file itself before acting on it. Do not delegate reading, summarizing, or interpreting skill instructions to a subagent. Subagents may still perform task work when the selected skill allows it. 4) For filesystem-backed skills, prefer running or patching provided scripts instead of retyping large code blocks. For orchestrator skills, use `skills.read` and the available tools; do not invent a local path. 5) Reuse provided assets or templates through the same source access mechanism instead of recreating them. - Coordination and sequencing: - If multiple skills apply, choose the minimal set that covers the request and state the order you'll use them. - Announce which skill(s) you're using and why (one short line). If you skip an obvious skill, say why. - Context hygiene: - Progressive disclosure applies to selecting relevant files, not partially reading a selected instruction file. Do not load unrelated references, scripts, or assets. - Avoid deep reference-chasing: prefer opening only files directly linked from `SKILL.md` unless you're blocked. - When variants exist (frameworks, providers, domains), pick only the relevant reference file(s) and note that choice. - Safety and fallback: If a skill can't be applied cleanly (missing files, unclear instructions), state the issue, pick the next-best approach, and continue. </skills_instructions>
<environment_context> <cwd>/app</cwd> <shell>bash</shell> <current_date>2026-06-21</current_date> <timezone>Etc/UTC</timezone> <filesystem><workspace_roots><root>/app</root></workspace_roots><permission_profile type="disabled"><file_system type="unrestricted" /></permission_profile></filesystem> </environment_context>
The project in /app is a JavaScript bundler written in Go. When it lowers async generator syntax for older targets, the transformed program should preserve native async generator behavior. Calling next, throw, or return on an async generator before earlier iterator method promises have settled must behave like native JavaScript. The first call should start synchronously up to the first await or yield point, later calls must be sequenced correctly, delegated async iteration must not skip values, and a return value supplied to a queued call must be delivered to the right suspended yield expression. Fix the lowering so transformed output matches native Node behavior for concurrent iterator method calls, delegated async generators, for-await loops, return-through-yield flows, and synchronous side-effect ordering. Queued return() calls must still run cleanup code from finally blocks and deliver any value yielded by that cleanup. Queued throw() calls must enter matching catch blocks at the same suspended point as native async generators and preserve the yielded recovery value. The observable contract includes yielded values, done flags, propagated errors, values sent back into suspended yield expressions, and the order of synchronous side effects that occur before and after awaited work. The runtime helpers are in /app/internal/runtime/runtime.go. Coordinate __asyncGenerator with delegated iteration through __yieldStar so queued return, throw, and next calls preserve native finally-yield timing. Keep existing CLI and API behavior unchanged. The fix must handle dozens of concurrent-call patterns, including delegated generators whose inner iterator is waiting on a promise inside try/finally or catch code. A queue that only uses an array plus a running flag is not enough if it lets delegated return() or throw() skip the same promise-completion ordering as native async generators. Preserve the __yieldStar __await handoff protocol: when a delegated iterator result is pending, the outer async generator must resume through the same ordered promise chain instead of resolving the delegated call outside that chain. Use a promise-valued queue rather than a detached array of pending calls when sequencing iterator methods. Each next, throw, and return call should chain its resume work from the previous call's promise so native microtask order is preserved. When no earlier iterator method is still pending, the first resume callback must start immediately and run synchronously until the generator reaches its next await or yield point. Do not add a microtask hop before that first resume; doing so changes side effects that occur before the first await. The scheduling is intentionally asymmetric. A queued next or throw operation that can resume the generator must not be delayed behind an extra Promise.resolve().then hop just because the implementation uses a promise-valued queue. A queued return operation, however, must still wait for the pending yield or delegated-yield handoff to settle before running return cleanup, so the first next result is observed before finally-side effects and cleanup yields from the queued return. A useful minimal check is an outer async generator that yield* delegates to an inner async generator whose try block yields an awaited value and whose finally block records a side effect before yielding a cleanup value. If a caller issues next() and then return("done") before awaiting either promise, the finally side effect is not visible when the first next() promise resolves; the cleanup yield belongs to the queued return() continuation. Seeing the side effect before the first result is observed means delegated cleanup is running too early. The same ordering must hold when more than one resume is queued before a return. For example, if a caller starts two next() calls, then a return("done") call, and then another next("after") call before awaiting any of those promises, the second next() result must settle before return cleanup runs. Cleanup side effects and cleanup yields belong to the queued return() continuation, and the later next("after") observes the generator state that native JavaScript would leave after that return path. Acceptance criteria: - `go build ./cmd/...` succeeds. - Bundled output for es2017 and es6 uses the async generator runtime helpers instead of native async generator or for-await syntax. - Lowered output produces the same JSON trace as native Node.js for concurrent next, throw, and return calls, including delegated generators with awaited yields, try/finally cleanup yields, try/catch recovery yields, and values sent back into suspended yield expressions. - The compatibility table must continue to require async-generator lowering for es2017 and es6 targets. Do not make compatibility-table changes that avoid lowering instead of fixing the runtime helper. Preserve the existing runtime helper exports, including __forAwait, so lowered for-await loops continue to link and execute through the runtime helpers.
I’ll trace the runtime helper and existing async-generator tests first, then patch the helper and add focused coverage around concurrent calls and delegation.
shell
rg -n "asyncGenerator|yieldStar|forAwait|async generator|async-generator|AsyncGenerator" internal scripts tests cmd
output
Chunk ID: b96eb8
Wall time: 0.0000 seconds
Process exited with code 2
Original token count: 3250
Output:
rg: scripts: No such file or directory (os error 2)
rg: tests: No such file or directory (os error 2)
internal/bundler_tests/bundler_lower_test.go:2998:func TestLowerAsyncGenerator(t *testing.T) {
internal/bundler_tests/bundler_lower_test.go:3053:			UnsupportedJSFeatures: compat.AsyncGenerator,
internal/bundler_tests/bundler_lower_test.go:3058:func TestLowerAsyncGeneratorNoAwait(t *testing.T) {
internal/bundler_tests/bundler_lower_test.go:3113:			UnsupportedJSFeatures: compat.AsyncGenerator | compat.AsyncAwait,
internal/compat/js_table.go:67:	AsyncGenerator
internal/compat/js_table.go:131:	"async-generator":                   AsyncGenerator,
internal/compat/js_table.go:249:	AsyncGenerator: {
internal/compat/js_table.go:250:		// Note: The latest version of "Hermes" failed this test: Asynchronous Iterators: async generators
internal/compat/js_table.go:251:		// Note: The latest version of "IE" failed this test: Asynchronous Iterators: async generators
internal/compat/js_table.go:252:		// Note: The latest version of "Rhino" failed this test: Asynchronous Iterators: async generators
internal/bundler_tests/snapshots/snapshots_lower.txt:24:    for (var iter = __forAwait(b), more, temp, error; more = !(temp = await iter.next()).done; more = !1) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1177:TestLowerAsyncGenerator
internal/bundler_tests/snapshots/snapshots_lower.txt:1180:  return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1185:      yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1188:        for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1202:        for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1233:  return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1238:      yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1241:        for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1255:        for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1286:  return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1291:      yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1294:        for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1308:        for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1340:    return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1345:        yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1348:          for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1362:          for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1395:    return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1400:        yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1403:          for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1417:          for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1457:TestLowerAsyncGeneratorNoAwait
internal/bundler_tests/snapshots/snapshots_lower.txt:1460:  return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1465:      yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1468:        for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1482:        for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1513:  return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1518:      yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1521:        for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1535:        for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1566:  return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1571:      yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1574:        for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1588:        for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1620:    return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1625:        yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1628:          for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1642:          for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1675:    return __asyncGenerator(this, null, function* () {
internal/bundler_tests/snapshots/snapshots_lower.txt:1680:        yield* __yieldStar(x);
internal/bundler_tests/snapshots/snapshots_lower.txt:1683:          for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:1697:          for (var iter2 = __forAwait(y), more2, temp2, error2; more2 = !(temp2 = yield new __await(iter2.next())).done; more2 = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2077:      for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2094:      for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2111:      for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2128:      for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2145:      label: for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2162:      label: for (var iter = __forAwait(y), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2185:      for (var iter = __forAwait(y), more, temp, error; more = !(temp = await iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2202:      for (var iter = __forAwait(y), more, temp, error; more = !(temp = await iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2219:      for (var iter = __forAwait(y), more, temp, error; more = !(temp = await iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2236:      for (var iter = __forAwait(y), more, temp, error; more = !(temp = await iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2253:      label: for (var iter = __forAwait(y), more, temp, error; more = !(temp = await iter.next()).done; more = false) {
internal/bundler_tests/snapshots/snapshots_lower.txt:2270:      label: for (var iter = __forAwait(y), more, temp, error; more = !(temp = await iter.next()).done; more = false) {
internal/bundler/bundler.go:2965:	fixInvalidUnsupportedJSFeatureOverrides(options, compat.AsyncAwait, compat.AsyncGenerator|compat.ForAwait|compat.TopLevelAwait)
internal/bundler/bundler.go:2966:	fixInvalidUnsupportedJSFeatureOverrides(options, compat.Generator, compat.AsyncGenerator)
internal/runtime/runtime.go:38:	//   __asyncGenerator
internal/runtime/runtime.go:412:		// These help for lowering async generator functions
internal/runtime/runtime.go:417:		export var __asyncGenerator = (__this, __arguments, generator) => {
internal/runtime/runtime.go:437:		export var __yieldStar = value => {
internal/runtime/runtime.go:469:		export var __forAwait = (obj, it, method) =>
internal/js_parser/js_parser.go:10832:			// Returning undefined is implicit except when inside an async generator
internal/js_parser/js_parser.go:11062:					(p.options.unsupportedJSFeatures.Has(compat.AsyncGenerator) && p.fnOrArrowDataVisit.isGenerator) {
internal/js_parser/js_parser.go:11072:		// Lower "for await" if it's unsupported if it's in a lowered async generator
internal/js_parser/js_parser.go:11074:			(p.options.unsupportedJSFeatures.Has(compat.AsyncGenerator) && p.fnOrArrowDataVisit.isGenerator)) {
internal/js_parser/js_parser.go:14765:		// "yield* x" turns into "yield* __yieldStar(x)" when lowering async generator functions
internal/js_parser/js_parser.go:14766:		if e.IsStar && p.options.unsupportedJSFeatures.Has(compat.AsyncGenerator) && p.fnOrArrowDataVisit.isGenerator {
internal/js_parser/js_parser.go:14767:			e.ValueOrNil = p.callRuntime(expr.Loc, "__yieldStar", []js_ast.Expr{e.ValueOrNil})
internal/js_parser/js_parser_lower.go:72:	case compat.AsyncGenerator:
internal/js_parser/js_parser_lower.go:73:		name = "async generator functions"
internal/js_parser/js_parser_lower.go:249:		feature = compat.AsyncGenerator
internal/js_parser/js_parser_lower.go:343:	// Lower async functions and async generator functions
internal/js_parser/js_parser_lower.go:344:	if *isAsync && (p.options.unsupportedJSFeatures.Has(compat.AsyncAwait) || (isGenerator != nil && *isGenerator && p.options.unsupportedJSFeatures.Has(compat.AsyncGenerator))) {
internal/js_parser/js_parser_lower.go:478:			// "async function* foo(a, b) { stmts }" => "function foo(a, b) { return __asyncGenerator(this, null, function* () { stmts }) }"
internal/js_parser/js_parser_lower.go:479:			name = "__asyncGenerator"
internal/js_parser/js_parser_lower.go:1050:	// "await x" turns into "yield __await(x)" when lowering async generator functions
internal/js_parser/js_parser_lower.go:1051:	if p.fnOrArrowDataVisit.isGenerator && (p.options.unsupportedJSFeatures.Has(compat.AsyncAwait) || p.options.unsupportedJSFeatures.Has(compat.AsyncGenerator)) {
internal/js_parser/js_parser_lower.go:1078:	//     for (var iter = __forAwait(y), more, temp, error; more = !(temp = await iter.next()).done; more = false) {
internal/js_parser/js_parser_lower.go:1166:						ValueOrNil: p.callRuntime(loc, "__forAwait", []js_ast.Expr{loop.Value})},
internal/js_parser/js_parser_lower.go:1892:					(p.options.unsupportedJSFeatures.Has(compat.AsyncGenerator) && p.fnOrArrowDataVisit.isGenerator)))) {
internal/js_parser/js_parser_lower_test.go:785:func TestAsyncGeneratorFns(t *testing.T) {
internal/js_parser/js_parser_lower_test.go:802:	expectParseErrorWithUnsupportedFeatures(t, compat.AsyncGenerator, "async function* gen() {}", err)
internal/js_parser/js_parser_lower_test.go:803:	expectParseErrorWithUnsupportedFeatures(t, compat.AsyncGenerator, "(async function* () {});", err)
internal/js_parser/js_parser_lower_test.go:804:	expectParseErrorWithUnsupportedFeatures(t, compat.AsyncGenerator, "({ async *foo() {} });", err)
shell
sed -n '1,260p' internal/runtime/runtime.go
output
Chunk ID: 24f5a9
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 2542
Output:
package runtime

// This is esbuild's runtime code. It contains helper functions that are
// automatically injected into output files to implement certain features. For
// example, the "**" operator is replaced with a call to "__pow" when targeting
// ES2015. Tree shaking automatically removes unused code from the runtime.

import (
	"[code-host]/evanw/esbuild/internal/compat"
	"[code-host]/evanw/esbuild/internal/logger"
)

// The runtime source is always at a special index. The index is always zero
// but this constant is always used instead to improve readability and ensure
// all code that references this index can be discovered easily.
const SourceIndex = uint32(0)

func Source(unsupportedJSFeatures compat.JSFeature) logger.Source {
	// Note: These helper functions used to be named similar things to the helper
	// functions from the TypeScript compiler. However, people sometimes use these
	// two projects in combination and TypeScript's implementation of these helpers
	// causes name collisions. Some examples:
	//
	// * The "tslib" library will overwrite esbuild's helper functions if the bundled
	//   code is run in the global scope: https://[code-host]/evanw/esbuild/issues/1102
	//
	// * Running the TypeScript compiler on esbuild's output to convert ES6 to ES5
	//   will also overwrite esbuild's helper functions because TypeScript doesn't
	//   change the names of its helper functions to avoid name collisions:
	//   https://[code-host]/microsoft/TypeScript/issues/43296
	//
	// These can both be considered bugs in TypeScript. However, they are unlikely
	// to be fixed and it's simplest to just avoid using the same names to avoid
	// these bugs. Forbidden names (from "tslib"):
	//
	//   __assign
	//   __asyncDelegator
	//   __asyncGenerator
	//   __asyncValues
	//   __await
	//   __awaiter
	//   __classPrivateFieldGet
	//   __classPrivateFieldSet
	//   __createBinding
	//   __decorate
	//   __exportStar
	//   __extends
	//   __generator
	//   __importDefault
	//   __importStar
	//   __makeTemplateObject
	//   __metadata
	//   __param
	//   __read
	//   __rest
	//   __spread
	//   __spreadArray
	//   __spreadArrays
	//   __values
	//
	// Note: The "__objRest" function has a for-of loop which requires ES6, but
	// transforming destructuring to ES5 isn't even supported so it's ok.
	text := `
		var __create = Object.create
		var __freeze = Object.freeze
		var __defProp = Object.defineProperty
		var __defProps = Object.defineProperties
		var __getOwnPropDesc = Object.getOwnPropertyDescriptor // Note: can return "undefined" due to a Safari bug
		var __getOwnPropDescs = Object.getOwnPropertyDescriptors
		var __getOwnPropNames = Object.getOwnPropertyNames
		var __getOwnPropSymbols = Object.getOwnPropertySymbols
		var __getProtoOf = Object.getPrototypeOf
		var __hasOwnProp = Object.prototype.hasOwnProperty
		var __propIsEnum = Object.prototype.propertyIsEnumerable
		var __reflectGet = Reflect.get
		var __reflectSet = Reflect.set

		var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for('Symbol.' + name)
		var __typeError = msg => { throw TypeError(msg) }

		export var __pow = Math.pow

		var __defNormalProp = (obj, key, value) => key in obj
			? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value})
			: obj[key] = value

		export var __spreadValues = (a, b) => {
			for (var prop in b ||= {})
				if (__hasOwnProp.call(b, prop))
					__defNormalProp(a, prop, b[prop])
			if (__getOwnPropSymbols)
		`

	// Avoid "of" when not using ES6
	if !unsupportedJSFeatures.Has(compat.ForOf) {
		text += `
				for (var prop of __getOwnPropSymbols(b)) {
		`
	} else {
		text += `
				for (var props = __getOwnPropSymbols(b), i = 0, n = props.length, prop; i < n; i++) {
					prop = props[i]
		`
	}

	text += `
					if (__propIsEnum.call(b, prop))
						__defNormalProp(a, prop, b[prop])
				}
			return a
		}
		export var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b))

		// Update the "name" property on the function or class for "--keep-names"
		export var __name = (target, value) => __defProp(target, 'name', { value, configurable: true })

		// This fallback "require" function exists so that "typeof require" can
		// naturally be "function" even in non-CommonJS environments since esbuild
		// emulates a CommonJS environment (issue #1202). However, people want this
		// shim to fall back to "globalThis.require" even if it's defined later
		// (including property accesses such as "require.resolve") so we need to
		// use a proxy (issue #1614).
		export var __require =
			/* @__PURE__ */ (x =>
				typeof require !== 'undefined' ? require :
				typeof Proxy !== 'undefined' ? new Proxy(x, {
					get: (a, b) => (typeof require !== 'undefined' ? require : a)[b]
				}) : x
			)(function(x) {
				if (typeof require !== 'undefined') return require.apply(this, arguments)
				throw Error('Dynamic require of "' + x + '" is not supported')
			})

		// This is used for glob imports
		export var __glob = map => path => {
			var fn = map[path]
			if (fn) return fn()
			throw new Error('Module not found in bundle: ' + path)
		}

		// For object rest patterns
		export var __restKey = key => typeof key === 'symbol' ? key : key + ''
		export var __objRest = (source, exclude) => {
			var target = {}
			for (var prop in source)
				if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
					target[prop] = source[prop]
			if (source != null && __getOwnPropSymbols)
	`

	// Avoid "of" when not using ES6
	if !unsupportedJSFeatures.Has(compat.ForOf) {
		text += `
				for (var prop of __getOwnPropSymbols(source)) {
		`
	} else {
		text += `
				for (var props = __getOwnPropSymbols(source), i = 0, n = props.length, prop; i < n; i++) {
					prop = props[i]
		`
	}

	text += `
					if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
						target[prop] = source[prop]
				}
			return target
		}

		// This is for lazily-initialized ESM code. This has two implementations, a
		// compact one for minified code and a verbose one that generates friendly
		// names in V8's profiler and in stack traces.
		export var __esm = (fn, res) => function __init() {
			return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res
		}
		export var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res)

		// Wraps a CommonJS closure and returns a require() function. This has two
		// implementations, a compact one for minified code and a verbose one that
		// generates friendly names in V8's profiler and in stack traces.
		export var __commonJS = (cb, mod) => function __require() {
			return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = {exports: {}}).exports, mod), mod.exports
		}
		export var __commonJSMin = (cb, mod) => () => (mod || cb((mod = {exports: {}}).exports, mod), mod.exports)

		// Used to implement ESM exports both for "require()" and "import * as"
		export var __export = (target, all) => {
			for (var name in all)
				__defProp(target, name, { get: all[name], enumerable: true })
		}

		var __copyProps = (to, from, except, desc) => {
			if (from && typeof from === 'object' || typeof from === 'function')
	`

	// Avoid "let" when not using ES6
	if !unsupportedJSFeatures.Has(compat.ForOf) && !unsupportedJSFeatures.Has(compat.ConstAndLet) {
		text += `
				for (let key of __getOwnPropNames(from))
					if (!__hasOwnProp.call(to, key) && key !== except)
						__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable })
		`
	} else {
		text += `
				for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
					key = keys[i]
					if (!__hasOwnProp.call(to, key) && key !== except)
						__defProp(to, key, { get: (k => from[k]).bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable })
				}
		`
	}

	text += `
			return to
		}

		// This is used to implement "export * from" statements. It copies properties
		// from the imported module to the current module's ESM export object. If the
		// current module is an entry point and the target format is CommonJS, we
		// also copy the properties to "module.exports" in addition to our module's
		// internal ESM export object.
		export var __reExport = (target, mod, secondTarget) => (
			__copyProps(target, mod, 'default'),
			secondTarget && __copyProps(secondTarget, mod, 'default')
		)

		// Converts the module from CommonJS to ESM. When in node mode (i.e. in an
		// ".mjs" file, package.json has "type: module", or the "__esModule" export
		// in the CommonJS file is falsy or missing), the "default" property is
		// overridden to point to the original CommonJS exports object instead.
		export var __toESM = (mod, isNodeMode, target) => (
			target = mod != null ? __create(__getProtoOf(mod)) : {},
			__copyProps(
				// If the importer is in node compatibility mode or this is not an ESM
				// file that has been converted to a CommonJS file using a Babel-
				// compatible transform (i.e. "__esModule" has not been set), then set
				// "default" to the CommonJS "module.exports" for node compatibility.
				isNodeMode || !mod || !mod.__esModule
					? __defProp(target, 'default', { value: mod, enumerable: true })
					: target,
				mod)
		)

		// Converts the module from ESM to CommonJS. This clones the input module
		// object with the addition of a non-enumerable "__esModule" property set
		// to "true", which overwrites any existing export named "__esModule".
		export var __toCommonJS = mod => __copyProps(__defProp({}, '__esModule', { value: true }), mod)

		// For TypeScript experimental decorators
		// - kind === undefined: class
		// - kind === 1: method, parameter
		// - kind === 2: field
		export var __decorateClass = (decorators, target, key, kind) => {
			var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target
			for (var i = decorators.length - 1, decorator; i >= 0; i--)
				if (decorator = decorators[i])
					result = (kind ? decorator(target, key, result) : decorator(result)) || result
			if (kind && result) __defProp(target, key, result)
			return result
		}
shell
git status --short
output
Chunk ID: f6ae69
Wall time: 0.0000 seconds
Process exited with code 128
Original token count: 18
Output:
fatal: not a git repository (or any of the parent directories): .git
The repo isn’t under git here, so I’ll avoid relying on diff state. The helper is in the expected file; next I’m narrowing in on its current queue/delegation behavior and how snapshots are generated.
shell
sed -n '400,485p' internal/runtime/runtime.go
output
Chunk ID: 228179
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 650
Output:
				var rejected = value => {
					try {
						step(generator.throw(value))
					} catch (e) {
						reject(e)
					}
				}
				var step = x => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected)
				step((generator = generator.apply(__this, __arguments)).next())
			})
		}

		// These help for lowering async generator functions
		export var __await = function (promise, isYieldStar) {
			this[0] = promise
			this[1] = isYieldStar
		}
		export var __asyncGenerator = (__this, __arguments, generator) => {
			var resume = (k, v, yes, no) => {
				try {
					var x = generator[k](v), isAwait = (v = x.value) instanceof __await, done = x.done
					Promise.resolve(isAwait ? v[0] : v)
						.then(y => isAwait
							? resume(k === 'return' ? k : 'next', v[1] ? { done: y.done, value: y.value } : y, yes, no)
							: yes({ value: y, done }))
						.catch(e => resume('throw', e, yes, no))
				} catch (e) {
					no(e)
				}
			}, method = k => it[k] = x => new Promise((yes, no) => resume(k, x, yes, no)), it = {}
			return generator = generator.apply(__this, __arguments),
				it[__knownSymbol('asyncIterator')] = () => it,
				method('next'),
				method('throw'),
				method('return'),
				it
		}
		export var __yieldStar = value => {
			var obj = value[__knownSymbol('asyncIterator')], isAwait = false, method, it = {}
			if (obj == null) {
				obj = value[__knownSymbol('iterator')]()
				method = k => it[k] = x => obj[k](x)
			} else {
				obj = obj.call(value)
				method = k => it[k] = v => {
					if (isAwait) {
						isAwait = false
						if (k === 'throw') throw v
						return v
					}
					isAwait = true
					return {
						done: false,
						value: new __await(new Promise(resolve => {
							var x = obj[k](v)
							if (!(x instanceof Object)) __typeError('Object expected')
							resolve(x)
						}), 1),
					}
				}
			}
			return it[__knownSymbol('iterator')] = () => it,
				method('next'),
				'throw' in obj ? method('throw') : it.throw = x => { throw x },
				'return' in obj && method('return'),
				it
		}

		// This helps for lowering for-await loops
		export var __forAwait = (obj, it, method) =>
			(it = obj[__knownSymbol('asyncIterator')])
				? it.call(obj)
				: (obj = obj[__knownSymbol('iterator')](),
					it = {},
					method = (key, fn) =>
						(fn = obj[key]) && (it[key] = arg =>
							new Promise((yes, no, done) => (
								arg = fn.call(obj, arg),
								done = arg.done,
								Promise.resolve(arg.value)
									.then(value => yes({ value, done }), no)
							))),
					method('next'),
					method('return'),
					it)

shell
sed -n '2980,3130p' internal/bundler_tests/bundler_lower_test.go
output
Chunk ID: d8a689
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 949
Output:
		files: map[string]string{
			"/entry.ts": `
				namespace ns {
					export let a = b
					using c = d
					export let e = f
				}
			`,
		},
		entryPaths: []string{"/entry.ts"},
		options: config.Options{
			Mode:                  config.ModePassThrough,
			AbsOutputDir:          "/out",
			UnsupportedJSFeatures: compat.Using,
		},
	})
}

func TestLowerAsyncGenerator(t *testing.T) {
	lower_suite.expectBundled(t, bundled{
		files: map[string]string{
			"/entry.ts": `
				async function* foo() {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				}
				foo = async function* () {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				}
				foo = { async *bar () {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				} }
				class Foo { async *bar () {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				} }
				Foo = class { async *bar () {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				} }
				async function bar() {
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				}
			`,
		},
		entryPaths: []string{"/entry.ts"},
		options: config.Options{
			Mode:                  config.ModePassThrough,
			AbsOutputDir:          "/out",
			UnsupportedJSFeatures: compat.AsyncGenerator,
		},
	})
}

func TestLowerAsyncGeneratorNoAwait(t *testing.T) {
	lower_suite.expectBundled(t, bundled{
		files: map[string]string{
			"/entry.ts": `
				async function* foo() {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				}
				foo = async function* () {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				}
				foo = { async *bar () {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				} }
				class Foo { async *bar () {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				} }
				Foo = class { async *bar () {
					yield
					yield x
					yield *x
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				} }
				async function bar() {
					await using x = await y
					for await (let x of y) {}
					for await (await using x of y) {}
				}
			`,
		},
		entryPaths: []string{"/entry.ts"},
		options: config.Options{
			Mode:                  config.ModePassThrough,
			AbsOutputDir:          "/out",
			UnsupportedJSFeatures: compat.AsyncGenerator | compat.AsyncAwait,
		},
	})
}

// https://[code-host]/evanw/esbuild/issues/3768
func TestJavaScriptDecoratorsBundleIssue3768(t *testing.T) {
	lower_suite.expectBundled(t, bundled{
		files: map[string]string{
			"/base-instance-method.js":   `class Foo { @dec foo() { return Foo } }`,
			"/base-instance-field.js":    `class Foo { @dec foo = Foo }`,
			"/base-instance-accessor.js": `class Foo { @dec accessor foo = Foo }`,

			"/base-static-method.js":   `class Foo { @dec static foo() { return Foo } }`,
			"/base-static-field.js":    `class Foo { @dec static foo = Foo }`,
			"/base-static-accessor.js": `class Foo { @dec static accessor foo = Foo }`,

			"/derived-instance-method.js":   `class Foo extends Bar { @dec foo() { return Foo } }`,
shell
rg -n "expectBundled|snapshots_lower|TestLowerAsyncGenerator|runtime" internal/bundler_tests internal/js_parser -g '*.go'
output
Chunk ID: 5c33ba
Wall time: 0.0001 seconds
Process exited with code 0
Original token count: 27201
Output:
Total output lines: 1143

internal/bundler_tests/bundler_dce_test.go:16:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:41:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:66:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:91:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:116:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:141:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:166:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:195:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:224:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:252:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:280:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:305:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:330:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:355:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:380:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:405:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:430:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:462:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:494:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:525:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:561:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:593:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:625:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:656:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:692:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:726:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:751:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:775:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:804:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:829:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:855:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:896:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:928:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:968:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1000:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1038:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1055:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1072:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1093:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1114:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1135:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1153:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1226:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1251:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1279:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1316:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1409:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1434:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1521:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1565:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1594:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1618:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1659:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1698:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1737:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1767:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1828:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1846:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1864:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1882:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1908:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1941:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1958:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:1977:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2081:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2151:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2171:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2195:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2214:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2259:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2305:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2329:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2348:// Calls to the runtime "__publicField" function are not considered side effects
internal/bundler_tests/bundler_dce_test.go:2350:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2384:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2420:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2454:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2635:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2770:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2841:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:2861:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3035:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3184:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3213:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3273:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3399:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3491:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3548:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3590:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3633:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3650:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3710:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3774:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3804:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3835:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3865:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3895:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3925:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3955:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:3985:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4015:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4043:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4072:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4118:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4258:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4391:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4524:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4578:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4606:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4648:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4676:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4703:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4737:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4776:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4800:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4833:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4863:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4884:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4917:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4936:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4952:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_dce_test.go:4982:	dce_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:14:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:40:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:67:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:94:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:122:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:150:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:179:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:209:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:224:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_glob_test.go:259:	glob_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:19:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:36:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:64:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:109:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:150:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:191:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:232:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:272:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:294:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:316:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:337:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:359:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:384:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:405:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:456:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:507:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:558:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:608:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:650:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:692:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:733:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:757:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:781:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:826:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:859:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:875:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:899:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:936:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1012:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1088:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1154:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1220:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1272:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1324:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1369:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1414:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1459:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1504:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1535:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1567:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1588:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1612:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1635:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1664:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1692:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1734:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1776:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1824:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1872:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1898:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1915:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1946:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:1967:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2002:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2022:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2042:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2062:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2088:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2114:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2140:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2166:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2191:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2219:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2242:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2263:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2294:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2326:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2344:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2367:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2390:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2419:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2443:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2510:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2578:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2646:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2710:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2759:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2808:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2979:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:2998:func TestLowerAsyncGenerator(t *testing.T) {
internal/bundler_tests/bundler_lower_test.go:2999:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:3058:func TestLowerAsyncGeneratorNoAwait(t *testing.T) {
internal/bundler_tests/bundler_lower_test.go:3059:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:3120:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_lower_test.go:3149:	lower_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:14:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:46:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:85:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:124:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:158:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:192:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:226:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:258:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:297:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:336:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:370:	importphase_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_importphase_test.go:404:	importphase_suite.expectBundled(t, bundled{
internal/bundler_t…17201 tokens truncated…bundler_tests/bundler_default_test.go:2157:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2208:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2241:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2286:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2321:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2346:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2398:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2423:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2457:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2476:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2495:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2514:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2533:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2552:	default_suite.expectBundledUnix(t, bundled{
internal/bundler_tests/bundler_default_test.go:2569:	default_suite.expectBundledWindows(t, bundled{
internal/bundler_tests/bundler_default_test.go:2588:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2607:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2631:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2666:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2688:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2750:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2783:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2817:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2849:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2882:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2919:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2946:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2975:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:2996:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3015:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3041:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3058:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3075:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3092:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3109:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3124:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3142:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3157:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3175:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3197:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3223:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3249:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3264:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3281:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3298:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3319:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3335:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3349:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3386:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3423:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3460:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3497:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3534:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3562:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3583:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3604:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3625:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3725:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3744:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3763:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3783:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3803:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3876:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3929:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3946:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3962:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3978:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:3998:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4015:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4035:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4052:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4069:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4086:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4101:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4116:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4133:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4150:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4170:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4187:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4207:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4224:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4267:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4296:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4325:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4355:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4449:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4532:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4560:	default_suite.expectBundledUnix(t, bundled{
internal/bundler_tests/bundler_default_test.go:4663:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4717:	default_suite.expectBundledUnix(t, bundled{
internal/bundler_tests/bundler_default_test.go:4732:	default_suite.expectBundledWindows(t, bundled{
internal/bundler_tests/bundler_default_test.go:4750:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4794:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4894:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4976:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:4999:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5025:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5052:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5091:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5126:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5175:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5194:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5215:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5256:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5291:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5321:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5378:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5433:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5467:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5511:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5583:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5638:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5675:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5758:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5789:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5824:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5854:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5879:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5906:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5933:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5954:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5975:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:5994:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6016:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6058:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6138:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6178:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6226:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6266:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6314:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6364:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6414:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6509:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6521:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6533:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6564:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6593:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6615:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6638:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6673:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6711:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6737:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6772:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6796:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6816:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6848:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6876:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6927:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6946:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:6975:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7018:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7058:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7114:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7174:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7195:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7220:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7246:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7266:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7293:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7338:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7370:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7395:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7415:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7437:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7545:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7563:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7582:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7607:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7628:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7656:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7685:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7733:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7782:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7799:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7822:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7855:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7885:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7911:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7947:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:7985:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8036:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8066:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8155:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8202:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8235:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8300:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8334:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8377:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8397:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8563:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8587:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8623:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8662:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8683:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8743:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8784:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8815:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8857:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8915:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:8944:						"react/jsx-dev-runtime": true,
internal/bundler_tests/bundler_default_test.go:8953:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9013:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9074:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9096:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9122:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9150:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9187:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9209:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9236:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9256:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9275:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9295:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9315:	default_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9343:	css_suite.expectBundled(t, bundled{
internal/bundler_tests/bundler_default_test.go:9383:	css_suite.expectBundled(t, bundled{
shell
rg --files | rg 'runtime|lower|compat|snapshots|js_table'
output
Chunk ID: 9ddafb
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 291
Output:
pkg/cli/cli_js_table.go
pkg/api/api_js_table.go
internal/bundler_tests/bundler_lower_test.go
internal/bundler_tests/snapshots/snapshots_dce.txt
internal/bundler_tests/snapshots/snapshots_splitting.txt
internal/bundler_tests/snapshots/snapshots_lower.txt
internal/bundler_tests/snapshots/snapshots_yarnpnp.txt
internal/bundler_tests/snapshots/snapshots_css.txt
internal/bundler_tests/snapshots/snapshots_packagejson.txt
internal/bundler_tests/snapshots/snapshots_importphase.txt
internal/bundler_tests/snapshots/snapshots_ts.txt
internal/bundler_tests/snapshots/snapshots_default.txt
internal/bundler_tests/snapshots/snapshots_tsconfig.txt
internal/bundler_tests/snapshots/snapshots_glob.txt
internal/bundler_tests/snapshots/snapshots_importstar.txt
internal/bundler_tests/snapshots/snapshots_loader.txt
internal/bundler_tests/snapshots/snapshots_importstar_ts.txt
internal/js_parser/js_parser_lower_class.go
internal/js_parser/js_parser_lower.go
internal/js_parser/js_parser_lower_test.go
internal/compat/compat.go
internal/compat/css_table.go
internal/compat/js_table.go
internal/compat/compat_test.go
internal/runtime/runtime.go
internal/runtime/runtime_test.go
The current `__asyncGenerator` resumes immediately for every method call and doesn’t serialize calls, which explains wrong concurrent behavior. I’m going to build a small native-vs-lowered harness now so the patch can be checked against real Node traces, especially `yield*` with pending awaited iterator results.
shell
sed -n '1,240p' internal/runtime/runtime_test.go
output
Chunk ID: 9c0fec
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 228
Output:
package runtime_test

import (
	"testing"

	"[code-host]/evanw/esbuild/internal/compat"
	"[code-host]/evanw/esbuild/internal/config"
	"[code-host]/evanw/esbuild/internal/js_parser"
	"[code-host]/evanw/esbuild/internal/logger"
	"[code-host]/evanw/esbuild/internal/runtime"
)

func TestUnsupportedFeatures(t *testing.T) {
	for key, feature := range compat.StringToJSFeature {
		t.Run(key, func(t *testing.T) {
			source := runtime.Source(feature)
			log := logger.NewDeferLog(logger.DeferLogAll, nil)

			js_parser.Parse(log, source, js_parser.OptionsFromConfig(&config.Options{
				UnsupportedJSFeatures: feature,
				TreeShaking:           true,
			}))

			if log.HasErrors() {
				msgs := "Internal error: failed to parse runtime:\n"
				for _, msg := range log.Done() {
					msgs += msg.String(logger.OutputOptions{IncludeSource: true}, logger.TerminalInfo{})
				}
				t.Fatal(msgs[:len(msgs)-1])
			}
		})
	}
}
shell
rg -n "snapshots|UPDATE|ESBUILD" internal/*_tests internal -g '*_test.go'
output
Chunk ID: c02520
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 298
Output:
internal/bundler_tests/bundler_test.go:4:// "snapshots" directory. This allows test results to be updated easily without
internal/bundler_tests/bundler_test.go:6:// "UPDATE_SNAPSHOTS=1 make test" and commit the updated values. Make sure to
internal/bundler_tests/bundler_test.go:225:const snapshotsDir = "snapshots"
internal/bundler_tests/bundler_test.go:238:		s.path = snapshotsDir + "/snapshots_" + s.name + ".txt"
internal/bundler_tests/bundler_test.go:260:		_, globalUpdateSnapshots = os.LookupEnv("UPDATE_SNAPSHOTS")
internal/bundler_tests/bundler_test.go:280:	os.Mkdir(snapshotsDir, 0755)
internal/bundler_tests/bundler_test.go:4:// "snapshots" directory. This allows test results to be updated easily without
internal/bundler_tests/bundler_test.go:6:// "UPDATE_SNAPSHOTS=1 make test" and commit the updated values. Make sure to
internal/bundler_tests/bundler_test.go:225:const snapshotsDir = "snapshots"
internal/bundler_tests/bundler_test.go:238:		s.path = snapshotsDir + "/snapshots_" + s.name + ".txt"
internal/bundler_tests/bundler_test.go:260:		_, globalUpdateSnapshots = os.LookupEnv("UPDATE_SNAPSHOTS")
internal/bundler_tests/bundler_test.go:280:	os.Mkdir(snapshotsDir, 0755)
shell
go test ./internal/runtime
output
Chunk ID: 9e0fda
Wall time: 1.6778 seconds
Process exited with code 0
Original token count: 14
Output:
ok  	[code-host]/evanw/esbuild/internal/runtime	0.079s
shell
go test ./cmd/...
output
Chunk ID: f29fa3
Wall time: 1.8570 seconds
Process exited with code 0
Original token count: 15
Output:
?   	[code-host]/evanw/esbuild/cmd/esbuild	[no test files]
Baseline build targets are healthy. I’m using Node as the oracle now because the bug is entirely in observable promise/microtask sequencing, which is hard to reason about from snapshots alone.
shell
cat >/tmp/ag-case.js <<'EOF'
let trace=[];
let tick;
const gate = new Promise(r => tick = r);
async function* inner(){
  trace.push('inner start');
  try {
    trace.push('before yield await');
    const back = yield await gate.then(() => (trace.push('await done'), 'first'));
    trace.push('after first ' + back);
    yield 'second';
  } finally {
    trace.push('finally before cleanup');
    const back = yield 'cleanup';
    trace.push('finally after cleanup ' + back);
  }
}
async function* outer(){
  trace.push('outer start');
  yield* inner();
  trace.push('outer after yieldstar');
}
async function main(){
  let it=outer();
  trace.push('before calls');
  let p1=it.next();
  trace.push('after next1');
  let p2=it.return('done');
  trace.push('after return');
  p1.then(x=>trace.push('p1 '+JSON.stringify(x)), e=>trace.push('p1err '+e));
  p2.then(x=>trace.push('p2 '+JSON.stringify(x)), e=>trace.push('p2err '+e));
  trace.push('before resolve');
  tick();
  trace.push('after resolve');
  await Promise.allSettled([p1,p2]);
  trace.push('after all');
  console.log(JSON.stringify(trace));
}
main();
EOF
node /tmp/ag-case.js
output
Chunk ID: c8c1f9
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 66
Output:
["before calls","outer start","inner start","before yield await","after next1","after return","before resolve","after resolve","await done","p1 {\"value\":\"first\",\"done\":false}","finally before cleanup","p2 {\"value\":\"cleanup\",\"done\":false}","after all"]
Native confirms the asymmetric behavior from the report: the first call starts synchronously, but a queued `return()` waits until the pending delegated yield result is observed before cleanup runs. I’m patching the helper around that contract instead of changing compatibility data.
shell
go run ./cmd/esbuild /tmp/ag-case.js --bundle --target=es2017 --format=cjs --outfile=/tmp/ag-case.out.js && node /tmp/ag-case.out.js
output
Chunk ID: 3028b4
Wall time: 0.0813 seconds
Process exited with code 0
Original token count: 70
Output:

  ../tmp/ag-case.out.js  3.1kb

⚡ Done in 1ms
["before calls","outer start","inner start","before yield await","after next1","after return","before resolve","after resolve","p2err TypeError: Iterator result done is not an object","await done","p1 {\"done\":true}","after all"]
shell
node - <<'EOF'
async function* g(){ yield Promise.resolve(1); }
g().next().then(console.log)
EOF
output
Chunk ID: 59c70e
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 7
Output:
{ value: 1, done: false }
shell
node - <<'EOF'
let t=[]; async function* g(){t.push('start'); let x=yield 'a'; t.push('after '+x); yield 'b'}; let it=g(); t.push('before'); let p1=it.next(); t.push('after p1'); let p2=it.next('X'); t.push('after p2'); p1.then(x=>t.push('p1 '+JSON.stringify(x))); p2.then(x=>t.push('p2 '+JSON.stringify(x))); Promise.resolve().then(()=>t.push('micro')); setTimeout(()=>console.log(t),0)
EOF
output
Chunk ID: e38944
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 37
Output:
[
  'before',
  'start',
  'after p1',
  'after p2',
  'after X',
  'micro',
  'p1 {"value":"a","done":false}',
  'p2 {"value":"b","done":false}'
]
shell
node - <<'EOF'
let trace=[];let tick;const gate=new Promise(r=>tick=r);async function* g(){try{trace.push('try');let a=yield await gate.then(()=>{trace.push('await');return 'first'});trace.push('after '+a);yield 'second'}finally{trace.push('finally before');let b=yield 'cleanup';trace.push('finally after '+b)}};(async()=>{let it=g();let p1=it.next();let p2=it.next('two');let p3=it.return('done');let p4=it.next('after');for (let [n,p] of [['p1',p1],['p2',p2],['p3',p3],['p4',p4]]) p.then(x=>trace.push(n+' '+JSON.stringify(x)),e=>trace.push(n+'err '+e));tick();await Promise.allSettled([p1,p2,p3,p4]);console.log(JSON.stringify(trace))})()
EOF
output
Chunk ID: 1ef8ed
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 59
Output:
["try","await","after two","p1 {\"value\":\"first\",\"done\":false}","p2 {\"value\":\"second\",\"done\":false}","finally before","finally after after","p3 {\"value\":\"cleanup\",\"done\":false}","p4 {\"value\":\"done\",\"done\":true}"]
shell
node - <<'EOF'
function* g(){try{yield 1}finally{console.log('finally'); let x=yield 'await'; console.log('after await',x); yield 'cleanup'}} let it=g(); console.log(it.next()); console.log(it.return('done')); console.log(it.return('X'));
let it2=g(); it2.next(); console.log('---'); console.log(it2.return('done')); console.log(it2.next('X'));
EOF
output
Chunk ID: 8e3d95
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 47
Output:
{ value: 1, done: false }
finally
{ value: 'await', done: false }
{ value: 'X', done: true }
---
finally
{ value: 'await', done: false }
after await X
{ value: 'cleanup', done: false }
shell
node - <<'EOF'
function wrap(obj){let isAwait=false,it={}; let method=k=>it[k]=v=>{ if(isAwait){isAwait=false; console.log('handoff',k,v); if(k==='throw') throw v; return v } isAwait=true; console.log('call inner',k,v); return {done:false,value:'AWAIT '+k}}; it[Symbol.iterator]=()=>it; method('next'); method('return'); return it;}
function* g(){ try { let r=yield* wrap(); console.log('yieldstar result',r); return 'outerret'} finally {console.log('outer finally')} }
let it=g(); console.log('n1',it.next()); console.log('r',it.return('done')); console.log('after using next',it.next({done:false,value:'cleanup'}));
let it2=g(); console.log('---'); console.log('n1',it2.next()); console.log('r',it2.return('done')); console.log('after using return',it2.return({done:false,value:'cleanup'}));
EOF
output
Chunk ID: 12e8fb
Wall time: 0.0000 seconds
Process exited with code 1
Original token count: 197
Output:
call inner next undefined
n1 { done: false, value: 'AWAIT next' }
handoff return done
outer finally
[stdin]:2
function* g(){ try { let r=yield* wrap(); console.log('yieldstar result',r); return 'outerret'} finally {console.log('outer finally')} }
                                  ^

TypeError: Iterator result done is not an object
    at g ([stdin]:2:35)
    at g.return (<anonymous>)
    at [stdin]:3:67
    at runScriptInThisContext (node:internal/vm:209:10)
    at node:internal/process/execution:446:12
    at [stdin]-wrapper:6:24
    at runScriptInContext (node:internal/process/execution:444:60)
    at evalFunction (node:internal/process/execution:279:30)
    at evalTypeScript (node:internal/process/execution:291:3)
    at node:internal/main/eval_stdin:53:5

Node.js v22.23.0
shell
node - <<'EOF'
function wrap(){let isAwait=false,it={}; let method=k=>it[k]=v=>{ if(isAwait){isAwait=false; console.log('handoff',k,v); if(k==='throw') throw v; return v } isAwait=true; console.log('call inner',k,v); return {done:false,value:'AWAIT '+k}}; it[Symbol.iterator]=()=>it; method('next'); method('return'); return it;}
function* g(){ try { let r=yield* wrap(); console.log('yieldstar result',r); return 'outerret'} finally {console.log('outer finally')} }
let it=g(); console.log('n1',it.next()); console.log('complete handoff',it.next({done:false,value:'first'})); console.log('r',it.return('done')); console.log('after using next',it.next({done:false,value:'cleanup'}));
let it2=g(); console.log('---'); console.log('n1',it2.next()); console.log('complete handoff',it2.next({done:false,value:'first'})); console.log('r',it2.return('done')); console.log('after using return',it2.return({done:false,value:'cleanup'}));
EOF
output
Chunk ID: a6f589
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 163
Output:
call inner next undefined
n1 { done: false, value: 'AWAIT next' }
handoff next { done: false, value: 'first' }
complete handoff { done: false, value: 'first' }
call inner return done
r { done: false, value: 'AWAIT return' }
handoff next { done: false, value: 'cleanup' }
after using next { done: false, value: 'cleanup' }
---
call inner next undefined
n1 { done: false, value: 'AWAIT next' }
handoff next { done: false, value: 'first' }
complete handoff { done: false, value: 'first' }
call inner return done
r { done: false, value: 'AWAIT return' }
handoff return { done: false, value: 'cleanup' }
after using return { done: false, value: 'cleanup' }
shell
node - <<'EOF'
function wrap(){let isAwait=false,it={}; let method=k=>it[k]=v=>{ if(isAwait){isAwait=false; console.log('handoff',k,v); if(k==='throw') throw v; return v } isAwait=true; console.log('call inner',k,v); return {done:false,value:'AWAIT '+k}}; it[Symbol.iterator]=()=>it; method('next'); method('return'); return it;}
function* g(){ try { let r=yield* wrap(); console.log('yieldstar result',r); return 'outerret'} finally {console.log('outer finally')} }
for (let method of ['next','return']) { let it=g(); console.log('---'+method); console.log(it.next()); console.log(it.next({done:false,value:'first'})); console.log(it.return('done')); console.log(it[method]({done:true,value:'innerdone'})); }
EOF
output
Chunk ID: 791017
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 161
Output:
---next
call inner next undefined
{ done: false, value: 'AWAIT next' }
handoff next { done: false, value: 'first' }
{ done: false, value: 'first' }
call inner return done
{ done: false, value: 'AWAIT return' }
handoff next { done: true, value: 'innerdone' }
yieldstar result innerdone
outer finally
{ value: 'outerret', done: true }
---return
call inner next undefined
{ done: false, value: 'AWAIT next' }
handoff next { done: false, value: 'first' }
{ done: false, value: 'first' }
call inner return done
{ done: false, value: 'AWAIT return' }
handoff return { done: true, value: 'innerdone' }
outer finally
{ value: 'innerdone', done: true }
shell
node - <<'EOF'
async function* inner(){ yield 'a'; return 'innerret' } async function* outer(){ let r=yield* inner(); console.log('r',r); return 'outerret' } (async()=>{let it=outer(); console.log(await it.next()); console.log(await it.return('done'));})()
EOF
output
Chunk ID: ff55bb
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 15
Output:
{ value: 'a', done: false }
{ value: 'done', done: true }
shell
node - <<'EOF'
function wrap(){let isAwait=false,it={}; let method=k=>it[k]=v=>{ if(isAwait){isAwait=false; console.log('handoff',k,v); if(k==='throw') throw v; return v } isAwait=true; console.log('call inner',k,v); return {done:false,value:'AWAIT '+k}}; it[Symbol.iterator]=()=>it; method('next'); method('throw'); return it;}
function* g(){ try { let r=yield* wrap(); console.log('yieldstar result',r); return 'outerret'} catch(e){ console.log('outer catch', e); yield 'outer recovery' } }
for (let method of ['next','throw']) { let it=g(); console.log('---'+method); console.log(it.next()); console.log(it.next({done:false,value:'first'})); console.log(it.throw('err')); try{console.log(it[method]({done:false,value:'recovery'}));}catch(e){console.log('caught',e)} }
EOF
output
Chunk ID: feeaa5
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 159
Output:
---next
call inner next undefined
{ done: false, value: 'AWAIT next' }
handoff next { done: false, value: 'first' }
{ done: false, value: 'first' }
call inner throw err
{ done: false, value: 'AWAIT throw' }
handoff next { done: false, value: 'recovery' }
{ done: false, value: 'recovery' }
---throw
call inner next undefined
{ done: false, value: 'AWAIT next' }
handoff next { done: false, value: 'first' }
{ done: false, value: 'first' }
call inner throw err
{ done: false, value: 'AWAIT throw' }
handoff throw { done: false, value: 'recovery' }
outer catch { done: false, value: 'recovery' }
{ value: 'outer recovery', done: false }
shell
node - <<'EOF'
async function* g(){ return Promise.resolve(1) } async function* h(){ yield Promise.resolve(2) } (async()=>{console.log(await g().next()); console.log(await h().next())})()
EOF
output
Chunk ID: 8df6e2
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 13
Output:
{ value: 1, done: true }
{ value: 2, done: false }
shell
node - <<'EOF'
let t=[]; async function* g(){ t.push('start'); yield 'a'; t.push('after'); yield 'b'} (async()=>{let it=g(); await it.next(); t.push('before second'); let p=it.next(); t.push('after second'); await p; console.log(t)})()
EOF
output
Chunk ID: 3b6a60
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 14
Output:
[ 'start', 'before second', 'after', 'after second' ]
shell
rg -n "node|exec.Command|Run\(|NodeJS|js" internal/*_tests internal -g '*_test.go'
output
Chunk ID: ea54ca
Wall time: 0.0003 seconds
Process exited with code 0
Original token count: 262144
Output:
Total output lines: 10824

internal/bundler_tests/bundler_dce_test.go:18:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:22:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:26:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:32:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:35:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:43:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:47:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:51:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:57:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:60:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:68:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:72:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:76:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:82:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:85:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:93:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:97:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:101:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:107:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:110:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:118:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:122:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:126:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:132:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:135:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:143:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:147:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:151:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:157:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:160:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:168:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:173:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:177:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:183:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:186:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:188:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/index.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:189:Users/user/project/node_modules/demo-pkg/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:197:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:202:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:206:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:212:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:215:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:217:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/index.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:218:Users/user/project/node_modules/demo-pkg/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:226:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:230:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:234:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:240:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:243:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:245:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/index.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:246:Users/user/project/node_modules/demo-pkg/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:254:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:258:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:262:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:268:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:271:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:273:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/index.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:274:Users/user/project/node_modules/demo-pkg/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:282:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:286:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:290:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:296:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:299:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:307:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:311:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:315:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:321:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:324:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:332:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:336:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:340:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:346:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:349:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:357:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:361:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:365:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:371:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:374:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:382:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:386:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:390:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:396:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:399:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:407:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:411:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:415:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:417:					"sideEffects": ["./index.js"]
internal/bundler_tests/bundler_dce_test.go:421:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:424:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:432:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:436:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:440:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:444:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:446:					"main": "index-main.js",
internal/bundler_tests/bundler_dce_test.go:447:					"module": "index-module.js",
internal/bundler_tests/bundler_dce_test.go:448:					"sideEffects": ["./index-main.js"]
internal/bundler_tests/bundler_dce_test.go:452:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:455:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:464:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:468:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:472:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:476:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:478:					"main": "index-main.js",
internal/bundler_tests/bundler_dce_test.go:479:					"module": "index-module.js",
internal/bundler_tests/bundler_dce_test.go:480:					"sideEffects": ["./index-main.js"]
internal/bundler_tests/bundler_dce_test.go:484:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:487:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:496:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:500:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:504:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:508:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:510:					"main": "index-main.js",
internal/bundler_tests/bundler_dce_test.go:511:					"module": "index-module.js",
internal/bundler_tests/bundler_dce_test.go:512:					"sideEffects": ["./index-main.js"]
internal/bundler_tests/bundler_dce_test.go:516:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:519:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:527:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:532:			"~/project/src/require-demo-pkg.js": `
internal/bundler_tests/bundler_dce_test.go:533:				// This causes "index-main.js" to be selected
internal/bundler_tests/bundler_dce_test.go:536:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:540:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:544:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:546:					"main": "index-main.js",
internal/bundler_tests/bundler_dce_test.go:547:					"module": "index-module.js",
internal/bundler_tests/bundler_dce_test.go:548:					"sideEffects": ["./index-main.js"]
internal/bundler_tests/bundler_dce_test.go:552:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:555:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:563:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:567:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:571:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:575:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:577:					"main": "index-main.js",
internal/bundler_tests/bundler_dce_test.go:578:					"module": "index-module.js",
internal/bundler_tests/bundler_dce_test.go:579:					"sideEffects": ["./index-module.js"]
internal/bundler_tests/bundler_dce_test.go:583:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:586:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:595:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:599:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:603:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:607:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:609:					"main": "index-main.js",
internal/bundler_tests/bundler_dce_test.go:610:					"module": "index-module.js",
internal/bundler_tests/bundler_dce_test.go:611:					"sideEffects": ["./index-module.js"]
internal/bundler_tests/bundler_dce_test.go:615:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:618:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:627:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:631:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:635:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:639:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:641:					"main": "index-main.js",
internal/bundler_tests/bundler_dce_test.go:642:					"module": "index-module.js",
internal/bundler_tests/bundler_dce_test.go:643:					"sideEffects": ["./index-module.js"]
internal/bundler_tests/bundler_dce_test.go:647:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:650:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:658:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:663:			"~/project/src/require-demo-pkg.js": `
internal/bundler_tests/bundler_dce_test.go:664:				// This causes "index-main.js" to be selected
internal/bundler_tests/bundler_dce_test.go:667:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:671:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:675:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:677:					"main": "index-main.js",
internal/bundler_tests/bundler_dce_test.go:678:					"module": "index-module.js",
internal/bundler_tests/bundler_dce_test.go:679:					"sideEffects": ["./index-module.js"]
internal/bundler_tests/bundler_dce_test.go:683:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:686:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:694:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:698:			"~/project/node_modules/demo-pkg/keep/this/file.js": `
internal/bundler_tests/bundler_dce_test.go:701:			"~/project/node_modules/demo-pkg/remove/this/file.js": `
internal/bundler_tests/bundler_dce_test.go:704:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:707:						"./ke?p/*/file.js",
internal/bundler_tests/bundler_dce_test.go:709:						"./re?ve/this/file.js"
internal/bundler_tests/bundler_dce_test.go:714:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:717:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:719:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/remove/this/file.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:720:Users/user/project/node_modules/demo-pkg/package.json: NOTE: It was excluded from the "sideEffects" array in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:728:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:732:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:737:			"~/project/node_modules/demo-pkg/a/b/c/index.js": `
internal/bundler_tests/bundler_dce_test.go:742:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:745:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:753:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:757:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:760:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:766:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:769:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:777:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:781:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:785:			"~/project/node_modules/demo-pkg2/index.js": `
internal/bundler_tests/bundler_dce_test.go:789:			"~/project/node_modules/demo-pkg2/package.json": `
internal/bundler_tests/bundler_dce_test.go:795:		entryPaths: []string{"~/project/src/entry.js"},
internal/bundler_tests/bundler_dce_test.go:798:			AbsOutputFile: "/out.js",
internal/bundler_tests/bundler_dce_test.go:806:			"~/project/src/entry.js": `
internal/bundler_tests/bundler_dce_test.go:809:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:810:				export {foo} from "./foo.js"
internal/bundler_tests/bundler_dce_test.go:813:			"~/project/node_modules/demo-pkg/foo.js": `
internal/bundler_tests/bundler_dce_test.go:816:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:820:		entryPaths: []string{"~/project/src/entry.js"}…252144 tokens truncated…ser/js_parser_test.go:5705:		"NOTE: The esbuild loader for this file is currently set to \"js\" but it must be set to \"jsx\" to be able to parse JSX syntax. "+
internal/js_parser/js_parser_test.go:5706:		"You can use 'Loader: map[string]api.Loader{\".js\": api.LoaderJSX}' to do that.\n")
internal/js_parser/js_parser_test.go:5927:	expectPrintedJSX(t, "// @jsx h\n<a/>", "<a />;\n", "/* @__PURE__ */ h(\"a\", null);\n")
internal/js_parser/js_parser_test.go:5928:	expectPrintedJSX(t, "/*@jsx h*/\n<a/>", "<a />;\n", "/* @__PURE__ */ h(\"a\", null);\n")
internal/js_parser/js_parser_test.go:5929:	expectPrintedJSX(t, "/* @jsx h */\n<a/>", "<a />;\n", "/* @__PURE__ */ h(\"a\", null);\n")
internal/js_parser/js_parser_test.go:5930:	expectPrintedJSX(t, "<a/>\n// @jsx h", "<a />;\n", "/* @__PURE__ */ h(\"a\", null);\n")
internal/js_parser/js_parser_test.go:5931:	expectPrintedJSX(t, "<a/>\n/*@jsx h*/", "<a />;\n", "/* @__PURE__ */ h(\"a\", null);\n")
internal/js_parser/js_parser_test.go:5932:	expectPrintedJSX(t, "<a/>\n/* @jsx h */", "<a />;\n", "/* @__PURE__ */ h(\"a\", null);\n")
internal/js_parser/js_parser_test.go:5933:	expectPrintedJSX(t, "// @jsx a.b.c\n<a/>", "<a />;\n", "/* @__PURE__ */ a.b.c(\"a\", null);\n")
internal/js_parser/js_parser_test.go:5934:	expectPrintedJSX(t, "/*@jsx a.b.c*/\n<a/>", "<a />;\n", "/* @__PURE__ */ a.b.c(\"a\", null);\n")
internal/js_parser/js_parser_test.go:5935:	expectPrintedJSX(t, "/* @jsx a.b.c */\n<a/>", "<a />;\n", "/* @__PURE__ */ a.b.c(\"a\", null);\n")
internal/js_parser/js_parser_test.go:5937:	expectPrintedJSX(t, "// @jsxFrag f\n<></>", "<></>;\n", "/* @__PURE__ */ React.createElement(f, null);\n")
internal/js_parser/js_parser_test.go:5938:	expectPrintedJSX(t, "/*@jsxFrag f*/\n<></>", "<></>;\n", "/* @__PURE__ */ React.createElement(f, null);\n")
internal/js_parser/js_parser_test.go:5939:	expectPrintedJSX(t, "/* @jsxFrag f */\n<></>", "<></>;\n", "/* @__PURE__ */ React.createElement(f, null);\n")
internal/js_parser/js_parser_test.go:5940:	expectPrintedJSX(t, "<></>\n// @jsxFrag f", "<></>;\n", "/* @__PURE__ */ React.createElement(f, null);\n")
internal/js_parser/js_parser_test.go:5941:	expectPrintedJSX(t, "<></>\n/*@jsxFrag f*/", "<></>;\n", "/* @__PURE__ */ React.createElement(f, null);\n")
internal/js_parser/js_parser_test.go:5942:	expectPrintedJSX(t, "<></>\n/* @jsxFrag f */", "<></>;\n", "/* @__PURE__ */ React.createElement(f, null);\n")
internal/js_parser/js_parser_test.go:5943:	expectPrintedJSX(t, "// @jsxFrag a.b.c\n<></>", "<></>;\n", "/* @__PURE__ */ React.createElement(a.b.c, null);\n")
internal/js_parser/js_parser_test.go:5944:	expectPrintedJSX(t, "/*@jsxFrag a.b.c*/\n<></>", "<></>;\n", "/* @__PURE__ */ React.createElement(a.b.c, null);\n")
internal/js_parser/js_parser_test.go:5945:	expectPrintedJSX(t, "/* @jsxFrag a.b.c */\n<></>", "<></>;\n", "/* @__PURE__ */ React.createElement(a.b.c, null);\n")
internal/js_parser/js_parser_test.go:5951:	expectPrintedJSXAutomatic(t, p, "<div>></div>", "/* @__PURE__ */ jsx(\"div\", { children: \">\" });\n")
internal/js_parser/js_parser_test.go:5952:	expectPrintedJSXAutomatic(t, p, "<div>{1}}</div>", "/* @__PURE__ */ jsxs(\"div\", { children: [\n  1,\n  \"}\"\n] });\n")
internal/js_parser/js_parser_test.go:5953:	expectPrintedJSXAutomatic(t, p, "<div key={true} />", "/* @__PURE__ */ jsx(\"div\", {}, true);\n")
internal/js_parser/js_parser_test.go:5954:	expectPrintedJSXAutomatic(t, p, "<div key=\"key\" />", "/* @__PURE__ */ jsx(\"div\", {}, \"key\");\n")
internal/js_parser/js_parser_test.go:5955:	expectPrintedJSXAutomatic(t, p, "<div key=\"key\" {...props} />", "/* @__PURE__ */ jsx(\"div\", { ...props }, \"key\");\n")
internal/js_parser/js_parser_test.go:5957:	expectPrintedJSXAutomatic(t, p, "<div>{...children}</div>", "/* @__PURE__ */ jsxs(\"div\", { children: [\n  ...children\n] });\n")
internal/js_parser/js_parser_test.go:5958:	expectPrintedJSXAutomatic(t, p, "<div>{...children}<a/></div>", "/* @__PURE__ */ jsxs(\"div\", { children: [\n  ...children,\n  /* @__PURE__ */ jsx(\"a\", {})\n] });\n")
internal/js_parser/js_parser_test.go:5959:	expectPrintedJSXAutomatic(t, p, "<>></>", "/* @__PURE__ */ jsx(Fragment, { children: \">\" });\n")
internal/js_parser/js_parser_test.go:5969:	expectParseErrorJSXAutomatic(t, p, "<div __source=\"/path/to/source.jsx\" />",
internal/js_parser/js_parser_test.go:5976:	expectPrintedJSXAutomatic(t, pr, "<div/>", "import { jsx } from \"react/jsx-runtime\";\n/* @__PURE__ */ jsx(\"div\", {});\n")
internal/js_parser/js_parser_test.go:5977:	expectPrintedJSXAutomatic(t, pr, "<><a/><b/></>", "import { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\n/* @__PURE__ */ jsxs(Fragment, { children: [\n  /* @__PURE__ */ jsx(\"a\", {}),\n  /* @__PURE__ */ jsx(\"b\", {})\n] });\n")
internal/js_parser/js_parser_test.go:5979:	expectPrintedJSXAutomatic(t, pr, "<><div {...props} key=\"key\" /></>", "import { Fragment, jsx } from \"react/jsx-runtime\";\nimport { createElement } from \"react\";\n/* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ createElement(\"div\", { ...props, key: \"key\" }) });\n")
internal/js_parser/js_parser_test.go:5981:	pri := JSXAutomaticTestOptions{Development: false, ImportSource: "my-jsx-lib"}
internal/js_parser/js_parser_test.go:5982:	expectPrintedJSXAutomatic(t, pri, "<div/>", "import { jsx } from \"my-jsx-lib/jsx-runtime\";\n/* @__PURE__ */ jsx(\"div\", {});\n")
internal/js_parser/js_parser_test.go:5983:	expectPrintedJSXAutomatic(t, pri, "<div {...props} key=\"key\" />", "import { createElement } from \"my-jsx-lib\";\n/* @__PURE__ */ createElement(\"div\", { ...props, key: \"key\" });\n")
internal/js_parser/js_parser_test.go:5986:	pi := JSXAutomaticTestOptions{SideEffects: true, ImportSource: "my-jsx-lib"}
internal/js_parser/js_parser_test.go:5987:	expectPrintedJSXAutomatic(t, pi, "<a/>", "import { jsx } from \"my-jsx-lib/jsx-runtime\";\njsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:5988:	expectPrintedJSXAutomatic(t, pi, "<></>", "import { Fragment, jsx } from \"my-jsx-lib/jsx-runtime\";\njsx(Fragment, {});\n")
internal/js_parser/js_parser_test.go:5992:	expectPrintedJSXAutomatic(t, d, "<div>></div>", "/* @__PURE__ */ jsxDEV(\"div\", { children: \">\" }, void 0, false, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:5993:	expectPrintedJSXAutomatic(t, d, "<div>{1}}</div>", "/* @__PURE__ */ jsxDEV(\"div\", { children: [\n  1,\n  \"}\"\n] }, void 0, true, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:5994:	expectPrintedJSXAutomatic(t, d, "<div key={true} />", "/* @__PURE__ */ jsxDEV(\"div\", {}, true, false, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:5995:	expectPrintedJSXAutomatic(t, d, "<div key=\"key\" />", "/* @__PURE__ */ jsxDEV(\"div\", {}, \"key\", false, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:5996:	expectPrintedJSXAutomatic(t, d, "<div key=\"key\" {...props} />", "/* @__PURE__ */ jsxDEV(\"div\", { ...props }, \"key\", false, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:5998:	expectPrintedJSXAutomatic(t, d, "<div>{...children}</div>", "/* @__PURE__ */ jsxDEV(\"div\", { children: [\n  ...children\n] }, void 0, true, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:5999:	expectPrintedJSXAutomatic(t, d, "<div>\n  {...children}\n  <a/></div>", "/* @__PURE__ */ jsxDEV(\"div\", { children: [\n  ...children,\n  /* @__PURE__ */ jsxDEV(\"a\", {}, void 0, false, {\n    fileName: \"<stdin>\",\n    lineNumber: 3,\n    columnNumber: 3\n  }, this)\n] }, void 0, true, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:6000:	expectPrintedJSXAutomatic(t, d, "<>></>", "/* @__PURE__ */ jsxDEV(Fragment, { children: \">\" }, void 0, false, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:6010:	expectParseErrorJSXAutomatic(t, d, "<div __source=\"/path/to/source.jsx\" />",
internal/js_parser/js_parser_test.go:6018:	expectPrintedJSXAutomatic(t, d, "\r\n<x/>", "/* @__PURE__ */ jsxDEV(\"x\", {}, void 0, false, {\n  fileName: \"<stdin>\",\n  lineNumber: 2,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:6019:	expectPrintedJSXAutomatic(t, d, "\n\r<x/>", "/* @__PURE__ */ jsxDEV(\"x\", {}, void 0, false, {\n  fileName: \"<stdin>\",\n  lineNumber: 3,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:6020:	expectPrintedJSXAutomatic(t, d, "let 𐀀 = <x>🍕🍕🍕<y/></x>", "let 𐀀 = /* @__PURE__ */ jsxDEV(\"x\", { children: [\n  \"🍕🍕🍕\",\n  /* @__PURE__ */ jsxDEV(\"y\", {}, void 0, false, {\n    fileName: \"<stdin>\",\n    lineNumber: 1,\n    columnNumber: 19\n  }, this)\n] }, void 0, true, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 10\n}, this);\n")
internal/js_parser/js_parser_test.go:6024:	expectPrintedJSXAutomatic(t, dr, "<div/>", "import { jsxDEV } from \"react/jsx-dev-runtime\";\n/* @__PURE__ */ jsxDEV(\"div\", {}, void 0, false, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:6025:	expectPrintedJSXAutomatic(t, dr, "<>\n  <a/>\n  <b/>\n</>", "import { Fragment, jsxDEV } from \"react/jsx-dev-runtime\";\n/* @__PURE__ */ jsxDEV(Fragment, { children: [\n  /* @__PURE__ */ jsxDEV(\"a\", {}, void 0, false, {\n    fileName: \"<stdin>\",\n    lineNumber: 2,\n    columnNumber: 3\n  }, this),\n  /* @__PURE__ */ jsxDEV(\"b\", {}, void 0, false, {\n    fileName: \"<stdin>\",\n    lineNumber: 3,\n    columnNumber: 3\n  }, this)\n] }, void 0, true, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:6028:	expectPrintedJSXAutomatic(t, dri, "<div/>", "import { jsxDEV } from \"preact/jsx-dev-runtime\";\n/* @__PURE__ */ jsxDEV(\"div\", {}, void 0, false, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:6029:	expectPrintedJSXAutomatic(t, dri, "<>\n  <a/>\n  <b/>\n</>", "import { Fragment, jsxDEV } from \"preact/jsx-dev-runtime\";\n/* @__PURE__ */ jsxDEV(Fragment, { children: [\n  /* @__PURE__ */ jsxDEV(\"a\", {}, void 0, false, {\n    fileName: \"<stdin>\",\n    lineNumber: 2,\n    columnNumber: 3\n  }, this),\n  /* @__PURE__ */ jsxDEV(\"b\", {}, void 0, false, {\n    fileName: \"<stdin>\",\n    lineNumber: 3,\n    columnNumber: 3\n  }, this)\n] }, void 0, true, {\n  fileName: \"<stdin>\",\n  lineNumber: 1,\n  columnNumber: 1\n}, this);\n")
internal/js_parser/js_parser_test.go:6033:		expectPrintedJSXAutomatic(t, p, "<a"+colon+"b/>", "/* @__PURE__ */ jsx(\"a:b\", {});\n")
internal/js_parser/js_parser_test.go:6034:		expectPrintedJSXAutomatic(t, p, "<a-b"+colon+"c-d/>", "/* @__PURE__ */ jsx(\"a-b:c-d\", {});\n")
internal/js_parser/js_parser_test.go:6035:		expectPrintedJSXAutomatic(t, p, "<a-"+colon+"b-/>", "/* @__PURE__ */ jsx(\"a-:b-\", {});\n")
internal/js_parser/js_parser_test.go:6036:		expectPrintedJSXAutomatic(t, p, "<Te"+colon+"st/>", "/* @__PURE__ */ jsx(\"Te:st\", {});\n")
internal/js_parser/js_parser_test.go:6037:		expectPrintedJSXAutomatic(t, p, "<x a"+colon+"b/>", "/* @__PURE__ */ jsx(\"x\", { \"a:b\": true });\n")
internal/js_parser/js_parser_test.go:6038:		expectPrintedJSXAutomatic(t, p, "<x a-b"+colon+"c-d/>", "/* @__PURE__ */ jsx(\"x\", { \"a-b:c-d\": true });\n")
internal/js_parser/js_parser_test.go:6039:		expectPrintedJSXAutomatic(t, p, "<x a-"+colon+"b-/>", "/* @__PURE__ */ jsx(\"x\", { \"a-:b-\": true });\n")
internal/js_parser/js_parser_test.go:6040:		expectPrintedJSXAutomatic(t, p, "<x Te"+colon+"st/>", "/* @__PURE__ */ jsx(\"x\", { \"Te:st\": true });\n")
internal/js_parser/js_parser_test.go:6041:		expectPrintedJSXAutomatic(t, p, "<x a"+colon+"b={0}/>", "/* @__PURE__ */ jsx(\"x\", { \"a:b\": 0 });\n")
internal/js_parser/js_parser_test.go:6042:		expectPrintedJSXAutomatic(t, p, "<x a-b"+colon+"c-d={0}/>", "/* @__PURE__ */ jsx(\"x\", { \"a-b:c-d\": 0 });\n")
internal/js_parser/js_parser_test.go:6043:		expectPrintedJSXAutomatic(t, p, "<x a-"+colon+"b-={0}/>", "/* @__PURE__ */ jsx(\"x\", { \"a-:b-\": 0 });\n")
internal/js_parser/js_parser_test.go:6044:		expectPrintedJSXAutomatic(t, p, "<x Te"+colon+"st={0}/>", "/* @__PURE__ */ jsx(\"x\", { \"Te:st\": 0 });\n")
internal/js_parser/js_parser_test.go:6045:		expectPrintedJSXAutomatic(t, p, "<a-b a-b={a-b}/>", "/* @__PURE__ */ jsx(\"a-b\", { \"a-b\": a - b });\n")
internal/js_parser/js_parser_test.go:6060:	expectParseErrorJSX(t, "with (x) y(<z/>) // @jsxRuntime automatic", strictModeError)
internal/js_parser/js_parser_test.go:6065:	expectPrintedJSX(t, "// @jsxRuntime automatic\n<a/>", "<a />;\n", "import { jsx } from \"react/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6066:	expectPrintedJSX(t, "/*@jsxRuntime automatic*/\n<a/>", "<a />;\n", "import { jsx } from \"react/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6067:	expectPrintedJSX(t, "/* @jsxRuntime automatic */\n<a/>", "<a />;\n", "import { jsx } from \"react/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6068:	expectPrintedJSX(t, "<a/>\n/*@jsxRuntime automatic*/", "<a />;\n", "import { jsx } from \"react/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6069:	expectPrintedJSX(t, "<a/>\n/* @jsxRuntime automatic */", "<a />;\n", "import { jsx } from \"react/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6071:	expectPrintedJSX(t, "// @jsxRuntime classic\n<a/>", "<a />;\n", "/* @__PURE__ */ React.createElement(\"a\", null);\n")
internal/js_parser/js_parser_test.go:6072:	expectPrintedJSX(t, "/*@jsxRuntime classic*/\n<a/>", "<a />;\n", "/* @__PURE__ */ React.createElement(\"a\", null);\n")
internal/js_parser/js_parser_test.go:6073:	expectPrintedJSX(t, "/* @jsxRuntime classic */\n<a/>", "<a />;\n", "/* @__PURE__ */ React.createElement(\"a\", null);\n")
internal/js_parser/js_parser_test.go:6074:	expectPrintedJSX(t, "<a/>\n/*@jsxRuntime classic*/\n", "<a />;\n", "/* @__PURE__ */ React.createElement(\"a\", null);\n")
internal/js_parser/js_parser_test.go:6075:	expectPrintedJSX(t, "<a/>\n/* @jsxRuntime classic */\n", "<a />;\n", "/* @__PURE__ */ React.createElement(\"a\", null);\n")
internal/js_parser/js_parser_test.go:6077:	expectParseErrorJSX(t, "// @jsxRuntime foo\n<a/>",
internal/js_parser/js_parser_test.go:6082:	expectPrintedJSX(t, "// @jsxRuntime automatic @jsxImportSource src\n<a/>", "<a />;\n", "import { jsx } from \"src/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6083:	expectPrintedJSX(t, "/*@jsxRuntime automatic @jsxImportSource src*/\n<a/>", "<a />;\n", "import { jsx } from \"src/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6084:	expectPrintedJSX(t, "/*@jsxRuntime automatic*//*@jsxImportSource src*/\n<a/>", "<a />;\n", "import { jsx } from \"src/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6085:	expectPrintedJSX(t, "/* @jsxRuntime automatic */\n/* @jsxImportSource src */\n<a/>", "<a />;\n", "import { jsx } from \"src/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6086:	expectPrintedJSX(t, "<a/>\n/*@jsxRuntime automatic @jsxImportSource src*/", "<a />;\n", "import { jsx } from \"src/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6087:	expectPrintedJSX(t, "<a/>\n/*@jsxRuntime automatic*/\n/*@jsxImportSource src*/", "<a />;\n", "import { jsx } from \"src/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6088:	expectPrintedJSX(t, "<a/>\n/* @jsxRuntime automatic */\n/* @jsxImportSource src */", "<a />;\n", "import { jsx } from \"src/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6090:	expectPrintedJSX(t, "// @jsxRuntime classic @jsxImportSource src\n<a/>", "<a />;\n", "/* @__PURE__ */ React.createElement(\"a\", null);\n")
internal/js_parser/js_parser_test.go:6091:	expectParseErrorJSX(t, "// @jsxRuntime classic @jsxImportSource src\n<a/>",
internal/js_parser/js_parser_test.go:6093:NOTE: You can enable React's "automatic" JSX transform for this file by using a "@jsxRuntime automatic" comment.
internal/js_parser/js_parser_test.go:6095:	expectParseErrorJSX(t, "// @jsxImportSource src\n<a/>",
internal/js_parser/js_parser_test.go:6097:NOTE: You can enable React's "automatic" JSX transform for this file by using a "@jsxRuntime automatic" comment.
internal/js_parser/js_parser_test.go:6100:	expectPrintedJSX(t, "// @jsxRuntime automatic @jsx h\n<a/>", "<a />;\n", "import { jsx } from \"react/jsx-runtime\";\n/* @__PURE__ */ jsx(\"a\", {});\n")
internal/js_parser/js_parser_test.go:6101:	expectParseErrorJSX(t, "// @jsxRuntime automatic @jsx h\n<a/>", "<stdin>: WARNING: The JSX factory cannot be set when using React's \"automatic\" JSX transform\n")
internal/js_parser/js_parser_test.go:6103:	expectPrintedJSX(t, "// @jsxRuntime automatic @jsxFrag f\n<></>", "<></>;\n", "import { Fragment, jsx } from \"react/jsx-runtime\";\n/* @__PURE__ */ jsx(Fragment, {});\n")
internal/js_parser/js_parser_test.go:6104:	expectParseErrorJSX(t, "// @jsxRuntime automatic @jsxFrag f\n<></>", "<stdin>: WARNING: The JSX fragment cannot be set when using React's \"automatic\" JSX transform\n")
internal/js_parser/js_parser_test.go:6279:	expectPrinted(t, "import 'x' assert {type: 'json'}", "import \"x\" assert { type: \"json\" };\n")
internal/js_parser/js_parser_test.go:6280:	expectPrinted(t, "import 'x' assert {type: 'json',}", "import \"x\" assert { type: \"json\" };\n")
internal/js_parser/js_parser_test.go:6281:	expectPrinted(t, "import 'x' assert {'type': 'json'}", "import \"x\" assert { \"type\": \"json\" };\n")
internal/js_parser/js_parser_test.go:6285:	expectPrintedMangle(t, "import 'x' assert {'type': 'json'}", "import \"x\" assert { type: \"json\" };\n")
internal/js_parser/js_parser_test.go:6286:	expectPrintedMangle(t, "import 'x' assert {'ty pe': 'json'}", "import \"x\" assert { \"ty pe\": \"json\" };\n")
internal/js_parser/js_parser_test.go:6334:	expectParseError(t, "import { foo } from 'x' assert {type: 'json'}", "")
internal/js_parser/js_parser_test.go:6335:	expectParseError(t, "export { foo } from 'x' assert {type: 'json'}", "")
internal/js_parser/js_parser_test.go:6354:	expectPrinted(t, "import 'x' with {type: 'json'}", "import \"x\" with { type: \"json\" };\n")
internal/js_parser/js_parser_test.go:6355:	expectPrinted(t, "import 'x' with {type: 'json',}", "import \"x\" with { type: \"json\" };\n")
internal/js_parser/js_parser_test.go:6356:	expectPrinted(t, "import 'x' with {'type': 'json'}", "import \"x\" with { \"type\": \"json\" };\n")
internal/js_parser/js_parser_test.go:6360:	expectPrintedMangle(t, "import 'x' with {'type': 'json'}", "import \"x\" with { type: \"json\" };\n")
internal/js_parser/js_parser_test.go:6361:	expectPrintedMangle(t, "import 'x' with {'ty pe': 'json'}", "import \"x\" with { \"ty pe\": \"json\" };\n")
internal/js_parser/js_parser_test.go:6409:	expectParseError(t, "import { foo } from 'x' with {type: 'json'}", "")
internal/js_parser/js_parser_test.go:6410:	expectParseError(t, "export { foo } from 'x' with {type: 'json'}", "")
internal/js_parser/js_parser_test.go:6425:		"import x from 'y' assert {type: 'json'}",
internal/js_parser/js_parser_test.go:6428:		"export {default} from 'y' assert {type: 'json'}",
internal/js_parser/js_parser_test.go:6431:		"import('y', {assert: {type: 'json'}})",
I’ve got the core fix shape: the queue should chain directly off each returned promise, with only `return()` inserting the extra microtask needed to let the previous yield be observed. I also found a related helper bug: resuming an internal lowered `await` from a queued `return()` must continue with `next`, while `yield*` return handoffs still need the `return` path.
shell
rg -n "exec\.Command|LookPath\(|node" --glob '*_test.go'
output
Chunk ID: b4d4c7
Wall time: 0.0001 seconds
Process exited with code 0
Original token count: 21837
Output:
Total output lines: 728

pkg/api/api_test.go:230:    at ModuleJob.run (node:internal/modules/esm/module_job:185:25)
pkg/api/api_test.go:232:    at async ESMLoader.import (node:internal/modules/esm/loader:281:24)
pkg/api/api_test.go:233:    at async loadESM (node:internal/process/esm_loader:88:5)
pkg/api/api_test.go:234:    at async handleMainPromise (node:internal/modules/run_main:65:12)`,
pkg/api/api_test.go:242:    at ModuleJob.run (node:internal/modules/esm/module_job:185:25)
pkg/api/api_test.go:244:    at async ESMLoader.import (node:internal/modules/esm/loader:281:24)
pkg/api/api_test.go:245:    at async loadESM (node:internal/process/esm_loader:88:5)
pkg/api/api_test.go:246:    at async handleMainPromise (node:internal/modules/run_main:65:12)
internal/bundler_tests/bundler_dce_test.go:22:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:26:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:47:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:51:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:72:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:76:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:97:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:101:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:122:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:126:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:147:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:151:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:173:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:177:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:188:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/index.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:189:Users/user/project/node_modules/demo-pkg/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:202:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:206:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:217:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/index.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:218:Users/user/project/node_modules/demo-pkg/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:230:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:234:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:245:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/index.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:246:Users/user/project/node_modules/demo-pkg/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:258:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:262:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:273:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/index.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:274:Users/user/project/node_modules/demo-pkg/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:286:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:290:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:311:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:315:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:336:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:340:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:361:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:365:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:386:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:390:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:411:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:415:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:436:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:440:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:444:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:468:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:472:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:476:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:500:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:504:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:508:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:536:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:540:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:544:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:567:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:571:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:575:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:599:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:603:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:607:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:631:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:635:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:639:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:667:			"~/project/node_modules/demo-pkg/index-main.js": `
internal/bundler_tests/bundler_dce_test.go:671:			"~/project/node_modules/demo-pkg/index-module.js": `
internal/bundler_tests/bundler_dce_test.go:675:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:698:			"~/project/node_modules/demo-pkg/keep/this/file.js": `
internal/bundler_tests/bundler_dce_test.go:701:			"~/project/node_modules/demo-pkg/remove/this/file.js": `
internal/bundler_tests/bundler_dce_test.go:704:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:719:		expectedScanLog: `Users/user/project/src/entry.js: WARNING: Ignoring this import because "Users/user/project/node_modules/demo-pkg/remove/this/file.js" was marked as having no side effects
internal/bundler_tests/bundler_dce_test.go:720:Users/user/project/node_modules/demo-pkg/package.json: NOTE: It was excluded from the "sideEffects" array in the enclosing "package.json" file:
internal/bundler_tests/bundler_dce_test.go:732:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:737:			"~/project/node_modules/demo-pkg/a/b/c/index.js": `
internal/bundler_tests/bundler_dce_test.go:757:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:760:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:781:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:785:			"~/project/node_modules/demo-pkg2/index.js": `
internal/bundler_tests/bundler_dce_test.go:789:			"~/project/node_modules/demo-pkg2/package.json": `
internal/bundler_tests/bundler_dce_test.go:809:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:813:			"~/project/node_modules/demo-pkg/foo.js": `
internal/bundler_tests/bundler_dce_test.go:816:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:835:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:839:			"~/project/node_modules/demo-pkg/foo.js": `
internal/bundler_tests/bundler_dce_test.go:842:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:861:			"~/project/node_modules/a/index.js": `
internal/bundler_tests/bundler_dce_test.go:864:			"~/project/node_modules/a/package.json": `
internal/bundler_tests/bundler_dce_test.go:867:			"~/project/node_modules/b/index.js": `
internal/bundler_tests/bundler_dce_test.go:871:			"~/project/node_modules/b/package.json": `
internal/bundler_tests/bundler_dce_test.go:874:			"~/project/node_modules/c/index.js": `
internal/bundler_tests/bundler_dce_test.go:877:			"~/project/node_modules/c/package.json": `
internal/bundler_tests/bundler_dce_test.go:880:			"~/project/node_modules/d/index.js": `
internal/bundler_tests/bundler_dce_test.go:883:			"~/project/node_modules/d/package.json": `
internal/bundler_tests/bundler_dce_test.go:902:			"~/project/node_modules/a/index.js": `
internal/bundler_tests/bundler_dce_test.go:905:			"~/project/node_modules/b/index.js": `
internal/bundler_tests/bundler_dce_test.go:909:			"~/project/node_modules/b/package.json": `
internal/bundler_tests/bundler_dce_test.go:912:			"~/project/node_modules/c/index.js": `
internal/bundler_tests/bundler_dce_test.go:915:			"~/project/node_modules/d/index.js": `
internal/bundler_tests/bundler_dce_test.go:934:			"~/project/node_modules/a/index.js": `
internal/bundler_tests/bundler_dce_test.go:938:			"~/project/node_modules/b1/index.js": `
internal/bundler_tests/bundler_dce_test.go:942:			"~/project/node_modules/b1/package.json": `
internal/bundler_tests/bundler_dce_test.go:945:			"~/project/node_modules/b2/index.js": `
internal/bundler_tests/bundler_dce_test.go:949:			"~/project/node_modules/b2/package.json": `
internal/bundler_tests/bundler_dce_test.go:952:			"~/project/node_modules/c/index.js": `
internal/bundler_tests/bundler_dce_test.go:955:			"~/project/node_modules/d/index.js": `
internal/bundler_tests/bundler_dce_test.go:973:			"~/project/node_modules/a/index.js": `
internal/bundler_tests/bundler_dce_test.go:976:			"~/project/node_modules/b/index.js": `
internal/bundler_tests/bundler_dce_test.go:980:			"~/project/node_modules/b/package.json": `
internal/bundler_tests/bundler_dce_test.go:983:			"~/project/node_modules/c/index.js": `
internal/bundler_tests/bundler_dce_test.go:987:			"~/project/node_modules/d/index.js": `
internal/bundler_tests/bundler_dce_test.go:1005:			"~/project/node_modules/a/index.js": `
internal/bundler_tests/bundler_dce_test.go:1008:			"~/project/node_modules/b/index.js": `
internal/bundler_tests/bundler_dce_test.go:1012:			"~/project/node_modules/b/package.json": `
internal/bundler_tests/bundler_dce_test.go:1015:			"~/project/node_modules/c/index.js": `
internal/bundler_tests/bundler_dce_test.go:1019:			"~/project/node_modules/c/package.json": `
internal/bundler_tests/bundler_dce_test.go:1022:			"~/project/node_modules/d/index.js": `
internal/bundler_tests/bundler_dce_test.go:1025:			"~/project/node_modules/d/package.json": `
internal/bundler_tests/bundler_dce_test.go:1571:			"~/project/node_modules/pkg/index.js": `
internal/bundler_tests/bundler_dce_test.go:1575:			"~/project/node_modules/pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:1578:			"~/project/node_modules/pkg/foo.js": `
internal/bundler_tests/bundler_dce_test.go:1581:			"~/project/node_modules/pkg/bar.js": `
internal/bundler_tests/bundler_dce_test.go:3780:			"~/project/node_modules/demo-pkg/foo.js": `
internal/bundler_tests/bundler_dce_test.go:3783:			"~/project/node_modules/demo-pkg/bar/index.js": `
internal/bundler_tests/bundler_dce_test.go:3786:			"~/project/node_modules/demo-pkg/package.json": `
internal/bundler_tests/bundler_dce_test.go:3811:			"/project/node_modules/pkg/button.js": `
internal/bundler_tests/bundler_dce_test.go:3815:			"/project/node_modules/pkg/button.css": `
internal/bundler_tests/bundler_dce_test.go:3818:			"/project/node_modules/pkg/menu.js": `
internal/bundler_tests/bundler_dce_test.go:3822:			"/project/node_modules/pkg/menu.css": `
internal/bundler_tests/bundler_dce_test.go:3841:			"/project/node_modules/pkg/entry.js": `
internal/bundler_tests/bundler_dce_test.go:3844:			"/project/node_modules/pkg/package.json": `{
internal/bundler_tests/bundler_dce_test.go:3848:			"/project/node_modules/pkg/components.jsx": `
internal/bundler_tests/bundler_dce_test.go:3852:			"/project/node_modules/pkg/button.css": `
internal/bundler_tests/bundler_dce_test.go:3871:			"/project/node_modules/pkg/entry.js": `
internal/bundler_tests/bundler_dce_test.go:3874:			"/project/node_modules/pkg/package.json": `{
internal/bundler_tests/bundler_dce_test.go:3878:			"/project/node_modules/pkg/components.jsx": `
internal/bundler_tests/bundler_dce_test.go:3882:			"/project/node_modules/pkg/button.css": `
internal/bundler_tests/bundler_dce_test.go:3901:			"/project/node_modules/pkg/entry.js": `
internal/bundler_tests/bundler_dce_test.go:3904:			"/project/node_modules/pkg/package.json": `{
internal/bundler_tests/bundler_dce_test.go:3908:			"/project/node_modules/pkg/components.jsx": `
internal/bundler_tests/bundler_dce_test.go:3912:			"/project/node_modules/pkg/button.css": `
internal/bundler_tests/bundler_dce_test.go:3931:			"/project/node_modules/pkg/entry.js": `
internal/bundler_tests/bundler_dce_test.go:3934:			"/project/node_modules/pkg/package.json": `{
internal/bundler_tests/bundler_dce_test.go:3938:			"/project/node_modules/pkg/components.jsx": `
internal/bundler_tests/bundler_dce_test.go:3942:			"/project/node_modules/pkg/button.css": `
internal/bundler_tests/bundler_dce_test.go:3961:			"/project/node_modules/pkg/package.json": `{
internal/bundler_tests/bundler_dce_test.go:3964:			"/project/node_modules/pkg/button.jsx": `
internal/bundler_tests/bundler_dce_test.go:3968:			"/project/node_modules/pkg/styles.js": `
internal/bundler_tests/bundler_dce_test.go:3972:			"/project/node_modules/pkg/styles.css": `
internal/bundler_tests/bundler_dce_test.go:3991:			"/project/node_modules/pkg/package.json": `{
internal/bundler_tests/bundler_dce_test.go:3994:			"/project/node_modules/pkg/button.jsx": `
internal/bundler_tests/bundler_dce_test.go:3998:			"/project/node_modules/pkg/styles.js": `
internal/bundler_tests/bundler_dce_test.go:4002:			"/project/node_modules/pkg/styles.css": `
internal/bundler_tests/bundler_splitting_test.go:329:			"~/project/node_modules/package/index.js": `
internal/bundler_tests/bundler_ts_test.go:1419:			"/node_modules/pkg/foo-js.ts":   `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1420:			"/node_modules/pkg/foo-jsx.tsx": `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1422:			"/node_modules/pkg-exports/package.json": `{
internal/bundler_tests/bundler_ts_test.go:1429:			"/node_modules/pkg-exports/abc-js.ts":       `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1430:			"/node_modules/pkg-exports/abc-jsx.tsx":     `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1431:			"/node_modules/pkg-exports/lib/foo-js.ts":   `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1432:			"/node_modules/pkg-exports/lib/foo-jsx.tsx": `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1434:			"/node_modules/pkg-imports/package.json": `{
internal/bundler_tests/bundler_ts_test.go:1441:			"/node_modules/pkg-imports/index.js": `
internal/bundler_tests/bundler_ts_test.go:1447:			"/node_modules/pkg-imports/abc-js.ts":       `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1448:			"/node_modules/pkg-imports/abc-jsx.tsx":     `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1449:			"/node_modules/pkg-imports/lib/foo-js.ts":   `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1450:			"/node_modules/pkg-imports/lib/foo-jsx.tsx": `console.log("correct")`,
internal/bundler_tests/bundler_ts_test.go:1892:			"/node_modules/some-js/package.json": `{ "main": "./foo.js", "sideEffects": false }`,
internal/bundler_tests/bundler_ts_test.go:1893:			"/node_modules/some-js/foo.js":       `console.log('foo')`,
internal/bundler_tests/bundler_ts_test.go:1895:			"/node_modules/some-ts/package.json": `{ "main": "./foo.ts", "sideEffects": false }`,
internal/bundler_tests/bundler_ts_test.go:1896:			"/node_modules/some-ts/foo.ts":       `console.log('foo' as string)`,
internal/bundler_tests/bundler_ts_test.go:1898:			"/node_modules/empty-js/package.json": `{ "main": "./foo.js", "sideEffects": false }`,
internal/bundler_tests/bundler_ts_test.go:1899:			"/node_modules/empty-js/foo.js":       ``,
internal/bundler_tests/bundler_ts_test.go:1901:			"/node_modules/empty-ts/package.json": `{ "main": "./foo.ts", "sideEffects": false }`,
internal/bundler_tests/bundler_ts_test.go:1902:			"/node_modules/empty-ts/foo.ts":       `export type Foo = number`,
internal/bundler_tests/bundler_ts_test.go:1904:			"/node_modules/empty-dts/package.json": `{ "main": "./foo.d.ts", "sideEffects": false }`,
internal/bundler_tests/bundler_ts_test.go:1905:			"/node_modules/empty-dts/foo.d.ts":     `export type Fo…11837 tokens truncated…son": `
internal/bundler_tests/bundler_tsconfig_test.go:1342:			"~/project/src/node_modules/foo/index.tsx": `
internal/bundler_tests/bundler_tsconfig_test.go:1345:			"~/project/src/node_modules/foo/tsconfig.json": `
internal/bundler_tests/bundler_tsconfig_test.go:1372:			"~/project/src/node_modules/bar/tsconfig.json": `{ "extends": "extends for bar" }`,
internal/bundler_tests/bundler_tsconfig_test.go:1373:			"~/project/src/node_modules/bar/index.js":      ``,
internal/bundler_tests/bundler_tsconfig_test.go:1591:			"~/project/src/node_modules/b/index.ts": ``,
internal/bundler_tests/bundler_tsconfig_test.go:1592:			"~/project/src/node_modules/b/tsconfig.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:1621:			"~/project/src/node_modules/b/index.ts": ``,
internal/bundler_tests/bundler_tsconfig_test.go:1622:			"~/project/src/node_modules/b/tsconfig.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:1743:			"~/project/node_modules/wow/package.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:1758:			"~/project/node_modules/wow/tsconfig.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:1763:			"~/project/node_modules/wow/dist/first.js": `
internal/bundler_tests/bundler_tsconfig_test.go:1766:			"~/project/node_modules/wow/dist/next.js": `
internal/bundler_tests/bundler_tsconfig_test.go:1770:			"~/project/node_modules/wow/first.ts": `
internal/bundler_tests/bundler_tsconfig_test.go:2165:			"~/project/node_modules/@whatever/tsconfig/package.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:2170:			"~/project/node_modules/@whatever/tsconfig/foo.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:2194:			"~/project/node_modules/@whatever/tsconfig/package.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:2199:			"~/project/node_modules/@whatever/tsconfig/tsconfig.a/b/c.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:2223:			"~/project/node_modules/@whatever/tsconfig/package.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:2228:			"~/project/node_modules/@whatever/tsconfig/tsconfig.a/b/c.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:2252:			"~/project/node_modules/@whatever/tsconfig/package.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:2261:			"~/project/node_modules/@whatever/tsconfig/import.json":  `FAILURE`,
internal/bundler_tests/bundler_tsconfig_test.go:2262:			"~/project/node_modules/@whatever/tsconfig/default.json": `FAILURE`,
internal/bundler_tests/bundler_tsconfig_test.go:2263:			"~/project/node_modules/@whatever/tsconfig/require.json": `{
internal/bundler_tests/bundler_tsconfig_test.go:2440:			"~/project/node_modules/js-pkg/index.js": `
internal/bundler_tests/bundler_tsconfig_test.go:2444:			"~/project/node_modules/ts-pkg/index.ts": `
internal/bundler_tests/bundler_tsconfig_test.go:2448:			"~/project/node_modules/pkg/index.js": `
internal/bundler_tests/bundler_tsconfig_test.go:2599:			"~/project/node_modules/@scope/configs/tsconfig.json": `
internal/bundler_tests/bundler_tsconfig_test.go:2629:			"~/project/node_modules/@scope/configs/tsconfig.json": `
internal/bundler_tests/bundler_tsconfig_test.go:2661:			"~/project/node_modules/@scope/configs/tsconfig.json": `
internal/bundler_tests/bundler_importstar_test.go:1730:			// This is for compatibility with node. So this test intentionally behaves
internal/bundler_tests/bundler_importstar_test.go:1779:			// This is for compatibility with node. So this test intentionally behaves
internal/bundler_tests/bundler_default_test.go:632:			"~/project/node_modules/demo-pkg/index.js": `
internal/bundler_tests/bundler_default_test.go:1392:			"/entry.js": `#!/usr/bin/env node
internal/bundler_tests/bundler_default_test.go:1435:NOTE: The package "fs" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "Platform: api.PlatformNode" to do that, which will remove this error.
internal/bundler_tests/bundler_default_test.go:1493:NOTE: The package "fs" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "Platform: api.PlatformNode" to do that, which will remove this error.
internal/bundler_tests/bundler_default_test.go:1555:NOTE: The package "fs" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "Platform: api.PlatformNode" to do that, which will remove this error.
internal/bundler_tests/bundler_default_test.go:1720:					// If this local is called "exports", node incorrectly
internal/bundler_tests/bundler_default_test.go:2536:				import pkg from '~/project/node_modules/pkg/index'
internal/bundler_tests/bundler_default_test.go:2539:			"~/project/node_modules/pkg/index.js": `
internal/bundler_tests/bundler_default_test.go:2555:				import pkg from '~/project/node_modules/pkg'
internal/bundler_tests/bundler_default_test.go:2558:			"~/project/node_modules/pkg/index.js": `
internal/bundler_tests/bundler_default_test.go:2572:				import pkg from 'C:\\Users\\user\\project\\node_modules\\pkg'
internal/bundler_tests/bundler_default_test.go:2575:			"C:\\Users\\user\\project\\node_modules\\pkg\\index.js": `
internal/bundler_tests/bundler_default_test.go:2611:				import fs from "node:fs/promises";
internal/bundler_tests/bundler_default_test.go:2615:				import "node:path";
internal/bundler_tests/bundler_default_test.go:2618:				import "node:what-is-this";
internal/bundler_tests/bundler_default_test.go:3654:			"/project/node_modules/some-pkg/js/index.js": `
internal/bundler_tests/bundler_default_test.go:3659:			"/project/node_modules/some-other-pkg/js/index.js": `
internal/bundler_tests/bundler_default_test.go:3698:			"/project/node_modules/some-pkg/css/index.css": `
internal/bundler_tests/bundler_default_test.go:3703:			"/project/node_modules/some-other-pkg/css/index.css": `
internal/bundler_tests/bundler_default_test.go:3728:			"/project/node_modules/js-pkg/index.js": `x /*! </script> */`,
internal/bundler_tests/bundler_default_test.go:3731:			"/project/node_modules/css-pkg/index.css": `x { y: z } /*! </style> */`,
internal/bundler_tests/bundler_default_test.go:3747:			"/project/node_modules/js-pkg/index.js": `x /*! </script> */`,
internal/bundler_tests/bundler_default_test.go:3750:			"/project/node_modules/css-pkg/index.css": `x { y: z } /*! </style> */`,
internal/bundler_tests/bundler_default_test.go:3766:			"/project/node_modules/js-pkg/index.js": `x /*! </script> */`,
internal/bundler_tests/bundler_default_test.go:3769:			"/project/node_modules/css-pkg/index.css": `x { y: z } /*! </style> */`,
internal/bundler_tests/bundler_default_test.go:3786:			"/project/node_modules/js-pkg/index.js": `x /*! </script> */`,
internal/bundler_tests/bundler_default_test.go:3789:			"/project/node_modules/css-pkg/index.css": `x { y: z } /*! </style> */`,
internal/bundler_tests/bundler_default_test.go:3824:			"/project/node_modules/some-pkg/js/index.js": `import "some-other-pkg/js" //! (c) Good Software Corp`,
internal/bundler_tests/bundler_default_test.go:3825:			"/project/node_modules/some-other-pkg/js/index.js": `
internal/bundler_tests/bundler_default_test.go:3854:			"/project/node_modules/some-pkg/css/index.css": `@import "some-other-pkg/css"; /*! (c) Good Software Corp */`,
internal/bundler_tests/bundler_default_test.go:3855:			"/project/node_modules/some-other-pkg/css/index.css": `
internal/bundler_tests/bundler_default_test.go:3884:			"/project/node_modules/pkg/a.js": `
internal/bundler_tests/bundler_default_test.go:3892:			"/project/node_modules/pkg/b.js": `
internal/bundler_tests/bundler_default_test.go:3900:			"/project/node_modules/pkg/c.js": `
internal/bundler_tests/bundler_default_test.go:3909:			"/project/node_modules/pkg/d.js": `
internal/bundler_tests/bundler_default_test.go:4381:			"/node_modules/foo/index.js": ``,
internal/bundler_tests/bundler_default_test.go:4563:				import "./dup-case.js";        import "./node_modules/dup-case.js";        import "@plugin/dup-case.js"
internal/bundler_tests/bundler_default_test.go:4564:				import "./not-in.js";          import "./node_modules/not-in.js";          import "@plugin/not-in.js"
internal/bundler_tests/bundler_default_test.go:4565:				import "./not-instanceof.js";  import "./node_modules/not-instanceof.js";  import "@plugin/not-instanceof.js"
internal/bundler_tests/bundler_default_test.go:4566:				import "./return-asi.js";      import "./node_modules/return-asi.js";      import "@plugin/return-asi.js"
internal/bundler_tests/bundler_default_test.go:4567:				import "./bad-typeof.js";      import "./node_modules/bad-typeof.js";      import "@plugin/bad-typeof.js"
internal/bundler_tests/bundler_default_test.go:4568:				import "./equals-neg-zero.js"; import "./node_modules/equals-neg-zero.js"; import "@plugin/equals-neg-zero.js"
internal/bundler_tests/bundler_default_test.go:4569:				import "./equals-nan.js";      import "./node_modules/equals-nan.js";      import "@plugin/equals-nan.js"
internal/bundler_tests/bundler_default_test.go:4570:				import "./equals-object.js";   import "./node_modules/equals-object.js";   import "@plugin/equals-object.js"
internal/bundler_tests/bundler_default_test.go:4571:				import "./write-getter.js";    import "./node_modules/write-getter.js";    import "@plugin/write-getter.js"
internal/bundler_tests/bundler_default_test.go:4572:				import "./read-setter.js";     import "./node_modules/read-setter.js";     import "@plugin/read-setter.js"
internal/bundler_tests/bundler_default_test.go:4573:				import "./delete-super.js";    import "./node_modules/delete-super.js";    import "@plugin/delete-super.js"
internal/bundler_tests/bundler_default_test.go:4577:			"/node_modules/dup-case.js":            "switch (x) { case 0: case 0: }",
internal/bundler_tests/bundler_default_test.go:4578:			"/plugin-dir/node_modules/dup-case.js": "switch (x) { case 0: case 0: }",
internal/bundler_tests/bundler_default_test.go:4581:			"/node_modules/not-in.js":            "!a in b",
internal/bundler_tests/bundler_default_test.go:4582:			"/plugin-dir/node_modules/not-in.js": "!a in b",
internal/bundler_tests/bundler_default_test.go:4585:			"/node_modules/not-instanceof.js":            "!a instanceof b",
internal/bundler_tests/bundler_default_test.go:4586:			"/plugin-dir/node_modules/not-instanceof.js": "!a instanceof b",
internal/bundler_tests/bundler_default_test.go:4589:			"/node_modules/return-asi.js":            "return\n123",
internal/bundler_tests/bundler_default_test.go:4590:			"/plugin-dir/node_modules/return-asi.js": "return\n123",
internal/bundler_tests/bundler_default_test.go:4593:			"/node_modules/bad-typeof.js":            "typeof x == 'null'",
internal/bundler_tests/bundler_default_test.go:4594:			"/plugin-dir/node_modules/bad-typeof.js": "typeof x == 'null'",
internal/bundler_tests/bundler_default_test.go:4597:			"/node_modules/equals-neg-zero.js":            "x === -0",
internal/bundler_tests/bundler_default_test.go:4598:			"/plugin-dir/node_modules/equals-neg-zero.js": "x === -0",
internal/bundler_tests/bundler_default_test.go:4601:			"/node_modules/equals-nan.js":            "x === NaN",
internal/bundler_tests/bundler_default_test.go:4602:			"/plugin-dir/node_modules/equals-nan.js": "x === NaN",
internal/bundler_tests/bundler_default_test.go:4605:			"/node_modules/equals-object.js":            "x === []",
internal/bundler_tests/bundler_default_test.go:4606:			"/plugin-dir/node_modules/equals-object.js": "x === []",
internal/bundler_tests/bundler_default_test.go:4609:			"/node_modules/write-getter.js":            "class Foo { get #foo() {} foo() { this.#foo = 123 } }",
internal/bundler_tests/bundler_default_test.go:4610:			"/plugin-dir/node_modules/write-getter.js": "class Foo { get #foo() {} foo() { this.#foo = 123 } }",
internal/bundler_tests/bundler_default_test.go:4613:			"/node_modules/read-setter.js":            "class Foo { set #foo(x) {} foo() { return this.#foo } }",
internal/bundler_tests/bundler_default_test.go:4614:			"/plugin-dir/node_modules/read-setter.js": "class Foo { set #foo(x) {} foo() { return this.#foo } }",
internal/bundler_tests/bundler_default_test.go:4617:			"/node_modules/delete-super.js":            "class Foo extends Bar { foo() { delete super.foo } }",
internal/bundler_tests/bundler_default_test.go:4618:			"/plugin-dir/node_modules/delete-super.js": "class Foo extends Bar { foo() { delete super.foo } }",
internal/bundler_tests/bundler_default_test.go:4631:									Text:      strings.Replace(args.Path, "@plugin/", "/plugin-dir/node_modules/", 1),
internal/bundler_tests/bundler_default_test.go:4817:			"/node_modules/unused/index.js": `
internal/bundler_tests/bundler_default_test.go:4820:			"/node_modules/sideEffects-false/index.js": `
internal/bundler_tests/bundler_default_test.go:4823:			"/node_modules/sideEffects-false/package.json": `{
internal/bundler_tests/bundler_default_test.go:4851:				"/node_modules/unused/index.js",
internal/bundler_tests/bundler_default_test.go:4852:				"/node_modules/sideEffects-false/index.js",
internal/bundler_tests/bundler_default_test.go:4917:			"/node_modules/unused/index.js": `
internal/bundler_tests/bundler_default_test.go:4920:			"/node_modules/sideEffects-false/index.js": `
internal/bundler_tests/bundler_default_test.go:4923:			"/node_modules/sideEffects-false/package.json": `{
internal/bundler_tests/bundler_default_test.go:4951:				"/node_modules/unused/index.js",
internal/bundler_tests/bundler_default_test.go:4952:				"/node_modules/sideEffects-false/index.js",
internal/bundler_tests/bundler_default_test.go:6574:			"/node_modules/pkg/file2.js": `
internal/bundler_tests/bundler_default_test.go:6586:node_modules/pkg/file2.js: DEBUG: Top-level "this" will be replaced with undefined since this file is an ECMAScript module
internal/bundler_tests/bundler_default_test.go:6587:node_modules/pkg/file2.js: NOTE: This file is considered to be an ECMAScript module because of the "export" keyword here:
internal/bundler_tests/bundler_default_test.go:6641:				import './outside-node-modules'
internal/bundler_tests/bundler_default_test.go:6642:				import 'inside-node-modules'
internal/bundler_tests/bundler_default_test.go:6644:			"/outside-node-modules/index.jsx": `
internal/bundler_tests/bundler_default_test.go:6647:			"/outside-node-modules/package.json": `
internal/bundler_tests/bundler_default_test.go:6650:			"/node_modules/inside-node-modules/index.jsx": `
internal/bundler_tests/bundler_default_test.go:6653:			"/node_modules/inside-node-modules/package.json": `
internal/bundler_tests/bundler_default_test.go:6662:		expectedScanLog: `outside-node-modules/index.jsx: WARNING: Duplicate key "a" in object literal
internal/bundler_tests/bundler_default_test.go:6663:outside-node-modules/index.jsx: NOTE: The original key "a" is here:
internal/bundler_tests/bundler_default_test.go:6664:outside-node-modules/index.jsx: WARNING: Duplicate "a2" attribute in JSX element
internal/bundler_tests/bundler_default_test.go:6665:outside-node-modules/index.jsx: NOTE: The original "a2" attribute is here:
internal/bundler_tests/bundler_default_test.go:6666:outside-node-modules/package.json: WARNING: Duplicate key "b" in object literal
internal/bundler_tests/bundler_default_test.go:6667:outside-node-modules/package.json: NOTE: The original key "b" is here:
internal/bundler_tests/bundler_default_test.go:6741:					// These are node core modules
internal/bundler_tests/bundler_default_test.go:6744:					require('node:foo'),
internal/bundler_tests/bundler_default_test.go:6746:					// These are not node core modules
internal/bundler_tests/bundler_default_test.go:6751:			"/node_modules/fs/abc.js": `
internal/bundler_tests/bundler_default_test.go:6754:			"/node_modules/fs/index.js": `
internal/bundler_tests/bundler_default_test.go:6757:			"/node_modules/fs/promises.js": `
internal/bundler_tests/bundler_default_test.go:8001:			"/nested3/node_modules/alias3/index.js":    `test failure`,
internal/bundler_tests/bundler_default_test.go:8002:			"/node_modules/alias1/index.js":            `console.log(1)`,
internal/bundler_tests/bundler_default_test.go:8003:			"/node_modules/alias2/foo.js":              `console.log(2)`,
internal/bundler_tests/bundler_default_test.go:8004:			"/node_modules/alias3/index.js":            `console.log(3)`,
internal/bundler_tests/bundler_default_test.go:8005:			"/node_modules/alias4/index.js":            `console.log(4)`,
internal/bundler_tests/bundler_default_test.go:8006:			"/node_modules/alias5/foo.js":              `console.log(5)`,
internal/bundler_tests/bundler_default_test.go:8011:			"/node_modules/prefix-foo/index.js":        `console.log(10)`,
internal/bundler_tests/bundler_default_test.go:8012:			"/node_modules/@scope/prefix-foo/index.js": `console.log(11)`,
internal/bundler_tests/bundler_default_test.go:8207:				import './node_modules/pkg2/index.js'
internal/bundler_tests/bundler_default_test.go:8218:			"/project/node_modules/pkg2/index.js": `
internal/bundler_tests/bundler_default_test.go:8598:					// Comments on absent AST nodes
internal/bundler_tests/bundler_default_test.go:8634:					// Comments on absent AST nodes
internal/bundler_tests/bundler_default_test.go:8664:			"/project/node_modules/fflate/package.json": `{ "main": "main.js" }`,
internal/bundler_tests/bundler_default_test.go:8665:			"/project/node_modules/fflate/main.js":      ``,
internal/bundler_tests/bundler_default_test.go:8669:				Contents:      `import "node_modules/fflate"`,
internal/bundler_tests/bundler_default_test.go:8676:		expectedScanLog: `<stdin>: ERROR: Could not resolve "node_modules/fflate"
internal/bundler_tests/bundler_default_test.go:8677:NOTE: You can mark the path "node_modules/fflate" as external to exclude it from the bundle, which will remove this error and leave the unresolved path in the bundle.
internal/bundler_tests/bundler_default_test.go:9304:			"~/project/node_modules/pkg/index.js": `exports.pkg = true`,
internal/bundler_tests/bundler_default_test.go:9329:			"~/project/node_modules/pkg/index.js": `exports.pkg = true`,
internal/bundler_tests/bundler_default_test.go:9353:			"/node_modules/expo-image/index.js": `
internal/bundler_tests/bundler_default_test.go:9356:			"/node_modules/expo-image/Image.web.tsx": `export default 'Image.web.tsx'`,
internal/bundler_tests/bundler_default_test.go:9357:			"/node_modules/expo-image/Image.tsx":     `export default 'Image.tsx'`,
internal/resolver/yarnpnp_test.go:85:					// normal node module resolution rules instead of throwing an error.
internal/resolver/yarnpnp_test.go:94:						// Otherwise esbuild's implementation of node module resolution
internal/js_lexer/js_lexer_test.go:93:	expectHashbang(t, "#!/usr/bin/env node", "#!/usr/bin/env node")
internal/js_lexer/js_lexer_test.go:94:	expectHashbang(t, "#!/usr/bin/env node\n", "#!/usr/bin/env node")
internal/js_lexer/js_lexer_test.go:95:	expectHashbang(t, "#!/usr/bin/env node\nlet x", "#!/usr/bin/env node")
internal/js_lexer/js_lexer_test.go:96:	expectLexerError(t, " #!/usr/bin/env node", "<stdin>: ERROR: Syntax error \"!\"\n")
internal/js_lexer/js_lexer_test.go:554:		// "#!/usr/bin/env node"
internal/js_parser/js_parser_test.go:3005:	// We support folding strings from sibling AST nodes since that ends up being
internal/js_parser/json_parser_test.go:189:	expectParseErrorJSON(t, "#!/usr/bin/env node\n{}", "<stdin>: ERROR: Unexpected \"#!/usr/bin/env node\" in JSON\n")
internal/js_ast/js_ast_test.go:19:	assertEqual(t, GenerateNonUniqueNameFromPath("node_modules/demo-pkg/index.js"), "demo_pkg")
internal/js_ast/js_ast_test.go:20:	assertEqual(t, GenerateNonUniqueNameFromPath("node_modules\\demo-pkg\\index.js"), "demo_pkg")
shell
sed -n '1,140p' pkg/api/api_test.go && rg -n "Transform\(|Build\(" pkg/api internal -g '*_test.go' | head -80
output
Chunk ID: b497b8
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 915
Output:
package api_test

import (
	"testing"

	"[code-host]/evanw/esbuild/internal/test"
	"[code-host]/evanw/esbuild/pkg/api"
)

func TestFormatMessages(t *testing.T) {
	check := func(name string, opts api.FormatMessagesOptions, msg api.Message, expected string) {
		t.Helper()
		t.Run(name, func(t *testing.T) {
			test.AssertEqualWithDiff(t, api.FormatMessages([]api.Message{msg}, opts)[0], expected)
		})
	}

	check("Error", api.FormatMessagesOptions{Kind: api.ErrorMessage}, api.Message{Text: "This is a test"}, "✘ [ERROR] This is a test\n\n")
	check("Warning", api.FormatMessagesOptions{Kind: api.WarningMessage}, api.Message{Text: "This is a test"}, "▲ [WARNING] This is a test\n\n")

	check("Basic location",
		api.FormatMessagesOptions{},
		api.Message{Text: "This is a test", Location: &api.Location{
			File:       "some file.js",
			Line:       100,
			Column:     5, // 0-based
			Length:     3,
			LineText:   "this.foo();",
			Suggestion: "bar",
		}},
		`✘ [ERROR] This is a test

    some file.js:100:5:
      100 │ this.foo();
          │      ~~~
          ╵      bar

`,
	)

	check("Unicode location",
		api.FormatMessagesOptions{
			Kind: api.WarningMessage,
		},
		api.Message{Text: "This is a test", Location: &api.Location{
			File:       "some file.js",
			Line:       100,
			Column:     17, // In UTF-8 bytes
			Length:     10, // In UTF-8 bytes
			LineText:   "𝓉𝒽𝒾𝓈.𝒻ℴℴ();",
			Suggestion: "𝒷𝒶𝓇",
		}},
		`▲ [WARNING] This is a test

    some file.js:100:17:
      100 │ 𝓉𝒽𝒾𝓈.𝒻ℴℴ();
          │      ~~~
          ╵      𝒷𝒶𝓇

`,
	)

	check("Tab stop rendering",
		api.FormatMessagesOptions{
			Kind: api.WarningMessage,
		},
		api.Message{Text: "This is a test", Location: &api.Location{
			File:     "some file.js",
			Line:     100,
			Column:   6,
			Length:   4,
			LineText: "0\t1\t23\t45\t678",
		}},
		`▲ [WARNING] This is a test

    some file.js:100:6:
      100 │ 0 1 23  45  678
          ╵       ~~~~~~

`,
	)

	check("Truncated location tail, zero length",
		api.FormatMessagesOptions{
			TerminalWidth: 32,
		},
		api.Message{Text: "This is a test", Location: &api.Location{
			File:     "some file.js",
			Line:     100,
			Column:   3,
			Length:   0,
			LineText: "012345678 abcdefghi ABCDEFGHI 012345678 abcdefghi ABCDEFGHI",
		}},
		`✘ [ERROR] This is a test

    some file.js:100:3:
      100 │ 012345678 abcdefg...
          ╵    ^

`,
	)

	check("Truncated location tail, nonzero length",
		api.FormatMessagesOptions{
			TerminalWidth: 32,
		},
		api.Message{Text: "This is a test", Location: &api.Location{
			File:     "some file.js",
			Line:     100,
			Column:   3,
			Length:   6,
			LineText: "012345678 abcdefghi ABCDEFGHI 012345678 abcdefghi ABCDEFGHI",
		}},
		`✘ [ERROR] This is a test

    some file.js:100:3:
      100 │ 012345678 abcdefg...
          ╵    ~~~~~~

`,
	)

	check("Truncated location tail, truncated length",
		api.FormatMessagesOptions{
			TerminalWidth: 32,
		},
		api.Message{Text: "This is a test", Location: &api.Location{
			File:     "some file.js",
			Line:     100,
			Column:   3,
			Length:   100,
			LineText: "012345678 abcdefghi ABCDEFGHI 012345678 abcdefghi ABCDEFGHI",
		}},
		`✘ [ERROR] This is a test

    some file.js:100:3:
      100 │ 012345678 abcdefg...
          ╵    ~~~~~~~~~~~~~~

`,
internal/bundler_tests/bundler_loader_test.go:1202:func TestLoaderCopyWithTransform(t *testing.T) {
internal/css_parser/css_parser_test.go:2261:func TestTransform(t *testing.T) {
internal/bundler_tests/bundler_default_test.go:7337:func TestManglePropsJSXTransform(t *testing.T) {
I’m editing only `internal/runtime/runtime.go` first. The parser lowering and compatibility table already choose the helper for `es2017`/`es6`; this change keeps that surface intact.
apply_patch
*** Begin Patch
*** Update File: /app/internal/runtime/runtime.go
@@
 		export var __asyncGenerator = (__this, __arguments, generator) => {
 			var resume = (k, v, yes, no) => {
 				try {
 					var x = generator[k](v), isAwait = (v = x.value) instanceof __await, done = x.done
 					Promise.resolve(isAwait ? v[0] : v)
 						.then(y => isAwait
-							? resume(k === 'return' ? k : 'next', v[1] ? { done: y.done, value: y.value } : y, yes, no)
+							? resume(v[1] && k === 'return' ? 'return' : 'next', v[1] ? { done: y.done, value: y.value } : y, yes, no)
 							: yes({ value: y, done }))
 						.catch(e => resume('throw', e, yes, no))
 				} catch (e) {
 					no(e)
 				}
-			}, method = k => it[k] = x => new Promise((yes, no) => resume(k, x, yes, no)), it = {}
+			}, method = k => it[k] = x => {
+				var run, promise = new Promise((yes, no) => {
+					run = () => resume(k, x, yes, no)
+					wait ? wait.then(k === 'return' ? () => Promise.resolve().then(run) : run, k === 'return' ? () => Promise.resolve().then(run) : run) : run()
+				})
+				return wait = promise,
+					promise.then(() => wait === promise && (wait = null), () => wait === promise && (wait = null)),
+					promise
+			}, it = {}, wait
 			return generator = generator.apply(__this, __arguments),
 				it[__knownSymbol('asyncIterator')] = () => it,
 				method('next'),
*** End Patch


Exit code: 0
Wall time: 0 seconds
Output:
Success. Updated the following files:
M /app/internal/runtime/runtime.go
The helper now chains iterator calls through the previous method promise, with `return()` delayed one promise turn and `next`/`throw` chained directly. I’m running the focused Node trace again before adding the broader regression test.
shell
go test ./internal/runtime
output
Chunk ID: 68f113
Wall time: 1.9698 seconds
Process exited with code 0
Original token count: 14
Output:
ok  	[code-host]/evanw/esbuild/internal/runtime	0.089s
shell
go run ./cmd/esbuild /tmp/ag-case.js --bundle --target=es2017 --format=cjs --outfile=/tmp/ag-case.out.js && node /tmp/ag-case.out.js
output
Chunk ID: f2ae10
Wall time: 2.3409 seconds
Process exited with code 0
Original token count: 79
Output:

  ../tmp/ag-case.out.js  3.4kb

⚡ Done in 1ms
["before calls","outer start","inner start","before yield await","after next1","after return","before resolve","after resolve","await done","p1 {\"value\":\"first\",\"done\":false}","finally before cleanup","p2 {\"value\":\"cleanup\",\"done\":false}","after all"]
shell
go run ./cmd/esbuild /tmp/ag-case.js --bundle --target=es6 --format=cjs --outfile=/tmp/ag-case.es6.out.js && node /tmp/ag-case.es6.out.js
output
Chunk ID: 2ff93b
Wall time: 2.3420 seconds
Process exited with code 0
Original token count: 80
Output:

  ../tmp/ag-case.es6.out.js  4.0kb

⚡ Done in 1ms
["before calls","outer start","inner start","before yield await","after next1","after return","before resolve","after resolve","await done","p1 {\"value\":\"first\",\"done\":false}","finally before cleanup","p2 {\"value\":\"cleanup\",\"done\":false}","after all"]
shell
node - <<'EOF'
let trace=[];let release;let gate=new Promise(r=>release=r);async function* inner(){trace.push('start');try{let a=yield await gate.then(()=>{trace.push('await');return 'first'}); trace.push('after '+a)}catch(e){trace.push('catch '+e);let b=yield 'recovery';trace.push('after recovery '+b)}finally{trace.push('finally')}} async function* outer(){yield* inner(); trace.push('outer after')} (async()=>{let it=outer();let p1=it.next();let p2=it.throw('boom');let p3=it.next('after'); for (let [n,p] of [['p1',p1],['p2',p2],['p3',p3]]) p.then(x=>trace.push(n+' '+JSON.stringify(x)),e=>trace.push(n+'err '+e)); release(); await Promise.allSettled([p1,p2,p3]); console.log(JSON.stringify(trace))})()
EOF
output
Chunk ID: a87aad
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 47
Output:
["start","await","catch boom","p1 {\"value\":\"first\",\"done\":false}","after recovery after","finally","p2 {\"value\":\"recovery\",\"done\":false}","outer after","p3 {\"done\":true}"]
shell
node - <<'EOF'
let trace=[];let release;let gate=new Promise(r=>release=r);async function* src(){try{trace.push('src start'); yield await gate.then(()=>{trace.push('src await'); return 'one'}); trace.push('src after')}finally{trace.push('src finally'); yield 'src cleanup'; trace.push('src finally after')}} async function* outer(){ for await (let x of src()){trace.push('loop '+x); yield x;} trace.push('loop after')} (async()=>{let it=outer();let p1=it.next();let p2=it.return('done');let p3=it.next('after'); for (let [n,p] of [['p1',p1],['p2',p2],['p3',p3]]) p.then(x=>trace.push(n+' '+JSON.stringify(x)),e=>trace.push(n+'err '+e)); release(); await Promise.allSettled([p1,p2,p3]); console.log(JSON.stringify(trace))})()
EOF
output
Chunk ID: df5d26
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 38
Output:
["src start","src await","loop one","p1 {\"value\":\"one\",\"done\":false}","src finally","p2 {\"value\":\"done\",\"done\":true}","p3 {\"done\":true}"]
shell
node - <<'EOF'
let trace=[];let release;let gate=new Promise(r=>release=r);async function* g(){try{trace.push('start'); yield 'a'}finally{trace.push('finally start'); await gate.then(()=>trace.push('await done')); trace.push('finally after await'); let b=yield 'cleanup'; trace.push('finally after cleanup '+b)}} (async()=>{let it=g();let p1=it.next();let p2=it.return('done');let p3=it.next('after'); for (let [n,p] of [['p1',p1],['p2',p2],['p3',p3]]) p.then(x=>trace.push(n+' '+JSON.stringify(x)),e=>trace.push(n+'err '+e)); trace.push('before release'); release(); await Promise.allSettled([p1,p2,p3]); console.log(JSON.stringify(trace))})()
EOF
output
Chunk ID: f88598
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 58
Output:
["start","before release","p1 {\"value\":\"a\",\"done\":false}","finally start","await done","finally after await","finally after cleanup after","p2 {\"value\":\"cleanup\",\"done\":false}","p3 {\"value\":\"done\",\"done\":true}"]
shell
cat >/tmp/ag-suite.js <<'EOF'
let trace = [];
let gate;
let release;
function reset(name) {
  trace.push('case ' + name);
  gate = new Promise(r => release = r);
}
function watch(name, promise) {
  promise.then(
    value => trace.push(name + ' ' + JSON.stringify(value)),
    error => trace.push(name + ' throw ' + (error && error.message || error))
  );
}
async function delegatedReturnOne() {
  reset('delegated-return-one');
  async function* inner() {
    trace.push('inner start');
    try {
      const back = yield await gate.then(() => (trace.push('await done'), 'first'));
      trace.push('after first ' + back);
      yield 'second';
    } finally {
      trace.push('finally before cleanup');
      const back = yield 'cleanup';
      trace.push('finally after cleanup ' + back);
    }
  }
  async function* outer() {
    trace.push('outer start');
    yield* inner();
    trace.push('outer after yieldstar');
  }
  let it = outer();
  let p1 = it.next();
  trace.push('after next1');
  let p2 = it.return('done');
  trace.push('after return');
  watch('p1', p1);
  watch('p2', p2);
  release();
  await Promise.allSettled([p1, p2]);
}
async function delegatedReturnMany() {
  reset('delegated-return-many');
  async function* inner() {
    try {
      trace.push('many try');
      const back = yield await gate.then(() => (trace.push('many await'), 'first'));
      trace.push('many after first ' + back);
      yield 'second';
    } finally {
      trace.push('many finally before');
      const back = yield 'cleanup';
      trace.push('many finally after ' + back);
    }
  }
  async function* outer() { yield* inner(); trace.push('many outer after'); }
  let it = outer();
  let p1 = it.next();
  let p2 = it.next('two');
  let p3 = it.return('done');
  let p4 = it.next('after');
  watch('p1', p1);
  watch('p2', p2);
  watch('p3', p3);
  watch('p4', p4);
  release();
  await Promise.allSettled([p1, p2, p3, p4]);
}
async function delegatedThrowCatch() {
  reset('delegated-throw-catch');
  async function* inner() {
    trace.push('throw start');
    try {
      const back = yield await gate.then(() => (trace.push('throw await'), 'first'));
      trace.push('throw after ' + back);
    } catch (e) {
      trace.push('throw catch ' + e);
      const back = yield 'recovery';
      trace.push('throw after recovery ' + back);
    } finally {
      trace.push('throw finally');
    }
  }
  async function* outer() { yield* inner(); trace.push('throw outer after'); }
  let it = outer();
  let p1 = it.next();
  let p2 = it.throw('boom');
  let p3 = it.next('after');
  watch('p1', p1);
  watch('p2', p2);
  watch('p3', p3);
  release();
  await Promise.allSettled([p1, p2, p3]);
}
async function forAwaitReturn() {
  reset('for-await-return');
  async function* src() {
    try {
      trace.push('src start');
      yield await gate.then(() => (trace.push('src await'), 'one'));
      trace.push('src after');
    } finally {
      trace.push('src finally');
      yield 'src cleanup';
      trace.push('src finally after');
    }
  }
  async function* outer() {
    for await (let x of src()) {
      trace.push('loop ' + x);
      yield x;
    }
    trace.push('loop after');
  }
  let it = outer();
  let p1 = it.next();
  let p2 = it.return('done');
  let p3 = it.next('after');
  watch('p1', p1);
  watch('p2', p2);
  watch('p3', p3);
  release();
  await Promise.allSettled([p1, p2, p3]);
}
async function awaitInFinallyReturn() {
  reset('await-in-finally-return');
  async function* gen() {
    try {
      trace.push('await finally start');
      yield 'a';
    } finally {
      trace.push('await finally before');
      await gate.then(() => trace.push('await finally gate'));
      trace.push('await finally after await');
      const back = yield 'cleanup';
      trace.push('await finally after cleanup ' + back);
    }
  }
  let it = gen();
  let p1 = it.next();
  let p2 = it.return('done');
  let p3 = it.next('after');
  watch('p1', p1);
  watch('p2', p2);
  watch('p3', p3);
  release();
  await Promise.allSettled([p1, p2, p3]);
}
async function main() {
  await delegatedReturnOne();
  await delegatedReturnMany();
  await delegatedThrowCatch();
  await forAwaitReturn();
  await awaitInFinallyReturn();
  console.log(JSON.stringify(trace));
}
main().catch(e => { console.log('ERROR ' + (e && e.stack || e)); process.exitCode = 1; });
EOF
node /tmp/ag-suite.js > /tmp/ag-suite.native.txt
go run ./cmd/esbuild /tmp/ag-suite.js --bundle --target=es2017 --format=cjs --outfile=/tmp/ag-suite.out.js >/tmp/ag-suite.bundle.log && node /tmp/ag-suite.out.js > /tmp/ag-suite.lowered.txt
printf 'native:  '; cat /tmp/ag-suite.native.txt
printf 'lowered: '; cat /tmp/ag-suite.lowered.txt
cmp -s /tmp/ag-suite.native.txt /tmp/ag-suite.lowered.txt && echo MATCH || echo DIFFER
output
Chunk ID: a9e87b
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 624
Output:

  ../tmp/ag-suite.out.js  7.9kb

⚡ Done in 2ms
native:  ["case delegated-return-one","outer start","inner start","after next1","after return","await done","p1 {\"value\":\"first\",\"done\":false}","finally before cleanup","p2 {\"value\":\"cleanup\",\"done\":false}","case delegated-return-many","many try","many await","many after first two","p1 {\"value\":\"first\",\"done\":false}","p2 {\"value\":\"second\",\"done\":false}","many finally before","many finally after after","p3 {\"value\":\"cleanup\",\"done\":false}","many outer after","p4 {\"done\":true}","case delegated-throw-catch","throw start","throw await","throw catch boom","p1 {\"value\":\"first\",\"done\":false}","throw after recovery after","throw finally","p2 {\"value\":\"recovery\",\"done\":false}","throw outer after","p3 {\"done\":true}","case for-await-return","src start","src await","loop one","p1 {\"value\":\"one\",\"done\":false}","src finally","p2 {\"value\":\"done\",\"done\":true}","p3 {\"done\":true}","case await-in-finally-return","await finally start","p1 {\"value\":\"a\",\"done\":false}","await finally before","await finally gate","await finally after await","await finally after cleanup after","p2 {\"value\":\"cleanup\",\"done\":false}","p3 {\"value\":\"done\",\"done\":true}"]
lowered: ["case delegated-return-one","outer start","inner start","after next1","after return","await done","p1 {\"value\":\"first\",\"done\":false}","finally before cleanup","p2 {\"value\":\"cleanup\",\"done\":false}","case delegated-return-many","many try","many await","many after first two","p1 {\"value\":\"first\",\"done\":false}","p2 {\"value\":\"second\",\"done\":false}","many finally before","many finally after after","p3 {\"value\":\"cleanup\",\"done\":false}","many outer after","p4 {\"done\":true}","case delegated-throw-catch","throw start","throw await","throw catch boom","p1 {\"value\":\"first\",\"done\":false}","throw after recovery after","throw finally","p2 {\"value\":\"recovery\",\"done\":false}","throw outer after","p3 {\"done\":true}","case for-await-return","src start","src await","loop one","p1 {\"value\":\"one\",\"done\":false}","src finally","p2 {\"value\":\"done\",\"done\":true}","p3 {\"done\":true}","case await-in-finally-return","await finally start","p1 {\"value\":\"a\",\"done\":false}","await finally before","await finally gate","await finally after await","await finally after cleanup after","p2 {\"value\":\"cleanup\",\"done\":false}","p3 {\"value\":\"done\",\"done\":true}"]
MATCH
shell
rg -n "ES2017|ES6" pkg/api/api.go pkg/api
output
Chunk ID: db7282
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 75
Output:
pkg/api/api.go:129:	ES2017
pkg/api/api_impl.go:315:	case ES2017:
pkg/api/api_impl.go:1422:	// Code splitting is experimental and currently only enabled for ES6 modules
pkg/api/api_impl.go:1427:	// Code splitting is experimental and currently only enabled for ES6 modules
pkg/api/api.go:129:	ES2017
The broader suite now matches native Node for the return/throw/yield* and for-await cases I wanted covered, including the internal `await` inside a return-triggered `finally`. I’m going to make that a regression test with Node skipped when unavailable, then run the normal Go checks and refresh the lowering snapshot if needed.
shell
sed -n '110,140p' pkg/api/api.go
output
Chunk ID: a610fe
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 70
Output:
	LegalCommentsExternal
)

type JSX uint8

const (
	JSXTransform JSX = iota
	JSXPreserve
	JSXAutomatic
)

type Target uint8

const (
	DefaultTarget Target = iota
	ESNext
	ES5
	ES2015
	ES2016
	ES2017
	ES2018
	ES2019
	ES2020
	ES2021
	ES2022
	ES2023
	ES2024
)

type Loader uint16

shell
rg -n "type Format|FormatCommonJS|FormatIIFE" pkg/api/api.go
output
Chunk ID: 19ea8f
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 25
Output:
170:type Format uint8
174:	FormatIIFE
175:	FormatCommonJS
715:type FormatMessagesOptions struct {
shell
sed -n '165,180p' pkg/api/api.go && rg -n "type TransformOptions" -A80 pkg/api/api.go
output
Chunk ID: b4f130
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 1255
Output:
	PlatformBrowser
	PlatformNode
	PlatformNeutral
)

type Format uint8

const (
	FormatDefault Format = iota
	FormatIIFE
	FormatCommonJS
	FormatESModule
)

type Packages uint8

411:type TransformOptions struct {
412-	Color       StderrColor         // Documentation: https://esbuild.[code-host]/api/#color
413-	LogLevel    LogLevel            // Documentation: https://esbuild.[code-host]/api/#log-level
414-	LogLimit    int                 // Documentation: https://esbuild.[code-host]/api/#log-limit
415-	LogOverride map[string]LogLevel // Documentation: https://esbuild.[code-host]/api/#log-override
416-	AbsPaths    AbsPaths            // Documentation: https://esbuild.[code-host]/api/#abs-path
417-
418-	Sourcemap      SourceMap      // Documentation: https://esbuild.[code-host]/api/#sourcemap
419-	SourceRoot     string         // Documentation: https://esbuild.[code-host]/api/#source-root
420-	SourcesContent SourcesContent // Documentation: https://esbuild.[code-host]/api/#sources-content
421-
422-	Target    Target          // Documentation: https://esbuild.[code-host]/api/#target
423-	Engines   []Engine        // Documentation: https://esbuild.[code-host]/api/#target
424-	Supported map[string]bool // Documentation: https://esbuild.[code-host]/api/#supported
425-
426-	Platform   Platform // Documentation: https://esbuild.[code-host]/api/#platform
427-	Format     Format   // Documentation: https://esbuild.[code-host]/api/#format
428-	GlobalName string   // Documentation: https://esbuild.[code-host]/api/#global-name
429-
430-	MangleProps       string                 // Documentation: https://esbuild.[code-host]/api/#mangle-props
431-	ReserveProps      string                 // Documentation: https://esbuild.[code-host]/api/#mangle-props
432-	MangleQuoted      MangleQuoted           // Documentation: https://esbuild.[code-host]/api/#mangle-props
433-	MangleCache       map[string]interface{} // Documentation: https://esbuild.[code-host]/api/#mangle-props
434-	Drop              Drop                   // Documentation: https://esbuild.[code-host]/api/#drop
435-	DropLabels        []string               // Documentation: https://esbuild.[code-host]/api/#drop-labels
436-	MinifyWhitespace  bool                   // Documentation: https://esbuild.[code-host]/api/#minify
437-	MinifyIdentifiers bool                   // Documentation: https://esbuild.[code-host]/api/#minify
438-	MinifySyntax      bool                   // Documentation: https://esbuild.[code-host]/api/#minify
439-	LineLimit         int                    // Documentation: https://esbuild.[code-host]/api/#line-limit
440-	Charset           Charset                // Documentation: https://esbuild.[code-host]/api/#charset
441-	TreeShaking       TreeShaking            // Documentation: https://esbuild.[code-host]/api/#tree-shaking
442-	IgnoreAnnotations bool                   // Documentation: https://esbuild.[code-host]/api/#ignore-annotations
443-	LegalComments     LegalComments          // Documentation: https://esbuild.[code-host]/api/#legal-comments
444-
445-	JSX             JSX    // Documentation: https://esbuild.[code-host]/api/#jsx
446-	JSXFactory      string // Documentation: https://esbuild.[code-host]/api/#jsx-factory
447-	JSXFragment     string // Documentation: https://esbuild.[code-host]/api/#jsx-fragment
448-	JSXImportSource string // Documentation: https://esbuild.[code-host]/api/#jsx-import-source
449-	JSXDev          bool   // Documentation: https://esbuild.[code-host]/api/#jsx-dev
450-	JSXSideEffects  bool   // Documentation: https://esbuild.[code-host]/api/#jsx-side-effects
451-
452-	TsconfigRaw string // Documentation: https://esbuild.[code-host]/api/#tsconfig-raw
453-	Banner      string // Documentation: https://esbuild.[code-host]/api/#banner
454-	Footer      string // Documentation: https://esbuild.[code-host]/api/#footer
455-
456-	Define    map[string]string // Documentation: https://esbuild.[code-host]/api/#define
457-	Pure      []string          // Documentation: https://esbuild.[code-host]/api/#pure
458-	KeepNames bool              // Documentation: https://esbuild.[code-host]/api/#keep-names
459-
460-	Sourcefile string // Documentation: https://esbuild.[code-host]/api/#sourcefile
461-	Loader     Loader // Documentation: https://esbuild.[code-host]/api/#loader
462-}
463-
464-type TransformResult struct {
465-	Errors   []Message
466-	Warnings []Message
467-
468-	Code          []byte
469-	Map           []byte
470-	LegalComments []byte
471-
472-	MangleCache map[string]interface{}
473-}
474-
475-// Documentation: https://esbuild.[code-host]/api/#transform
476-func Transform(input string, options TransformOptions) TransformResult {
477-	return transformImpl(input, options)
478-}
479-
480-////////////////////////////////////////////////////////////////////////////////
481-// Context API
482-
483-// Documentation: https://esbuild.[code-host]/api/#serve-arguments
484-type ServeOptions struct {
485-	Port      int
486-	Host      string
487-	Servedir  string
488-	Keyfile   string
489-	Certfile  string
490-	Fallback  string
491-	CORS      CORSOptions
I’m adding the regression at the runtime/API boundary: transform the same program to `es2017` and `es2015`, assert the helpers are present and native async-generator syntax is gone, then execute both transformed outputs against native Node’s JSON trace.
apply_patch
*** Begin Patch
*** Update File: /app/internal/runtime/runtime_test.go
@@
 import (
+	"os/exec"
+	"strings"
 	"testing"
 
 	"[code-host]/evanw/esbuild/internal/compat"
 	"[code-host]/evanw/esbuild/internal/config"
 	"[code-host]/evanw/esbuild/internal/js_parser"
 	"[code-host]/evanw/esbuild/internal/logger"
 	"[code-host]/evanw/esbuild/internal/runtime"
+	"[code-host]/evanw/esbuild/pkg/api"
 )
@@
 func TestUnsupportedFeatures(t *testing.T) {
 	for key, feature := range compat.StringToJSFeature {
 		t.Run(key, func(t *testing.T) {
 			source := runtime.Source(feature)
@@
 		})
 	}
 }
+
+func TestAsyncGeneratorLoweringConcurrentCalls(t *testing.T) {
+	node, err := exec.LookPath("node")
+	if err != nil {
+		t.Skip("node not found")
+	}
+
+	source := `
+let trace = [];
+let gate;
+let release;
+function reset(name) {
+  trace.push('case ' + name);
+  gate = new Promise(r => release = r);
+}
+function watch(name, promise) {
+  promise.then(
+    value => trace.push(name + ' ' + JSON.stringify(value)),
+    error => trace.push(name + ' throw ' + (error && error.message || error))
+  );
+}
+async function delegatedReturnOne() {
+  reset('delegated-return-one');
+  async function* inner() {
+    trace.push('inner start');
+    try {
+      const back = yield await gate.then(() => (trace.push('await done'), 'first'));
+      trace.push('after first ' + back);
+      yield 'second';
+    } finally {
+      trace.push('finally before cleanup');
+      const back = yield 'cleanup';
+      trace.push('finally after cleanup ' + back);
+    }
+  }
+  async function* outer() {
+    trace.push('outer start');
+    yield* inner();
+    trace.push('outer after yieldstar');
+  }
+  let it = outer();
+  let p1 = it.next();
+  trace.push('after next1');
+  let p2 = it.return('done');
+  trace.push('after return');
+  watch('p1', p1);
+  watch('p2', p2);
+  release();
+  await Promise.allSettled([p1, p2]);
+}
+async function delegatedReturnMany() {
+  reset('delegated-return-many');
+  async function* inner() {
+    try {
+      trace.push('many try');
+      const back = yield await gate.then(() => (trace.push('many await'), 'first'));
+      trace.push('many after first ' + back);
+      yield 'second';
+    } finally {
+      trace.push('many finally before');
+      const back = yield 'cleanup';
+      trace.push('many finally after ' + back);
+    }
+  }
+  async function* outer() { yield* inner(); trace.push('many outer after'); }
+  let it = outer();
+  let p1 = it.next();
+  let p2 = it.next('two');
+  let p3 = it.return('done');
+  let p4 = it.next('after');
+  watch('p1', p1);
+  watch('p2', p2);
+  watch('p3', p3);
+  watch('p4', p4);
+  release();
+  await Promise.allSettled([p1, p2, p3, p4]);
+}
+async function delegatedThrowCatch() {
+  reset('delegated-throw-catch');
+  async function* inner() {
+    trace.push('throw start');
+    try {
+      const back = yield await gate.then(() => (trace.push('throw await'), 'first'));
+      trace.push('throw after ' + back);
+    } catch (e) {
+      trace.push('throw catch ' + e);
+      const back = yield 'recovery';
+      trace.push('throw after recovery ' + back);
+    } finally {
+      trace.push('throw finally');
+    }
+  }
+  async function* outer() { yield* inner(); trace.push('throw outer after'); }
+  let it = outer();
+  let p1 = it.next();
+  let p2 = it.throw('boom');
+  let p3 = it.next('after');
+  watch('p1', p1);
+  watch('p2', p2);
+  watch('p3', p3);
+  release();
+  await Promise.allSettled([p1, p2, p3]);
+}
+async function forAwaitReturn() {
+  reset('for-await-return');
+  async function* src() {
+    try {
+      trace.push('src start');
+      yield await gate.then(() => (trace.push('src await'), 'one'));
+      trace.push('src after');
+    } finally {
+      trace.push('src finally');
+      yield 'src cleanup';
+      trace.push('src finally after');
+    }
+  }
+  async function* outer() {
+    for await (let x of src()) {
+      trace.push('loop ' + x);
+      yield x;
+    }
+    trace.push('loop after');
+  }
+  let it = outer();
+  let p1 = it.next();
+  let p2 = it.return('done');
+  let p3 = it.next('after');
+  watch('p1', p1);
+  watch('p2', p2);
+  watch('p3', p3);
+  release();
+  await Promise.allSettled([p1, p2, p3]);
+}
+async function awaitInFinallyReturn() {
+  reset('await-in-finally-return');
+  async function* gen() {
+    try {
+      trace.push('await finally start');
+      yield 'a';
+    } finally {
+      trace.push('await finally before');
+      await gate.then(() => trace.push('await finally gate'));
+      trace.push('await finally after await');
+      const back = yield 'cleanup';
+      trace.push('await finally after cleanup ' + back);
+    }
+  }
+  let it = gen();
+  let p1 = it.next();
+  let p2 = it.return('done');
+  let p3 = it.next('after');
+  watch('p1', p1);
+  watch('p2', p2);
+  watch('p3', p3);
+  release();
+  await Promise.allSettled([p1, p2, p3]);
+}
+async function main() {
+  await delegatedReturnOne();
+  await delegatedReturnMany();
+  await delegatedThrowCatch();
+  await forAwaitReturn();
+  await awaitInFinallyReturn();
+  console.log(JSON.stringify(trace));
+}
+main().catch(e => { console.log('ERROR ' + (e && e.stack || e)); process.exitCode = 1; });
+`
+
+	runNode := func(name string, code string) string {
+		t.Helper()
+		cmd := exec.Command(node, "-e", code)
+		bytes, err := cmd.CombinedOutput()
+		if err != nil {
+			t.Fatalf("%s failed: %v\n%s", name, err, bytes)
+		}
+		return string(bytes)
+	}
+
+	expected := runNode("native", source)
+	for _, target := range []struct {
+		name   string
+		target api.Target
+	}{
+		{"es2017", api.ES2017},
+		{"es2015", api.ES2015},
+	} {
+		t.Run(target.name, func(t *testing.T) {
+			result := api.Transform(source, api.TransformOptions{
+				Target: target.target,
+				Format: api.FormatCommonJS,
+			})
+			if len(result.Errors) > 0 {
+				t.Fatalf("transform failed: %v", result.Errors)
+			}
+
+			code := string(result.Code)
+			for _, text := range []string{"__asyncGenerator", "__yieldStar", "__forAwait"} {
+				if !strings.Contains(code, text) {
+					t.Fatalf("expected lowered output to contain %q", text)
+				}
+			}
+			for _, text := range []string{"async function*", "for await"} {
+				if strings.Contains(code, text) {
+					t.Fatalf("expected lowered output to not contain %q", text)
+				}
+			}
+
+			if actual := runNode(target.name, code); actual != expected {
+				t.Fatalf("mismatch\nexpected: %s\nactual:   %s", expected, actual)
+			}
+		})
+	}
+}
*** End Patch


Exit code: 0
Wall time: 0 seconds
Output:
Success. Updated the following files:
M /app/internal/runtime/runtime_test.go
The regression is in place. I’m formatting and running it now; if it’s stable, I’ll run the broader build/test targets and update snapshots affected by the helper text.
shell
gofmt -w internal/runtime/runtime_test.go
output
Chunk ID: cf3aa1
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 0
Output:
shell
go test ./internal/runtime -run TestAsyncGeneratorLoweringConcurrentCalls -count=1
output
Chunk ID: 74f237
Wall time: 0.1109 seconds
Process exited with code 0
Original token count: 14
Output:
ok  	[code-host]/evanw/esbuild/internal/runtime	0.042s
The new Node-backed regression passes for both `es2017` and `es2015`. Next I’m checking the existing lowering snapshots because the injected helper source changed.
shell
go test ./internal/bundler_tests -run 'TestLowerAsyncGenerator' -count=1
output
Chunk ID: 2fb215
Wall time: 0.4876 seconds
Process exited with code 1
Original token count: 1339
Output:
PASS
snapshots/snapshots_lower.txt
    No test found for snapshot TestLowerPrivateClassStaticAccessorOrder
    No test found for snapshot TestLowerPrivateFieldAssignments2019NoBundle
    No test found for snapshot TestLowerUsing
    No test found for snapshot TestJavaScriptDecoratorsBundleIssue3768
    No test found for snapshot TestLowerClassFieldStrictTsconfigJson2020
    No test found for snapshot TestLowerForAwait2017
    No test found for snapshot TestLowerObjectSpreadNoBundle
    No test found for snapshot TestLowerStrictModeSyntax
    No test found for snapshot TestLowerExponentiationOperatorNoBundle
    No test found for snapshot TestStaticClassBlockES2021
    No test found for snapshot TestJavaScriptAutoAccessorES2021
    No test found for snapshot TestJavaScriptAutoAccessorES2022
    No test found for snapshot TestLowerAsyncSuperES2017NoBundle
    No test found for snapshot TestLowerNestedFunctionDirectEval
    No test found for snapshot TestLowerPrivateClassBrandCheckSupported
    No test found for snapshot TestLowerPrivateGetterSetter2019
    No test found for snapshot TestLowerUsingInsideTSNamespace
    No test found for snapshot TestTSLowerClassFieldStrictTsconfigJson2020
    No test found for snapshot TestJavaScriptDecoratorsESNext
    No test found for snapshot TestLowerAsyncArrowSuperES2016
    No test found for snapshot TestLowerClassField2020NoBundle
    No test found for snapshot TestLowerOptionalCatchNameCollisionNoBundle
    No test found for snapshot TestLowerPrivateClassBrandCheckUnsupported
    No test found for snapshot TestLowerStaticAsyncArrowSuperES2016
    No test found for snapshot TestTSLowerClassPrivateFieldNextNoBundle
    No test found for snapshot TestJavaScriptAutoAccessorESNext
    No test found for snapshot TestLowerPrivateClassExpr2020NoBundle
    No test found for snapshot TestLowerPrivateFieldAssignments2020NoBundle
    No test found for snapshot TestLowerPrivateGetterSetter2015
    No test found for snapshot TestTSLowerPrivateStaticMembers2015NoBundle
    No test found for snapshot TestLowerAsync2017NoBundle
    No test found for snapshot TestLowerClassFieldNextNoBundle
    No test found for snapshot TestLowerNullishCoalescingAssignmentIssue1493
    No test found for snapshot TestLowerPrivateGetterSetterNext
    No test found for snapshot TestLowerPrivateMethod2020
    No test found for snapshot TestLowerUsingHoisting
    No test found for snapshot TestLowerAsyncArrowSuperSetterES2016
    No test found for snapshot TestLowerPrivateMethodWithModifiers2020
    No test found for snapshot TestLowerStaticAsyncSuperES2016NoBundle
    No test found for snapshot TestTSLowerObjectRest2017NoBundle
    No test found for snapshot TestTSLowerPrivateFieldAndMethodAvoidNameCollision2015
    No test found for snapshot TestForAwaitWithOptionalCatchIssue4378
    No test found for snapshot TestLowerPrivateClassStaticFieldOrder
    No test found for snapshot TestLowerPrivateClassStaticMethodOrder
    No test found for snapshot TestLowerPrivateMethodNext
    No test found for snapshot TestLowerPrivateSuperES2022
    No test found for snapshot TestLowerTemplateObject
    No test found for snapshot TestLowerPrivateClassMethodOrder
    No test found for snapshot TestLowerPrivateFieldOptionalChainNextNoBundle
    No test found for snapshot TestLowerPrivateGetterSetter2020
    No test found for snapshot TestLowerStaticSuperES2021NoBundle
    No test found for snapshot TestLowerExportStarAsNameCollisionNoBundle
    No test found for snapshot TestLowerPrivateSuperES2021
    No test found for snapshot TestLowerStaticAsyncArrowSuperSetterES2016
    No test found for snapshot TestStaticClassBlockESNext
    No test found for snapshot TestClassSuperThisIssue242NoBundle
    No test found for snapshot TestLowerPrivateSuperStaticBundleIssue2158
    No test found for snapshot TestTSLowerPrivateFieldOptionalChain2015NoBundle
    No test found for snapshot TestLowerPrivateFieldAssignmentsNextNoBundle
    No test found for snapshot TestLowerPrivateFieldOptionalChain2020NoBundle
    No test found for snapshot TestLowerRegExpNameCollision
    No test found for snapshot TestLowerStaticAsyncSuperES2021NoBundle
    No test found for snapshot TestTSLowerObjectRest2018NoBundle
    No test found for snapshot TestLowerAsync2016NoBundle
    No test found for snapshot TestLowerPrivateClassAccessorOrder
    No test found for snapshot TestLowerPrivateFieldOptionalChain2019NoBundle
    No test found for snapshot TestLowerPrivateMethod2019
    No test found for snapshot TestLowerAsyncSuperES2016NoBundle
    No test found for snapshot TestLowerPrivateClassFieldOrder
    No test found for snapshot TestLowerStaticSuperES2016NoBundle
    No test found for snapshot TestLowerUsingUnsupportedUsingAndAsync
    No test found for snapshot TestLowerExportStarAsNameCollision
    No test found for snapshot TestLowerForAwait2015
    No test found for snapshot TestLowerPrivateClassFieldStaticIssue1424
    No test found for snapshot TestLowerPrivateFieldAssignments2015NoBundle
    No test found for snapshot TestLowerUsingUnsupportedAsync
    No test found for snapshot TestTSLowerClassField2020NoBundle
    No test found for snapshot TestLowerAsyncThis2016CommonJS
    No test found for snapshot TestLowerAsyncThis2016ES6
FAIL	[code-host]/evanw/esbuild/internal/bundler_tests	0.004s
FAIL
shell
go test ./internal/runtime -count=1
output
Chunk ID: 03da21
Wall time: 0.2368 seconds
Process exited with code 0
Original token count: 14
Output:
ok  	[code-host]/evanw/esbuild/internal/runtime	0.184s
shell
go build ./cmd/...
output
Chunk ID: a905ee
Wall time: 0.2586 seconds
Process exited with code 0
Original token count: 0
Output:
The targeted bundler run only failed because the snapshot harness expects all snapshot tests when snapshots are loaded; that’s a harness behavior, not a lowering failure. I’m running the full bundler test package now so any real snapshot drift is visible.
shell
go test ./internal/bundler_tests -count=1
output
Chunk ID: d1c4c1
Wall time: 0.8280 seconds
Process exited with code 0
Original token count: 15
Output:
ok  	[code-host]/evanw/esbuild/internal/bundler_tests	0.817s
shell
go test ./internal/compat -count=1
output
Chunk ID: 1dcffd
Wall time: 0.0664 seconds
Process exited with code 0
Original token count: 14
Output:
ok  	[code-host]/evanw/esbuild/internal/compat	0.002s
shell
go test ./pkg/api -run 'Test.*' -count=1
output
Chunk ID: c6c147
Wall time: 0.2698 seconds
Process exited with code 0
Original token count: 12
Output:
ok  	[code-host]/evanw/esbuild/pkg/api	0.001s
The full bundler snapshots pass without updates, and the compatibility test still passes. I’m doing the acceptance-style CLI checks now: build, bundle to `es2017` and `es6`, verify helper syntax, then execute traces.
shell
go build ./cmd/...
output
Chunk ID: 2cf01f
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 0
Output:
shell
go run ./cmd/esbuild /tmp/ag-suite.js --bundle --target=es2017 --format=cjs --outfile=/tmp/ag-suite.es2017.js >/tmp/ag-suite.es2017.log && rg "__asyncGenerator|__yieldStar|__forAwait" /tmp/ag-suite.es2017.js && ! rg "async function\*|for await" /tmp/ag-suite.es2017.js && node /tmp/ag-suite.es2017.js > /tmp/ag-suite.es2017.txt && cmp -s /tmp/ag-suite.native.txt /tmp/ag-suite.es2017.txt
output
Chunk ID: ea5842
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 318
Output:

  ../tmp/ag-suite.es2017.js  7.9kb

⚡ Done in 1ms
var __asyncGenerator = (__this, __arguments, generator) => {
var __yieldStar = (value) => {
var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
    return __asyncGenerator(this, null, function* () {
    return __asyncGenerator(this, null, function* () {
      yield* __yieldStar(inner());
    return __asyncGenerator(this, null, function* () {
    return __asyncGenerator(this, null, function* () {
      yield* __yieldStar(inner());
    return __asyncGenerator(this, null, function* () {
    return __asyncGenerator(this, null, function* () {
      yield* __yieldStar(inner());
    return __asyncGenerator(this, null, function* () {
    return __asyncGenerator(this, null, function* () {
        for (var iter = __forAwait(src()), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
    return __asyncGenerator(this, null, function* () {
shell
go run ./cmd/esbuild /tmp/ag-suite.js --bundle --target=es6 --format=cjs --outfile=/tmp/ag-suite.es6.js >/tmp/ag-suite.es6.log && rg "__asyncGenerator|__yieldStar|__forAwait" /tmp/ag-suite.es6.js && ! rg "async function\*|for await" /tmp/ag-suite.es6.js && node /tmp/ag-suite.es6.js > /tmp/ag-suite.es6.txt && cmp -s /tmp/ag-suite.native.txt /tmp/ag-suite.es6.txt
output
Chunk ID: a8b025
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 324
Output:

  ../tmp/ag-suite.es6.js  9.1kb

⚡ Done in 1ms
var __asyncGenerator = (__this, __arguments, generator) => {
var __yieldStar = (value) => {
var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
      return __asyncGenerator(this, null, function* () {
      return __asyncGenerator(this, null, function* () {
        yield* __yieldStar(inner());
      return __asyncGenerator(this, null, function* () {
      return __asyncGenerator(this, null, function* () {
        yield* __yieldStar(inner());
      return __asyncGenerator(this, null, function* () {
      return __asyncGenerator(this, null, function* () {
        yield* __yieldStar(inner());
      return __asyncGenerator(this, null, function* () {
      return __asyncGenerator(this, null, function* () {
          for (var iter = __forAwait(src()), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
      return __asyncGenerator(this, null, function* () {
shell
go test ./internal/runtime ./internal/bundler_tests ./internal/compat ./pkg/api -count=1
output
Chunk ID: dd109b
Wall time: 0.7452 seconds
Process exited with code 0
Original token count: 53
Output:
ok  	[code-host]/evanw/esbuild/internal/runtime	0.087s
ok  	[code-host]/evanw/esbuild/internal/bundler_tests	0.710s
ok  	[code-host]/evanw/esbuild/internal/compat	0.001s
ok  	[code-host]/evanw/esbuild/pkg/api	0.001s
The CLI output for both targets uses `__asyncGenerator`, `__yieldStar`, and `__forAwait`, has no native async-generator or for-await syntax, and matches the native Node trace. I’m running the repository-wide Go test sweep now to catch any package-level fallout.
shell
go test ./...
output
Chunk ID: 1b53df
Wall time: 2.7481 seconds
Process exited with code 0
Original token count: 436
Output:
?   	[code-host]/evanw/esbuild/cmd/esbuild	[no test files]
?   	[code-host]/evanw/esbuild/internal/api_helpers	[no test files]
?   	[code-host]/evanw/esbuild/internal/ast	[no test files]
?   	[code-host]/evanw/esbuild/internal/bundler	[no test files]
ok  	[code-host]/evanw/esbuild/internal/bundler_tests	0.981s
?   	[code-host]/evanw/esbuild/internal/cache	[no test files]
?   	[code-host]/evanw/esbuild/internal/cli_helpers	[no test files]
ok  	[code-host]/evanw/esbuild/internal/compat	0.001s
?   	[code-host]/evanw/esbuild/internal/config	[no test files]
?   	[code-host]/evanw/esbuild/internal/css_ast	[no test files]
ok  	[code-host]/evanw/esbuild/internal/css_lexer	0.001s
ok  	[code-host]/evanw/esbuild/internal/css_parser	0.028s
ok  	[code-host]/evanw/esbuild/internal/css_printer	0.003s
ok  	[code-host]/evanw/esbuild/internal/fs	0.001s
?   	[code-host]/evanw/esbuild/internal/graph	[no test files]
ok  	[code-host]/evanw/esbuild/internal/helpers	0.001s
ok  	[code-host]/evanw/esbuild/internal/js_ast	0.001s
ok  	[code-host]/evanw/esbuild/internal/js_lexer	0.002s
ok  	[code-host]/evanw/esbuild/internal/js_parser	0.167s
ok  	[code-host]/evanw/esbuild/internal/js_printer	0.015s
?   	[code-host]/evanw/esbuild/internal/linker	[no test files]
ok  	[code-host]/evanw/esbuild/internal/logger	0.001s
?   	[code-host]/evanw/esbuild/internal/renamer	[no test files]
ok  	[code-host]/evanw/esbuild/internal/resolver	0.001s
ok  	[code-host]/evanw/esbuild/internal/runtime	0.096s
?   	[code-host]/evanw/esbuild/internal/sourcemap	[no test files]
?   	[code-host]/evanw/esbuild/internal/test	[no test files]
?   	[code-host]/evanw/esbuild/internal/xxhash	[no test files]
ok  	[code-host]/evanw/esbuild/pkg/api	0.001s
?   	[code-host]/evanw/esbuild/pkg/cli	[no test files]
All Go tests pass. I’m doing one final read of the changed helper and regression test so the final summary can be precise.
shell
sed -n '412,442p' internal/runtime/runtime.go
output
Chunk ID: 42afc7
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 319
Output:
		// These help for lowering async generator functions
		export var __await = function (promise, isYieldStar) {
			this[0] = promise
			this[1] = isYieldStar
		}
		export var __asyncGenerator = (__this, __arguments, generator) => {
			var resume = (k, v, yes, no) => {
				try {
					var x = generator[k](v), isAwait = (v = x.value) instanceof __await, done = x.done
					Promise.resolve(isAwait ? v[0] : v)
						.then(y => isAwait
							? resume(v[1] && k === 'return' ? 'return' : 'next', v[1] ? { done: y.done, value: y.value } : y, yes, no)
							: yes({ value: y, done }))
						.catch(e => resume('throw', e, yes, no))
				} catch (e) {
					no(e)
				}
			}, method = k => it[k] = x => {
				var run, promise = new Promise((yes, no) => {
					run = () => resume(k, x, yes, no)
					wait ? wait.then(k === 'return' ? () => Promise.resolve().then(run) : run, k === 'return' ? () => Promise.resolve().then(run) : run) : run()
				})
				return wait = promise,
					promise.then(() => wait === promise && (wait = null), () => wait === promise && (wait = null)),
					promise
			}, it = {}, wait
			return generator = generator.apply(__this, __arguments),
				it[__knownSymbol('asyncIterator')] = () => it,
				method('next'),
				method('throw'),
				method('return'),
shell
sed -n '1,260p' internal/runtime/runtime_test.go
output
Chunk ID: 82a37b
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 1677
Output:
package runtime_test

import (
	"os/exec"
	"strings"
	"testing"

	"[code-host]/evanw/esbuild/internal/compat"
	"[code-host]/evanw/esbuild/internal/config"
	"[code-host]/evanw/esbuild/internal/js_parser"
	"[code-host]/evanw/esbuild/internal/logger"
	"[code-host]/evanw/esbuild/internal/runtime"
	"[code-host]/evanw/esbuild/pkg/api"
)

func TestUnsupportedFeatures(t *testing.T) {
	for key, feature := range compat.StringToJSFeature {
		t.Run(key, func(t *testing.T) {
			source := runtime.Source(feature)
			log := logger.NewDeferLog(logger.DeferLogAll, nil)

			js_parser.Parse(log, source, js_parser.OptionsFromConfig(&config.Options{
				UnsupportedJSFeatures: feature,
				TreeShaking:           true,
			}))

			if log.HasErrors() {
				msgs := "Internal error: failed to parse runtime:\n"
				for _, msg := range log.Done() {
					msgs += msg.String(logger.OutputOptions{IncludeSource: true}, logger.TerminalInfo{})
				}
				t.Fatal(msgs[:len(msgs)-1])
			}
		})
	}
}

func TestAsyncGeneratorLoweringConcurrentCalls(t *testing.T) {
	node, err := exec.LookPath("node")
	if err != nil {
		t.Skip("node not found")
	}

	source := `
let trace = [];
let gate;
let release;
function reset(name) {
  trace.push('case ' + name);
  gate = new Promise(r => release = r);
}
function watch(name, promise) {
  promise.then(
    value => trace.push(name + ' ' + JSON.stringify(value)),
    error => trace.push(name + ' throw ' + (error && error.message || error))
  );
}
async function delegatedReturnOne() {
  reset('delegated-return-one');
  async function* inner() {
    trace.push('inner start');
    try {
      const back = yield await gate.then(() => (trace.push('await done'), 'first'));
      trace.push('after first ' + back);
      yield 'second';
    } finally {
      trace.push('finally before cleanup');
      const back = yield 'cleanup';
      trace.push('finally after cleanup ' + back);
    }
  }
  async function* outer() {
    trace.push('outer start');
    yield* inner();
    trace.push('outer after yieldstar');
  }
  let it = outer();
  let p1 = it.next();
  trace.push('after next1');
  let p2 = it.return('done');
  trace.push('after return');
  watch('p1', p1);
  watch('p2', p2);
  release();
  await Promise.allSettled([p1, p2]);
}
async function delegatedReturnMany() {
  reset('delegated-return-many');
  async function* inner() {
    try {
      trace.push('many try');
      const back = yield await gate.then(() => (trace.push('many await'), 'first'));
      trace.push('many after first ' + back);
      yield 'second';
    } finally {
      trace.push('many finally before');
      const back = yield 'cleanup';
      trace.push('many finally after ' + back);
    }
  }
  async function* outer() { yield* inner(); trace.push('many outer after'); }
  let it = outer();
  let p1 = it.next();
  let p2 = it.next('two');
  let p3 = it.return('done');
  let p4 = it.next('after');
  watch('p1', p1);
  watch('p2', p2);
  watch('p3', p3);
  watch('p4', p4);
  release();
  await Promise.allSettled([p1, p2, p3, p4]);
}
async function delegatedThrowCatch() {
  reset('delegated-throw-catch');
  async function* inner() {
    trace.push('throw start');
    try {
      const back = yield await gate.then(() => (trace.push('throw await'), 'first'));
      trace.push('throw after ' + back);
    } catch (e) {
      trace.push('throw catch ' + e);
      const back = yield 'recovery';
      trace.push('throw after recovery ' + back);
    } finally {
      trace.push('throw finally');
    }
  }
  async function* outer() { yield* inner(); trace.push('throw outer after'); }
  let it = outer();
  let p1 = it.next();
  let p2 = it.throw('boom');
  let p3 = it.next('after');
  watch('p1', p1);
  watch('p2', p2);
  watch('p3', p3);
  release();
  await Promise.allSettled([p1, p2, p3]);
}
async function forAwaitReturn() {
  reset('for-await-return');
  async function* src() {
    try {
      trace.push('src start');
      yield await gate.then(() => (trace.push('src await'), 'one'));
      trace.push('src after');
    } finally {
      trace.push('src finally');
      yield 'src cleanup';
      trace.push('src finally after');
    }
  }
  async function* outer() {
    for await (let x of src()) {
      trace.push('loop ' + x);
      yield x;
    }
    trace.push('loop after');
  }
  let it = outer();
  let p1 = it.next();
  let p2 = it.return('done');
  let p3 = it.next('after');
  watch('p1', p1);
  watch('p2', p2);
  watch('p3', p3);
  release();
  await Promise.allSettled([p1, p2, p3]);
}
async function awaitInFinallyReturn() {
  reset('await-in-finally-return');
  async function* gen() {
    try {
      trace.push('await finally start');
      yield 'a';
    } finally {
      trace.push('await finally before');
      await gate.then(() => trace.push('await finally gate'));
      trace.push('await finally after await');
      const back = yield 'cleanup';
      trace.push('await finally after cleanup ' + back);
    }
  }
  let it = gen();
  let p1 = it.next();
  let p2 = it.return('done');
  let p3 = it.next('after');
  watch('p1', p1);
  watch('p2', p2);
  watch('p3', p3);
  release();
  await Promise.allSettled([p1, p2, p3]);
}
async function main() {
  await delegatedReturnOne();
  await delegatedReturnMany();
  await delegatedThrowCatch();
  await forAwaitReturn();
  await awaitInFinallyReturn();
  console.log(JSON.stringify(trace));
}
main().catch(e => { console.log('ERROR ' + (e && e.stack || e)); process.exitCode = 1; });
`

	runNode := func(name string, code string) string {
		t.Helper()
		cmd := exec.Command(node, "-e", code)
		bytes, err := cmd.CombinedOutput()
		if err != nil {
			t.Fatalf("%s failed: %v\n%s", name, err, bytes)
		}
		return string(bytes)
	}

	expected := runNode("native", source)
	for _, target := range []struct {
		name   string
		target api.Target
	}{
		{"es2017", api.ES2017},
		{"es2015", api.ES2015},
	} {
		t.Run(target.name, func(t *testing.T) {
			result := api.Transform(source, api.TransformOptions{
				Target: target.target,
				Format: api.FormatCommonJS,
			})
			if len(result.Errors) > 0 {
				t.Fatalf("transform failed: %v", result.Errors)
			}

			code := string(result.Code)
			for _, text := range []string{"__asyncGenerator", "__yieldStar", "__forAwait"} {
				if !strings.Contains(code, text) {
					t.Fatalf("expected lowered output to contain %q", text)
				}
			}
			for _, text := range []string{"async function*", "for await"} {
				if strings.Contains(code, text) {
					t.Fatalf("expected lowered output to not contain %q", text)
				}
			}

			if actual := runNode(target.name, code); actual != expected {
				t.Fatalf("mismatch\nexpected: %s\nactual:   %s", expected, actual)
			}
		})
	}
}
shell
sed -n '260,520p' internal/runtime/runtime_test.go
output
Chunk ID: 723b7f
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 0
Output:
shell
nl -ba internal/runtime/runtime.go | sed -n '417,439p'
output
Chunk ID: edf3fc
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 303
Output:
   417			export var __asyncGenerator = (__this, __arguments, generator) => {
   418				var resume = (k, v, yes, no) => {
   419					try {
   420						var x = generator[k](v), isAwait = (v = x.value) instanceof __await, done = x.done
   421						Promise.resolve(isAwait ? v[0] : v)
   422							.then(y => isAwait
   423								? resume(v[1] && k === 'return' ? 'return' : 'next', v[1] ? { done: y.done, value: y.value } : y, yes, no)
   424								: yes({ value: y, done }))
   425							.catch(e => resume('throw', e, yes, no))
   426					} catch (e) {
   427						no(e)
   428					}
   429				}, method = k => it[k] = x => {
   430					var run, promise = new Promise((yes, no) => {
   431						run = () => resume(k, x, yes, no)
   432						wait ? wait.then(k === 'return' ? () => Promise.resolve().then(run) : run, k === 'return' ? () => Promise.resolve().then(run) : run) : run()
   433					})
   434					return wait = promise,
   435						promise.then(() => wait === promise && (wait = null), () => wait === promise && (wait = null)),
   436						promise
   437				}, it = {}, wait
   438				return generator = generator.apply(__this, __arguments),
   439					it[__knownSymbol('asyncIterator')] = () => it,
shell
nl -ba internal/runtime/runtime_test.go | sed -n '35,240p'
output
Chunk ID: 58cae8
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 1756
Output:
    35		}
    36	}
    37	
    38	func TestAsyncGeneratorLoweringConcurrentCalls(t *testing.T) {
    39		node, err := exec.LookPath("node")
    40		if err != nil {
    41			t.Skip("node not found")
    42		}
    43	
    44		source := `
    45	let trace = [];
    46	let gate;
    47	let release;
    48	function reset(name) {
    49	  trace.push('case ' + name);
    50	  gate = new Promise(r => release = r);
    51	}
    52	function watch(name, promise) {
    53	  promise.then(
    54	    value => trace.push(name + ' ' + JSON.stringify(value)),
    55	    error => trace.push(name + ' throw ' + (error && error.message || error))
    56	  );
    57	}
    58	async function delegatedReturnOne() {
    59	  reset('delegated-return-one');
    60	  async function* inner() {
    61	    trace.push('inner start');
    62	    try {
    63	      const back = yield await gate.then(() => (trace.push('await done'), 'first'));
    64	      trace.push('after first ' + back);
    65	      yield 'second';
    66	    } finally {
    67	      trace.push('finally before cleanup');
    68	      const back = yield 'cleanup';
    69	      trace.push('finally after cleanup ' + back);
    70	    }
    71	  }
    72	  async function* outer() {
    73	    trace.push('outer start');
    74	    yield* inner();
    75	    trace.push('outer after yieldstar');
    76	  }
    77	  let it = outer();
    78	  let p1 = it.next();
    79	  trace.push('after next1');
    80	  let p2 = it.return('done');
    81	  trace.push('after return');
    82	  watch('p1', p1);
    83	  watch('p2', p2);
    84	  release();
    85	  await Promise.allSettled([p1, p2]);
    86	}
    87	async function delegatedReturnMany() {
    88	  reset('delegated-return-many');
    89	  async function* inner() {
    90	    try {
    91	      trace.push('many try');
    92	      const back = yield await gate.then(() => (trace.push('many await'), 'first'));
    93	      trace.push('many after first ' + back);
    94	      yield 'second';
    95	    } finally {
    96	      trace.push('many finally before');
    97	      const back = yield 'cleanup';
    98	      trace.push('many finally after ' + back);
    99	    }
   100	  }
   101	  async function* outer() { yield* inner(); trace.push('many outer after'); }
   102	  let it = outer();
   103	  let p1 = it.next();
   104	  let p2 = it.next('two');
   105	  let p3 = it.return('done');
   106	  let p4 = it.next('after');
   107	  watch('p1', p1);
   108	  watch('p2', p2);
   109	  watch('p3', p3);
   110	  watch('p4', p4);
   111	  release();
   112	  await Promise.allSettled([p1, p2, p3, p4]);
   113	}
   114	async function delegatedThrowCatch() {
   115	  reset('delegated-throw-catch');
   116	  async function* inner() {
   117	    trace.push('throw start');
   118	    try {
   119	      const back = yield await gate.then(() => (trace.push('throw await'), 'first'));
   120	      trace.push('throw after ' + back);
   121	    } catch (e) {
   122	      trace.push('throw catch ' + e);
   123	      const back = yield 'recovery';
   124	      trace.push('throw after recovery ' + back);
   125	    } finally {
   126	      trace.push('throw finally');
   127	    }
   128	  }
   129	  async function* outer() { yield* inner(); trace.push('throw outer after'); }
   130	  let it = outer();
   131	  let p1 = it.next();
   132	  let p2 = it.throw('boom');
   133	  let p3 = it.next('after');
   134	  watch('p1', p1);
   135	  watch('p2', p2);
   136	  watch('p3', p3);
   137	  release();
   138	  await Promise.allSettled([p1, p2, p3]);
   139	}
   140	async function forAwaitReturn() {
   141	  reset('for-await-return');
   142	  async function* src() {
   143	    try {
   144	      trace.push('src start');
   145	      yield await gate.then(() => (trace.push('src await'), 'one'));
   146	      trace.push('src after');
   147	    } finally {
   148	      trace.push('src finally');
   149	      yield 'src cleanup';
   150	      trace.push('src finally after');
   151	    }
   152	  }
   153	  async function* outer() {
   154	    for await (let x of src()) {
   155	      trace.push('loop ' + x);
   156	      yield x;
   157	    }
   158	    trace.push('loop after');
   159	  }
   160	  let it = outer();
   161	  let p1 = it.next();
   162	  let p2 = it.return('done');
   163	  let p3 = it.next('after');
   164	  watch('p1', p1);
   165	  watch('p2', p2);
   166	  watch('p3', p3);
   167	  release();
   168	  await Promise.allSettled([p1, p2, p3]);
   169	}
   170	async function awaitInFinallyReturn() {
   171	  reset('await-in-finally-return');
   172	  async function* gen() {
   173	    try {
   174	      trace.push('await finally start');
   175	      yield 'a';
   176	    } finally {
   177	      trace.push('await finally before');
   178	      await gate.then(() => trace.push('await finally gate'));
   179	      trace.push('await finally after await');
   180	      const back = yield 'cleanup';
   181	      trace.push('await finally after cleanup ' + back);
   182	    }
   183	  }
   184	  let it = gen();
   185	  let p1 = it.next();
   186	  let p2 = it.return('done');
   187	  let p3 = it.next('after');
   188	  watch('p1', p1);
   189	  watch('p2', p2);
   190	  watch('p3', p3);
   191	  release();
   192	  await Promise.allSettled([p1, p2, p3]);
   193	}
   194	async function main() {
   195	  await delegatedReturnOne();
   196	  await delegatedReturnMany();
   197	  await delegatedThrowCatch();
   198	  await forAwaitReturn();
   199	  await awaitInFinallyReturn();
   200	  console.log(JSON.stringify(trace));
   201	}
   202	main().catch(e => { console.log('ERROR ' + (e && e.stack || e)); process.exitCode = 1; });
   203	`
   204	
   205		runNode := func(name string, code string) string {
   206			t.Helper()
   207			cmd := exec.Command(node, "-e", code)
   208			bytes, err := cmd.CombinedOutput()
   209			if err != nil {
   210				t.Fatalf("%s failed: %v\n%s", name, err, bytes)
   211			}
   212			return string(bytes)
   213		}
   214	
   215		expected := runNode("native", source)
   216		for _, target := range []struct {
   217			name   string
   218			target api.Target
   219		}{
   220			{"es2017", api.ES2017},
   221			{"es2015", api.ES2015},
   222		} {
   223			t.Run(target.name, func(t *testing.T) {
   224				result := api.Transform(source, api.TransformOptions{
   225					Target: target.target,
   226					Format: api.FormatCommonJS,
   227				})
   228				if len(result.Errors) > 0 {
   229					t.Fatalf("transform failed: %v", result.Errors)
   230				}
   231	
   232				code := string(result.Code)
   233				for _, text := range []string{"__asyncGenerator", "__yieldStar", "__forAwait"} {
   234					if !strings.Contains(code, text) {
   235						t.Fatalf("expected lowered output to contain %q", text)
   236					}
   237				}
   238				for _, text := range []string{"async function*", "for await"} {
   239					if strings.Contains(code, text) {
   240						t.Fatalf("expected lowered output to not contain %q", text)
shell
nl -ba internal/runtime/runtime_test.go | sed -n '240,255p'
output
Chunk ID: b636f4
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 75
Output:
   240						t.Fatalf("expected lowered output to not contain %q", text)
   241					}
   242				}
   243	
   244				if actual := runNode(target.name, code); actual != expected {
   245					t.Fatalf("mismatch\nexpected: %s\nactual:   %s", expected, actual)
   246				}
   247			})
   248		}
   249	}
Implemented the async generator lowering fix. Changed [internal/runtime/runtime.go](/app/internal/runtime/runtime.go:417): - `__asyncGenerator` now chains `next`/`throw`/`return` calls through a promise-valued queue. - The first call still starts synchronously. - Queued `next`/`throw` resume directly from the previous promise. - Queued `return` waits one extra promise turn so prior yielded results are observed before cleanup/finally work runs. - `yield*` return handoff still resumes through the `return` path, while lowered internal `await` resumes with `next`. Added a Node-backed regression in [internal/runtime/runtime_test.go](/app/internal/runtime/runtime_test.go:38) comparing native Node traces against lowered `es2017` and `es2015` output, including delegated async generators, queued `return`, queued `throw`, `for await`, cleanup yields, and values sent back into suspended yields. Verified: - `go build ./cmd/...` - `go test ./...` - CLI bundled `--target=es2017` and `--target=es6` output uses `__asyncGenerator`, `__yieldStar`, and `__forAwait` - CLI bundled output contains no native `async function*` or `for await` - Lowered CLI output matches the native Node JSON trace for the concurrent-call suite.
Final diff , what the agent changed

No file changes, the agent left the workspace untouched.

Verifier output , the proof behind the reward
tests/test.sh
============================= test session starts ==============================
platform linux -- Python 3.11.2, pytest-8.3.3, pluggy-1.6.0 -- /opt/test-venv/bin/python3
cachedir: .pytest_cache
rootdir: /tests
collecting ... collected 6 items

../tests/test_outputs.py::test_async_generator_lowering_matches_native PASSED [ 16%]
../tests/test_outputs.py::test_bundled_output_uses_lowered_async_generator_helpers PASSED [ 33%]
../tests/test_outputs.py::test_case_roster_actually_ran PASSED           [ 50%]
../tests/test_outputs.py::test_output_is_json_trace PASSED               [ 66%]
../tests/test_outputs.py::test_async_generator_compatibility_targets_still_require_lowering PASSED [ 83%]
../tests/test_outputs.py::test_no_hardcoded_hidden_literals PASSED       [100%]

==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED ../tests/test_outputs.py::test_async_generator_lowering_matches_native
PASSED ../tests/test_outputs.py::test_bundled_output_uses_lowered_async_generator_helpers
PASSED ../tests/test_outputs.py::test_case_roster_actually_ran
PASSED ../tests/test_outputs.py::test_output_is_json_trace
PASSED ../tests/test_outputs.py::test_async_generator_compatibility_targets_still_require_lowering
PASSED ../tests/test_outputs.py::test_no_hardcoded_hidden_literals
============================== 6 passed in 3.09s ===============================

Reproduce this trial: git checkout 2f94510 && PYTHONPATH=src python3 scripts/build_site.py , then open trial/trial_966964209fd748cd. Re-running the agent live requires EVAL_PLATFORM_ENABLE_OAUTH_SMOKE=1 and is non-deterministic.

Trial trial_966964209fd748cd · verifier authoritative; classifier explanatory.