Skip to content

jin-qu/linquest

Repository files navigation

linquest - Remote Linq implementation with Jinqu infrastructure

Build and Test codecov Codacy Badge Known Vulnerabilities

npm version npm downloads

GitHub issues GitHub license GitHub stars GitHub forks

Written completely in TypeScript.

Installation

npm i @jin-qu/linquest

Let's See

// first, create a service
const service = new LinqService('https://my.company.service.com/');
// then create a query
const query = service.createQuery<Company>('Companies');
// execute the query
const result = await query.where(p => p.Id > 5).toArrayAsync();

Request providers

Linquest uses fetch as default, you might need to use a polyfill.

To use a custom request provider, you need to implement IAjaxProvider interface from jinqu

import { IAjaxProvider, AjaxOptions } from "jinqu";

// implement the IAjaxProvider interface
export class MyAjaxProvider implements IAjaxProvider {

  ajax<T>(o: AjaxOptions): Promise<T> {
    // implement this
  }
}

// inject provider to LinqService
const service = new LinqService('https://my.company.service.com/', new MyAjaxProvider());

Code Generation

With code generation from a metadata (like Swagger or OpenAPI, you can really simplify the usage.

// generated code
export interface Company {
    id: number;
    name: string;
    createDate: Date;
}

export class CompanyService extends LinqService {

    constructor(provider?: IAjaxProvider) {
        super('https://my.company.service.com/', provider);
    }

    companies() {
        return this.createQuery<Company>('Companies');
    }
}

// and you can use it like this
const service = new CompanyService();
const query = service.companies().where(c => c.name !== "Netflix");
const result = await query.toArrayAsync();

Old Browsers

linquest uses jinqu as a querying platform, if you want to use jinqu features with old browsers, please refer to jinqu documentation.

License

Linquest is under the MIT License.