pailingual-odata
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

Pailingual-OData

Pailingual OData is the Typescript library offering a simple and type-safe access to your OData v4 services.

For using arrow functions as filter predicate, you need to register estree compatible parser (e.g. acorn)

import { parse } from "acorn";
import { setParser } from "pailingual-odata";
setParser(f => parse(f, { locations: true }) as any);

Supported OData v4 features

Resource path:

  • EntitySet
  • Singleton
  • Single-valued and collection-valued navigation properties
  • Get entity by key
  • Bounded and unbounded operations
  • $count segment

Query options for collection:

  • $skip and $top
  • $orderby (also applicable for nested properties in complex type and single-valued navigation property)
  • $filter (support builtin functions)
  • $search
  • $expand($skip;$top;$orderby;$filter;$search;$expand;$count;$select)
  • $select

Query options for entity:

  • $expand
  • $select

Types

  • Complex type
  • Enum
  • Edm.Int32
  • Edm.Int16
  • Edm.Boolean
  • Edm.String
  • Edm.Single
  • Edm.Guid
  • Edm.DateTimeOffset
  • Edm.Date
  • Edm.Double
  • Edm.TimeOfDay
  • Edm.Decimal

Plugins

pailingual-odata-filter - implements support filtering on arrow function based expression.

How to define a model

You can use pailingual-odata-model-generatior for generate model from service metadata.

Defining an entity

Define your own interface extending interface IEntityBase

export interface MyEntity extends IEntityBase {
  id:number;
  field:string;
  nullable?:string;
  complexProperty:ComplexType;
  
  singleValuedNavigationProperty?: OtherEntity;
  collectionValuedNavigationProperty?: OtherEntity[];
}

Defining an ApiContext

Define your own interface extending interface IApiContextBase

export interface MyApiContext extends IApiContextBase {
  EntitySet1: MyEntity[];
  EntitySet2: OtherEntity[];
  Singleton: MyEntity;
}

Defining operations

For defining operations use special properties in your defenition

  • $$Functions - defines unbounded functions in ApiContext or bounded functions in Entity
  • $$Actions - defines unbounded actions in ApiContext or bounded actions in Entity
  • $$EntitySetFunctions - defines collection bounded functions in Entity
  • $$EntitySetActions - defines collection bounded actions in Entity
export interface MyApiContext extends IApiContextBase {
...
 $$Actions:{
   unboundedAction(): void;
 };
 $$Functions:{
   unboundedFunction(arg:string):MyEntity[];
 }
}
 
export interface MyEntity extends IEntityBase {
 ...
 $$Actions:{
   boundedAction(): string;
 };
 $$Functions:{
   boundedFunction(arg?:string):ComplexType[];
 }
 $$EntitySetActions:{
   boundedAction(): MyEntity;
 };
 $$EntitySetFunctions:{
   boundedFunction():ComplexType;
 }
}

## Create ApiContext Context allows your to make queries to dataservice. For creating context use ApiContextFactory function. This function have few overrides.

import { ApiContextFactory, loadMetadata } from "pailingual-odata";
 
//Create context by url. Metadata will be loaded or get from cache
ApiContextFactory("/api").then(context=>{/*Your queryes*/}); 
 
//Create context use preloaded metadata
var context = ApiContextFactory(metadata);
/*Your queryes*/

## Execute query

var maxId=10;
var result:Entity<MyEntity> 
         & ExpandedProperty<MyEntity, "singleValuedNavigationProperty"> 
         & ExpandedProperty<MyEntity, "collectionValuedNavigationProperty", Pick<MyEntity, "Id">> =null;
result = await context.EntitySet1
   .$filter((e, p)=>e.Id < p.maxId, {maxId})
   .$expand("singleValuedNavigationProperty")
   .$expand("collectionValuedNavigationProperty", i=>i.$select("Id"))
   .$exec()

Dependents (2)

Package Sidebar

Install

npm i pailingual-odata

Weekly Downloads

1

Version

1.1.0

License

MIT

Unpacked Size

490 kB

Total Files

92

Last publish

Collaborators

  • genusp