https://github.com/ivangabriele/postgrester
Isomorphic PostgREST API Client for Javascript and Typescript.
https://github.com/ivangabriele/postgrester
api api-client isomorphic javascript postgrest typescript
Last synced: 8 months ago
JSON representation
Isomorphic PostgREST API Client for Javascript and Typescript.
- Host: GitHub
- URL: https://github.com/ivangabriele/postgrester
- Owner: ivangabriele
- License: apache-2.0
- Archived: true
- Created: 2019-09-17T11:25:07.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2023-03-17T17:21:32.000Z (over 2 years ago)
- Last Synced: 2025-02-09T08:42:22.716Z (9 months ago)
- Topics: api, api-client, isomorphic, javascript, postgrest, typescript
- Language: TypeScript
- Homepage:
- Size: 1.59 MB
- Stars: 51
- Watchers: 4
- Forks: 7
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# postgrester
**⚠️ THIS PACKAGE IS DEPRECATED AND NO LONGER MAINTAINED,
YOU CAN USE [@supabase/postgrest-js](https://github.com/supabase/postgrest-js) AS A REPLACEMENT.**
---
[![License][img-license]][lnk-license]
[![NPM Package][img-npm]][lnk-npm]
[![Build Status][img-github]][lnk-github]
[![Code Coverage][img-codecov]][lnk-codecov]
Isomorphic [PostgREST][lnk-postgrest] API Client for Javascript and Typescript.
Supported PostgREST versions:
- `v9.0.0`
- `v8.0.0`
---
- [Gettting Started](#gettting-started)
- [Example](#example)
- [API](#api)
- [Options](#options)
- [Vertical Filtering (columns) Methods](#vertical-filtering-columns-methods)
- [select()](#select)
- [Hoizontal Filtering (rows) Methods](#hoizontal-filtering-rows-methods)
- [is()](#is)
- [eq()](#eq)
- [neq()](#neq)
- [gt()](#gt)
- [gte()](#gte)
- [lt()](#lt)
- [lte()](#lte)
- [in()](#in)
- [like()](#like)
- [ilike()](#ilike)
- [not](#not)
- [and](#and)
- [or](#or)
- [Ordering Methods](#ordering-methods)
- [orderBy()](#orderby)
- [Pagination Methods](#pagination-methods)
- [page()](#page)
- [Request Methods](#request-methods)
- [get()](#get)
- [post() / Insert](#post--insert)
- [post() / Upsert](#post--upsert)
- [patch()](#patch)
- [put()](#put)
- [delete()](#delete)
- [Contribute](#contribute)
- [License](#license)
## Gettting Started
```bash
npm i postgrester
```
## Example
```js
import { create } from "postgrester";
const postgrestClient = create({
axiosConfig: { baseURL: "https://api.example.com" }
});
(async () => {
const { data, pagesLength } = await postgrestClient
.select("*")
.select("author(first_name,last_name)")
.is("is_published", true)
.not.is("isbn", null)
.eq("publication_year", 1970)
.in("language_code", ["en-UK", "en-US"])
.ilike("title", "island")
.like("author.last_name", "Hemingway")
.orderBy("publication_year", true) // `true` = DESC
.orderBy("title")
.page(3, 25) // 4th page with 25 items per page
.get("/books", true); // `true` = require the total `pagesLength` value to be calculated
})();
```
## API
### Options
When creating the instance via `create([options])`:
| Property | Type | Default | Description |
| --------------- | -------------------- | ------- | ------------------------------------------ |
| `axiosConfig` | `AxiosRequestConfig` | `{}` | Axios config called with `axios.create()`. |
| `axiosInstance` | `AxiosInstance` | `null` | Axios custom instance. |
| _`baseUri`_ | _`string`_ | _`""`_ | _API URL. Deprecated_ |
> :warning: If you provide an axios instance via the `axiosInstance` property, it's useless to
> set `axiosConfig` since it would be overridden by your instance.
> :warning: `baseUri` takes precedence over `axiosConfig.baseURL`. To avoid any confusion,
> `baseUri` will be **deprecated** in the next minor version release and should be removed in the
> next major one.
### Vertical Filtering (columns) Methods
#### select()
| Name | Type | Default | Examples |
| ---------- | -------- | ------------ | ----------------------------------------- |
| `selector` | `string` | **required** | `"*"`, `"author"`, `"category(id,label)"` |
You can also rename them by inserting a colon: `original_column_name:new_column_name`.
### Hoizontal Filtering (rows) Methods
#### is()
| Name | Type | Default | Examples |
| -------- | ----------------- | ------------ | ------------------------------ |
| `column` | `string` | **required** | `"author"`, `"category.label"` |
| `value` | `boolean \| null` | **required** | |
#### eq()
| Name | Type | Default | Examples |
| ------------ | ------------------------------------- | ------------ | ------------------------------ |
| `column` | `string` | **required** | `"author"`, `"category.label"` |
| `value` | `boolean \| number \| null \| string` | **required** | `"Leo Tolstoy"` |
| `withQuotes` | `boolean` | `false` | |
> **Note:** `boolean` and `null` values will be converted into an `is()`.
#### neq()
| Name | Type | Default | Examples |
| ------------ | ------------------------------------- | ------------ | ------------------------------ |
| `column` | `string` | **required** | `"author"`, `"category.label"` |
| `value` | `boolean \| number \| null \| string` | **required** | `"Leo Tolstoy"` |
| `withQuotes` | `boolean` | `false` | |
> **Note:** `boolean` and `null` values will be converted into a **negated** `is()`.
#### gt()
| Name | Type | Default | Examples |
| ------------- | ------------------ | ------------ | ------------------------------------- |
| `column` | `string` | **required** | `"quantity"`, `"category.updated_at"` |
| `value` | `number \| string` | **required** | |
| `isInclusive` | `boolean` | `false` | |
#### gte()
| Name | Type | Default | Examples |
| -------- | ------------------ | ------------ | ------------------------------------- |
| `column` | `string` | **required** | `"quantity"`, `"category.updated_at"` |
| `value` | `number \| string` | **required** | |
> **Note:** This method is an alias for `gt()` with `` set to `true`.
#### lt()
| Name | Type | Default | Examples |
| ------------- | ------------------ | ------------ | ------------------------------------- |
| `column` | `string` | **required** | `"quantity"`, `"category.updated_at"` |
| `value` | `number \| string` | **required** | |
| `isInclusive` | `boolean` | `false` | |
#### lte()
| Name | Type | Default | Examples |
| -------- | ------------------ | ------------ | ------------------------------------- |
| `column` | `string` | **required** | `"quantity"`, `"category.updated_at"` |
| `value` | `number \| string` | **required** | |
> **Note:** This method is an alias for `lt()` with `` set to `true`.
#### in()
| Name | Type | Default | Examples |
| ------------ | ------------------------- | ------------ | -------------------------------------- |
| `column` | `string` | **required** | `"author"`, `"category.label"` |
| `value` | `Array` | **required** | `["Leo Tolstoy", "Fyodor Dostoevsky"]` |
| `withQuotes` | `boolean` | `false` | |
#### like()
| Name | Type | Default | Examples |
| -------- | -------- | ------------ | ------------------------------ |
| `column` | `string` | **required** | `"author"`, `"category.label"` |
| `value` | `string` | **required** | `"Tolstoy"` |
#### ilike()
| Name | Type | Default | Examples |
| -------- | -------- | ------------ | ------------------------------ |
| `column` | `string` | **required** | `"author"`, `"category.label"` |
| `value` | `string` | **required** | `"tolstoy"` |
#### not
This getter **ONLY** negates the **FIRST** following filtering method.
For example, `postgrestClient.not.is("category_id", null).ilike("author", "dostoevsky")` will
**negate** the `is()` filter but not the `ilike()` one.
#### and
This getter condition **ALL** the following filtering methods to be conjuncted as "ands".
For example, `postgrestClient.and.is("category_id", null).ilike("author", "dostoevsky")` will
**intersect** both `is()` and `ilike()` filters.
#### or
This getter condition **ALL** the following filtering methods to be conjuncted as "ors".
For example, `postgrestClient.and.is("category_id", null).ilike("author", "dostoevsky")` will
**unite** both `is()` and `ilike()` filters.
### Ordering Methods
#### orderBy()
| Name | Type | Default | Examples |
| -------- | --------- | ------------ | ------------------------------ |
| `column` | `string` | **required** | `"author"`, `"category.label"` |
| `isDesc` | `boolean` | `false` | |
### Pagination Methods
#### page()
| Name | Type | Default | Examples |
| ----------- | -------- | ------------ | ---------- |
| `pageIndex` | `number` | **required** | `0`, `123` |
| `limit` | `number` | `10` | |
### Request Methods
All request methods are asynchronous promises.
#### get()
| Name | Type | Default | Examples |
| ----------------- | --------- | ------------ | ---------- |
| `path` | `string` | **required** | `"/books"` |
| `withPagesLength` | `boolean` | `false` | |
Return value:
```ts
Promise<{
data: any;
pagesLength: number;
totalLength: number;
}>
```
> **:warning: Important**
> Both `pagesLength` and `totalLength` will equal `-1` if `` parameter is `false`
> or if the length couldn't be resolved.
#### post() / Insert
| Name | Type | Default | Examples |
| --------- | ------------------------------------------------- | ------------ | ---------- |
| `path` | `string` | **required** | `"/books"` |
| `data` | `object` | **required** | |
| `options` | `{ return?: 'headers-only' \| 'representation' }` | | |
Return value:
```ts
Promise
```
or (with `{ return: "representation" }`):
```ts
Promise<{
data: T
}>
```
#### post() / Upsert
> **:warning: Important**
> If `data` is an array, it will be considered as an [upsert](https://postgrest.org/en/v9.0/api.html#upsert).
> In this case, if you don't specify otherwise in `options`, `merge-duplicates` resolution will be used by default.
| Name | Type | Default | Examples |
| --------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------ | ---------- |
| `path` | `string` | **required** | `"/books"` |
| `data` | `object[]` | **required** | |
| `options` | `{ onConflict?: string, resolution?: "ignore-duplicates" \| "merge-duplicates", return?: 'headers-only' \| 'representation' }` | `{ resolution: "merge-duplicates" }` | |
Return value:
```ts
Promise
```
or (with `{ return: "representation" }`):
```ts
Promise<{
data: T[]
}>
```
#### patch()
| Name | Type | Default | Examples |
| ------ | -------- | ------------ | ---------- |
| `path` | `string` | **required** | `"/books"` |
| `data` | `object` | **required** | |
Return value:
```ts
Promise
```
#### put()
| Name | Type | Default | Examples |
| ------ | -------- | ------------ | ---------- |
| `path` | `string` | **required** | `"/books"` |
| `data` | `object` | **required** | |
Return value:
```ts
Promise
```
#### delete()
| Name | Type | Default | Examples |
| --------- | ------------------------------------------------- | ------------ | ---------- |
| path | `string` | **required** | `"/books"` |
| `options` | `{ return?: 'headers-only' \| 'representation' }` | | |
Return value:
```ts
Promise
```
or (with `{ return: "representation" }`):
```ts
Promise<{
data: T[]
}>
```
## Contribute
Please check our [contributing documentation][lnk-contributing].
## License
This package and its sources are distributed under [Apache 2.0][lnk-license].
---
[img-codecov]: https://img.shields.io/codecov/c/github/ivangabriele/postgrester/main?style=flat-square
[img-github]: https://img.shields.io/github/workflow/status/ivangabriele/postgrester/Check/main?style=flat-square
[img-license]: https://img.shields.io/github/license/ivangabriele/postgrester?style=flat-square
[img-npm]: https://img.shields.io/npm/v/postgrester?style=flat-square
[lnk-contributing]: https://github.com/ivangabriele/postgrester/blob/main/CONTRIBUTING.md
[lnk-codecov]: https://codecov.io/gh/ivangabriele/postgrester/branch/main
[lnk-github]: https://github.com/ivangabriele/postgrester/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/postgrester/blob/main/LICENSE
[lnk-npm]: https://www.npmjs.com/package/postgrester
[lnk-postgrest]: http://postgrest.org