Skip to content

Commit

Permalink
fix: visit undefine object will throw error
Browse files Browse the repository at this point in the history
  • Loading branch information
Soontao committed Jul 10, 2020
1 parent d21f7b6 commit 8c37045
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 19 deletions.
38 changes: 19 additions & 19 deletions src/visitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,37 +24,37 @@ export type Visitor = Traverser
export function traverseAst(traverser: Traverser, node: Token, parent?: Token): void {

if (node instanceof Token) {
if (node.type in traverser) {
traverser[node.type](node, parent);
if (node?.type in traverser) {
traverser[node?.type](node, parent);
}
}

if (isArray(node.value) || isPlainObject(node.value)) {
forEach(node.value, (item) => {
if (isArray(node?.value) || isPlainObject(node?.value)) {
forEach(node?.value, (item) => {
if (item instanceof Token) {
traverseAst(traverser, item, node);
}
});
}

if (isArray(node.value?.options)) {
forEach(node.value?.options, (item) => {
if (isArray(node?.value?.options)) {
forEach(node?.value?.options, (item) => {
if (item instanceof Token) {
traverseAst(traverser, item, node);
}
});
}

if (isArray(node.value?.items)) {
forEach(node.value?.items, (item) => {
if (isArray(node?.value?.items)) {
forEach(node?.value?.items, (item) => {
if (item instanceof Token) {
traverseAst(traverser, item, node);
}
});
}

if (node.value instanceof Token) {
traverseAst(traverser, node.value, node);
if (node?.value instanceof Token) {
traverseAst(traverser, node?.value, node);
}

}
Expand All @@ -68,36 +68,36 @@ export function traverseAst(traverser: Traverser, node: Token, parent?: Token):
*/
export function traverseAstDeepFirst(traverser: Traverser, node: Token, parent?: Token): void {

if (isArray(node.value) || isPlainObject(node.value)) {
forEach(node.value, (item) => {
if (isArray(node?.value) || isPlainObject(node?.value)) {
forEach(node?.value, (item) => {
if (item instanceof Token) {
traverseAstDeepFirst(traverser, item, node);
}
});
}

if (node.value instanceof Token) {
traverseAstDeepFirst(traverser, node.value, node);
if (node?.value instanceof Token) {
traverseAstDeepFirst(traverser, node?.value, node);
}

if (isArray(node.value?.options)) {
forEach(node.value?.options, (item) => {
if (isArray(node?.value?.options)) {
forEach(node?.value?.options, (item) => {
if (item instanceof Token) {
traverseAstDeepFirst(traverser, item, node);
}
});
}

if (isArray(node.value?.items)) {
forEach(node.value?.items, (item) => {
if (isArray(node?.value?.items)) {
forEach(node?.value?.items, (item) => {
if (item instanceof Token) {
traverseAstDeepFirst(traverser, item, node);
}
});
}

if (node instanceof Token) {
if (node.type in traverser) {
if (node?.type in traverser) {
traverser[node.type](node, parent);
}
}
Expand Down
9 changes: 9 additions & 0 deletions test/query.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { findOne, findAll } from '../src/utils';
import { TokenType } from '../src/lexer';
import { get } from '@newdash/newdash';
import { defaultParser } from '../src';
import { execPath } from 'process';

describe('Query Test Suite', () => {

Expand Down Expand Up @@ -70,4 +71,12 @@ describe('Query Test Suite', () => {
expect(node).not.toBeUndefined();
});

it('should parse $filter only', () => {
const ast = defaultParser.query('$filter=id eq 1');
expect(ast).not.toBeUndefined();
expect(ast.value.options).not.toBeUndefined();
expect(ast.value.options).toHaveLength(1);

});

});
5 changes: 5 additions & 0 deletions test/visitor.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,9 @@ describe('Visitor Parse Suite', () => {

});

it('should support visit undefined', () => {
const { visit, visitSequence } = createSeqTraverser(true);
visit(undefined);
});

});

0 comments on commit 8c37045

Please sign in to comment.