mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Slightly different way to execute object expression extractors
This commit is contained in:
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -19,6 +19,14 @@ import { ObjectExpressionExtractor } from '../../enums/node-transformers/convert
|
||||
|
||||
@injectable()
|
||||
export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
|
||||
/**
|
||||
* @type {ObjectExpressionExtractor[]}
|
||||
*/
|
||||
private static readonly objectExpressionExtractorNames: ObjectExpressionExtractor[] = [
|
||||
ObjectExpressionExtractor.ObjectExpressionToVariableDeclarationExtractor,
|
||||
ObjectExpressionExtractor.BasePropertiesExtractor
|
||||
];
|
||||
|
||||
/**
|
||||
* @type {TObjectExpressionExtractorFactory}
|
||||
*/
|
||||
@@ -208,18 +216,45 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
|
||||
return objectExpressionNode;
|
||||
}
|
||||
|
||||
return this.applyObjectExpressionKeysExtractorsRecursive(
|
||||
ObjectExpressionKeysTransformer.objectExpressionExtractorNames,
|
||||
objectExpressionNode,
|
||||
hostStatement
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ObjectExpressionExtractor[]} objectExpressionExtractorNames
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Statement} hostStatement
|
||||
* @returns {Node}
|
||||
*/
|
||||
private applyObjectExpressionKeysExtractorsRecursive (
|
||||
objectExpressionExtractorNames: ObjectExpressionExtractor[],
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
hostStatement: ESTree.Statement
|
||||
): ESTree.Node {
|
||||
const newObjectExpressionExtractorNames: ObjectExpressionExtractor[] = [...objectExpressionExtractorNames];
|
||||
const objectExpressionExtractor: ObjectExpressionExtractor | undefined =
|
||||
newObjectExpressionExtractorNames.shift();
|
||||
|
||||
if (!objectExpressionExtractor) {
|
||||
return objectExpressionNode;
|
||||
}
|
||||
|
||||
const {
|
||||
nodeToReplace: newObjectExpressionIdentifierReference,
|
||||
nodeToReplace,
|
||||
objectExpressionHostStatement: newObjectExpressionHostStatement,
|
||||
objectExpressionNode: newObjectExpressionNode
|
||||
} = this
|
||||
.objectExpressionExtractorFactory(ObjectExpressionExtractor.ObjectExpressionToVariableDeclarationExtractor)
|
||||
} = this.objectExpressionExtractorFactory(objectExpressionExtractor)
|
||||
.extract(objectExpressionNode, hostStatement);
|
||||
|
||||
this
|
||||
.objectExpressionExtractorFactory(ObjectExpressionExtractor.BasePropertiesExtractor)
|
||||
.extract(newObjectExpressionNode, newObjectExpressionHostStatement);
|
||||
this.applyObjectExpressionKeysExtractorsRecursive(
|
||||
newObjectExpressionExtractorNames,
|
||||
newObjectExpressionNode,
|
||||
newObjectExpressionHostStatement
|
||||
);
|
||||
|
||||
return newObjectExpressionIdentifierReference;
|
||||
return nodeToReplace;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user