Skip to content

jin-qu/linquest

Repository files navigation

linquest - Remote Linq implementation with Jinqu infrastructure

Build Status Coverage Status npm version Known Vulnerabilities GitHub issues GitHub license

GitHub stars GitHub forks

Written completely in TypeScript.

Installation

npm i 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.