Slightly different way to execute object expression extractors

This commit is contained in:
sanex3339
2020-01-25 23:29:49 +03:00
parent f1cf511975
commit 43d09fbed8
4 changed files with 45 additions and 10 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
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;
}
}