ts-odata-filter
A typescript library for buiding OData filter string
Install
npm install ts-odata-filter --save
Usage
Basic usage
// build() method accepts a callback which first argument is an ODataFilterBuilder instance// builder has members which correspond to OData operators and functions (eq, ne, contains, and, or, not, etc.)// builder also has "prop" member which allows to use strongly typed entity property namesODataFilterBuilder.buildbuilder.eqbuilder.prop.customer.id, 123.getString; // returns 'customer/id eq 123' ODataFilterBuilder.build builder.eqbuilder.prop.someProperty, 123.getString; // compilation error (unknown property 'someProperty') ODataFilterBuilder.build builder.eqbuilder.prop.customer.id, '123'.getString; // compilation error (string '123' is not assignable to customer.id) // builder.prop is also passed as the second arg of a callback ; ODataFilterBuilder.buildfilter.getString; // returns '(customer/id eq 123 and status eq 'PAID')'
Destructuring builder argument
// you can use destructuring to make the code shorter or prettier ; ODataFilterBuilder.buildfilter.getString; // returns '(customer/id eq 123 and status eq 'PAID')'
Working with collections
// find all orders with iphones ; ODataFilterBuilder.buildfilter.getString; // returns 'orderItems/any(i: contains(i/product/name, 'IPhone'))'
Reusing filter expressions
// find all iphones;ODataFilterBuilder.buildfilterIphones.getString; // returns '(contains(name, 'IPhone') or contains(description, 'IPhone'))' // find all iphones selled for more than $1000; // returns '((contains(product/name, 'IPhone') or contains(product/description, 'IPhone')) and price gt 1000)'ODataFilterBuilder.buildfilterIphones.getString; // find all orders with iphones for more than 1000$ where customer name is Jonh ; // returns '(orderItems/any(i: ((contains(i/product/name, 'IPhone') or contains(product/description, 'IPhone')) and price gt 1000)) and contains(customer/name, 'John'))'ODataFilterBuilder.buildfilterOrders.getString;