void RunAndAssert(CompressTestData testData, ICompressOptions options) { var(outAst, outMinJs, outNiceJs) = CompressTestCore(testData, options); Assert.Equal(testData.ExpectedAst, outAst); Assert.Equal(testData.ExpectedNiceJs, outNiceJs); Assert.Equal(testData.ExpectedMinJs, outMinJs); }
string Optimize(string input, ICompressOptions compressOptions) { var parser = new Parser(new Options(), input); var toplevel = parser.Parse(); toplevel = toplevel.Compress(compressOptions); var outMinJsBuilder = new SourceMapBuilder(); toplevel.PrintToBuilder(outMinJsBuilder, new OutputOptions()); return(outMinJsBuilder.Content()); }
public CompressTreeTransformer(ICompressOptions options) { _compressModules = new List <CompressModuleTreeTransformerBase> { new EmptyStatementEliminationTreeTransformer(options), new BlockEliminationTreeTransformer(options), new UnusedFunctionEliminationTreeTransformer(options), new UnreachableCodeEliminationTreeTransformer(options), new UnreachableFunctionCodeEliminationTreeTransformer(options), new FunctionReturnTreeTransformer(options), new UnreachableLoopCodeEliminationTreeTransformer(options), new UnreachableSwitchCodeEliminationTreeTransformer(options), new VariableHoistingTreeTransformer(options), new BooleanConstantsTreeTransformer(options) }; }
public BlockEliminationTreeTransformer(ICompressOptions options) : base(options) { }
protected override bool CanProcessNode(ICompressOptions options, AstNode node) { return(options.EnableBlockElimination && node is AstBlock astBlock && !BlockIsDisallowed(astBlock)); }
protected override bool CanProcessNode(ICompressOptions options, AstNode node) { return(options.EnableUnreachableCodeElimination && node is TRootNodeType); }
protected UnreachableAfterJumpCodeEliminationTreeTransformerBase(ICompressOptions options) : base(options) { }
public UnusedFunctionEliminationTreeTransformer(ICompressOptions options) : base(options) { }
protected override bool CanProcessNode(ICompressOptions options, AstNode node) { return(options.EnableUnreachableCodeElimination && node is AstStatementWithBody); }
public BooleanConstantsTreeTransformer(ICompressOptions options) : base(options) { }
protected override bool CanProcessNode(ICompressOptions options, AstNode node) { return(options.EnableBooleanCompress && node is AstBoolean); }
protected override bool CanProcessNode(ICompressOptions options, AstNode node) { return(options.EnableVariableHoisting && node is AstScope && !(node is AstClass)); }
public VariableHoistingTreeTransformer(ICompressOptions options) : base(options) { }
public UnreachableSwitchCodeEliminationTreeTransformer(ICompressOptions options) : base(options) { IsProcessingSwitchStatement = true; }
public static (string outAst, string outMinJs, string outNiceJs) CompressTestCore(CompressTestData testData, ICompressOptions options) { string outAst; var outNiceJs = string.Empty; var outMinJs = string.Empty; try { var parser = new Parser(new Options(), testData.InputContent); var toplevel = parser.Parse(); toplevel.FigureOutScope(); toplevel = toplevel.Compress(options); var strSink = new StringLineSink(); var dumper = new DumpAst(new AstDumpWriter(strSink)); dumper.Walk(toplevel); outAst = strSink.ToString(); var outMinJsBuilder = new SourceMapBuilder(); toplevel.PrintToBuilder(outMinJsBuilder, new OutputOptions()); outMinJs = outMinJsBuilder.Content(); var outNiceJsBuilder = new SourceMapBuilder(); toplevel.PrintToBuilder(outNiceJsBuilder, new OutputOptions { Beautify = true }); outNiceJs = outNiceJsBuilder.Content(); } catch (SyntaxError e) { outAst = e.Message; } return(outAst, outMinJs, outNiceJs); }
protected override bool CanProcessNode(ICompressOptions options, AstNode node) { return(options.EnableEmptyStatementElimination && node is AstEmptyStatement); }
public EmptyStatementEliminationTreeTransformer(ICompressOptions options) : base(options) { }
protected CompressModuleTreeTransformerBase(ICompressOptions options) { _options = options; }
public UnreachableCodeEliminationTreeTransformer(ICompressOptions options) : base(options) { }
protected abstract bool CanProcessNode(ICompressOptions options, AstNode node);