| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497 | 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 = function () {    return 3 + list_overhead(this.body);};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 accountAST_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;
 |