From e95d837a2f964020ede854260e770f86f82404cf Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 16 Dec 2025 21:14:28 +0400 Subject: [PATCH] Optimize performance #2 --- .../DirectivePlacementTransformer.ts | 18 +++--------------- src/utils/EscapeSequenceEncoder.ts | 8 ++++++-- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/node-transformers/finalizing-transformers/DirectivePlacementTransformer.ts b/src/node-transformers/finalizing-transformers/DirectivePlacementTransformer.ts index 63f41477..8d25c0f9 100644 --- a/src/node-transformers/finalizing-transformers/DirectivePlacementTransformer.ts +++ b/src/node-transformers/finalizing-transformers/DirectivePlacementTransformer.ts @@ -127,21 +127,9 @@ export class DirectivePlacementTransformer extends AbstractNodeTransformer { // append new directive node at the top of lexical scope statements NodeAppender.prepend(nodeWithLexicalScopeStatements, [newDirectiveNode]); - // remove found directive node - let isDirectiveNodeRemoved: boolean = false; - estraverse.replace(nodeWithLexicalScopeStatements, { - enter: (node: ESTree.Node): estraverse.VisitorOption | undefined => { - if (isDirectiveNodeRemoved) { - return estraverse.VisitorOption.Break; - } - - if (node === directiveNode) { - isDirectiveNodeRemoved = true; - - return estraverse.VisitorOption.Remove; - } - } - }); + nodeWithLexicalScopeStatements.body = nodeWithLexicalScopeStatements.body.filter( + (node) => node !== directiveNode + ); } return nodeWithLexicalScopeStatements; diff --git a/src/utils/EscapeSequenceEncoder.ts b/src/utils/EscapeSequenceEncoder.ts index 6db012ab..75511d7c 100644 --- a/src/utils/EscapeSequenceEncoder.ts +++ b/src/utils/EscapeSequenceEncoder.ts @@ -19,6 +19,11 @@ export class EscapeSequenceEncoder implements IEscapeSequenceEncoder { */ private static readonly forceEscapeCharactersRegExp: RegExp = /[\x00-\x1F\x7F-\x9F'"\\\s]/; + /** + * @type {RegExp} + */ + private static readonly replaceRegExp: RegExp = /[\s\S]/g; + /** * @type {Map} */ @@ -37,12 +42,11 @@ export class EscapeSequenceEncoder implements IEscapeSequenceEncoder { } const radix: number = 16; - const replaceRegExp: RegExp = new RegExp('[\\s\\S]', 'g'); let prefix: string; let template: string; - const result: string = string.replace(replaceRegExp, (character: string): string => { + const result: string = string.replace(EscapeSequenceEncoder.replaceRegExp, (character: string): string => { const shouldEncodeCharacter: boolean = encodeAllSymbols || EscapeSequenceEncoder.forceEscapeCharactersRegExp.test(character);