import jsonquery = require('jsonquery'); interface TestData { name: string; number: string; val: number; favorites: number[]; awesome: boolean; nullify: null; tree: { a: number; b: number; }; } const testDataInstance: TestData = { name: "Name 1", number: "Number 1", val: 10, favorites: [10, 20], awesome: true, nullify: null, tree: { a: 1, b: 2, } }; // $ExpectType ReadWriteStream jsonquery({ number: 'Number 7' }); // $ExpectType ReadWriteStream jsonquery({ number: 'Number 7', val: 70 }); // $ExpectType ReadWriteStream jsonquery({ $or: [ { number: 'Number 7' }, { val: 50 } ] }); // $ExpectType ReadWriteStream jsonquery({ $and: [ { number: 'Number 7' }, { val: 70 } ] }); // $ExpectType ReadWriteStream jsonquery({ $or: [ { $and: [ { number: 'Number 7' }, { val: 70 } ] }, { val: 50 } ] }); // $ExpectType ReadWriteStream jsonquery({ val: { $in: [ 70, 50 ] } }); // $ExpectType ReadWriteStream jsonquery({ val: { $or: [ { $in: [ 70, 50 ] }, { $in: [ 60, 20 ] } ] } }); // $ExpectType ReadWriteStream jsonquery({ val: { $gt: 900 } }); // $ExpectType ReadWriteStream jsonquery({ val: { $lt: 900 } }); // $ExpectType ReadWriteStream jsonquery({ val: { $or: [ { $lt: 20 }, { $gt: 950 } ] } }); // $ExpectType ReadWriteStream jsonquery({ val: { $and: [ { $gt: 970 }, { $gt: 950 } ] } }); // $ExpectType ReadWriteStream jsonquery({ val: { $ne: 900 } }); // $ExpectType ReadWriteStream jsonquery({ val: { $lte: 900 } }); // $ExpectType ReadWriteStream jsonquery({ val: { $gte: 900 } }); // $ExpectType ReadWriteStream jsonquery({ favorites: { $all: [50, 60] } }); // $ExpectType ReadWriteStream jsonquery({ tree: { $elemMatch: { a: 1, b: 2 } } }); // $ExpectType ReadWriteStream jsonquery({ 'tree.a': 1 }); // $ExpectType ReadWriteStream jsonquery({ 'tree.a': { $in: [1, 5] } }); // $ExpectType ReadWriteStream jsonquery({ number: /er 7$/ }); // $ExpectType ReadWriteStream jsonquery({ number: { $in: [ /er 7$/, /er 5$/ ] } }); // $ExpectType ReadWriteStream jsonquery({ favorites: { $all: [/^50$/, /^60$/] } }); // $ExpectType ReadWriteStream jsonquery({ tree: { $elemMatch: { a: /^1$/, b: 2 } } }); // $ExpectType ReadWriteStream jsonquery({ val: { $nin: [ 70, 50 ] } }); // $ExpectType ReadWriteStream jsonquery({ val: { $mod: [ 7, 1 ] } }); // $ExpectType ReadWriteStream jsonquery({ favorites: { $size: 2 } }); // $ExpectType ReadWriteStream jsonquery({ $and: [ { tree: { $exists: true } }, { missing: { $exists: false } } ] }); // $ExpectType ReadWriteStream jsonquery({ $not: { number: 'Number 7', val: 70 } }); // $ExpectType ReadWriteStream jsonquery({ number: { $not: { $nin: ['Number 7'] } } }); // $ExpectType ReadWriteStream jsonquery({ foo: { $all: ['bar'] } }); // $ExpectType boolean jsonquery.match(testDataInstance, { val: 7 }); // $ExpectType boolean jsonquery.match(testDataInstance, { 'tree.a': { $in: [1, 5] } });