mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-06 20:11:38 +08:00
The update contains a bug fix that improves the quality for DevTools release source maps. The update also seems to stop minifiying certain names in the overlay bundle so we had to slightly bump the limit. * Old size: 69660 * New size: 71295 DISABLE_THIRD_PARTY_CHECK=Bump overlay size limit R=alexrudenko@chromium.org Bug: 1459146 Change-Id: I3036787bbb3ba8d28669b9aaab9c29c5f5581e55 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4693881 Commit-Queue: Simon Zünd <szuend@chromium.org> Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
496 lines
11 KiB
JavaScript
496 lines
11 KiB
JavaScript
import {
|
|
AST_Accessor,
|
|
AST_Array,
|
|
AST_Arrow,
|
|
AST_Await,
|
|
AST_BigInt,
|
|
AST_Binary,
|
|
AST_Block,
|
|
AST_Break,
|
|
AST_Call,
|
|
AST_Case,
|
|
AST_Class,
|
|
AST_ClassStaticBlock,
|
|
AST_ClassPrivateProperty,
|
|
AST_ClassProperty,
|
|
AST_ConciseMethod,
|
|
AST_Conditional,
|
|
AST_Const,
|
|
AST_Continue,
|
|
AST_Debugger,
|
|
AST_Default,
|
|
AST_Defun,
|
|
AST_Destructuring,
|
|
AST_Directive,
|
|
AST_Do,
|
|
AST_Dot,
|
|
AST_DotHash,
|
|
AST_EmptyStatement,
|
|
AST_Expansion,
|
|
AST_Export,
|
|
AST_False,
|
|
AST_For,
|
|
AST_ForIn,
|
|
AST_Function,
|
|
AST_Hole,
|
|
AST_If,
|
|
AST_Import,
|
|
AST_ImportMeta,
|
|
AST_Infinity,
|
|
AST_LabeledStatement,
|
|
AST_Let,
|
|
AST_NameMapping,
|
|
AST_NaN,
|
|
AST_New,
|
|
AST_NewTarget,
|
|
AST_Node,
|
|
AST_Null,
|
|
AST_Number,
|
|
AST_Object,
|
|
AST_ObjectKeyVal,
|
|
AST_ObjectGetter,
|
|
AST_ObjectSetter,
|
|
AST_PrivateGetter,
|
|
AST_PrivateMethod,
|
|
AST_PrivateSetter,
|
|
AST_PrivateIn,
|
|
AST_RegExp,
|
|
AST_Return,
|
|
AST_Sequence,
|
|
AST_String,
|
|
AST_Sub,
|
|
AST_Super,
|
|
AST_Switch,
|
|
AST_Symbol,
|
|
AST_SymbolClassProperty,
|
|
AST_SymbolExportForeign,
|
|
AST_SymbolImportForeign,
|
|
AST_SymbolRef,
|
|
AST_SymbolDeclaration,
|
|
AST_TemplateSegment,
|
|
AST_TemplateString,
|
|
AST_This,
|
|
AST_Throw,
|
|
AST_Toplevel,
|
|
AST_True,
|
|
AST_Try,
|
|
AST_Catch,
|
|
AST_Finally,
|
|
AST_Unary,
|
|
AST_Undefined,
|
|
AST_Var,
|
|
AST_VarDef,
|
|
AST_While,
|
|
AST_With,
|
|
AST_Yield,
|
|
walk_parent
|
|
} from "./ast.js";
|
|
import { first_in_statement } from "./utils/first_in_statement.js";
|
|
|
|
let mangle_options = undefined;
|
|
AST_Node.prototype.size = function (compressor, stack) {
|
|
mangle_options = compressor && compressor.mangle_options;
|
|
|
|
let size = 0;
|
|
walk_parent(this, (node, info) => {
|
|
size += node._size(info);
|
|
|
|
// Braceless arrow functions have fake "return" statements
|
|
if (node instanceof AST_Arrow && node.is_braceless()) {
|
|
size += node.body[0].value._size(info);
|
|
return true;
|
|
}
|
|
}, stack || (compressor && compressor.stack));
|
|
|
|
// just to save a bit of memory
|
|
mangle_options = undefined;
|
|
|
|
return size;
|
|
};
|
|
|
|
AST_Node.prototype._size = () => 0;
|
|
|
|
AST_Debugger.prototype._size = () => 8;
|
|
|
|
AST_Directive.prototype._size = function () {
|
|
// TODO string encoding stuff
|
|
return 2 + this.value.length;
|
|
};
|
|
|
|
/** Count commas/semicolons necessary to show a list of expressions/statements */
|
|
const list_overhead = (array) => array.length && array.length - 1;
|
|
|
|
AST_Block.prototype._size = function () {
|
|
return 2 + list_overhead(this.body);
|
|
};
|
|
|
|
AST_Toplevel.prototype._size = function() {
|
|
return list_overhead(this.body);
|
|
};
|
|
|
|
AST_EmptyStatement.prototype._size = () => 1;
|
|
|
|
AST_LabeledStatement.prototype._size = () => 2; // x:
|
|
|
|
AST_Do.prototype._size = () => 9;
|
|
|
|
AST_While.prototype._size = () => 7;
|
|
|
|
AST_For.prototype._size = () => 8;
|
|
|
|
AST_ForIn.prototype._size = () => 8;
|
|
// AST_ForOf inherits ^
|
|
|
|
AST_With.prototype._size = () => 6;
|
|
|
|
AST_Expansion.prototype._size = () => 3;
|
|
|
|
const lambda_modifiers = func =>
|
|
(func.is_generator ? 1 : 0) + (func.async ? 6 : 0);
|
|
|
|
AST_Accessor.prototype._size = function () {
|
|
return lambda_modifiers(this) + 4 + list_overhead(this.argnames) + list_overhead(this.body);
|
|
};
|
|
|
|
AST_Function.prototype._size = function (info) {
|
|
const first = !!first_in_statement(info);
|
|
return (first * 2) + lambda_modifiers(this) + 12 + list_overhead(this.argnames) + list_overhead(this.body);
|
|
};
|
|
|
|
AST_Defun.prototype._size = function () {
|
|
return lambda_modifiers(this) + 13 + list_overhead(this.argnames) + list_overhead(this.body);
|
|
};
|
|
|
|
AST_Arrow.prototype._size = function () {
|
|
let args_and_arrow = 2 + list_overhead(this.argnames);
|
|
|
|
if (
|
|
!(
|
|
this.argnames.length === 1
|
|
&& this.argnames[0] instanceof AST_Symbol
|
|
)
|
|
) {
|
|
args_and_arrow += 2; // parens around the args
|
|
}
|
|
|
|
const body_overhead = this.is_braceless() ? 0 : list_overhead(this.body) + 2;
|
|
|
|
return lambda_modifiers(this) + args_and_arrow + body_overhead;
|
|
};
|
|
|
|
AST_Destructuring.prototype._size = () => 2;
|
|
|
|
AST_TemplateString.prototype._size = function () {
|
|
return 2 + (Math.floor(this.segments.length / 2) * 3); /* "${}" */
|
|
};
|
|
|
|
AST_TemplateSegment.prototype._size = function () {
|
|
return this.value.length;
|
|
};
|
|
|
|
AST_Return.prototype._size = function () {
|
|
return this.value ? 7 : 6;
|
|
};
|
|
|
|
AST_Throw.prototype._size = () => 6;
|
|
|
|
AST_Break.prototype._size = function () {
|
|
return this.label ? 6 : 5;
|
|
};
|
|
|
|
AST_Continue.prototype._size = function () {
|
|
return this.label ? 9 : 8;
|
|
};
|
|
|
|
AST_If.prototype._size = () => 4;
|
|
|
|
AST_Switch.prototype._size = function () {
|
|
return 8 + list_overhead(this.body);
|
|
};
|
|
|
|
AST_Case.prototype._size = function () {
|
|
return 5 + list_overhead(this.body);
|
|
};
|
|
|
|
AST_Default.prototype._size = function () {
|
|
return 8 + list_overhead(this.body);
|
|
};
|
|
|
|
AST_Try.prototype._size = () => 3;
|
|
|
|
AST_Catch.prototype._size = function () {
|
|
let size = 7 + list_overhead(this.body);
|
|
if (this.argname) {
|
|
size += 2;
|
|
}
|
|
return size;
|
|
};
|
|
|
|
AST_Finally.prototype._size = function () {
|
|
return 7 + list_overhead(this.body);
|
|
};
|
|
|
|
AST_Var.prototype._size = function () {
|
|
return 4 + list_overhead(this.definitions);
|
|
};
|
|
|
|
AST_Let.prototype._size = function () {
|
|
return 4 + list_overhead(this.definitions);
|
|
};
|
|
|
|
AST_Const.prototype._size = function () {
|
|
return 6 + list_overhead(this.definitions);
|
|
};
|
|
|
|
AST_VarDef.prototype._size = function () {
|
|
return this.value ? 1 : 0;
|
|
};
|
|
|
|
AST_NameMapping.prototype._size = function () {
|
|
// foreign name isn't mangled
|
|
return this.name ? 4 : 0;
|
|
};
|
|
|
|
AST_Import.prototype._size = function () {
|
|
// import
|
|
let size = 6;
|
|
|
|
if (this.imported_name) size += 1;
|
|
|
|
// from
|
|
if (this.imported_name || this.imported_names) size += 5;
|
|
|
|
// braces, and the commas
|
|
if (this.imported_names) {
|
|
size += 2 + list_overhead(this.imported_names);
|
|
}
|
|
|
|
return size;
|
|
};
|
|
|
|
AST_ImportMeta.prototype._size = () => 11;
|
|
|
|
AST_Export.prototype._size = function () {
|
|
let size = 7 + (this.is_default ? 8 : 0);
|
|
|
|
if (this.exported_value) {
|
|
size += this.exported_value._size();
|
|
}
|
|
|
|
if (this.exported_names) {
|
|
// Braces and commas
|
|
size += 2 + list_overhead(this.exported_names);
|
|
}
|
|
|
|
if (this.module_name) {
|
|
// "from "
|
|
size += 5;
|
|
}
|
|
|
|
return size;
|
|
};
|
|
|
|
AST_Call.prototype._size = function () {
|
|
if (this.optional) {
|
|
return 4 + list_overhead(this.args);
|
|
}
|
|
return 2 + list_overhead(this.args);
|
|
};
|
|
|
|
AST_New.prototype._size = function () {
|
|
return 6 + list_overhead(this.args);
|
|
};
|
|
|
|
AST_Sequence.prototype._size = function () {
|
|
return list_overhead(this.expressions);
|
|
};
|
|
|
|
AST_Dot.prototype._size = function () {
|
|
if (this.optional) {
|
|
return this.property.length + 2;
|
|
}
|
|
return this.property.length + 1;
|
|
};
|
|
|
|
AST_DotHash.prototype._size = function () {
|
|
if (this.optional) {
|
|
return this.property.length + 3;
|
|
}
|
|
return this.property.length + 2;
|
|
};
|
|
|
|
AST_Sub.prototype._size = function () {
|
|
return this.optional ? 4 : 2;
|
|
};
|
|
|
|
AST_Unary.prototype._size = function () {
|
|
if (this.operator === "typeof") return 7;
|
|
if (this.operator === "void") return 5;
|
|
return this.operator.length;
|
|
};
|
|
|
|
AST_Binary.prototype._size = function (info) {
|
|
if (this.operator === "in") return 4;
|
|
|
|
let size = this.operator.length;
|
|
|
|
if (
|
|
(this.operator === "+" || this.operator === "-")
|
|
&& this.right instanceof AST_Unary && this.right.operator === this.operator
|
|
) {
|
|
// 1+ +a > needs space between the +
|
|
size += 1;
|
|
}
|
|
|
|
if (this.needs_parens(info)) {
|
|
size += 2;
|
|
}
|
|
|
|
return size;
|
|
};
|
|
|
|
AST_Conditional.prototype._size = () => 3;
|
|
|
|
AST_Array.prototype._size = function () {
|
|
return 2 + list_overhead(this.elements);
|
|
};
|
|
|
|
AST_Object.prototype._size = function (info) {
|
|
let base = 2;
|
|
if (first_in_statement(info)) {
|
|
base += 2; // parens
|
|
}
|
|
return base + list_overhead(this.properties);
|
|
};
|
|
|
|
/*#__INLINE__*/
|
|
const key_size = key =>
|
|
typeof key === "string" ? key.length : 0;
|
|
|
|
AST_ObjectKeyVal.prototype._size = function () {
|
|
return key_size(this.key) + 1;
|
|
};
|
|
|
|
/*#__INLINE__*/
|
|
const static_size = is_static => is_static ? 7 : 0;
|
|
|
|
AST_ObjectGetter.prototype._size = function () {
|
|
return 5 + static_size(this.static) + key_size(this.key);
|
|
};
|
|
|
|
AST_ObjectSetter.prototype._size = function () {
|
|
return 5 + static_size(this.static) + key_size(this.key);
|
|
};
|
|
|
|
AST_ConciseMethod.prototype._size = function () {
|
|
return static_size(this.static) + key_size(this.key) + lambda_modifiers(this);
|
|
};
|
|
|
|
AST_PrivateMethod.prototype._size = function () {
|
|
return AST_ConciseMethod.prototype._size.call(this) + 1;
|
|
};
|
|
|
|
AST_PrivateGetter.prototype._size = AST_PrivateSetter.prototype._size = function () {
|
|
return AST_ConciseMethod.prototype._size.call(this) + 4;
|
|
};
|
|
|
|
AST_PrivateIn.prototype._size = function () {
|
|
return 5; // "#", and " in "
|
|
};
|
|
|
|
AST_Class.prototype._size = function () {
|
|
return (
|
|
(this.name ? 8 : 7)
|
|
+ (this.extends ? 8 : 0)
|
|
);
|
|
};
|
|
|
|
AST_ClassStaticBlock.prototype._size = function () {
|
|
// "class{}" + semicolons
|
|
return 7 + list_overhead(this.body);
|
|
};
|
|
|
|
AST_ClassProperty.prototype._size = function () {
|
|
return (
|
|
static_size(this.static)
|
|
+ (typeof this.key === "string" ? this.key.length + 2 : 0)
|
|
+ (this.value ? 1 : 0)
|
|
);
|
|
};
|
|
|
|
AST_ClassPrivateProperty.prototype._size = function () {
|
|
return AST_ClassProperty.prototype._size.call(this) + 1;
|
|
};
|
|
|
|
AST_Symbol.prototype._size = function () {
|
|
if (!(mangle_options && this.thedef && !this.thedef.unmangleable(mangle_options))) {
|
|
return this.name.length;
|
|
} else {
|
|
return 1;
|
|
}
|
|
};
|
|
|
|
// TODO take propmangle into account
|
|
AST_SymbolClassProperty.prototype._size = function () {
|
|
return this.name.length;
|
|
};
|
|
|
|
AST_SymbolRef.prototype._size = AST_SymbolDeclaration.prototype._size = function () {
|
|
if (this.name === "arguments") return 9;
|
|
|
|
return AST_Symbol.prototype._size.call(this);
|
|
};
|
|
|
|
AST_NewTarget.prototype._size = () => 10;
|
|
|
|
AST_SymbolImportForeign.prototype._size = function () {
|
|
return this.name.length;
|
|
};
|
|
|
|
AST_SymbolExportForeign.prototype._size = function () {
|
|
return this.name.length;
|
|
};
|
|
|
|
AST_This.prototype._size = () => 4;
|
|
|
|
AST_Super.prototype._size = () => 5;
|
|
|
|
AST_String.prototype._size = function () {
|
|
return this.value.length + 2;
|
|
};
|
|
|
|
AST_Number.prototype._size = function () {
|
|
const { value } = this;
|
|
if (value === 0) return 1;
|
|
if (value > 0 && Math.floor(value) === value) {
|
|
return Math.floor(Math.log10(value) + 1);
|
|
}
|
|
return value.toString().length;
|
|
};
|
|
|
|
AST_BigInt.prototype._size = function () {
|
|
return this.value.length;
|
|
};
|
|
|
|
AST_RegExp.prototype._size = function () {
|
|
return this.value.toString().length;
|
|
};
|
|
|
|
AST_Null.prototype._size = () => 4;
|
|
|
|
AST_NaN.prototype._size = () => 3;
|
|
|
|
AST_Undefined.prototype._size = () => 6; // "void 0"
|
|
|
|
AST_Hole.prototype._size = () => 0; // comma is taken into account by list_overhead()
|
|
|
|
AST_Infinity.prototype._size = () => 8;
|
|
|
|
AST_True.prototype._size = () => 4;
|
|
|
|
AST_False.prototype._size = () => 5;
|
|
|
|
AST_Await.prototype._size = () => 6;
|
|
|
|
AST_Yield.prototype._size = () => 6;
|