|
@@ -39,6 +39,14 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param {Property} node
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+ private static isProhibitedPropertyNode (node: ESTree.Property): boolean {
|
|
|
+ return node.kind !== 'init';
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param {Node} node
|
|
|
* @returns {propertyValueNode is Pattern}
|
|
@@ -51,6 +59,15 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
|
|
|| NodeGuards.isRestElementNode(node);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param {Property} property
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+ private static shouldCreateLiteralNode (property: ESTree.Property): boolean {
|
|
|
+ return !property.computed
|
|
|
+ || (property.computed && !!property.key && NodeGuards.isLiteralNode(property.key));
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* extracts object expression properties:
|
|
|
* var _0xabc123 = {
|
|
@@ -138,13 +155,14 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
|
|
for (let i: number = 0; i < propertiesLength; i++) {
|
|
|
const property: (ESTree.Property | ESTree.SpreadElement) = properties[i];
|
|
|
|
|
|
- if (!NodeGuards.isPropertyNode(property)) {
|
|
|
+ // invalid property node
|
|
|
+ if (!NodeGuards.isPropertyNode(property) || BasePropertiesExtractor.isProhibitedPropertyNode(property)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
const propertyValue: ESTree.Expression | ESTree.Pattern = property.value;
|
|
|
|
|
|
- // invalid property nodes
|
|
|
+ // invalid property node value
|
|
|
if (BasePropertiesExtractor.isProhibitedPattern(propertyValue)) {
|
|
|
continue;
|
|
|
}
|
|
@@ -161,8 +179,7 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
|
|
/**
|
|
|
* Stage 2: creating new expression statement node with member expression based on removed property
|
|
|
*/
|
|
|
- const shouldCreateLiteralNode: boolean = !property.computed
|
|
|
- || (property.computed && !!property.key && NodeGuards.isLiteralNode(property.key));
|
|
|
+ const shouldCreateLiteralNode: boolean = BasePropertiesExtractor.shouldCreateLiteralNode(property);
|
|
|
const memberExpressionProperty: ESTree.Expression = shouldCreateLiteralNode
|
|
|
? NodeFactory.literalNode(propertyKeyName)
|
|
|
: NodeFactory.identifierNode(propertyKeyName);
|