tests/test.sh exit code (0 → resolved); the classification below is post-hoc and cannot change it.rg -n "asyncGenerator|yieldStar|forAwait|async generator|for-await" internal test scripts cmd
Chunk ID: b85d24
Wall time: 0.0000 seconds
Process exited with code 2
Original token count: 2912
Output:
rg: test: No such file or directory (os error 2)
rg: scripts: No such file or directory (os error 2)
internal/compat/js_table.go:151: "for-await": ForAwait,
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/compat/js_table.go:507: // Note: The latest version of "Hermes" failed this test: Asynchronous Iterators: for-await-of loops
internal/compat/js_table.go:508: // Note: The latest version of "IE" failed this test: Asynchronous Iterators: for-await-of loops
internal/compat/js_table.go:509: // Note: The latest version of "Rhino" failed this test: Asynchronous Iterators: for-await-of loops
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: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: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/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:468: // This helps for lowering for-await loops
internal/runtime/runtime.go:469: export var __forAwait = (obj, it, method) =>
internal/js_parser/js_parser.go:7751: // If for-await loops aren't supported, then we only support lowering
internal/js_parser/js_parser.go:7753: // cannot lower for-await loops.
internal/js_parser/js_parser.go:10832: // Returning undefined is implicit except when inside an async generator
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:14765: // "yield* x" turns into "yield* __yieldStar(x)" when lowering async generator functions
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:73: name = "async generator functions"
internal/js_parser/js_parser_lower.go:76: name = "for-await loops"
internal/js_parser/js_parser_lower.go:343: // Lower async functions and async generator functions
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: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_test.go:812: // This is ok because for-await can be lowered to await
internal/js_parser/js_parser_lower_test.go:815: // This is ok because for-await can be lowered to yield
internal/js_parser/js_parser_lower_test.go:818: // This is not ok because for-await can't be lowered
internal/js_parser/js_parser_lower_test.go:821: "<stdin>: ERROR: Transforming for-await loops to the configured target environment is not supported yet\n"
internal/js_parser/js_parser_lower_test.go:824: // Can't use for-await at the top-level without top-level await
sed -n '1,260p' internal/runtime/runtime.go
Chunk ID: 06fdd5
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
}
git status --short
Chunk ID: c59765 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
sed -n '400,490p' internal/runtime/runtime.go
Chunk ID: 46a2c3
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 752
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)
// This is for the "binary" loader (custom code is ~2x faster than "atob")
export var __toBinaryNode = Uint8Array.fromBase64 || (base64 => new Uint8Array(Buffer.from(base64, 'base64')))
export var __toBinary = Uint8Array.fromBase64 || /* @__PURE__ */ (() => {
var table = new Uint8Array(128)
for (var i = 0; i < 64; i++) table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i
rg -n "asyncGenerator|yieldStar|forAwait|AsyncGenerator|ForAwait" internal/*_tests internal cmd
Chunk ID: f4a46c
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 6027
Output:
internal/bundler_tests/bundler_lower_test.go:2343:func TestLowerForAwait2017(t *testing.T) {
internal/bundler_tests/bundler_lower_test.go:2366:func TestLowerForAwait2015(t *testing.T) {
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/bundler_tests/bundler_lower_test.go:3148:func TestForAwaitWithOptionalCatchIssue4378(t *testing.T) {
internal/bundler_tests/bundler_lower_test.go:3161: UnsupportedJSFeatures: compat.ForAwait,
internal/bundler_tests/bundler_lower_test.go:2343:func TestLowerForAwait2017(t *testing.T) {
internal/bundler_tests/bundler_lower_test.go:2366:func TestLowerForAwait2015(t *testing.T) {
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/bundler_tests/bundler_lower_test.go:3148:func TestForAwaitWithOptionalCatchIssue4378(t *testing.T) {
internal/bundler_tests/bundler_lower_test.go:3161: UnsupportedJSFeatures: compat.ForAwait,
internal/bundler_tests/snapshots/snapshots_lower.txt:20:TestForAwaitWithOptionalCatchIssue4378
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:2072:TestLowerForAwait2015
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:2180:TestLowerForAwait2017
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_tests/snapshots/snapshots_lower.txt:20:TestForAwaitWithOptionalCatchIssue4378
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:2072:TestLowerForAwait2015
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:2180:TestLowerForAwait2017
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/runtime/runtime.go:38: // __asyncGenerator
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_printer/js_printer.go:1998: isInsideForAwait
internal/js_printer/js_printer.go:3150: ((flags&isFollowedByOf) != 0 && (flags&isInsideForAwait) == 0 && name == "async"))
internal/js_printer/js_printer.go:4466: flags |= isInsideForAwait
internal/js_parser/js_parser.go:3023: if !isArrowFn && (flags&exprFlagForAwaitLoopInit) == 0 && p.lexer.Raw() == "of" {
internal/js_parser/js_parser.go:3489: exprFlagForAwaitLoopInit
internal/js_parser/js_parser.go:4995: if opts.isForAwaitLoopInit {
internal/js_parser/js_parser.go:4996: flags |= exprFlagForAwaitLoopInit
internal/js_parser/js_parser.go:7044: isForAwaitLoopInit bool
internal/js_parser/js_parser.go:7754: p.markSyntaxFeature(compat.ForAwait, awaitRange)
internal/js_parser/js_parser.go:7797: isForAwaitLoopInit: awaitRange.Len > 0,
internal/js_parser/js_parser.go:10649: if loop, ok := try.Block.Stmts[0].Data.(*js_ast.SFor); ok && loop.IsLoweredForAwait {
internal/js_parser/js_parser.go:11062: (p.options.unsupportedJSFeatures.Has(compat.AsyncGenerator) && p.fnOrArrowDataVisit.isGenerator) {
internal/js_parser/js_parser.go:11073: if s.Await.Len > 0 && (p.options.unsupportedJSFeatures.Has(compat.ForAwait) ||
internal/js_parser/js_parser.go:11074: (p.options.unsupportedJSFeatures.Has(compat.AsyncGenerator) && p.fnOrArrowDataVisit.isGenerator)) {
internal/js_parser/js_parser.go:11075: return p.lowerForAwaitLoop(stmt.Loc, s, stmts)
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:75: case compat.ForAwait:
internal/js_parser/js_parser_lower.go:249: feature = compat.AsyncGenerator
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:1051: if p.fnOrArrowDataVisit.isGenerator && (p.options.unsupportedJSFeatures.Has(compat.AsyncAwait) || p.options.unsupportedJSFeatures.Has(compat.AsyncGenerator)) {
internal/js_parser/js_parser_lower.go:1070:func (p *parser) lowerForAwaitLoop(loc logger.Loc, loop *js_ast.SForOf, stmts []js_ast.Stmt) []js_ast.Stmt {
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:1163: IsLoweredForAwait: true,
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/compat/js_table.go:67: AsyncGenerator
internal/compat/js_table.go:87: ForAwait
internal/compat/js_table.go:131: "async-generator": AsyncGenerator,
internal/compat/js_table.go:151: "for-await": ForAwait,
internal/compat/js_table.go:249: AsyncGenerator: {
internal/compat/js_table.go:506: ForAwait: {
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/js_ast/js_ast.go:1107: IsLoweredForAwait bool
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)
internal/js_parser/js_parser_lower_test.go:807:func TestForAwait(t *testing.T) {
internal/js_parser/js_parser_lower_test.go:813: expectParseErrorWithUnsupportedFeatures(t, compat.ForAwait|compat.Generator, "async function gen() { for await (x of y) ; }", err)
internal/js_parser/js_parser_lower_test.go:816: expectParseErrorWithUnsupportedFeatures(t, compat.ForAwait|compat.AsyncAwait, "async function gen() { for await (x of y) ; }", err)
internal/js_parser/js_parser_lower_test.go:822: expectParseErrorWithUnsupportedFeatures(t, compat.ForAwait|compat.AsyncAwait|compat.Generator, "async function gen() { for await (x of y) ; }", err)
rg --files -g '*test.go' internal | sed -n '1,120p'
Chunk ID: 0d5f21 Wall time: 0.0000 seconds Process exited with code 0 Original token count: 317 Output: internal/bundler_tests/bundler_dce_test.go internal/bundler_tests/bundler_glob_test.go internal/bundler_tests/bundler_lower_test.go internal/bundler_tests/bundler_importphase_test.go internal/bundler_tests/bundler_importstar_ts_test.go internal/bundler_tests/bundler_splitting_test.go internal/bundler_tests/bundler_test.go internal/bundler_tests/bundler_ts_test.go internal/bundler_tests/bundler_loader_test.go internal/bundler_tests/bundler_css_test.go internal/bundler_tests/bundler_yarnpnp_test.go internal/bundler_tests/bundler_packagejson_test.go internal/bundler_tests/bundler_tsconfig_test.go internal/bundler_tests/bundler_importstar_test.go internal/bundler_tests/bundler_default_test.go internal/resolver/yarnpnp_test.go internal/js_lexer/js_lexer_test.go internal/css_lexer/css_lexer_test.go internal/js_parser/ts_parser_test.go internal/js_parser/js_parser_test.go internal/js_parser/js_parser_lower_test.go internal/js_parser/json_parser_test.go internal/helpers/dataurl_test.go internal/compat/compat_test.go internal/js_ast/js_ast_test.go internal/runtime/runtime_test.go internal/js_printer/js_printer_test.go internal/css_parser/css_parser_test.go internal/css_printer/css_printer_test.go internal/fs/fs_mock_test.go internal/logger/logger_test.go
sed -n '1,240p' internal/runtime/runtime_test.go
Chunk ID: b7d584
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])
}
})
}
}
sed -n '2960,3175p' internal/bundler_tests/bundler_lower_test.go
Chunk ID: 449875
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 1405
Output:
"/hoist-export-function-direct.js",
"/hoist-export-function-indirect.js",
"/hoist-export-default-class-name-unused.js",
"/hoist-export-default-class-name-used.js",
"/hoist-export-default-class-anonymous.js",
"/hoist-export-default-function-name-unused.js",
"/hoist-export-default-function-name-used.js",
"/hoist-export-default-function-anonymous.js",
"/hoist-export-default-expr.js",
},
options: config.Options{
Mode: config.ModePassThrough,
AbsOutputDir: "/out",
UnsupportedJSFeatures: compat.Using,
},
})
}
func TestLowerUsingInsideTSNamespace(t *testing.T) {
lower_suite.expectBundled(t, bundled{
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 } }`,
"/derived-instance-field.js": `class Foo extends Bar { @dec foo = Foo }`,
"/derived-instance-accessor.js": `class Foo extends Bar { @dec accessor foo = Foo }`,
"/derived-static-method.js": `class Foo extends Bar { @dec static foo() { return Foo } }`,
"/derived-static-field.js": `class Foo extends Bar { @dec static foo = Foo }`,
"/derived-static-accessor.js": `class Foo extends Bar { @dec static accessor foo = Foo }`,
},
entryPaths: []string{"/*"},
options: config.Options{
Mode: config.ModeBundle,
AbsOutputDir: "/out",
UnsupportedJSFeatures: compat.Decorators,
},
})
}
// https://[code-host]/evanw/esbuild/issues/4378
func TestForAwaitWithOptionalCatchIssue4378(t *testing.T) {
lower_suite.expectBundled(t, bundled{
files: map[string]string{
"/entry.js": `
async function test(b) {
for await (const a of b) a()
}
`,
},
entryPaths: []string{"/entry.js"},
options: config.Options{
Mode: config.ModePassThrough,
AbsOutputFile: "/out.js",
UnsupportedJSFeatures: compat.ForAwait,
MinifySyntax: true,
},
})
}
ls
Chunk ID: d5d3f2 Wall time: 0.0000 seconds Process exited with code 0 Original token count: 16 Output: LICENSE.md cmd esbuild go.mod go.sum internal pkg version.txt
rg -n "node|exec|Run|runtime" internal/*_tests internal/runtime internal/helpers
Chunk ID: 47f476
Wall time: 0.0001 seconds
Process exited with code 0
Original token count: 31195
Output:
Total output lines: 1088
internal/runtime/runtime.go:1:package runtime
internal/runtime/runtime.go:3:// This is esbuild's runtime code. It contains helper functions that are
internal/runtime/runtime.go:6:// ES2015. Tree shaking automatically removes unused code from the runtime.
internal/runtime/runtime.go:13:// The runtime source is always at a special index. The index is always zero
internal/runtime/runtime.go:27: // * Running the TypeScript compiler on esbuild's output to convert ES6 to ES5
internal/runtime/runtime.go:227: // Converts the module from CommonJS to ESM. When in node mode (i.e. in an
internal/runtime/runtime.go:234: // If the importer is in node compatibility mode or this is not an ESM
internal/runtime/runtime.go:237: // "default" to the CommonJS "module.exports" for node compatibility.
internal/runtime/runtime.go:543: KeyPath: logger.Path{Text: "<runtime>"},
internal/runtime/runtime.go:544: PrettyPaths: logger.PrettyPaths{Abs: "<runtime>", Rel: "<runtime>"},
internal/runtime/runtime.go:545: IdentifierName: "runtime",
internal/runtime/runtime_test.go:1:package runtime_test
internal/runtime/runtime_test.go:10: "[code-host]/evanw/esbuild/internal/runtime"
internal/runtime/runtime_test.go:15: t.Run(key, func(t *testing.T) {
internal/runtime/runtime_test.go:16: source := runtime.Source(feature)
internal/runtime/runtime_test.go:25: msgs := "Internal error: failed to parse runtime:\n"
internal/bundler_tests/bundler_loader_test.go:1261: AutomaticRuntime: true,
internal/bundler_tests/bundler_loader_test.go:1529:// to node's implicit "index.js" path resolution logic.
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:2348:// Calls to the runtime "__publicField" function are not considered side effects
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_css_test.go:1280: "/node_modules/b/2.png": `b-2-node_modules`,
internal/bundler_tests/bundler_css_test.go:1282: "/node_modules/c/3.png": `c-3-node_modules`,
internal/bundler_tests/bundler_css_test.go:2408: "/node_modules/pkg/empty.js": ``,
internal/bundler_tests/bundler_css_test.go:2409: "/node_modules/pkg/empty.esm.js": `export {}`,
internal/bundler_tests/bundler_css_test.go:2410: "/node_modules/pkg/empty.json": `{}`,
internal/bundler_tests/bundler_css_test.go:2411: "/node_modules/pkg/empty.css": ``,
internal/bundler_tests/bundler_css_test.go:2412: "/node_modules/pkg/empty.global-css": ``,
internal/bundler_tests/bundler_css_test.go:2413: "/node_modules/pkg/empty.local-css": ``,
internal/bundler_tests/bundler_css_test.go:2415: // Files inside of "node_modules" should not generate a warning
internal/bundler_tests/bundler_css_test.go:2416: "/node_modules/pkg/index.js": `
internal/bundler_tests/bundler_css_test.go:2452:entry.js: WARNING: Import "foo" will always be undefined because the file "node_modules/pkg/empty.js" has no exports
internal/bundler_tests/bundler_css_test.go:2453:entry.js: WARNING: Import "foo" will always be undefined because there is no matching export in "node_modules/pkg/empty.esm.js"
internal/bundler_tests/bundler_css_test.go:2454:entry.js: WARNING: Import "foo" will always be undefined because there is no matching export in "node_modules/pkg/empty.json"
internal/bundler_tests/bundler_css_test.go:2455:entry.js: WARNING: Import "foo" will always be undefined because there is no matching export in "node_modules/pkg/empty.css"
internal/bundler_tests/bundler_css_test.go:2456:entry.js: WARNING: Import "foo" will always be undefined because there is no matching export in "node_modules/pkg/…21195 tokens truncated…pshots_packagejson.txt:661:// Users/user/project/node_modules/pkg/node.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:667:// Users/user/project/node_modules/pkg1/dir/bar.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:673:// Users/user/project/node_modules/pkg1/2/bar.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:676:// Users/user/project/node_modules/pkg2/1/bar.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:682:// Users/user/project/node_modules/pkg/dir/baz-foo.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:685:// Users/user/project/node_modules/pkg2/public/abc.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:688:// Users/user/project/node_modules/pkg2/public/xyz.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:694:// Users/user/project/node_modules/pkg/require.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:696: "Users/user/project/node_modules/pkg/require.js"() {
internal/bundler_tests/snapshots/snapshots_packagejson.txt:707:// Users/user/project/node_modules/pkg1/file.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:710:// Users/user/project/node_modules/pkg1/file2.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:801:// Users/user/project/src/node_modules/pkg/a.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:804:// Users/user/project/src/node_modules/pkg/b.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:807:// Users/user/project/src/node_modules/pkg/some-star/c.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:810:// Users/user/project/src/node_modules/pkg/some-slash/d.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:849:// Users/user/project/node_modules/demo-pkg/custom-main.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:851: "Users/user/project/node_modules/demo-pkg/custom-main.js"(exports, module) {
internal/bundler_tests/snapshots/snapshots_packagejson.txt:865:// Users/user/project/node_modules/demo-pkg/a.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:867: "Users/user/project/node_modules/demo-pkg/a.js"(exports, module) {
internal/bundler_tests/snapshots/snapshots_packagejson.txt:879:// Users/user/project/node_modules/demo-pkg/b.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:888:// Users/user/project/node_modules/demo-pkg/main.esm.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:899:// Users/user/project/node_modules/demo-pkg/main.js
internal/bundler_tests/snapshots/snapshots_packagejson.txt:901: "Users/user/project/node_modules/demo-pkg/main.js"(exports, module) {
internal/bundler_tests/snapshots/snapshots_packagejson.txt:932:import http from "node:http";
internal/helpers/dataurl.go:41: c, width := utf8.DecodeRuneInString(text[i:])
internal/helpers/dataurl.go:44: if c == utf8.RuneError && width == 1 {
internal/bundler_tests/snapshots/snapshots_ts.txt:1366:// node_modules/pkg/foo-js.ts
internal/bundler_tests/snapshots/snapshots_ts.txt:1369:// node_modules/pkg/foo-jsx.tsx
internal/bundler_tests/snapshots/snapshots_ts.txt:1372:// node_modules/pkg-exports/abc-js.ts
internal/bundler_tests/snapshots/snapshots_ts.txt:1375:// node_modules/pkg-exports/abc-jsx.tsx
internal/bundler_tests/snapshots/snapshots_ts.txt:1378:// node_modules/pkg-exports/lib/foo-js.ts
internal/bundler_tests/snapshots/snapshots_ts.txt:1381:// node_modules/pkg-exports/lib/foo-jsx.tsx
internal/bundler_tests/snapshots/snapshots_ts.txt:1384:// node_modules/pkg-imports/abc-js.ts
internal/bundler_tests/snapshots/snapshots_ts.txt:1387:// node_modules/pkg-imports/abc-jsx.tsx
internal/bundler_tests/snapshots/snapshots_ts.txt:1390:// node_modules/pkg-imports/lib/foo-js.ts
internal/bundler_tests/snapshots/snapshots_ts.txt:1393:// node_modules/pkg-imports/lib/foo-jsx.tsx
internal/bundler_tests/snapshots/snapshots_ts.txt:1467:// node_modules/pkg/js_ts_css.js
internal/bundler_tests/snapshots/snapshots_ts.txt:1471:// node_modules/pkg/ts_css.ts
internal/bundler_tests/snapshots/snapshots_ts.txt:1475:// node_modules/pkg/js_ts.js
internal/bundler_tests/snapshots/snapshots_ts.txt:1479:// node_modules/pkg/index.ts
internal/bundler_tests/snapshots/snapshots_ts.txt:1485:/* node_modules/pkg/js_ts_css.css */
internal/bundler_tests/snapshots/snapshots_ts.txt:1489:/* node_modules/pkg/ts_css.css */
internal/bundler_tests/snapshots/snapshots_ts.txt:1726:// Users/user/project/node_modules/package/path.js
internal/bundler_tests/snapshots/snapshots_ts.txt:1732:// Users/user/project/node_modules/package2/path.js
internal/helpers/utf.go:58: width := encodeWTF8Rune(temp[:], r1)
internal/helpers/utf.go:84: width := encodeWTF8Rune(temp[:], r1)
internal/helpers/utf.go:107: width := encodeWTF8Rune(temp[:], r1)
internal/helpers/utf.go:133:// This is a clone of "utf8.EncodeRune" that has been modified to encode using
internal/helpers/utf.go:135:func encodeWTF8Rune(p []byte, r rune) int {
internal/helpers/utf.go:146: case i > utf8.MaxRune:
internal/helpers/utf.go:147: r = utf8.RuneError
internal/helpers/utf.go:165:// This is a clone of "utf8.DecodeRuneInString" that has been modified to
internal/helpers/utf.go:168:func DecodeWTF8Rune(s string) (rune, int) {
internal/helpers/utf.go:171: return utf8.RuneError, 0
internal/helpers/utf.go:187: return utf8.RuneError, 1
internal/helpers/utf.go:191: return utf8.RuneError, 0
internal/helpers/utf.go:196: return utf8.RuneError, 1
internal/helpers/utf.go:202: return utf8.RuneError, 1
internal/helpers/utf.go:209: return utf8.RuneError, 1
internal/helpers/utf.go:215: return utf8.RuneError, 1
internal/helpers/utf.go:222: return utf8.RuneError, 1
internal/helpers/utf.go:227: return utf8.RuneError, 1
internal/helpers/typos.go:16: detector.oneCharTypos[correct[:i]+correct[i+utf8.RuneLen(ch):]] = correct
internal/helpers/typos.go:32: if corrected, ok := detector.oneCharTypos[typo[:i]+typo[i+utf8.RuneLen(ch):]]; ok {
internal/helpers/path.go:22: if base == "node_modules" {
internal/helpers/quote.go:33: lenEstimate += utf8.RuneLen(c)
internal/helpers/quote.go:63: c, width := DecodeWTF8Rune(text[i:])
internal/helpers/quote.go:70: c, width = DecodeWTF8Rune(text[i:])
internal/helpers/float.go:14:// that differs from the value obtained by executing and rounding the
internal/bundler_tests/snapshots/snapshots_default.txt:157:import fs from "node:fs/promises";
internal/bundler_tests/snapshots/snapshots_default.txt:158:import "node:what-is-this";
internal/bundler_tests/snapshots/snapshots_default.txt:205:// node_modules/fs/abc.js
internal/bundler_tests/snapshots/snapshots_default.txt:207: "node_modules/fs/abc.js"() {
internal/bundler_tests/snapshots/snapshots_default.txt:212:// node_modules/fs/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:214: "node_modules/fs/index.js"() {
internal/bundler_tests/snapshots/snapshots_default.txt:221: // These are node core modules
internal/bundler_tests/snapshots/snapshots_default.txt:224: require("node:foo"),
internal/bundler_tests/snapshots/snapshots_default.txt:225: // These are not node core modules
internal/bundler_tests/snapshots/snapshots_default.txt:703: // Comments on absent AST nodes
internal/bundler_tests/snapshots/snapshots_default.txt:757: // Comments on absent AST nodes
internal/bundler_tests/snapshots/snapshots_default.txt:1168:// outside-node-modules/index.jsx
internal/bundler_tests/snapshots/snapshots_default.txt:1171:// node_modules/inside-node-modules/index.jsx
internal/bundler_tests/snapshots/snapshots_default.txt:1575:// Annotate the CommonJS export names for ESM import in node:
internal/bundler_tests/snapshots/snapshots_default.txt:1615:// Annotate the CommonJS export names for ESM import in node:
internal/bundler_tests/snapshots/snapshots_default.txt:1752:// project/node_modules/pkg2/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:1795:#!/usr/bin/env node
internal/bundler_tests/snapshots/snapshots_default.txt:1809:// Users/user/project/node_modules/pkg/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:1818:// Users/user/project/node_modules/pkg/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:2087:// node_modules/unused/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:2270:import { Fragment as Fragment2, jsx as jsx2 } from "react/jsx-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2283:import { Fragment as Fragment2, jsx as jsx2 } from "react/jsx-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2320:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2336:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2352:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2369:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2390:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2404:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2419:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2435:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2451:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2466:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2480:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2508:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:2523:import { jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_default.txt:5493:// Annotate the CommonJS export names for ESM import in node:
internal/bundler_tests/snapshots/snapshots_default.txt:5512:// Annotate the CommonJS export names for ESM import in node:
internal/bundler_tests/snapshots/snapshots_default.txt:5522:// Users/user/project/node_modules/demo-pkg/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:5524: "Users/user/project/node_modules/demo-pkg/index.js"(exports, module) {
internal/bundler_tests/snapshots/snapshots_default.txt:5709:// node_modules/alias1/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:5712:// node_modules/alias2/foo.js
internal/bundler_tests/snapshots/snapshots_default.txt:5715:// node_modules/alias3/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:5718:// node_modules/alias4/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:5721:// node_modules/alias5/foo.js
internal/bundler_tests/snapshots/snapshots_default.txt:5736:// node_modules/prefix-foo/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:5739:// node_modules/@scope/prefix-foo/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:6213:TestRuntimeNameCollisionNoBundle
internal/bundler_tests/snapshots/snapshots_default.txt:6263:// Users/user/project/node_modules/pkg/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:6265: "Users/user/project/node_modules/pkg/index.js"(exports) {
internal/bundler_tests/snapshots/snapshots_default.txt:6288:// Users/user/project/node_modules/pkg/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:6290: "Users/user/project/node_modules/pkg/index.js"(exports) {
internal/bundler_tests/snapshots/snapshots_default.txt:6315:// Users/user/project/node_modules/pkg/index.js
internal/bundler_tests/snapshots/snapshots_default.txt:6317: "Users/user/project/node_modules/pkg/index.js"(exports) {
internal/bundler_tests/snapshots/snapshots_default.txt:6523:// node_modules/pkg/file2.js
internal/bundler_tests/snapshots/snapshots_default.txt:7276:// node_modules/return-asi.js
internal/bundler_tests/snapshots/snapshots_default.txt:7278: "node_modules/return-asi.js"() {
internal/bundler_tests/snapshots/snapshots_default.txt:7283:// plugin-dir/node_modules/return-asi.js
internal/bundler_tests/snapshots/snapshots_default.txt:7285: "plugin-dir/node_modules/return-asi.js"() {
internal/bundler_tests/snapshots/snapshots_default.txt:7296:// node_modules/dup-case.js
internal/bundler_tests/snapshots/snapshots_default.txt:7302:// plugin-dir/node_modules/dup-case.js
internal/bundler_tests/snapshots/snapshots_default.txt:7311:// node_modules/not-in.js
internal/bundler_tests/snapshots/snapshots_default.txt:7314:// plugin-dir/node_modules/not-in.js
internal/bundler_tests/snapshots/snapshots_default.txt:7320:// node_modules/not-instanceof.js
internal/bundler_tests/snapshots/snapshots_default.txt:7323:// plugin-dir/node_modules/not-instanceof.js
internal/bundler_tests/snapshots/snapshots_default.txt:7334:// node_modules/equals-neg-zero.js
internal/bundler_tests/snapshots/snapshots_default.txt:7337:// plugin-dir/node_modules/equals-neg-zero.js
internal/bundler_tests/snapshots/snapshots_default.txt:7343:// node_modules/equals-nan.js
internal/bundler_tests/snapshots/snapshots_default.txt:7346:// plugin-dir/node_modules/equals-nan.js
internal/bundler_tests/snapshots/snapshots_default.txt:7352:// node_modules/equals-object.js
internal/bundler_tests/snapshots/snapshots_default.txt:7355:// plugin-dir/node_modules/equals-object.js
internal/bundler_tests/snapshots/snapshots_default.txt:7365:// node_modules/delete-super.js
internal/bundler_tests/snapshots/snapshots_default.txt:7372:// plugin-dir/node_modules/delete-super.js
internal/helpers/stack.go:4: "runtime/debug"
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:227:// Users/user/project/node_modules/pkg/index.js
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:231:// Users/user/project/node_modules/js-pkg/index.js
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:234:// Users/user/project/node_modules/ts-pkg/index.ts
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:399:// Users/user/project/src/node_modules/foo/index.tsx
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:583:// Users/user/project/node_modules/wow/dist/first.js
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:586:// Users/user/project/node_modules/wow/dist/next.js
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:683:// Users/user/project/node_modules/fib/index.js
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:704:import { Fragment, jsx, jsxs } from "react/jsx-runtime";
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:747:import { Fragment, jsx, jsxs } from "notreact/jsx-runtime";
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:757:import { Fragment, jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/snapshots/snapshots_tsconfig.txt:779:import { Fragment, jsxDEV } from "react/jsx-dev-runtime";
internal/bundler_tests/bundler_splitting_test.go:329: "~/project/node_modules/package/index.js": `
internal/bundler_tests/bundler_test.go:139: t.Run(subName, func(t *testing.T) {
internal/bundler_tests/bundler_test.go:181: // Run the bundler
internal/bundler_tests/bundler_test.go:185: args.options.OmitRuntimeForTests = true
internal/bundler_tests/bundler_test.go:313: code := m.Run()
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 Foo = number`,
internal/bundler_tests/bundler_ts_test.go:1912: expectedScanLog: `entry.ts: WARNING: Ignoring this import because "node_modules/some-js/foo.js" was marked as having no side effects
internal/bundler_tests/bundler_ts_test.go:1913:node_modules/some-js/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_ts_test.go:1914:entry.ts: WARNING: Ignoring this import because "node_modules/some-ts/foo.ts" was marked as having no side effects
internal/bundler_tests/bundler_ts_test.go:1915:node_modules/some-ts/package.json: NOTE: "sideEffects" is false in the enclosing "package.json" file:
internal/bundler_tests/bundler_ts_test.go:2689: // We now prefer ".js" over ".ts" inside "node_modules"
internal/bundler_tests/bundler_ts_test.go:2708: "~/project/node_modules/package/path.ts": `console.log('FAILURE')`,
internal/bundler_tests/bundler_ts_test.go:2709: "~/project/node_modules/package/path.js": `console.log('success')`,
internal/bundler_tests/bundler_ts_test.go:2711: "~/project/node_modules/package2/path.ts": `console.log('FAILURE')`,
internal/bundler_tests/bundler_ts_test.go:2712: "~/project/node_modules/package2/path.js": `console.log('success')`,
internal/bundler_tests/bundler_ts_test.go:2946: "/node_modules/pkg/index.ts": `
internal/bundler_tests/bundler_ts_test.go:2954: "/node_modules/pkg/js_ts_css.js": `
internal/bundler_tests/bundler_ts_test.go:2958: "/node_modules/pkg/js_ts_css.ts": `
internal/bundler_tests/bundler_ts_test.go:2961: "/node_modules/pkg/js_ts_css.css": `
internal/bundler_tests/bundler_ts_test.go:2964: "/node_modules/pkg/ts_css.ts": `
internal/bundler_tests/bundler_ts_test.go:2968: "/node_modules/pkg/ts_css.css": `
internal/bundler_tests/bundler_ts_test.go:2971: "/node_modules/pkg/js_ts.js": `
internal/bundler_tests/bundler_ts_test.go:2974: "/node_modules/pkg/js_ts.ts": `
node - <<'JS'
let log=[];
async function* gen(){ log.push('start'); const x = yield Promise.resolve('yield'); log.push('after yield '+x); return 'ret'; }
let it=gen(); let p1=it.next('a'); log.push('after p1'); let p2=it.next('b'); log.push('after p2'); Promise.resolve().then(()=>log.push('micro')); p1.then(v=>log.push('p1 '+JSON.stringify(v))); p2.then(v=>log.push('p2 '+JSON.stringify(v))); setTimeout(()=>console.log(log),0);
JSChunk ID: 9740c1
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 37
Output:
[
'start',
'after p1',
'after p2',
'after yield b',
'micro',
'p1 {"value":"yield","done":false}',
'p2 {"value":"ret","done":true}'
]
node - <<'JS'
let log=[];
let resolve;
let gate = new Promise(r => resolve = r);
async function* inner(){ try { log.push('inner start'); yield await gate; log.push('inner after yield'); } finally { log.push('inner finally before yield'); yield 'cleanup'; log.push('inner finally after yield'); } }
async function* outer(){ log.push('outer start'); yield* inner(); log.push('outer after'); }
let it=outer(); let p1=it.next(); log.push('after next'); let pr=it.return('done'); log.push('after return'); p1.then(v=>log.push('p1 '+JSON.stringify(v))); pr.then(v=>log.push('pr '+JSON.stringify(v))); Promise.resolve().then(()=>log.push('micro1')); resolve('value'); Promise.resolve().then(()=>log.push('micro2')); setTimeout(()=>console.log(log),0);
JSChunk ID: cd6c6b
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 52
Output:
[
'outer start',
'inner start',
'after next',
'after return',
'micro1',
'micro2',
'p1 {"value":"value","done":false}',
'inner finally before yield',
'pr {"value":"cleanup","done":false}'
]
node - <<'JS'
let log=[];
let resolve;
let gate = new Promise(r => resolve = r);
async function* gen(){ try { log.push('start'); yield await gate; log.push('after yield'); } finally { log.push('finally before yield'); yield 'cleanup'; log.push('finally after yield'); } }
let it=gen(); let p1=it.next(); log.push('after next'); let pr=it.return('done'); log.push('after return'); p1.then(v=>log.push('p1 '+JSON.stringify(v))); pr.then(v=>log.push('pr '+JSON.stringify(v))); Promise.resolve().then(()=>log.push('micro1')); resolve('value'); Promise.resolve().then(()=>log.push('micro2')); setTimeout(()=>console.log(log),0);
JSChunk ID: 44a83d
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 45
Output:
[
'start',
'after next',
'after return',
'micro1',
'micro2',
'p1 {"value":"value","done":false}',
'finally before yield',
'pr {"value":"cleanup","done":false}'
]
node - <<'JS'
let log=[];
async function* gen(){ try { log.push('start'); let x = yield Promise.resolve('yield'); log.push('after yield '+x); } catch(e) { log.push('catch '+e); yield 'recovery'; log.push('after recovery'); } }
let it=gen(); let p1=it.next(); log.push('after next'); let pt=it.throw('err'); log.push('after throw'); p1.then(v=>log.push('p1 '+JSON.stringify(v))); pt.then(v=>log.push('pt '+JSON.stringify(v))); Promise.resolve().then(()=>log.push('micro')); setTimeout(()=>console.log(log),0);
JSChunk ID: 05004d
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 39
Output:
[
'start',
'after next',
'after throw',
'catch err',
'micro',
'p1 {"value":"yield","done":false}',
'pt {"value":"recovery","done":false}'
]
node - <<'JS'
let log=[];
async function* gen(){ try { log.push('start'); let x = yield await Promise.resolve('yield'); log.push('after yield '+x); } catch(e) { log.push('catch '+e); yield 'recovery'; } }
let it=gen(); let p1=it.next(); log.push('after next'); let pt=it.throw('err'); log.push('after throw'); p1.then(v=>log.push('p1 '+JSON.stringify(v))); pt.then(v=>log.push('pt '+JSON.stringify(v))); Promise.resolve().then(()=>log.push('micro')); setTimeout(()=>console.log(log),0);
JSChunk ID: 058afd
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 39
Output:
[
'start',
'after next',
'after throw',
'micro',
'catch err',
'p1 {"value":"yield","done":false}',
'pt {"value":"recovery","done":false}'
]
node - <<'JS'
async function* gen(){ yield Promise.resolve('yield') }
gen().next().then(v=>{ console.log(v.value, v.value && typeof v.value.then, JSON.stringify(v)) })
JSChunk ID: 32bd54
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 12
Output:
yield undefined {"value":"yield","done":false}
node - <<'JS'
let log=[];
let resolve;
let gate = new Promise(r=>resolve=r);
async function* gen(){ try { log.push('start'); yield await gate; log.push('after yield'); } finally { log.push('finally before yield'); let y=yield 'cleanup'; log.push('finally after yield '+y); } log.push('after finally'); }
let it=gen(); let p1=it.next(); let pr=it.return('done'); let p2=it.next('after'); p1.then(v=>log.push('p1 '+JSON.stringify(v))); pr.then(v=>log.push('pr '+JSON.stringify(v))); p2.then(v=>log.push('p2 '+JSON.stringify(v))); resolve('value'); setTimeout(()=>console.log(log),0);
JSChunk ID: 0dae91
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 47
Output:
[
'start',
'p1 {"value":"value","done":false}',
'finally before yield',
'finally after yield after',
'pr {"value":"cleanup","done":false}',
'p2 {"value":"done","done":true}'
]
node - <<'JS'
let log=[], resolve; let gate=new Promise(r=>resolve=r);
async function* gen(){ try { log.push('start'); let x=yield await gate; log.push('after yield '+x); } catch(e) { log.push('catch '+e); let y=yield 'recovery'; log.push('after recovery '+y); return 'done'; } }
let it=gen(); let p1=it.next(); let pt=it.throw('boom'); let pn=it.next('sent'); p1.then(v=>log.push('p1 '+JSON.stringify(v))); pt.then(v=>log.push('pt '+JSON.stringify(v))); pn.then(v=>log.push('pn '+JSON.stringify(v))); resolve('value'); setTimeout(()=>console.log(log),0);
JSChunk ID: 9d1bfe
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 44
Output:
[
'start',
'catch boom',
'p1 {"value":"value","done":false}',
'after recovery sent',
'pt {"value":"recovery","done":false}',
'pn {"value":"done","done":true}'
]
*** Begin Patch
*** Update File: /app/internal/runtime/runtime.go
@@
export var __asyncGenerator = (__this, __arguments, generator) => {
- var resume = (k, v, yes, no) => {
+ var resume = (k, v, yes, no, settle) => {
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))
+ ? resume(k === 'return' ? k : 'next', v[1] ? { done: y.done, value: y.value } : y, yes, no, settle)
+ : settle(yes, { value: y, done }))
+ .catch(e => resume('throw', e, yes, no, settle))
} catch (e) {
- no(e)
+ settle(no, e)
}
- }, method = k => it[k] = x => new Promise((yes, no) => resume(k, x, yes, no)), it = {}
+ }, front, back, request = (k, x) => {
+ var req, promise = new Promise((yes, no) => {
+ req = { k, x, yes, no, next: null }
+ })
+ req.promise = promise
+ return back = back ? back.next = req : front = req, front === req && run(req), promise
+ }, run = req => resume(req.k, req.x, req.yes, req.no, settle), settle = (fn, value) => {
+ var req = front
+ fn(value)
+ front = front.next
+ if (front) (front.k === 'return' ? Promise.resolve().then : fn => fn())(() => run(front))
+ else back = null
+ }, method = k => it[k] = x => request(k, x), it = {}
*** End Patch
Exit code: 0
Wall time: 0 seconds
Output:
Success. Updated the following files:
M /app/internal/runtime/runtime.go
*** Begin Patch
*** Update File: /app/internal/runtime/runtime.go
@@
var req = front
fn(value)
front = front.next
- if (front) (front.k === 'return' ? Promise.resolve().then : fn => fn())(() => run(front))
+ if (front) front.k === 'return' ? Promise.resolve().then(() => run(front)) : run(front)
else back = null
}, method = k => it[k] = x => request(k, x), it = {}
*** End Patch
Exit code: 0
Wall time: 0 seconds
Output:
Success. Updated the following files:
M /app/internal/runtime/runtime.go
gofmt -w internal/runtime/runtime.go
Chunk ID: fbadac Wall time: 0.0000 seconds Process exited with code 0 Original token count: 0 Output:
go test ./internal/runtime
Chunk ID: 08d895 Wall time: 1.7193 seconds Process exited with code 0 Original token count: 14 Output: ok [code-host]/evanw/esbuild/internal/runtime 0.029s
tmp=$(mktemp -d)
cat > "$tmp/trace.js" <<'JS'
let log = [];
let pending = [];
let wait = label => new Promise(resolve => pending.push(() => { log.push('resolve:' + label); resolve(label); }));
let result = (label, promise) => promise.then(
value => log.push(label + ':' + JSON.stringify(value)),
error => log.push(label + ':throw:' + (error && error.message || error))
);
async function* cleanupGen(name) {
try {
log.push(name + ':start');
let x = yield await wait(name + ':yield1');
log.push(name + ':after-yield1:' + x);
let y = yield await wait(name + ':yield2');
log.push(name + ':after-yield2:' + y);
} finally {
log.push(name + ':finally-before');
let z = yield await wait(name + ':cleanup');
log.push(name + ':finally-after:' + z);
}
return name + ':return';
}
async function* delegated() {
log.push('delegated:outer-start');
let value = yield* cleanupGen('delegated:inner');
log.push('delegated:outer-after:' + value);
return 'delegated:outer-return';
}
async function* throwing() {
try {
log.push('throwing:start');
let x = yield await wait('throwing:yield');
log.push('throwing:after-yield:' + x);
} catch (e) {
log.push('throwing:catch:' + e);
let y = yield 'throwing:recovery';
log.push('throwing:after-recovery:' + y);
return 'throwing:return';
}
}
async function* forAwaiting() {
try {
for await (const x of cleanupGen('forAwait:inner')) {
log.push('forAwait:item:' + x);
let y = yield x + ':outer';
log.push('forAwait:sent:' + y);
}
} finally {
log.push('forAwait:finally-before');
let z = yield 'forAwait:cleanup';
log.push('forAwait:finally-after:' + z);
}
}
async function caseDelegatedReturn() {
let it = delegated();
let p1 = it.next();
log.push('delegated:after-next1');
let p2 = it.next('second');
log.push('delegated:after-next2');
let p3 = it.return('done');
log.push('delegated:after-return');
let p4 = it.next('after');
result('delegated:p1', p1); result('delegated:p2', p2); result('delegated:p3', p3); result('delegated:p4', p4);
pending.shift()();
await p1;
pending.shift()();
await p2;
log.push('delegated:after-await-p2');
pending.shift()();
await Promise.all([p3, p4]);
}
async function caseThrow() {
let it = throwing();
let p1 = it.next();
log.push('throwing:after-next');
let p2 = it.throw('boom');
log.push('throwing:after-throw');
let p3 = it.next('sent');
result('throwing:p1', p1); result('throwing:p2', p2); result('throwing:p3', p3);
pending.shift()();
await Promise.all([p1, p2, p3]);
}
async function caseForAwaitReturn() {
let it = forAwaiting();
let p1 = it.next();
log.push('forAwait:after-next');
let p2 = it.return('stop');
log.push('forAwait:after-return');
let p3 = it.next('after');
result('forAwait:p1', p1); result('forAwait:p2', p2); result('forAwait:p3', p3);
pending.shift()();
await p1;
pending.shift()();
await Promise.all([p2, p3]);
}
async function run() {
await caseDelegatedReturn();
await caseThrow();
await caseForAwaitReturn();
return log;
}
run().then(x => console.log(JSON.stringify(x)));
JS
node "$tmp/trace.js" > "$tmp/native.txt"
go run ./cmd/esbuild "$tmp/trace.js" --target=es2017 --format=iife --log-level=warning > "$tmp/es2017.js"
node "$tmp/es2017.js" > "$tmp/es2017.txt"
go run ./cmd/esbuild "$tmp/trace.js" --target=es6 --format=iife --log-level=warning > "$tmp/es6.js"
node "$tmp/es6.js" > "$tmp/es6.txt"
printf 'native == es2017: '; cmp -s "$tmp/native.txt" "$tmp/es2017.txt" && echo yes || { echo no; diff -u "$tmp/native.txt" "$tmp/es2017.txt"; }
printf 'native == es6: '; cmp -s "$tmp/native.txt" "$tmp/es6.txt" && echo yes || { echo no; diff -u "$tmp/native.txt" "$tmp/es6.txt"; }
printf 'helpers es2017: '; grep -q __asyncGenerator "$tmp/es2017.js" && grep -q __yieldStar "$tmp/es2017.js" && grep -q __forAwait "$tmp/es2017.js" && ! grep -q 'async function\*\|for await' "$tmp/es2017.js" && echo yes || echo no
printf 'helpers es6: '; grep -q __asyncGenerator "$tmp/es6.js" && grep -q __yieldStar "$tmp/es6.js" && grep -q __forAwait "$tmp/es6.js" && ! grep -q 'async function\*\|for await' "$tmp/es6.js" && echo yes || echo no
Chunk ID: 85d57b
Wall time: 0.4545 seconds
Process exited with code 0
Original token count: 219
Output:
/tmp/tmp.CC3DejnKmK/trace.js:73
pending.shift()();
^
TypeError: pending.shift(...) is not a function
at caseDelegatedReturn (/tmp/tmp.CC3DejnKmK/trace.js:73:18)
at async run (/tmp/tmp.CC3DejnKmK/trace.js:104:3)
Node.js v22.23.0
/tmp/tmp.CC3DejnKmK/es2017.js:155
pending.shift()();
^
TypeError: pending.shift(...) is not a function
at caseDelegatedReturn (/tmp/tmp.CC3DejnKmK/es2017.js:155:20)
at async run (/tmp/tmp.CC3DejnKmK/es2017.js:187:5)
Node.js v22.23.0
/tmp/tmp.CC3DejnKmK/es6.js:176
pending.shift()();
^
TypeError: pending.shift(...) is not a function
at /tmp/tmp.CC3DejnKmK/es6.js:176:22
at Generator.next (<anonymous>)
at fulfilled (/tmp/tmp.CC3DejnKmK/es6.js:10:26)
Node.js v22.23.0
native == es2017: yes
native == es6: yes
helpers es2017: yes
helpers es6: yes
tmp=$(mktemp -d)
cat > "$tmp/trace.js" <<'JS'
let log = [];
let pending = [];
let wait = label => new Promise(resolve => pending.push(() => { log.push('resolve:' + label); resolve(label); }));
let result = (label, promise) => promise.then(
value => log.push(label + ':' + JSON.stringify(value)),
error => log.push(label + ':throw:' + (error && error.message || error))
);
let resolveNext = async () => {
while (!pending.length) await Promise.resolve();
pending.shift()();
};
async function* cleanupGen(name) {
try {
log.push(name + ':start');
let x = yield await wait(name + ':yield1');
log.push(name + ':after-yield1:' + x);
let y = yield await wait(name + ':yield2');
log.push(name + ':after-yield2:' + y);
} finally {
log.push(name + ':finally-before');
let z = yield await wait(name + ':cleanup');
log.push(name + ':finally-after:' + z);
}
return name + ':return';
}
async function* delegated() {
log.push('delegated:outer-start');
let value = yield* cleanupGen('delegated:inner');
log.push('delegated:outer-after:' + value);
return 'delegated:outer-return';
}
async function* throwing() {
try {
log.push('throwing:start');
let x = yield await wait('throwing:yield');
log.push('throwing:after-yield:' + x);
} catch (e) {
log.push('throwing:catch:' + e);
let y = yield 'throwing:recovery';
log.push('throwing:after-recovery:' + y);
return 'throwing:return';
}
}
async function* forAwaiting() {
try {
for await (const x of cleanupGen('forAwait:inner')) {
log.push('forAwait:item:' + x);
let y = yield x + ':outer';
log.push('forAwait:sent:' + y);
}
} finally {
log.push('forAwait:finally-before');
let z = yield 'forAwait:cleanup';
log.push('forAwait:finally-after:' + z);
}
}
async function caseDelegatedReturn() {
let it = delegated();
let p1 = it.next();
log.push('delegated:after-next1');
let p2 = it.next('second');
log.push('delegated:after-next2');
let p3 = it.return('done');
log.push('delegated:after-return');
let p4 = it.next('after');
result('delegated:p1', p1); result('delegated:p2', p2); result('delegated:p3', p3); result('delegated:p4', p4);
await resolveNext();
await p1;
await resolveNext();
await p2;
log.push('delegated:after-await-p2');
await resolveNext();
await Promise.all([p3, p4]);
}
async function caseThrow() {
let it = throwing();
let p1 = it.next();
log.push('throwing:after-next');
let p2 = it.throw('boom');
log.push('throwing:after-throw');
let p3 = it.next('sent');
result('throwing:p1', p1); result('throwing:p2', p2); result('throwing:p3', p3);
await resolveNext();
await Promise.all([p1, p2, p3]);
}
async function caseForAwaitReturn() {
let it = forAwaiting();
let p1 = it.next();
log.push('forAwait:after-next');
let p2 = it.return('stop');
log.push('forAwait:after-return');
let p3 = it.next('after');
result('forAwait:p1', p1); result('forAwait:p2', p2); result('forAwait:p3', p3);
await resolveNext();
await p1;
await resolveNext();
await Promise.all([p2, p3]);
}
async function run() {
await caseDelegatedReturn();
await caseThrow();
await caseForAwaitReturn();
return log;
}
run().then(x => console.log(JSON.stringify(x)));
JS
node "$tmp/trace.js" > "$tmp/native.txt"
go run ./cmd/esbuild "$tmp/trace.js" --target=es2017 --format=iife --log-level=warning > "$tmp/es2017.js"
node "$tmp/es2017.js" > "$tmp/es2017.txt"
go run ./cmd/esbuild "$tmp/trace.js" --target=es6 --format=iife --log-level=warning > "$tmp/es6.js"
node "$tmp/es6.js" > "$tmp/es6.txt"
printf 'native == es2017: '; cmp -s "$tmp/native.txt" "$tmp/es2017.txt" && echo yes || { echo no; diff -u "$tmp/native.txt" "$tmp/es2017.txt"; }
printf 'native == es6: '; cmp -s "$tmp/native.txt" "$tmp/es6.txt" && echo yes || { echo no; diff -u "$tmp/native.txt" "$tmp/es6.txt"; }
printf 'helpers es2017: '; grep -q __asyncGenerator "$tmp/es2017.js" && grep -q __yieldStar "$tmp/es2017.js" && grep -q __forAwait "$tmp/es2017.js" && ! grep -q 'async function\*\|for await' "$tmp/es2017.js" && echo yes || echo no
printf 'helpers es6: '; grep -q __asyncGenerator "$tmp/es6.js" && grep -q __yieldStar "$tmp/es6.js" && grep -q __forAwait "$tmp/es6.js" && ! grep -q 'async function\*\|for await' "$tmp/es6.js" && echo yes || echo no
Chunk ID: 2986a9
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 1498
Output:
native == es2017: no
--- /tmp/tmp.le3BhPmSTI/native.txt 2026-06-21 17:46:52.213084001 +0000
+++ /tmp/tmp.le3BhPmSTI/es2017.txt 2026-06-21 17:46:52.274084001 +0000
@@ -1 +1 @@
-["delegated:outer-start","delegated:inner:start","delegated:after-next1","delegated:after-next2","delegated:after-return","resolve:delegated:inner:yield1","delegated:inner:after-yield1:second","delegated:p1:{\"value\":\"delegated:inner:yield1\",\"done\":false}","resolve:delegated:inner:yield2","delegated:p2:{\"value\":\"delegated:inner:yield2\",\"done\":false}","delegated:after-await-p2","delegated:inner:finally-before","resolve:delegated:inner:cleanup","delegated:inner:finally-after:after","delegated:p3:{\"value\":\"delegated:inner:cleanup\",\"done\":false}","delegated:outer-after:done","delegated:p4:{\"value\":\"delegated:outer-return\",\"done\":true}","throwing:start","throwing:after-next","throwing:after-throw","resolve:throwing:yield","throwing:catch:boom","throwing:p1:{\"value\":\"throwing:yield\",\"done\":false}","throwing:after-recovery:sent","throwing:p2:{\"value\":\"throwing:recovery\",\"done\":false}","throwing:p3:{\"value\":\"throwing:return\",\"done\":true}","forAwait:inner:start","forAwait:after-next","forAwait:after-return","resolve:forAwait:inner:yield1","forAwait:item:forAwait:inner:yield1","forAwait:p1:{\"value\":\"forAwait:inner:yield1:outer\",\"done\":false}","forAwait:inner:finally-before","resolve:forAwait:inner:cleanup","forAwait:finally-before","forAwait:finally-after:after","forAwait:p2:{\"value\":\"forAwait:cleanup\",\"done\":false}","forAwait:p3:{\"value\":\"stop\",\"done\":true}"]
+["delegated:outer-start","delegated:inner:start","delegated:after-next1","delegated:after-next2","delegated:after-return","resolve:delegated:inner:yield1","delegated:inner:after-yield1:second","delegated:p1:{\"value\":\"delegated:inner:yield1\",\"done\":false}","resolve:delegated:inner:yield2","delegated:p2:{\"value\":\"delegated:inner:yield2\",\"done\":false}","delegated:after-await-p2","delegated:inner:finally-before","resolve:delegated:inner:cleanup","delegated:p3:{\"value\":\"delegated:inner:cleanup\",\"done\":true}","delegated:p4:{\"done\":true}","throwing:start","throwing:after-next","throwing:after-throw","resolve:throwing:yield","throwing:catch:boom","throwing:p1:{\"value\":\"throwing:yield\",\"done\":false}","throwing:after-recovery:sent","throwing:p2:{\"value\":\"throwing:recovery\",\"done\":false}","throwing:p3:{\"value\":\"throwing:return\",\"done\":true}","forAwait:inner:start","forAwait:after-next","forAwait:after-return","resolve:forAwait:inner:yield1","forAwait:item:forAwait:inner:yield1","forAwait:p1:{\"value\":\"forAwait:inner:yield1:outer\",\"done\":false}","forAwait:inner:finally-before","resolve:forAwait:inner:cleanup","forAwait:finally-before","forAwait:finally-after:after","forAwait:p2:{\"value\":\"forAwait:cleanup\",\"done\":false}","forAwait:p3:{\"value\":{\"value\":\"forAwait:inner:cleanup\",\"done\":true},\"done\":true}"]
native == es6: no
--- /tmp/tmp.le3BhPmSTI/native.txt 2026-06-21 17:46:52.213084001 +0000
+++ /tmp/tmp.le3BhPmSTI/es6.txt 2026-06-21 17:46:52.329084001 +0000
@@ -1 +1 @@
-["delegated:outer-start","delegated:inner:start","delegated:after-next1","delegated:after-next2","delegated:after-return","resolve:delegated:inner:yield1","delegated:inner:after-yield1:second","delegated:p1:{\"value\":\"delegated:inner:yield1\",\"done\":false}","resolve:delegated:inner:yield2","delegated:p2:{\"value\":\"delegated:inner:yield2\",\"done\":false}","delegated:after-await-p2","delegated:inner:finally-before","resolve:delegated:inner:cleanup","delegated:inner:finally-after:after","delegated:p3:{\"value\":\"delegated:inner:cleanup\",\"done\":false}","delegated:outer-after:done","delegated:p4:{\"value\":\"delegated:outer-return\",\"done\":true}","throwing:start","throwing:after-next","throwing:after-throw","resolve:throwing:yield","throwing:catch:boom","throwing:p1:{\"value\":\"throwing:yield\",\"done\":false}","throwing:after-recovery:sent","throwing:p2:{\"value\":\"throwing:recovery\",\"done\":false}","throwing:p3:{\"value\":\"throwing:return\",\"done\":true}","forAwait:inner:start","forAwait:after-next","forAwait:after-return","resolve:forAwait:inner:yield1","forAwait:item:forAwait:inner:yield1","forAwait:p1:{\"value\":\"forAwait:inner:yield1:outer\",\"done\":false}","forAwait:inner:finally-before","resolve:forAwait:inner:cleanup","forAwait:finally-before","forAwait:finally-after:after","forAwait:p2:{\"value\":\"forAwait:cleanup\",\"done\":false}","forAwait:p3:{\"value\":\"stop\",\"done\":true}"]
+["delegated:outer-start","delegated:inner:start","delegated:after-next1","delegated:after-next2","delegated:after-return","resolve:delegated:inner:yield1","delegated:inner:after-yield1:second","delegated:p1:{\"value\":\"delegated:inner:yield1\",\"done\":false}","resolve:delegated:inner:yield2","delegated:p2:{\"value\":\"delegated:inner:yield2\",\"done\":false}","delegated:after-await-p2","delegated:inner:finally-before","resolve:delegated:inner:cleanup","delegated:p3:{\"value\":\"delegated:inner:cleanup\",\"done\":true}","delegated:p4:{\"done\":true}","throwing:start","throwing:after-next","throwing:after-throw","resolve:throwing:yield","throwing:catch:boom","throwing:p1:{\"value\":\"throwing:yield\",\"done\":false}","throwing:after-recovery:sent","throwing:p2:{\"value\":\"throwing:recovery\",\"done\":false}","throwing:p3:{\"value\":\"throwing:return\",\"done\":true}","forAwait:inner:start","forAwait:after-next","forAwait:after-return","resolve:forAwait:inner:yield1","forAwait:item:forAwait:inner:yield1","forAwait:p1:{\"value\":\"forAwait:inner:yield1:outer\",\"done\":false}","forAwait:inner:finally-before","resolve:forAwait:inner:cleanup","forAwait:finally-before","forAwait:finally-after:after","forAwait:p2:{\"value\":\"forAwait:cleanup\",\"done\":false}","forAwait:p3:{\"value\":{\"value\":\"forAwait:inner:cleanup\",\"done\":true},\"done\":true}"]
helpers es2017: yes
helpers es6: yes
node - <<'JS'
function* outer(it){ console.log('outer start'); let x = yield* it; console.log('outer after', x); return 'outer ret'; }
let isAwait=false;
let delegate = {
[Symbol.iterator](){return this},
next(v){ console.log('delegate next', v, isAwait); if(isAwait){isAwait=false; return v} isAwait=true; return {done:false,value:'await'}},
return(v){ console.log('delegate return', v, isAwait); if(isAwait){isAwait=false; return v} isAwait=true; return {done:false,value:'await-return'}},
}
let g=outer(delegate);
console.log('g.next', g.next());
console.log('g.next result', g.next({done:false,value:'first'}));
console.log('g.return await', g.return('done'));
console.log('resume with return', g.return({done:false,value:'cleanup'}));
let g2=outer(delegate); isAwait=false;
console.log('---');
console.log(g2.next()); console.log(g2.next({done:false,value:'first'})); console.log(g2.return('done')); console.log('resume with next', g2.next({done:false,value:'cleanup'})); console.log('next after', g2.next('after'));
JSChunk ID: f1451b
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 192
Output:
outer start
delegate next undefined false
g.next { done: false, value: 'await' }
delegate next { done: false, value: 'first' } true
g.next result { done: false, value: 'first' }
delegate return done false
g.return await { done: false, value: 'await-return' }
delegate return { done: false, value: 'cleanup' } true
resume with return { done: false, value: 'cleanup' }
---
outer start
delegate next undefined false
{ done: false, value: 'await' }
delegate next { done: false, value: 'first' } true
{ done: false, value: 'first' }
delegate return done false
{ done: false, value: 'await-return' }
delegate next { done: false, value: 'cleanup' } true
resume with next { done: false, value: 'cleanup' }
delegate next after false
next after { done: false, value: 'await' }
*** Begin Patch
*** Update File: /app/internal/runtime/runtime.go
@@
.then(y => isAwait
- ? resume(k === 'return' ? k : 'next', v[1] ? { done: y.done, value: y.value } : y, yes, no, settle)
+ ? resume(k === 'return' && v[1] ? k : 'next', v[1] ? { done: y.done, value: y.value } : y, yes, no, settle)
: settle(yes, { value: y, done }))
*** End Patch
Exit code: 0
Wall time: 0 seconds
Output:
Success. Updated the following files:
M /app/internal/runtime/runtime.go
gofmt -w internal/runtime/runtime.go && go test ./internal/runtime
Chunk ID: f056ec Wall time: 1.2277 seconds Process exited with code 0 Original token count: 14 Output: ok [code-host]/evanw/esbuild/internal/runtime 0.064s
tmp=$(mktemp -d)
cat > "$tmp/trace.js" <<'JS'
let log = [];
let pending = [];
let wait = label => new Promise(resolve => pending.push(() => { log.push('resolve:' + label); resolve(label); }));
let result = (label, promise) => promise.then(
value => log.push(label + ':' + JSON.stringify(value)),
error => log.push(label + ':throw:' + (error && error.message || error))
);
let resolveNext = async () => {
while (!pending.length) await Promise.resolve();
pending.shift()();
};
async function* cleanupGen(name) {
try {
log.push(name + ':start');
let x = yield await wait(name + ':yield1');
log.push(name + ':after-yield1:' + x);
let y = yield await wait(name + ':yield2');
log.push(name + ':after-yield2:' + y);
} finally {
log.push(name + ':finally-before');
let z = yield await wait(name + ':cleanup');
log.push(name + ':finally-after:' + z);
}
return name + ':return';
}
async function* delegated() {
log.push('delegated:outer-start');
let value = yield* cleanupGen('delegated:inner');
log.push('delegated:outer-after:' + value);
return 'delegated:outer-return';
}
async function* throwing() {
try {
log.push('throwing:start');
let x = yield await wait('throwing:yield');
log.push('throwing:after-yield:' + x);
} catch (e) {
log.push('throwing:catch:' + e);
let y = yield 'throwing:recovery';
log.push('throwing:after-recovery:' + y);
return 'throwing:return';
}
}
async function* forAwaiting() {
try {
for await (const x of cleanupGen('forAwait:inner')) {
log.push('forAwait:item:' + x);
let y = yield x + ':outer';
log.push('forAwait:sent:' + y);
}
} finally {
log.push('forAwait:finally-before');
let z = yield 'forAwait:cleanup';
log.push('forAwait:finally-after:' + z);
}
}
async function caseDelegatedReturn() {
let it = delegated();
let p1 = it.next();
log.push('delegated:after-next1');
let p2 = it.next('second');
log.push('delegated:after-next2');
let p3 = it.return('done');
log.push('delegated:after-return');
let p4 = it.next('after');
result('delegated:p1', p1); result('delegated:p2', p2); result('delegated:p3', p3); result('delegated:p4', p4);
await resolveNext();
await p1;
await resolveNext();
await p2;
log.push('delegated:after-await-p2');
await resolveNext();
await Promise.all([p3, p4]);
}
async function caseThrow() {
let it = throwing();
let p1 = it.next();
log.push('throwing:after-next');
let p2 = it.throw('boom');
log.push('throwing:after-throw');
let p3 = it.next('sent');
result('throwing:p1', p1); result('throwing:p2', p2); result('throwing:p3', p3);
await resolveNext();
await Promise.all([p1, p2, p3]);
}
async function caseForAwaitReturn() {
let it = forAwaiting();
let p1 = it.next();
log.push('forAwait:after-next');
let p2 = it.return('stop');
log.push('forAwait:after-return');
let p3 = it.next('after');
result('forAwait:p1', p1); result('forAwait:p2', p2); result('forAwait:p3', p3);
await resolveNext();
await p1;
await resolveNext();
await Promise.all([p2, p3]);
}
async function run() {
await caseDelegatedReturn();
await caseThrow();
await caseForAwaitReturn();
return log;
}
run().then(x => console.log(JSON.stringify(x)));
JS
node "$tmp/trace.js" > "$tmp/native.txt"
go run ./cmd/esbuild "$tmp/trace.js" --target=es2017 --format=iife --log-level=warning > "$tmp/es2017.js"
node "$tmp/es2017.js" > "$tmp/es2017.txt"
go run ./cmd/esbuild "$tmp/trace.js" --target=es6 --format=iife --log-level=warning > "$tmp/es6.js"
node "$tmp/es6.js" > "$tmp/es6.txt"
printf 'native == es2017: '; cmp -s "$tmp/native.txt" "$tmp/es2017.txt" && echo yes || { echo no; diff -u "$tmp/native.txt" "$tmp/es2017.txt"; }
printf 'native == es6: '; cmp -s "$tmp/native.txt" "$tmp/es6.txt" && echo yes || { echo no; diff -u "$tmp/native.txt" "$tmp/es6.txt"; }
printf 'helpers es2017: '; grep -q __asyncGenerator "$tmp/es2017.js" && grep -q __yieldStar "$tmp/es2017.js" && grep -q __forAwait "$tmp/es2017.js" && ! grep -q 'async function\*\|for await' "$tmp/es2017.js" && echo yes || echo no
printf 'helpers es6: '; grep -q __asyncGenerator "$tmp/es6.js" && grep -q __yieldStar "$tmp/es6.js" && grep -q __forAwait "$tmp/es6.js" && ! grep -q 'async function\*\|for await' "$tmp/es6.js" && echo yes || echo no
Chunk ID: 669570 Wall time: 1.5824 seconds Process exited with code 0 Original token count: 20 Output: native == es2017: yes native == es6: yes helpers es2017: yes helpers es6: yes
rg -n "type TransformOptions|Target ES2017|ES2017|FormatIIFE|LegalComments" pkg/api
Chunk ID: 855b3a
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 596
Output:
pkg/api/api_impl.go:125: case FormatIIFE:
pkg/api/api_impl.go:126: return config.FormatIIFE
pkg/api/api_impl.go:153:func validateLegalComments(value LegalComments, bundle bool) config.LegalComments {
pkg/api/api_impl.go:155: case LegalCommentsDefault:
pkg/api/api_impl.go:157: return config.LegalCommentsEndOfFile
pkg/api/api_impl.go:159: return config.LegalCommentsInline
pkg/api/api_impl.go:161: case LegalCommentsNone:
pkg/api/api_impl.go:162: return config.LegalCommentsNone
pkg/api/api_impl.go:163: case LegalCommentsInline:
pkg/api/api_impl.go:164: return config.LegalCommentsInline
pkg/api/api_impl.go:165: case LegalCommentsEndOfFile:
pkg/api/api_impl.go:166: return config.LegalCommentsEndOfFile
pkg/api/api_impl.go:167: case LegalCommentsLinked:
pkg/api/api_impl.go:168: return config.LegalCommentsLinkedWithComment
pkg/api/api_impl.go:169: case LegalCommentsExternal:
pkg/api/api_impl.go:170: return config.LegalCommentsExternalWithoutComment
pkg/api/api_impl.go:239: return bundle || format == FormatIIFE
pkg/api/api_impl.go:315: case ES2017:
pkg/api/api_impl.go:1269: LegalComments: validateLegalComments(buildOpts.LegalComments, buildOpts.Bundle),
pkg/api/api_impl.go:1371: if options.LegalComments.HasExternalFile() {
pkg/api/api_impl.go:1402: options.OutputFormat = config.FormatIIFE
pkg/api/api_impl.go:1733: LegalComments: validateLegalComments(transformOpts.LegalComments, false /* bundle */),
pkg/api/api_impl.go:1778: if options.LegalComments.HasExternalFile() {
pkg/api/api_impl.go:1781: } else if options.LegalComments == config.LegalCommentsLinkedWithComment {
pkg/api/api_impl.go:1847: LegalComments: legalComments,
pkg/api/api.go:102:type LegalComments uint8
pkg/api/api.go:105: LegalCommentsDefault LegalComments = iota
pkg/api/api.go:106: LegalCommentsNone
pkg/api/api.go:107: LegalCommentsInline
pkg/api/api.go:108: LegalCommentsEndOfFile
pkg/api/api.go:109: LegalCommentsLinked
pkg/api/api.go:110: LegalCommentsExternal
pkg/api/api.go:129: ES2017
pkg/api/api.go:174: FormatIIFE
pkg/api/api.go:307: LegalComments LegalComments // Documentation: https://esbuild.[code-host]/api/#legal-comments
pkg/api/api.go:411:type TransformOptions struct {
pkg/api/api.go:443: LegalComments LegalComments // Documentation: https://esbuild.[code-host]/api/#legal-comments
pkg/api/api.go:470: LegalComments []byte
sed -n '1,80p' pkg/api/api.go && sed -n '411,455p' pkg/api/api.go
Chunk ID: 7287c7
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 1388
Output:
// This API exposes esbuild's two main operations: building and transforming.
// It's intended for integrating esbuild into other tools as a library.
//
// If you are just trying to run esbuild from Go without the overhead of
// creating a child process, there is also an API for the command-line
// interface itself: https://pkg.go.dev/[code-host]/evanw/esbuild/pkg/cli.
//
// # Build API
//
// This function runs an end-to-end build operation. It takes an array of file
// paths as entry points, parses them and all of their dependencies, and
// returns the output files to write to the file system. The available options
// roughly correspond to esbuild's command-line flags.
//
// Example usage:
//
// package main
//
// import (
// "os"
//
// "[code-host]/evanw/esbuild/pkg/api"
// )
//
// func main() {
// result := api.Build(api.BuildOptions{
// EntryPoints: []string{"input.js"},
// Outfile: "output.js",
// Bundle: true,
// Write: true,
// LogLevel: api.LogLevelInfo,
// })
//
// if len(result.Errors) > 0 {
// os.Exit(1)
// }
// }
//
// # Transform API
//
// This function transforms a string of source code into JavaScript. It can be
// used to minify JavaScript, convert TypeScript/JSX to JavaScript, or convert
// newer JavaScript to older JavaScript. The available options roughly
// correspond to esbuild's command-line flags.
//
// Example usage:
//
// package main
//
// import (
// "fmt"
// "os"
//
// "[code-host]/evanw/esbuild/pkg/api"
// )
//
// func main() {
// jsx := `
// import * as React from 'react'
// import * as ReactDOM from 'react-dom'
//
// ReactDOM.render(
// <h1>Hello, world!</h1>,
// document.getElementById('root')
// );
// `
//
// result := api.Transform(jsx, api.TransformOptions{
// Loader: api.LoaderJSX,
// })
//
// fmt.Printf("%d errors and %d warnings\n",
// len(result.Errors), len(result.Warnings))
//
// os.Stdout.Write(result.Code)
// }
package api
import (
"time"
type TransformOptions struct {
Color StderrColor // Documentation: https://esbuild.[code-host]/api/#color
LogLevel LogLevel // Documentation: https://esbuild.[code-host]/api/#log-level
LogLimit int // Documentation: https://esbuild.[code-host]/api/#log-limit
LogOverride map[string]LogLevel // Documentation: https://esbuild.[code-host]/api/#log-override
AbsPaths AbsPaths // Documentation: https://esbuild.[code-host]/api/#abs-path
Sourcemap SourceMap // Documentation: https://esbuild.[code-host]/api/#sourcemap
SourceRoot string // Documentation: https://esbuild.[code-host]/api/#source-root
SourcesContent SourcesContent // Documentation: https://esbuild.[code-host]/api/#sources-content
Target Target // Documentation: https://esbuild.[code-host]/api/#target
Engines []Engine // Documentation: https://esbuild.[code-host]/api/#target
Supported map[string]bool // Documentation: https://esbuild.[code-host]/api/#supported
Platform Platform // Documentation: https://esbuild.[code-host]/api/#platform
Format Format // Documentation: https://esbuild.[code-host]/api/#format
GlobalName string // Documentation: https://esbuild.[code-host]/api/#global-name
MangleProps string // Documentation: https://esbuild.[code-host]/api/#mangle-props
ReserveProps string // Documentation: https://esbuild.[code-host]/api/#mangle-props
MangleQuoted MangleQuoted // Documentation: https://esbuild.[code-host]/api/#mangle-props
MangleCache map[string]interface{} // Documentation: https://esbuild.[code-host]/api/#mangle-props
Drop Drop // Documentation: https://esbuild.[code-host]/api/#drop
DropLabels []string // Documentation: https://esbuild.[code-host]/api/#drop-labels
MinifyWhitespace bool // Documentation: https://esbuild.[code-host]/api/#minify
MinifyIdentifiers bool // Documentation: https://esbuild.[code-host]/api/#minify
MinifySyntax bool // Documentation: https://esbuild.[code-host]/api/#minify
LineLimit int // Documentation: https://esbuild.[code-host]/api/#line-limit
Charset Charset // Documentation: https://esbuild.[code-host]/api/#charset
TreeShaking TreeShaking // Documentation: https://esbuild.[code-host]/api/#tree-shaking
IgnoreAnnotations bool // Documentation: https://esbuild.[code-host]/api/#ignore-annotations
LegalComments LegalComments // Documentation: https://esbuild.[code-host]/api/#legal-comments
JSX JSX // Documentation: https://esbuild.[code-host]/api/#jsx
JSXFactory string // Documentation: https://esbuild.[code-host]/api/#jsx-factory
JSXFragment string // Documentation: https://esbuild.[code-host]/api/#jsx-fragment
JSXImportSource string // Documentation: https://esbuild.[code-host]/api/#jsx-import-source
JSXDev bool // Documentation: https://esbuild.[code-host]/api/#jsx-dev
JSXSideEffects bool // Documentation: https://esbuild.[code-host]/api/#jsx-side-effects
TsconfigRaw string // Documentation: https://esbuild.[code-host]/api/#tsconfig-raw
Banner string // Documentation: https://esbuild.[code-host]/api/#banner
Footer string // Documentation: https://esbuild.[code-host]/api/#footer
*** 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) {
@@
}
}
+
+func TestAsyncGeneratorConcurrentIteratorMethods(t *testing.T) {
+ node, err := exec.LookPath("node")
+ if err != nil {
+ t.Skip("node was not found")
+ }
+
+ native := runNodeForTest(t, node, asyncGeneratorConcurrentIteratorMethodsSource)
+
+ for _, target := range []api.Target{api.ES2017, api.ES2015} {
+ t.Run(target.String(), func(t *testing.T) {
+ result := api.Transform(asyncGeneratorConcurrentIteratorMethodsSource, api.TransformOptions{
+ Target: target,
+ Format: api.FormatIIFE,
+ LegalComments: api.LegalCommentsNone,
+ })
+ if len(result.Errors) > 0 {
+ t.Fatalf("Transform failed: %v", result.Errors)
+ }
+
+ code := string(result.Code)
+ for _, helper := range []string{"__asyncGenerator", "__yieldStar", "__forAwait"} {
+ if !strings.Contains(code, helper) {
+ t.Fatalf("Expected transformed output to contain %q", helper)
+ }
+ }
+ if strings.Contains(code, "async function*") {
+ t.Fatalf("Expected transformed output to lower async generator syntax")
+ }
+ if strings.Contains(code, "for await") {
+ t.Fatalf("Expected transformed output to lower for-await syntax")
+ }
+
+ if lowered := runNodeForTest(t, node, code); lowered != native {
+ t.Fatalf("Expected lowered output to match native output\n\nNative:\n%s\n\nLowered:\n%s", native, lowered)
+ }
+ })
+ }
+}
+
+func runNodeForTest(t *testing.T, node string, source string) string {
+ t.Helper()
+ out, err := exec.Command(node, "-e", source).CombinedOutput()
+ if err != nil {
+ t.Fatalf("node failed: %v\n%s", err, out)
+ }
+ return string(out)
+}
+
+const asyncGeneratorConcurrentIteratorMethodsSource = `
+let log = [];
+let pending = [];
+let wait = label => new Promise(resolve => pending.push(() => { log.push('resolve:' + label); resolve(label); }));
+let result = (label, promise) => promise.then(
+ value => log.push(label + ':' + JSON.stringify(value)),
+ error => log.push(label + ':throw:' + (error && error.message || error))
+);
+let resolveNext = async () => {
+ while (!pending.length) await Promise.resolve();
+ pending.shift()();
+};
+
+async function* cleanupGen(name) {
+ try {
+ log.push(name + ':start');
+ let x = yield await wait(name + ':yield1');
+ log.push(name + ':after-yield1:' + x);
+ let y = yield await wait(name + ':yield2');
+ log.push(name + ':after-yield2:' + y);
+ } finally {
+ log.push(name + ':finally-before');
+ let z = yield await wait(name + ':cleanup');
+ log.push(name + ':finally-after:' + z);
+ }
+ return name + ':return';
+}
+
+async function* delegated() {
+ log.push('delegated:outer-start');
+ let value = yield* cleanupGen('delegated:inner');
+ log.push('delegated:outer-after:' + value);
+ return 'delegated:outer-return';
+}
+
+async function* throwing() {
+ try {
+ log.push('throwing:start');
+ let x = yield await wait('throwing:yield');
+ log.push('throwing:after-yield:' + x);
+ } catch (e) {
+ log.push('throwing:catch:' + e);
+ let y = yield 'throwing:recovery';
+ log.push('throwing:after-recovery:' + y);
+ return 'throwing:return';
+ }
+}
+
+async function* forAwaiting() {
+ try {
+ for await (const x of cleanupGen('forAwait:inner')) {
+ log.push('forAwait:item:' + x);
+ let y = yield x + ':outer';
+ log.push('forAwait:sent:' + y);
+ }
+ } finally {
+ log.push('forAwait:finally-before');
+ let z = yield 'forAwait:cleanup';
+ log.push('forAwait:finally-after:' + z);
+ }
+}
+
+async function caseDelegatedReturn() {
+ let it = delegated();
+ let p1 = it.next();
+ log.push('delegated:after-next1');
+ let p2 = it.next('second');
+ log.push('delegated:after-next2');
+ let p3 = it.return('done');
+ log.push('delegated:after-return');
+ let p4 = it.next('after');
+ result('delegated:p1', p1);
+ result('delegated:p2', p2);
+ result('delegated:p3', p3);
+ result('delegated:p4', p4);
+ await resolveNext();
+ await p1;
+ await resolveNext();
+ await p2;
+ log.push('delegated:after-await-p2');
+ await resolveNext();
+ await Promise.all([p3, p4]);
+}
+
+async function caseThrow() {
+ let it = throwing();
+ let p1 = it.next();
+ log.push('throwing:after-next');
+ let p2 = it.throw('boom');
+ log.push('throwing:after-throw');
+ let p3 = it.next('sent');
+ result('throwing:p1', p1);
+ result('throwing:p2', p2);
+ result('throwing:p3', p3);
+ await resolveNext();
+ await Promise.all([p1, p2, p3]);
+}
+
+async function caseForAwaitReturn() {
+ let it = forAwaiting();
+ let p1 = it.next();
+ log.push('forAwait:after-next');
+ let p2 = it.return('stop');
+ log.push('forAwait:after-return');
+ let p3 = it.next('after');
+ result('forAwait:p1', p1);
+ result('forAwait:p2', p2);
+ result('forAwait:p3', p3);
+ await resolveNext();
+ await p1;
+ await resolveNext();
+ await Promise.all([p2, p3]);
+}
+
+async function run() {
+ await caseDelegatedReturn();
+ await caseThrow();
+ await caseForAwaitReturn();
+ return log;
+}
+
+run().then(x => console.log(JSON.stringify(x)));
+`
*** End Patch
Exit code: 0
Wall time: 0 seconds
Output:
Success. Updated the following files:
M /app/internal/runtime/runtime_test.go
rg -n "func \(.*Target.*\) String|type Target" pkg/api
Chunk ID: d4c751 Wall time: 0.0000 seconds Process exited with code 0 Original token count: 10 Output: pkg/api/api.go:121:type Target uint8
*** Begin Patch
*** Update File: /app/internal/runtime/runtime_test.go
@@
- for _, target := range []api.Target{api.ES2017, api.ES2015} {
- t.Run(target.String(), func(t *testing.T) {
+ 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(asyncGeneratorConcurrentIteratorMethodsSource, api.TransformOptions{
- Target: target,
+ Target: target.target,
Format: api.FormatIIFE,
LegalComments: api.LegalCommentsNone,
})
*** End Patch
Exit code: 0
Wall time: 0 seconds
Output:
Success. Updated the following files:
M /app/internal/runtime/runtime_test.go
gofmt -w internal/runtime/runtime_test.go internal/runtime/runtime.go && go test ./internal/runtime
Chunk ID: 2da01c Wall time: 1.5535 seconds Process exited with code 0 Original token count: 14 Output: ok [code-host]/evanw/esbuild/internal/runtime 0.142s
go build ./cmd/...
Chunk ID: 496feb Wall time: 0.2935 seconds Process exited with code 0 Original token count: 0 Output:
go test ./internal/bundler_tests ./internal/js_parser ./internal/compat
Chunk ID: 65d359 Wall time: 2.6491 seconds Process exited with code 0 Original token count: 43 Output: ok [code-host]/evanw/esbuild/internal/bundler_tests 1.129s ok [code-host]/evanw/esbuild/internal/js_parser 0.139s ok [code-host]/evanw/esbuild/internal/compat 0.001s
go test ./...
Chunk ID: a44c51 Wall time: 1.3619 seconds Process exited with code 0 Original token count: 438 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 (cached) ? [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 (cached) ? [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.027s 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.004s ok [code-host]/evanw/esbuild/internal/js_parser (cached) ok [code-host]/evanw/esbuild/internal/js_printer 0.021s ? [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 (cached) ? [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]
sed -n '412,452p' internal/runtime/runtime.go
Chunk ID: 50e8a6
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 412
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, settle) => {
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' && v[1] ? k : 'next', v[1] ? { done: y.done, value: y.value } : y, yes, no, settle)
: settle(yes, { value: y, done }))
.catch(e => resume('throw', e, yes, no, settle))
} catch (e) {
settle(no, e)
}
}, front, back, request = (k, x) => {
var req, promise = new Promise((yes, no) => {
req = { k, x, yes, no, next: null }
})
req.promise = promise
return back = back ? back.next = req : front = req, front === req && run(req), promise
}, run = req => resume(req.k, req.x, req.yes, req.no, settle), settle = (fn, value) => {
var req = front
fn(value)
front = front.next
if (front) front.k === 'return' ? Promise.resolve().then(() => run(front)) : run(front)
else back = null
}, method = k => it[k] = x => request(k, x), 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')]()
sed -n '1,240p' internal/runtime/runtime_test.go
Chunk ID: 1ec369
Wall time: 0.0000 seconds
Process exited with code 0
Original token count: 1479
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 TestAsyncGeneratorConcurrentIteratorMethods(t *testing.T) {
node, err := exec.LookPath("node")
if err != nil {
t.Skip("node was not found")
}
native := runNodeForTest(t, node, asyncGeneratorConcurrentIteratorMethodsSource)
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(asyncGeneratorConcurrentIteratorMethodsSource, api.TransformOptions{
Target: target.target,
Format: api.FormatIIFE,
LegalComments: api.LegalCommentsNone,
})
if len(result.Errors) > 0 {
t.Fatalf("Transform failed: %v", result.Errors)
}
code := string(result.Code)
for _, helper := range []string{"__asyncGenerator", "__yieldStar", "__forAwait"} {
if !strings.Contains(code, helper) {
t.Fatalf("Expected transformed output to contain %q", helper)
}
}
if strings.Contains(code, "async function*") {
t.Fatalf("Expected transformed output to lower async generator syntax")
}
if strings.Contains(code, "for await") {
t.Fatalf("Expected transformed output to lower for-await syntax")
}
if lowered := runNodeForTest(t, node, code); lowered != native {
t.Fatalf("Expected lowered output to match native output\n\nNative:\n%s\n\nLowered:\n%s", native, lowered)
}
})
}
}
func runNodeForTest(t *testing.T, node string, source string) string {
t.Helper()
out, err := exec.Command(node, "-e", source).CombinedOutput()
if err != nil {
t.Fatalf("node failed: %v\n%s", err, out)
}
return string(out)
}
const asyncGeneratorConcurrentIteratorMethodsSource = `
let log = [];
let pending = [];
let wait = label => new Promise(resolve => pending.push(() => { log.push('resolve:' + label); resolve(label); }));
let result = (label, promise) => promise.then(
value => log.push(label + ':' + JSON.stringify(value)),
error => log.push(label + ':throw:' + (error && error.message || error))
);
let resolveNext = async () => {
while (!pending.length) await Promise.resolve();
pending.shift()();
};
async function* cleanupGen(name) {
try {
log.push(name + ':start');
let x = yield await wait(name + ':yield1');
log.push(name + ':after-yield1:' + x);
let y = yield await wait(name + ':yield2');
log.push(name + ':after-yield2:' + y);
} finally {
log.push(name + ':finally-before');
let z = yield await wait(name + ':cleanup');
log.push(name + ':finally-after:' + z);
}
return name + ':return';
}
async function* delegated() {
log.push('delegated:outer-start');
let value = yield* cleanupGen('delegated:inner');
log.push('delegated:outer-after:' + value);
return 'delegated:outer-return';
}
async function* throwing() {
try {
log.push('throwing:start');
let x = yield await wait('throwing:yield');
log.push('throwing:after-yield:' + x);
} catch (e) {
log.push('throwing:catch:' + e);
let y = yield 'throwing:recovery';
log.push('throwing:after-recovery:' + y);
return 'throwing:return';
}
}
async function* forAwaiting() {
try {
for await (const x of cleanupGen('forAwait:inner')) {
log.push('forAwait:item:' + x);
let y = yield x + ':outer';
log.push('forAwait:sent:' + y);
}
} finally {
log.push('forAwait:finally-before');
let z = yield 'forAwait:cleanup';
log.push('forAwait:finally-after:' + z);
}
}
async function caseDelegatedReturn() {
let it = delegated();
let p1 = it.next();
log.push('delegated:after-next1');
let p2 = it.next('second');
log.push('delegated:after-next2');
let p3 = it.return('done');
log.push('delegated:after-return');
let p4 = it.next('after');
result('delegated:p1', p1);
result('delegated:p2', p2);
result('delegated:p3', p3);
result('delegated:p4', p4);
await resolveNext();
await p1;
await resolveNext();
await p2;
log.push('delegated:after-await-p2');
await resolveNext();
await Promise.all([p3, p4]);
}
async function caseThrow() {
let it = throwing();
let p1 = it.next();
log.push('throwing:after-next');
let p2 = it.throw('boom');
log.push('throwing:after-throw');
let p3 = it.next('sent');
result('throwing:p1', p1);
result('throwing:p2', p2);
result('throwing:p3', p3);
await resolveNext();
await Promise.all([p1, p2, p3]);
}
async function caseForAwaitReturn() {
let it = forAwaiting();
let p1 = it.next();
log.push('forAwait:after-next');
let p2 = it.return('stop');
log.push('forAwait:after-return');
let p3 = it.next('after');
result('forAwait:p1', p1);
result('forAwait:p2', p2);
result('forAwait:p3', p3);
await resolveNext();
await p1;
await resolveNext();
await Promise.all([p2, p3]);
}
async function run() {
await caseDelegatedReturn();
await caseThrow();
await caseForAwaitReturn();
return log;
}
run().then(x => console.log(JSON.stringify(x)));
`
*** Begin Patch
*** Update File: /app/internal/runtime/runtime_test.go
@@
}{
{"ES2017", api.ES2017},
- {"ES2015", api.ES2015},
+ {"ES6", api.ES2015},
} {
*** End Patch
Exit code: 0
Wall time: 0 seconds
Output:
Success. Updated the following files:
M /app/internal/runtime/runtime_test.go
gofmt -w internal/runtime/runtime_test.go && go test ./internal/runtime
Chunk ID: f7eac0 Wall time: 0.1215 seconds Process exited with code 0 Original token count: 14 Output: ok [code-host]/evanw/esbuild/internal/runtime 0.066s
go build ./cmd/...
Chunk ID: 0bc440 Wall time: 0.0000 seconds Process exited with code 0 Original token count: 0 Output:
No file changes, the agent left the workspace untouched.
============================= 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.26s ===============================
Reproduce this trial: git checkout 2f94510 && PYTHONPATH=src python3 scripts/build_site.py , then open trial/trial_ab11db9bd6d34506. Re-running the agent live requires EVAL_PLATFORM_ENABLE_OAUTH_SMOKE=1 and is non-deterministic.
Trial trial_ab11db9bd6d34506 · verifier authoritative; classifier explanatory.