hermes-parser
Advanced tools
Comparing version 0.15.1 to 0.16.0
@@ -177,2 +177,3 @@ /** | ||
TypeofTypeAnnotation: ['argument'], | ||
TypeOperator: ['typeAnnotation'], | ||
TypeParameter: ['bound', 'variance', 'default'], | ||
@@ -179,0 +180,0 @@ TypeParameterDeclaration: ['params'], |
@@ -598,2 +598,5 @@ /** | ||
}, | ||
TypeOperator: { | ||
typeAnnotation: 'Node' | ||
}, | ||
TypeParameter: { | ||
@@ -600,0 +603,0 @@ bound: 'Node', |
@@ -58,3 +58,10 @@ "use strict"; | ||
return this.mapNode(program); | ||
const resultNode = this.mapNode(program); | ||
if (resultNode.type !== 'Program') { | ||
throw new Error(`HermesToESTreeAdapter: Must return a Program node, instead of "${resultNode.type}". `); | ||
} // $FlowExpectedError[incompatible-return] We know this is a program at this point. | ||
return resultNode; | ||
} | ||
@@ -61,0 +68,0 @@ /** |
@@ -869,2 +869,6 @@ /** | ||
function deserializeJSXFirst() { | ||
throw new Error('JSX' + ' should not appear in program buffer'); | ||
} | ||
function deserializeJSXIdentifier() { | ||
@@ -1007,2 +1011,10 @@ return { | ||
function deserializeJSXLast() { | ||
throw new Error('JSX' + ' should not appear in program buffer'); | ||
} | ||
function deserializeFlowFirst() { | ||
throw new Error('Flow' + ' should not appear in program buffer'); | ||
} | ||
function deserializeExistsTypeAnnotation() { | ||
@@ -1196,2 +1208,11 @@ return { | ||
function deserializeTypeOperator() { | ||
return { | ||
type: 'TypeOperator', | ||
loc: this.addEmptyLoc(), | ||
operator: this.deserializeString(), | ||
typeAnnotation: this.deserializeNode() | ||
}; | ||
} | ||
function deserializeQualifiedTypeofIdentifier() { | ||
@@ -1737,2 +1758,10 @@ return { | ||
function deserializeFlowLast() { | ||
throw new Error('Flow' + ' should not appear in program buffer'); | ||
} | ||
function deserializeTSFirst() { | ||
throw new Error('TS' + ' should not appear in program buffer'); | ||
} | ||
function deserializeTSTypeAnnotation() { | ||
@@ -1788,2 +1817,30 @@ return { | ||
function deserializeTSUndefinedKeyword() { | ||
return { | ||
type: 'TSUndefinedKeyword', | ||
loc: this.addEmptyLoc() | ||
}; | ||
} | ||
function deserializeTSUnknownKeyword() { | ||
return { | ||
type: 'TSUnknownKeyword', | ||
loc: this.addEmptyLoc() | ||
}; | ||
} | ||
function deserializeTSNeverKeyword() { | ||
return { | ||
type: 'TSNeverKeyword', | ||
loc: this.addEmptyLoc() | ||
}; | ||
} | ||
function deserializeTSBigIntKeyword() { | ||
return { | ||
type: 'TSBigIntKeyword', | ||
loc: this.addEmptyLoc() | ||
}; | ||
} | ||
function deserializeTSThisType() { | ||
@@ -2110,2 +2167,6 @@ return { | ||
function deserializeTSLast() { | ||
throw new Error('TS' + ' should not appear in program buffer'); | ||
} | ||
function deserializeCoverFirst() { | ||
@@ -2159,2 +2220,2 @@ throw new Error('Cover' + ' should not appear in program buffer'); | ||
module.exports = [deserializeEmpty, deserializeMetadata, deserializeFunctionLikeFirst, deserializeProgram, deserializeFunctionExpression, deserializeArrowFunctionExpression, deserializeFunctionDeclaration, deserializeComponentDeclaration, deserializeFunctionLikeLast, deserializeStatementFirst, deserializeLoopStatementFirst, deserializeWhileStatement, deserializeDoWhileStatement, deserializeForInStatement, deserializeForOfStatement, deserializeForStatement, deserializeLoopStatementLast, deserializeDebuggerStatement, deserializeEmptyStatement, deserializeBlockStatement, deserializeBreakStatement, deserializeContinueStatement, deserializeThrowStatement, deserializeReturnStatement, deserializeWithStatement, deserializeSwitchStatement, deserializeLabeledStatement, deserializeExpressionStatement, deserializeTryStatement, deserializeIfStatement, deserializeStatementLast, deserializeNullLiteral, deserializeBooleanLiteral, deserializeStringLiteral, deserializeNumericLiteral, deserializeRegExpLiteral, deserializeBigIntLiteral, deserializeThisExpression, deserializeSuper, deserializeSequenceExpression, deserializeObjectExpression, deserializeArrayExpression, deserializeSpreadElement, deserializeNewExpression, deserializeYieldExpression, deserializeAwaitExpression, deserializeImportExpression, deserializeCallExpressionLikeFirst, deserializeCallExpression, deserializeOptionalCallExpression, deserializeCallExpressionLikeLast, deserializeAssignmentExpression, deserializeUnaryExpression, deserializeUpdateExpression, deserializeMemberExpressionLikeFirst, deserializeMemberExpression, deserializeOptionalMemberExpression, deserializeMemberExpressionLikeLast, deserializeLogicalExpression, deserializeConditionalExpression, deserializeBinaryExpression, deserializeDirective, deserializeDirectiveLiteral, deserializeIdentifier, deserializePrivateName, deserializeMetaProperty, deserializeSwitchCase, deserializeCatchClause, deserializeVariableDeclarator, deserializeVariableDeclaration, deserializeTemplateLiteral, deserializeTaggedTemplateExpression, deserializeTemplateElement, deserializeProperty, deserializeClassDeclaration, deserializeClassExpression, deserializeClassBody, deserializeClassProperty, deserializeClassPrivateProperty, deserializeMethodDefinition, deserializeImportDeclaration, deserializeImportSpecifier, deserializeImportDefaultSpecifier, deserializeImportNamespaceSpecifier, deserializeImportAttribute, deserializeExportNamedDeclaration, deserializeExportSpecifier, deserializeExportNamespaceSpecifier, deserializeExportDefaultDeclaration, deserializeExportAllDeclaration, deserializePatternFirst, deserializeObjectPattern, deserializeArrayPattern, deserializeRestElement, deserializeAssignmentPattern, deserializePatternLast, deserializeJSXIdentifier, deserializeJSXMemberExpression, deserializeJSXNamespacedName, deserializeJSXEmptyExpression, deserializeJSXExpressionContainer, deserializeJSXSpreadChild, deserializeJSXOpeningElement, deserializeJSXClosingElement, deserializeJSXAttribute, deserializeJSXSpreadAttribute, deserializeJSXStringLiteral, deserializeJSXText, deserializeJSXElement, deserializeJSXFragment, deserializeJSXOpeningFragment, deserializeJSXClosingFragment, deserializeExistsTypeAnnotation, deserializeEmptyTypeAnnotation, deserializeStringTypeAnnotation, deserializeNumberTypeAnnotation, deserializeStringLiteralTypeAnnotation, deserializeNumberLiteralTypeAnnotation, deserializeBigIntLiteralTypeAnnotation, deserializeBooleanTypeAnnotation, deserializeBooleanLiteralTypeAnnotation, deserializeNullLiteralTypeAnnotation, deserializeSymbolTypeAnnotation, deserializeAnyTypeAnnotation, deserializeMixedTypeAnnotation, deserializeBigIntTypeAnnotation, deserializeVoidTypeAnnotation, deserializeFunctionTypeAnnotation, deserializeFunctionTypeParam, deserializeComponentTypeAnnotation, deserializeComponentTypeParameter, deserializeNullableTypeAnnotation, deserializeQualifiedTypeIdentifier, deserializeTypeofTypeAnnotation, deserializeKeyofTypeAnnotation, deserializeQualifiedTypeofIdentifier, deserializeTupleTypeAnnotation, deserializeTupleTypeSpreadElement, deserializeTupleTypeLabeledElement, deserializeArrayTypeAnnotation, deserializeInferTypeAnnotation, deserializeUnionTypeAnnotation, deserializeIntersectionTypeAnnotation, deserializeGenericTypeAnnotation, deserializeIndexedAccessType, deserializeOptionalIndexedAccessType, deserializeConditionalTypeAnnotation, deserializeTypePredicate, deserializeInterfaceTypeAnnotation, deserializeTypeAlias, deserializeOpaqueType, deserializeInterfaceDeclaration, deserializeDeclareTypeAlias, deserializeDeclareOpaqueType, deserializeDeclareInterface, deserializeDeclareClass, deserializeDeclareFunction, deserializeDeclareComponent, deserializeDeclareVariable, deserializeDeclareEnum, deserializeDeclareExportDeclaration, deserializeDeclareExportAllDeclaration, deserializeDeclareModule, deserializeDeclareModuleExports, deserializeInterfaceExtends, deserializeClassImplements, deserializeTypeAnnotation, deserializeObjectTypeAnnotation, deserializeObjectTypeProperty, deserializeObjectTypeSpreadProperty, deserializeObjectTypeInternalSlot, deserializeObjectTypeCallProperty, deserializeObjectTypeIndexer, deserializeObjectTypeMappedTypeProperty, deserializeVariance, deserializeTypeParameterDeclaration, deserializeTypeParameter, deserializeTypeParameterInstantiation, deserializeTypeCastExpression, deserializeInferredPredicate, deserializeDeclaredPredicate, deserializeEnumDeclaration, deserializeEnumStringBody, deserializeEnumNumberBody, deserializeEnumBooleanBody, deserializeEnumSymbolBody, deserializeEnumDefaultedMember, deserializeEnumStringMember, deserializeEnumNumberMember, deserializeEnumBooleanMember, deserializeComponentParameter, deserializeTSTypeAnnotation, deserializeTSAnyKeyword, deserializeTSNumberKeyword, deserializeTSBooleanKeyword, deserializeTSStringKeyword, deserializeTSSymbolKeyword, deserializeTSVoidKeyword, deserializeTSThisType, deserializeTSLiteralType, deserializeTSIndexedAccessType, deserializeTSArrayType, deserializeTSTypeReference, deserializeTSQualifiedName, deserializeTSFunctionType, deserializeTSConstructorType, deserializeTSTypePredicate, deserializeTSTupleType, deserializeTSTypeAssertion, deserializeTSAsExpression, deserializeTSParameterProperty, deserializeTSTypeAliasDeclaration, deserializeTSInterfaceDeclaration, deserializeTSInterfaceHeritage, deserializeTSInterfaceBody, deserializeTSEnumDeclaration, deserializeTSEnumMember, deserializeTSModuleDeclaration, deserializeTSModuleBlock, deserializeTSModuleMember, deserializeTSTypeParameterDeclaration, deserializeTSTypeParameter, deserializeTSTypeParameterInstantiation, deserializeTSUnionType, deserializeTSIntersectionType, deserializeTSTypeQuery, deserializeTSConditionalType, deserializeTSTypeLiteral, deserializeTSPropertySignature, deserializeTSMethodSignature, deserializeTSIndexSignature, deserializeTSCallSignatureDeclaration, deserializeTSModifiers, deserializeCoverFirst, deserializeCoverEmptyArgs, deserializeCoverTrailingComma, deserializeCoverInitializer, deserializeCoverRestElement, deserializeCoverTypedIdentifier, deserializeCoverLast]; | ||
module.exports = [deserializeEmpty, deserializeMetadata, deserializeFunctionLikeFirst, deserializeProgram, deserializeFunctionExpression, deserializeArrowFunctionExpression, deserializeFunctionDeclaration, deserializeComponentDeclaration, deserializeFunctionLikeLast, deserializeStatementFirst, deserializeLoopStatementFirst, deserializeWhileStatement, deserializeDoWhileStatement, deserializeForInStatement, deserializeForOfStatement, deserializeForStatement, deserializeLoopStatementLast, deserializeDebuggerStatement, deserializeEmptyStatement, deserializeBlockStatement, deserializeBreakStatement, deserializeContinueStatement, deserializeThrowStatement, deserializeReturnStatement, deserializeWithStatement, deserializeSwitchStatement, deserializeLabeledStatement, deserializeExpressionStatement, deserializeTryStatement, deserializeIfStatement, deserializeStatementLast, deserializeNullLiteral, deserializeBooleanLiteral, deserializeStringLiteral, deserializeNumericLiteral, deserializeRegExpLiteral, deserializeBigIntLiteral, deserializeThisExpression, deserializeSuper, deserializeSequenceExpression, deserializeObjectExpression, deserializeArrayExpression, deserializeSpreadElement, deserializeNewExpression, deserializeYieldExpression, deserializeAwaitExpression, deserializeImportExpression, deserializeCallExpressionLikeFirst, deserializeCallExpression, deserializeOptionalCallExpression, deserializeCallExpressionLikeLast, deserializeAssignmentExpression, deserializeUnaryExpression, deserializeUpdateExpression, deserializeMemberExpressionLikeFirst, deserializeMemberExpression, deserializeOptionalMemberExpression, deserializeMemberExpressionLikeLast, deserializeLogicalExpression, deserializeConditionalExpression, deserializeBinaryExpression, deserializeDirective, deserializeDirectiveLiteral, deserializeIdentifier, deserializePrivateName, deserializeMetaProperty, deserializeSwitchCase, deserializeCatchClause, deserializeVariableDeclarator, deserializeVariableDeclaration, deserializeTemplateLiteral, deserializeTaggedTemplateExpression, deserializeTemplateElement, deserializeProperty, deserializeClassDeclaration, deserializeClassExpression, deserializeClassBody, deserializeClassProperty, deserializeClassPrivateProperty, deserializeMethodDefinition, deserializeImportDeclaration, deserializeImportSpecifier, deserializeImportDefaultSpecifier, deserializeImportNamespaceSpecifier, deserializeImportAttribute, deserializeExportNamedDeclaration, deserializeExportSpecifier, deserializeExportNamespaceSpecifier, deserializeExportDefaultDeclaration, deserializeExportAllDeclaration, deserializePatternFirst, deserializeObjectPattern, deserializeArrayPattern, deserializeRestElement, deserializeAssignmentPattern, deserializePatternLast, deserializeJSXFirst, deserializeJSXIdentifier, deserializeJSXMemberExpression, deserializeJSXNamespacedName, deserializeJSXEmptyExpression, deserializeJSXExpressionContainer, deserializeJSXSpreadChild, deserializeJSXOpeningElement, deserializeJSXClosingElement, deserializeJSXAttribute, deserializeJSXSpreadAttribute, deserializeJSXStringLiteral, deserializeJSXText, deserializeJSXElement, deserializeJSXFragment, deserializeJSXOpeningFragment, deserializeJSXClosingFragment, deserializeJSXLast, deserializeFlowFirst, deserializeExistsTypeAnnotation, deserializeEmptyTypeAnnotation, deserializeStringTypeAnnotation, deserializeNumberTypeAnnotation, deserializeStringLiteralTypeAnnotation, deserializeNumberLiteralTypeAnnotation, deserializeBigIntLiteralTypeAnnotation, deserializeBooleanTypeAnnotation, deserializeBooleanLiteralTypeAnnotation, deserializeNullLiteralTypeAnnotation, deserializeSymbolTypeAnnotation, deserializeAnyTypeAnnotation, deserializeMixedTypeAnnotation, deserializeBigIntTypeAnnotation, deserializeVoidTypeAnnotation, deserializeFunctionTypeAnnotation, deserializeFunctionTypeParam, deserializeComponentTypeAnnotation, deserializeComponentTypeParameter, deserializeNullableTypeAnnotation, deserializeQualifiedTypeIdentifier, deserializeTypeofTypeAnnotation, deserializeKeyofTypeAnnotation, deserializeTypeOperator, deserializeQualifiedTypeofIdentifier, deserializeTupleTypeAnnotation, deserializeTupleTypeSpreadElement, deserializeTupleTypeLabeledElement, deserializeArrayTypeAnnotation, deserializeInferTypeAnnotation, deserializeUnionTypeAnnotation, deserializeIntersectionTypeAnnotation, deserializeGenericTypeAnnotation, deserializeIndexedAccessType, deserializeOptionalIndexedAccessType, deserializeConditionalTypeAnnotation, deserializeTypePredicate, deserializeInterfaceTypeAnnotation, deserializeTypeAlias, deserializeOpaqueType, deserializeInterfaceDeclaration, deserializeDeclareTypeAlias, deserializeDeclareOpaqueType, deserializeDeclareInterface, deserializeDeclareClass, deserializeDeclareFunction, deserializeDeclareComponent, deserializeDeclareVariable, deserializeDeclareEnum, deserializeDeclareExportDeclaration, deserializeDeclareExportAllDeclaration, deserializeDeclareModule, deserializeDeclareModuleExports, deserializeInterfaceExtends, deserializeClassImplements, deserializeTypeAnnotation, deserializeObjectTypeAnnotation, deserializeObjectTypeProperty, deserializeObjectTypeSpreadProperty, deserializeObjectTypeInternalSlot, deserializeObjectTypeCallProperty, deserializeObjectTypeIndexer, deserializeObjectTypeMappedTypeProperty, deserializeVariance, deserializeTypeParameterDeclaration, deserializeTypeParameter, deserializeTypeParameterInstantiation, deserializeTypeCastExpression, deserializeInferredPredicate, deserializeDeclaredPredicate, deserializeEnumDeclaration, deserializeEnumStringBody, deserializeEnumNumberBody, deserializeEnumBooleanBody, deserializeEnumSymbolBody, deserializeEnumDefaultedMember, deserializeEnumStringMember, deserializeEnumNumberMember, deserializeEnumBooleanMember, deserializeComponentParameter, deserializeFlowLast, deserializeTSFirst, deserializeTSTypeAnnotation, deserializeTSAnyKeyword, deserializeTSNumberKeyword, deserializeTSBooleanKeyword, deserializeTSStringKeyword, deserializeTSSymbolKeyword, deserializeTSVoidKeyword, deserializeTSUndefinedKeyword, deserializeTSUnknownKeyword, deserializeTSNeverKeyword, deserializeTSBigIntKeyword, deserializeTSThisType, deserializeTSLiteralType, deserializeTSIndexedAccessType, deserializeTSArrayType, deserializeTSTypeReference, deserializeTSQualifiedName, deserializeTSFunctionType, deserializeTSConstructorType, deserializeTSTypePredicate, deserializeTSTupleType, deserializeTSTypeAssertion, deserializeTSAsExpression, deserializeTSParameterProperty, deserializeTSTypeAliasDeclaration, deserializeTSInterfaceDeclaration, deserializeTSInterfaceHeritage, deserializeTSInterfaceBody, deserializeTSEnumDeclaration, deserializeTSEnumMember, deserializeTSModuleDeclaration, deserializeTSModuleBlock, deserializeTSModuleMember, deserializeTSTypeParameterDeclaration, deserializeTSTypeParameter, deserializeTSTypeParameterInstantiation, deserializeTSUnionType, deserializeTSIntersectionType, deserializeTSTypeQuery, deserializeTSConditionalType, deserializeTSTypeLiteral, deserializeTSPropertySignature, deserializeTSMethodSignature, deserializeTSIndexSignature, deserializeTSCallSignatureDeclaration, deserializeTSModifiers, deserializeTSLast, deserializeCoverFirst, deserializeCoverEmptyArgs, deserializeCoverTrailingComma, deserializeCoverInitializer, deserializeCoverRestElement, deserializeCoverTypedIdentifier, deserializeCoverLast]; |
@@ -236,3 +236,3 @@ "use strict"; | ||
if (node.value.type === 'FunctionExpression') { | ||
if (node.value.type === 'FunctionExpression' && (node.method || node.kind !== 'init')) { | ||
node.value.loc.start = node.key.loc.end; | ||
@@ -259,2 +259,4 @@ node.value.range[0] = node.key.range[1]; | ||
switch (node.type) { | ||
// This prop should ideally only live on `ArrowFunctionExpression` but to | ||
// match espree output we place it on all functions types. | ||
case 'FunctionDeclaration': | ||
@@ -306,3 +308,3 @@ case 'FunctionExpression': | ||
c) wrap this node (`node = ChainExpression[expression = node]`) | ||
3) if the current node is a `MembedExpression`: | ||
3) if the current node is a `MemberExpression`: | ||
a) convert this node to a `MemberExpression[optional = true]` | ||
@@ -309,0 +311,0 @@ */ |
@@ -18,2 +18,3 @@ /** | ||
mutateESTreeASTForPrettier: true, | ||
Transforms: true, | ||
FlowVisitorKeys: true, | ||
@@ -23,3 +24,3 @@ astArrayMutationHelpers: true, | ||
}; | ||
exports.mutateESTreeASTForPrettier = exports.astNodeMutationHelpers = exports.astArrayMutationHelpers = void 0; | ||
exports.mutateESTreeASTForPrettier = exports.astNodeMutationHelpers = exports.astArrayMutationHelpers = exports.Transforms = void 0; | ||
exports.parse = parse; | ||
@@ -29,4 +30,2 @@ | ||
var _HermesToBabelAdapter = _interopRequireDefault(require("./HermesToBabelAdapter")); | ||
var _HermesToESTreeAdapter = _interopRequireDefault(require("./HermesToESTreeAdapter")); | ||
@@ -38,2 +37,10 @@ | ||
var StripComponentSyntax = _interopRequireWildcard(require("./estree/StripComponentSyntax")); | ||
var StripFlowTypesForBabel = _interopRequireWildcard(require("./estree/StripFlowTypesForBabel")); | ||
var TransformESTreeToBabel = _interopRequireWildcard(require("./babel/TransformESTreeToBabel")); | ||
var StripFlowTypes = _interopRequireWildcard(require("./estree/StripFlowTypes")); | ||
var _ParserOptions = require("./ParserOptions"); | ||
@@ -114,2 +121,6 @@ | ||
if (options.enableExperimentalComponentSyntax == null) { | ||
options.enableExperimentalComponentSyntax = true; // Enable by default | ||
} | ||
options.tokens = options.tokens === true; | ||
@@ -120,7 +131,2 @@ options.allowReturnOutsideFunction = options.allowReturnOutsideFunction === true; | ||
function getAdapter(options, code) { | ||
return options.babel === true ? new _HermesToBabelAdapter.default(options) : new _HermesToESTreeAdapter.default(options, code); | ||
} // $FlowExpectedError[unclear-type] | ||
// eslint-disable-next-line no-redeclare | ||
@@ -130,4 +136,18 @@ function parse(code, opts) { | ||
const ast = HermesParser.parse(code, options); | ||
const adapter = getAdapter(options, code); | ||
return adapter.transform(ast); | ||
} | ||
const estreeAdapter = new _HermesToESTreeAdapter.default(options, code); | ||
const estreeAST = estreeAdapter.transform(ast); | ||
if (options.babel !== true) { | ||
return estreeAST; | ||
} | ||
const loweredESTreeAST = [StripComponentSyntax.transformProgram, StripFlowTypesForBabel.transformProgram].reduce((ast, transform) => transform(ast, options), estreeAST); | ||
return TransformESTreeToBabel.transformProgram(loweredESTreeAST, options); | ||
} | ||
const Transforms = { | ||
stripComponentSyntax: StripComponentSyntax.transformProgram, | ||
stripFlowTypesForBabel: StripFlowTypesForBabel.transformProgram, | ||
stripFlowTypes: StripFlowTypes.transformProgram | ||
}; | ||
exports.Transforms = Transforms; |
@@ -29,3 +29,3 @@ /** | ||
function getParentKey(target, parent) { | ||
function getParentKey(target, parent, visitorKeys) { | ||
if (parent == null) { | ||
@@ -35,3 +35,3 @@ throw new Error(`Expected parent node to be set on "${target.type}"`); | ||
for (const key of (0, _getVisitorKeys.getVisitorKeys)(parent)) { | ||
for (const key of (0, _getVisitorKeys.getVisitorKeys)(parent, visitorKeys)) { | ||
if ((0, _getVisitorKeys.isNode)( // $FlowExpectedError[prop-missing] | ||
@@ -70,4 +70,4 @@ parent[key])) { | ||
function replaceNodeOnParent(originalNode, originalNodeParent, nodeToReplaceWith) { | ||
const replacementParent = getParentKey(originalNode, originalNodeParent); | ||
function replaceNodeOnParent(originalNode, originalNodeParent, nodeToReplaceWith, visitorKeys) { | ||
const replacementParent = getParentKey(originalNode, originalNodeParent, visitorKeys); | ||
const parent = replacementParent.node; | ||
@@ -89,4 +89,4 @@ | ||
function removeNodeOnParent(originalNode, originalNodeParent) { | ||
const replacementParent = getParentKey(originalNode, originalNodeParent); | ||
function removeNodeOnParent(originalNode, originalNodeParent, visitorKeys) { | ||
const replacementParent = getParentKey(originalNode, originalNodeParent, visitorKeys); | ||
const parent = replacementParent.node; | ||
@@ -108,4 +108,4 @@ | ||
function setParentPointersInDirectChildren(node) { | ||
for (const key of (0, _getVisitorKeys.getVisitorKeys)(node)) { | ||
function setParentPointersInDirectChildren(node, visitorKeys) { | ||
for (const key of (0, _getVisitorKeys.getVisitorKeys)(node, visitorKeys)) { | ||
if ((0, _getVisitorKeys.isNode)(node[key])) { | ||
@@ -125,3 +125,3 @@ node[key].parent = node; | ||
function updateAllParentPointers(node) { | ||
function updateAllParentPointers(node, visitorKeys) { | ||
_SimpleTraverser.SimpleTraverser.traverse(node, { | ||
@@ -133,4 +133,5 @@ enter(node, parent) { | ||
leave() {} | ||
leave() {}, | ||
visitorKeys | ||
}); | ||
@@ -145,8 +146,14 @@ } | ||
function nodeWith(node, overrideProps) { | ||
function nodeWith(node, overrideProps, visitorKeys) { | ||
// Check if this will actually result in a change, maintaining referential equality is important. | ||
const willBeUnchanged = Object.entries(overrideProps).every(([key, value]) => // $FlowExpectedError[incompatible-call] | ||
// $FlowExpectedError[prop-missing] | ||
Array.isArray(value) ? (0, _astArrayMutationHelpers.arrayIsEqual)(node[key], value) : node[key] === value); | ||
const willBeUnchanged = Object.entries(overrideProps).every(([key, value]) => { | ||
if (Array.isArray(value)) { | ||
// $FlowExpectedError[prop-missing] | ||
return Array.isArray(node[key]) ? (0, _astArrayMutationHelpers.arrayIsEqual)(node[key], value) : false; | ||
} // $FlowExpectedError[prop-missing] | ||
return node[key] === value; | ||
}); | ||
if (willBeUnchanged) { | ||
@@ -162,3 +169,3 @@ return node; | ||
setParentPointersInDirectChildren(newNode); | ||
setParentPointersInDirectChildren(newNode, visitorKeys); | ||
return newNode; | ||
@@ -171,3 +178,3 @@ } | ||
function shallowCloneNode(node) { | ||
function shallowCloneNode(node, visitorKeys) { | ||
// $FlowExpectedError[cannot-spread-interface] | ||
@@ -177,3 +184,3 @@ const newNode = { ...node | ||
setParentPointersInDirectChildren(newNode); | ||
setParentPointersInDirectChildren(newNode, visitorKeys); | ||
return newNode; | ||
@@ -186,3 +193,3 @@ } | ||
function deepCloneNode(node) { | ||
function deepCloneNode(node, visitorKeys) { | ||
const clone = JSON.parse(JSON.stringify(node, (key, value) => { | ||
@@ -196,4 +203,4 @@ // null out parent pointers | ||
})); | ||
updateAllParentPointers(clone); | ||
updateAllParentPointers(clone, visitorKeys); | ||
return clone; | ||
} |
@@ -21,5 +21,13 @@ /** | ||
function setParentPointer(node, parent) { | ||
if (parent != null) { | ||
// $FlowExpectedError[cannot-write] | ||
node.parent = parent; | ||
} | ||
} | ||
/** | ||
* A simple class to recursively tranform AST trees. | ||
*/ | ||
class SimpleTransform { | ||
@@ -37,7 +45,15 @@ /** | ||
enter: (node, parent) => { | ||
// Ensure the parent pointers are correctly set before entering the node. | ||
setParentPointer(node, parent); | ||
const resultNode = options.transform(node); | ||
if (resultNode !== node) { | ||
const traversedResultNode = resultNode != null ? this.transform(resultNode, options) : null; | ||
let traversedResultNode = null; | ||
if (resultNode != null) { | ||
// Ensure the new node has the correct parent pointers before recursing again. | ||
setParentPointer(resultNode, parent); | ||
traversedResultNode = this.transform(resultNode, options); | ||
} | ||
if (parent == null) { | ||
@@ -50,5 +66,6 @@ if (node !== rootNode) { | ||
} else if (traversedResultNode == null) { | ||
(0, _astNodeMutationHelpers.removeNodeOnParent)(node, parent); | ||
(0, _astNodeMutationHelpers.removeNodeOnParent)(node, parent, options.visitorKeys); | ||
} else { | ||
(0, _astNodeMutationHelpers.replaceNodeOnParent)(node, parent, traversedResultNode); | ||
(0, _astNodeMutationHelpers.replaceNodeOnParent)(node, parent, traversedResultNode, options.visitorKeys); | ||
setParentPointer(traversedResultNode, parent); | ||
} | ||
@@ -77,2 +94,12 @@ | ||
} | ||
static transformProgram(program, options) { | ||
const result = SimpleTransform.transform(program, options); | ||
if ((result == null ? void 0 : result.type) === 'Program') { | ||
return result; | ||
} | ||
throw new Error('SimpleTransform.transformProgram: Expected program node.'); | ||
} | ||
/** | ||
@@ -91,4 +118,4 @@ * Return a new AST node with the given properties overrided if needed. | ||
static nodeWith(node, overrideProps) { | ||
return (0, _astNodeMutationHelpers.nodeWith)(node, overrideProps); | ||
static nodeWith(node, overrideProps, visitorKeys) { | ||
return (0, _astNodeMutationHelpers.nodeWith)(node, overrideProps, visitorKeys); | ||
} | ||
@@ -95,0 +122,0 @@ |
{ | ||
"name": "hermes-parser", | ||
"version": "0.15.1", | ||
"version": "0.16.0", | ||
"description": "A JavaScript parser built from the Hermes engine", | ||
@@ -12,3 +12,3 @@ "main": "dist/index.js", | ||
"dependencies": { | ||
"hermes-estree": "0.15.1" | ||
"hermes-estree": "0.16.0" | ||
}, | ||
@@ -15,0 +15,0 @@ "devDependencies": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
1034720
48
6185
+ Addedhermes-estree@0.16.0(transitive)
- Removedhermes-estree@0.15.1(transitive)
Updatedhermes-estree@0.16.0