Parcourir la source

Slightly different way to execute object expression extractors

sanex3339 il y a 5 ans
Parent
commit
43d09fbed8

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/index.browser.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/index.cli.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/index.js


+ 42 - 7
src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts

@@ -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;
     }
 }

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff