Skip to content

Commit

Permalink
Merge pull request #18 from superfaceai/feature/profile-ast-utils
Browse files Browse the repository at this point in the history
feat: add Profile AST utils
  • Loading branch information
martinalbert authored Jan 4, 2021
2 parents 9241b27 + 76b1b7a commit 4d4b1fc
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/interfaces/ast/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from './map-ast';
export * from './map-ast.utils';
export * from './profile-ast';
export * from './profile-ast.utils';
4 changes: 0 additions & 4 deletions src/interfaces/ast/map-ast.utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,6 @@ export function isOperationDefinitionNode(
return node.kind === 'OperationDefinition';
}

export function isProfileIdNode(node: MapASTNode): node is MapProfileIdNode {
return node.kind === 'ProfileId';
}

export function isProviderNode(node: MapASTNode): node is ProviderNode {
return node.kind === 'Provider';
}
Expand Down
141 changes: 141 additions & 0 deletions src/interfaces/ast/profile-ast.utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
import {
DocumentDefinition,
EnumDefinitionNode,
EnumValueNode,
FieldDefinitionNode,
ListDefinitionNode,
ModelTypeNameNode,
NamedFieldDefinitionNode,
NamedModelDefinitionNode,
NonNullDefinitionNode,
ObjectDefinitionNode,
PrimitiveTypeNameNode,
ProfileASTNode,
ProfileDocumentNode,
ProfileIdNode,
ProfileNode,
Type,
TypeDefinition,
TypeName,
UnionDefinitionNode,
UseCaseDefinitionNode,
UseCaseSlotDefinitionNode,
} from './profile-ast';

export function isPrimitiveTypeNameNode(
node: ProfileASTNode
): node is PrimitiveTypeNameNode {
return node.kind === 'PrimitiveTypeName';
}

export function isModelTypeNameNode(
node: ProfileASTNode
): node is ModelTypeNameNode {
return node.kind === 'ModelTypeName';
}

export function isTypeName(node: ProfileASTNode): node is TypeName {
return isPrimitiveTypeNameNode(node) || isModelTypeNameNode(node);
}

export function isEnumDefinitionNode(
node: ProfileASTNode
): node is EnumDefinitionNode {
return node.kind === 'EnumDefinition';
}

export function isObjectDefinitionNode(
node: ProfileASTNode
): node is ObjectDefinitionNode {
return node.kind === 'ObjectDefinition';
}

export function isListDefinitionNode(
node: ProfileASTNode
): node is ListDefinitionNode {
return node.kind === 'ListDefinition';
}

export function isNonNullDefinitionNode(
node: ProfileASTNode
): node is NonNullDefinitionNode {
return node.kind === 'NonNullDefinition';
}

export function isUnionDefinitionNode(
node: ProfileASTNode
): node is UnionDefinitionNode {
return node.kind === 'UnionDefinition';
}

export function isTypeDefinition(node: ProfileASTNode): node is TypeDefinition {
return (
isObjectDefinitionNode(node) ||
isEnumDefinitionNode(node) ||
isUnionDefinitionNode(node) ||
isListDefinitionNode(node) ||
isNonNullDefinitionNode(node)
);
}

export function isType(node: ProfileASTNode): node is Type {
return isTypeName(node) || isTypeDefinition(node);
}

export function isEnumValueNode(node: ProfileASTNode): node is EnumValueNode {
return node.kind === 'EnumValue';
}

export function isFieldDefinitionNode(
node: ProfileASTNode
): node is FieldDefinitionNode {
return node.kind === 'FieldDefinition';
}

export function isNamedFieldDefinitionNode(
node: ProfileASTNode
): node is NamedFieldDefinitionNode {
return node.kind === 'NamedFieldDefinition';
}

export function isNamedModelDefinitionNode(
node: ProfileASTNode
): node is NamedModelDefinitionNode {
return node.kind === 'NamedModelDefinition';
}

export function isUseCaseSlotDefinitionNode(
node: ProfileASTNode
): node is UseCaseSlotDefinitionNode {
return node.kind === 'UseCaseSlotDefinition';
}

export function isUseCaseDefinitionNode(
node: ProfileASTNode
): node is UseCaseDefinitionNode {
return node.kind === 'UseCaseDefinition';
}

export function isProfileIdNode(node: ProfileASTNode): node is ProfileIdNode {
return node.kind === 'ProfileId';
}

export function isProfileNode(node: ProfileASTNode): node is ProfileNode {
return node.kind === 'Profile';
}

export function isProfileDocumentNode(
node: ProfileASTNode
): node is ProfileDocumentNode {
return node.kind === 'ProfileDocument';
}

export function isDocumentDefinition(
node: ProfileASTNode
): node is DocumentDefinition {
return (
isUseCaseDefinitionNode(node) ||
isNamedFieldDefinitionNode(node) ||
isNamedModelDefinitionNode(node)
);
}

0 comments on commit 4d4b1fc

Please sign in to comment.