chrome-devtools-frontend
Version:
Chrome DevTools UI
944 lines (941 loc) • 23.9 kB
JavaScript
// core/lib/legacy-javascript/polyfill-module-data.json
var polyfill_module_data_default = [
{
name: "focus-visible",
modules: [
"focus-visible"
]
},
{
name: "Error.prototype.cause",
modules: [
"es.error.cause"
]
},
{
name: "Array.prototype.at",
modules: [
"es.array.at",
"esnext.array.at"
],
corejs: true
},
{
name: "Array.prototype.concat",
modules: [
"es.array.concat"
],
corejs: true
},
{
name: "Array.prototype.copyWithin",
modules: [
"es.array.copy-within"
],
corejs: true
},
{
name: "Array.prototype.every",
modules: [
"es.array.every"
],
corejs: true
},
{
name: "Array.prototype.fill",
modules: [
"es.array.fill"
],
corejs: true
},
{
name: "Array.prototype.filter",
modules: [
"es.array.filter"
],
corejs: true
},
{
name: "Array.prototype.find",
modules: [
"es.array.find"
],
corejs: true
},
{
name: "Array.prototype.findIndex",
modules: [
"es.array.find-index"
],
corejs: true
},
{
name: "Array.prototype.findLast",
modules: [
"es.array.find-last",
"esnext.array.find-last"
],
corejs: true
},
{
name: "Array.prototype.findLastIndex",
modules: [
"es.array.find-last-index",
"esnext.array.find-last-index"
],
corejs: true
},
{
name: "Array.prototype.flat",
modules: [
"es.array.flat"
],
corejs: true
},
{
name: "Array.prototype.flatMap",
modules: [
"es.array.flat-map"
],
corejs: true
},
{
name: "Array.prototype.forEach",
modules: [
"es.array.for-each"
],
corejs: true
},
{
name: "Array.from",
modules: [
"es.array.from"
],
corejs: true
},
{
name: "Array.prototype.includes",
modules: [
"es.array.includes"
],
corejs: true
},
{
name: "Array.prototype.indexOf",
modules: [
"es.array.index-of"
],
corejs: true
},
{
name: "Array.isArray",
modules: [
"es.array.is-array"
],
corejs: true
},
{
name: "Array.prototype.join",
modules: [
"es.array.join"
],
corejs: true
},
{
name: "Array.prototype.map",
modules: [
"es.array.map"
],
corejs: true
},
{
name: "Array.of",
modules: [
"es.array.of"
],
corejs: true
},
{
name: "Array.prototype.slice",
modules: [
"es.array.slice"
],
corejs: true
},
{
name: "Array.prototype.some",
modules: [
"es.array.some"
],
corejs: true
},
{
name: "Array.prototype.sort",
modules: [
"es.array.sort"
],
corejs: true
},
{
name: "Array.prototype.unshift",
modules: [
"es.array.unshift"
],
corejs: true
},
{
name: "Math.acosh",
modules: [
"es.math.acosh"
],
corejs: true
},
{
name: "Math.asinh",
modules: [
"es.math.asinh"
],
corejs: true
},
{
name: "Math.atanh",
modules: [
"es.math.atanh"
],
corejs: true
},
{
name: "Math.cbrt",
modules: [
"es.math.cbrt"
],
corejs: true
},
{
name: "Math.clz32",
modules: [
"es.math.clz32"
],
corejs: true
},
{
name: "Math.cosh",
modules: [
"es.math.cosh"
],
corejs: true
},
{
name: "Math.expm1",
modules: [
"es.math.expm1"
],
corejs: true
},
{
name: "Math.fround",
modules: [
"es.math.fround"
],
corejs: true
},
{
name: "Math.hypot",
modules: [
"es.math.hypot"
],
corejs: true
},
{
name: "Math.imul",
modules: [
"es.math.imul"
],
corejs: true
},
{
name: "Math.log10",
modules: [
"es.math.log10"
],
corejs: true
},
{
name: "Math.log1p",
modules: [
"es.math.log1p"
],
corejs: true
},
{
name: "Math.log2",
modules: [
"es.math.log2"
],
corejs: true
},
{
name: "Math.sign",
modules: [
"es.math.sign"
],
corejs: true
},
{
name: "Math.sinh",
modules: [
"es.math.sinh"
],
corejs: true
},
{
name: "Math.tanh",
modules: [
"es.math.tanh"
],
corejs: true
},
{
name: "Math.trunc",
modules: [
"es.math.trunc"
],
corejs: true
},
{
name: "Object.assign",
modules: [
"es.object.assign"
],
corejs: true
},
{
name: "Object.create",
modules: [
"es.object.create"
],
corejs: true
},
{
name: "Object.entries",
modules: [
"es.object.entries"
],
corejs: true
},
{
name: "Object.freeze",
modules: [
"es.object.freeze"
],
corejs: true
},
{
name: "Object.fromEntries",
modules: [
"es.object.from-entries"
],
corejs: true
},
{
name: "Object.getOwnPropertyDescriptor",
modules: [
"es.object.get-own-property-descriptor"
],
corejs: true
},
{
name: "Object.getOwnPropertyDescriptors",
modules: [
"es.object.get-own-property-descriptors"
],
corejs: true
},
{
name: "Object.getPrototypeOf",
modules: [
"es.object.get-prototype-of"
],
corejs: true
},
{
name: "Object.hasOwn",
modules: [
"es.object.has-own",
"esnext.object.has-own"
],
corejs: true
},
{
name: "Object.is",
modules: [
"es.object.is"
],
corejs: true
},
{
name: "Object.isExtensible",
modules: [
"es.object.is-extensible"
],
corejs: true
},
{
name: "Object.isFrozen",
modules: [
"es.object.is-frozen"
],
corejs: true
},
{
name: "Object.isSealed",
modules: [
"es.object.is-sealed"
],
corejs: true
},
{
name: "Object.keys",
modules: [
"es.object.keys"
],
corejs: true
},
{
name: "Object.preventExtensions",
modules: [
"es.object.prevent-extensions"
],
corejs: true
},
{
name: "Object.seal",
modules: [
"es.object.seal"
],
corejs: true
},
{
name: "Object.setPrototypeOf",
modules: [
"es.object.set-prototype-of"
],
corejs: true
},
{
name: "Object.values",
modules: [
"es.object.values"
],
corejs: true
},
{
name: "Promise.any",
modules: [
"es.promise.any",
"esnext.promise.any"
],
corejs: true
},
{
name: "Reflect.apply",
modules: [
"es.reflect.apply"
],
corejs: true
},
{
name: "Reflect.construct",
modules: [
"es.reflect.construct"
],
corejs: true
},
{
name: "Reflect.deleteProperty",
modules: [
"es.reflect.delete-property"
],
corejs: true
},
{
name: "Reflect.get",
modules: [
"es.reflect.get"
],
corejs: true
},
{
name: "Reflect.getOwnPropertyDescriptor",
modules: [
"es.reflect.get-own-property-descriptor"
],
corejs: true
},
{
name: "Reflect.getPrototypeOf",
modules: [
"es.reflect.get-prototype-of"
],
corejs: true
},
{
name: "Reflect.has",
modules: [
"es.reflect.has"
],
corejs: true
},
{
name: "Reflect.isExtensible",
modules: [
"es.reflect.is-extensible"
],
corejs: true
},
{
name: "Reflect.ownKeys",
modules: [
"es.reflect.own-keys"
],
corejs: true
},
{
name: "Reflect.preventExtensions",
modules: [
"es.reflect.prevent-extensions"
],
corejs: true
},
{
name: "Reflect.setPrototypeOf",
modules: [
"es.reflect.set-prototype-of"
],
corejs: true
},
{
name: "String.prototype.codePointAt",
modules: [
"es.string.code-point-at"
],
corejs: true
},
{
name: "String.prototype.endsWith",
modules: [
"es.string.ends-with"
],
corejs: true
},
{
name: "String.fromCodePoint",
modules: [
"es.string.from-code-point"
],
corejs: true
},
{
name: "String.prototype.includes",
modules: [
"es.string.includes"
],
corejs: true
},
{
name: "String.prototype.matchAll",
modules: [
"es.string.match-all",
"esnext.string.match-all"
],
corejs: true
},
{
name: "String.raw",
modules: [
"es.string.raw"
],
corejs: true
},
{
name: "String.prototype.repeat",
modules: [
"es.string.repeat"
],
corejs: true
},
{
name: "String.prototype.replaceAll",
modules: [
"es.string.replace-all",
"esnext.string.replace-all"
],
corejs: true
},
{
name: "String.prototype.startsWith",
modules: [
"es.string.starts-with"
],
corejs: true
},
{
name: "String.prototype.substr",
modules: [
"es.string.substr"
],
corejs: true
},
{
name: "String.prototype.trim",
modules: [
"es.string.trim"
],
corejs: true
},
{
name: "String.prototype.trimEnd",
modules: [
"es.string.trim-end"
],
corejs: true
},
{
name: "String.prototype.trimStart",
modules: [
"es.string.trim-start"
],
corejs: true
},
{
name: "String.prototype.link",
modules: [
"es.string.link"
],
corejs: true
},
{
name: "Promise.allSettled",
modules: [
"esnext.promise.all-settled"
],
corejs: true
}
];
// core/lib/legacy-javascript/polyfill-graph-data.json
var polyfill_graph_data_default = {
moduleSizes: [26070, 498, 282, 294, 281, 467, 161, 236, 229, 765, 546, 339, 1608, 723, 729, 1545, 438, 214, 657, 111, 759, 537, 209, 281, 685, 217, 757, 631, 293, 182, 475, 79, 407, 140, 366, 792, 269, 222, 158, 280, 188, 137, 158, 105, 189, 543, 160, 742, 1436, 88, 904, 146, 314, 375, 183, 1083, 195, 503, 269, 208, 334, 350, 460, 568, 229, 1155, 334, 266, 30, 120, 309, 370, 358, 1952, 1638, 304, 153, 274, 1288, 192, 543, 74, 144, 137, 33, 336, 457, 2122, 535, 711, 1323, 117, 1961, 244, 557, 318, 119, 124, 108, 144, 96, 133, 441, 210, 1627, 1956, 693, 1426, 863, 637, 301, 51, 708, 583, 119, 600, 221, 370, 728, 1085, 552, 629, 125, 1746, 97, 441, 543, 2756, 371, 447, 548, 243, 266, 217, 99, 440, 183, 546, 137, 464, 207, 983, 503, 237, 382, 249, 675, 402, 254, 223, 164, 214, 191, 831, 218, 202, 232, 124, 249, 160, 251, 217, 717, 78, 561, 1627, 256, 386, 225, 432, 499, 394, 364, 445, 634, 667, 177, 346, 470, 663, 142, 588, 414, 617, 1559, 380, 2520, 1040, 417, 289, 238, 220, 214, 303, 163, 141, 510, 397, 137, 137, 133, 133, 390, 266, 137, 183, 215, 191, 485, 328, 575, 799, 533, 148, 215, 589, 589, 130, 362, 562, 471, 179, 186, 1266, 1456, 521, 1536, 427, 444, 406, 912, 150, 283, 144, 485, 470, 205, 1268, 796, 658, 306, 3751, 814, 146, 2328, 1226, 922, 237, 206, 198, 250, 283, 60, 3e3],
dependencies: {
"Array.prototype.at": [0, 5, 69, 105, 106, 116, 164],
"Array.prototype.concat": [0, 16, 21, 22, 26, 34, 40, 76, 78, 155, 165],
"Array.prototype.copyWithin": [0, 5, 9, 37, 69, 105, 106, 116, 166],
"Array.prototype.every": [0, 15, 17, 21, 22, 26, 53, 59, 76, 78, 155, 167],
"Array.prototype.fill": [0, 5, 10, 69, 105, 106, 116, 168],
"Array.prototype.filter": [0, 15, 16, 21, 22, 26, 53, 59, 76, 78, 155, 169],
"Array.prototype.find": [0, 5, 15, 21, 22, 26, 53, 59, 69, 76, 78, 105, 106, 116, 155, 173],
"Array.prototype.findIndex": [0, 5, 15, 21, 22, 26, 53, 59, 69, 76, 78, 105, 106, 116, 155, 170],
"Array.prototype.findLast": [0, 5, 14, 53, 59, 69, 105, 106, 116, 172],
"Array.prototype.findLastIndex": [0, 5, 14, 53, 59, 69, 105, 106, 116, 171],
"Array.prototype.flat": [0, 21, 22, 26, 40, 50, 53, 59, 76, 78, 155, 175],
"Array.prototype.flatMap": [0, 21, 22, 26, 40, 50, 53, 59, 76, 78, 155, 174],
"Array.prototype.forEach": [0, 11, 15, 17, 21, 22, 26, 53, 59, 76, 78, 155, 176],
"Array.from": [0, 12, 23, 24, 26, 34, 53, 59, 62, 63, 75, 78, 88, 155, 177],
"Array.prototype.includes": [0, 5, 69, 105, 106, 116, 178],
"Array.prototype.indexOf": [0, 17, 59, 179],
"Array.isArray": [0, 76, 180],
"Array.prototype.join": [0, 17, 181],
"Array.prototype.map": [0, 15, 16, 21, 22, 26, 53, 59, 76, 78, 155, 182],
"Array.of": [0, 26, 34, 78, 155, 183],
"Array.prototype.slice": [0, 16, 19, 26, 34, 76, 78, 155, 184],
"Array.prototype.some": [0, 15, 17, 21, 22, 26, 53, 59, 76, 78, 155, 185],
"Array.prototype.sort": [0, 17, 19, 20, 26, 37, 42, 43, 46, 155, 156, 186],
"Array.prototype.unshift": [0, 18, 37, 40, 76, 187],
"Math.acosh": [0, 97, 188],
"Math.asinh": [0, 189],
"Math.atanh": [0, 190],
"Math.cbrt": [0, 100, 191],
"Math.clz32": [0, 192],
"Math.cosh": [0, 93, 193],
"Math.expm1": [0, 93, 194],
"Math.fround": [0, 94, 95, 99, 100, 195],
"Math.hypot": [0, 196],
"Math.imul": [0, 197],
"Math.log10": [0, 96, 198],
"Math.log1p": [0, 97, 199],
"Math.log2": [0, 98, 200],
"Math.sign": [0, 100, 201],
"Math.sinh": [0, 93, 202],
"Math.tanh": [0, 93, 203],
"Math.trunc": [0, 204],
"Object.assign": [0, 104, 116, 205],
"Object.create": [0, 69, 105, 106, 116, 206],
"Object.entries": [0, 29, 112, 116, 119, 207],
"Object.freeze": [0, 8, 19, 51, 73, 109, 113, 208],
"Object.fromEntries": [0, 26, 34, 53, 59, 62, 63, 75, 87, 88, 155, 209],
"Object.getOwnPropertyDescriptor": [0, 210],
"Object.getOwnPropertyDescriptors": [0, 34, 211],
"Object.getPrototypeOf": [0, 29, 112, 212],
"Object.hasOwn": [0, 213],
"Object.is": [0, 134, 217],
"Object.isExtensible": [0, 8, 113, 214],
"Object.isFrozen": [0, 8, 215],
"Object.isSealed": [0, 8, 216],
"Object.keys": [0, 116, 218],
"Object.preventExtensions": [0, 8, 19, 51, 73, 109, 113, 219],
"Object.seal": [0, 8, 19, 51, 73, 109, 113, 220],
"Object.setPrototypeOf": [0, 4, 58, 83, 118, 221],
"Object.values": [0, 29, 112, 116, 119, 222],
"Promise.any": [0, 24, 26, 47, 53, 59, 62, 63, 75, 87, 88, 102, 122, 123, 124, 125, 155, 224],
"Reflect.apply": [0, 52, 225],
"Reflect.construct": [0, 3, 19, 26, 52, 55, 69, 78, 105, 106, 116, 155, 226],
"Reflect.deleteProperty": [0, 227],
"Reflect.get": [0, 29, 79, 112, 230],
"Reflect.getOwnPropertyDescriptor": [0, 228],
"Reflect.getPrototypeOf": [0, 29, 112, 229],
"Reflect.has": [0, 231],
"Reflect.isExtensible": [0, 8, 113, 232],
"Reflect.ownKeys": [0, 233],
"Reflect.preventExtensions": [0, 51, 234],
"Reflect.setPrototypeOf": [0, 4, 58, 83, 118, 235],
"String.prototype.codePointAt": [0, 26, 141, 155, 156, 236],
"String.prototype.endsWith": [0, 26, 28, 59, 85, 103, 155, 156, 237],
"String.fromCodePoint": [0, 238],
"String.prototype.includes": [0, 26, 28, 85, 103, 155, 156, 239],
"String.prototype.matchAll": [0, 3, 6, 26, 29, 31, 59, 69, 78, 85, 89, 90, 105, 106, 112, 116, 126, 127, 128, 129, 130, 131, 132, 135, 139, 141, 155, 156, 241],
"String.raw": [0, 26, 155, 156, 242],
"String.prototype.repeat": [0, 26, 142, 155, 156, 243],
"String.prototype.replaceAll": [0, 26, 65, 85, 128, 129, 155, 156, 244],
"String.prototype.startsWith": [0, 26, 28, 59, 85, 103, 155, 156, 245],
"String.prototype.substr": [0, 26, 155, 156, 246],
"String.prototype.trim": [0, 26, 144, 146, 155, 156, 163, 251],
"String.prototype.trimEnd": [0, 26, 143, 144, 146, 155, 156, 163, 247, 249],
"String.prototype.trimStart": [0, 26, 144, 145, 146, 155, 156, 163, 248, 250],
"String.prototype.link": [0, 26, 30, 140, 155, 156, 240],
"Promise.allSettled": [0, 24, 26, 47, 53, 59, 62, 63, 75, 87, 88, 102, 122, 123, 124, 125, 155, 223, 252],
"focus-visible": [253]
},
maxSize: 155835
};
// core/lib/legacy-javascript/legacy-javascript.js
var polyfillModuleData = polyfill_module_data_default;
var graph = polyfill_graph_data_default;
var CodePatternMatcher = class {
/**
* @param {Pattern[]} patterns
*/
constructor(patterns) {
this.patterns = patterns;
}
/**
* @param {string} code
* @return {PatternMatchResult[]}
*/
match(code) {
if (!this.re) {
const patternsExpression = this.patterns.map((pattern) => `(${pattern.expression})`).join("|");
this.re = new RegExp(`(^\r
|\r|
)|${patternsExpression}`, "g");
}
this.re.lastIndex = 0;
const seen = /* @__PURE__ */ new Set();
const matches = [];
let result;
let line = 0;
let lineBeginsAtIndex = 0;
while ((result = this.re.exec(code)) !== null) {
const captureGroups = result.slice(1);
const [isNewline, ...patternExpressionMatches] = captureGroups;
if (isNewline) {
line++;
lineBeginsAtIndex = result.index + 1;
continue;
}
const pattern = this.patterns[patternExpressionMatches.findIndex(Boolean)];
if (seen.has(pattern)) {
continue;
}
seen.add(pattern);
matches.push({
name: pattern.name,
line,
column: result.index - lineBeginsAtIndex
});
}
return matches;
}
};
function buildPolyfillExpression(object, property, coreJs3Module) {
const qt = (token) => `['"]${token}['"]`;
let expression = "";
if (object) {
expression += `${object}\\.${property}\\s?=[^=]`;
} else {
expression += `(?:window\\.|[\\s;]+)${property}\\s?=[^=]`;
}
if (object) {
expression += `|${object}\\[${qt(property)}\\]\\s?=[^=]`;
}
expression += `|defineProperty\\(${object || "window"},\\s?${qt(property)}`;
if (object) {
expression += `|\\(${object},\\s*{${property}:.*},\\s*{${property}`;
}
if (object) {
const objectWithoutPrototype = object.replace(".prototype", "");
expression += `|{target:${qt(objectWithoutPrototype)}[^;]*},{${property}:`;
} else {
}
expression += `|${coreJs3Module.replaceAll(".", "\\.")}(?:\\.js)?"`;
return expression;
}
function getCoreJsPolyfillData() {
return polyfillModuleData.filter((d) => d.corejs).map((d) => {
return {
name: d.name,
coreJs3Module: d.modules[0]
};
});
}
function getPolyfillPatterns() {
const patterns = [];
for (const { name, coreJs3Module } of getCoreJsPolyfillData()) {
const parts = name.split(".");
const object = parts.length > 1 ? parts.slice(0, parts.length - 1).join(".") : null;
const property = parts[parts.length - 1];
patterns.push({
name,
expression: buildPolyfillExpression(object, property, coreJs3Module)
});
}
return patterns;
}
function getTransformPatterns() {
const count = (content, pattern) => {
if (typeof pattern === "string") {
return content.split(pattern).length - 1;
}
return (content.match(pattern) ?? []).length;
};
return [
// @babel/plugin-transform-classes
//
// input:
//
// class MyTestClass {
// log() {
// console.log(1);
// }
// };
//
// output:
//
// function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
// function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
// function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
// function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
// function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
// let MyTestClass = function () {
// function MyTestClass() {
// _classCallCheck(this, MyTestClass);
// }
// return _createClass(MyTestClass, [{
// key: "log",
// value: function log() {
// console.log(1);
// }
// }]);
// }();
{
name: "@babel/plugin-transform-classes",
expression: "Cannot call a class as a function",
estimateBytes: (content) => {
return 1e3 + (count(content, "_classCallCheck") - 1) * "_classCallCheck()".length;
}
},
{
name: "@babel/plugin-transform-regenerator",
expression: "Generator is already running|regeneratorRuntime",
// Example of this transform: https://gist.github.com/connorjclark/af8bccfff377ac44efc104a79bc75da2
// `regeneratorRuntime.awrap` is generated for every usage of `await`, and adds ~80 bytes each.
estimateBytes: (content) => {
return count(content, /regeneratorRuntime\(?\)?\.a?wrap/g) * 80;
}
},
{
name: "@babel/plugin-transform-spread",
expression: "Invalid attempt to spread non-iterable instance",
estimateBytes: (content) => {
const per = "_toConsumableArray()".length;
return 1169 + count(content, /\.apply\(void 0,\s?_toConsumableArray/g) * per;
}
}
];
}
function estimateWastedBytes(content, matches) {
const polyfillResults = matches.filter((m) => !m.name.startsWith("@"));
const transformResults = matches.filter((m) => m.name.startsWith("@"));
let estimatedWastedBytesFromPolyfills = 0;
const modulesSeen = /* @__PURE__ */ new Set();
for (const result of polyfillResults) {
const modules = graph.dependencies[result.name];
if (!modules)
continue;
for (const module of modules) {
modulesSeen.add(module);
}
}
estimatedWastedBytesFromPolyfills += [...modulesSeen].reduce((acc, moduleIndex) => {
return acc + graph.moduleSizes[moduleIndex];
}, 0);
estimatedWastedBytesFromPolyfills = Math.min(estimatedWastedBytesFromPolyfills, graph.maxSize);
let estimatedWastedBytesFromTransforms = 0;
for (const result of transformResults) {
const pattern = getTransformPatterns().find((p) => p.name === result.name);
if (!pattern || !pattern.estimateBytes || !content)
continue;
estimatedWastedBytesFromTransforms += pattern.estimateBytes(content);
}
const estimatedWastedBytes = estimatedWastedBytesFromPolyfills + estimatedWastedBytesFromTransforms;
return estimatedWastedBytes;
}
var matcher = new CodePatternMatcher([
...getPolyfillPatterns(),
...getTransformPatterns()
]);
function detectLegacyJavaScript(content, map) {
if (!content)
return { matches: [], estimatedByteSavings: 0 };
let matches = matcher.match(content);
if (map) {
for (const { name, modules } of polyfillModuleData) {
if (matches.some((m) => m.name === name))
continue;
const source = map.sourceURLs().find((source2) => modules.some((module) => {
return source2.endsWith(`/${module}.js`) || source2.includes(`node_modules/${module}/`);
}));
if (!source)
continue;
const mapping = map.mappings().find((m) => m.sourceURL === source);
if (mapping) {
matches.push({ name, line: mapping.lineNumber, column: mapping.columnNumber });
} else {
matches.push({ name, line: 0, column: 0 });
}
}
}
matches = matches.sort((a, b) => a.name > b.name ? 1 : a.name === b.name ? 0 : -1);
return {
matches,
estimatedByteSavings: estimateWastedBytes(content, matches)
};
}
export {
detectLegacyJavaScript,
getCoreJsPolyfillData,
getTransformPatterns
};
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/