typed-pocketbase v0.1.1
typed-pocketbase
Add types to the PocketBase JavaScript SDK.
Installation
# npm
npm i typed-pocketbase
# pnpm
pnpm i typed-pocketbase
# yarn
yarn add typed-pocketbase
Usage
Generate the types:
npx typed-pocketbase --email admin@mail.com --password supersecretpassword -o Database.d.ts
The codegen tool will look for POCKETBASE_EMAIL
and POCKETBASE_PASSWORD
environment variables if the email or password are not passed using cli options.
Create a PocketBase client:
import PocketBase from 'pocketbase';
import { TypedPocketBase } from 'typed-pocketbase';
import { Schema } from './Database';
const db = new TypedPocketBase<Schema>('http://localhost:8090');
Enjoy full type-safety:
import { neq } from 'typed-pocketbase';
db.from('posts').getFullList({
select: {
id: true,
title: true,
content: true,
expand: {
owner: {
username: true
}
}
}
sort: '-date',
filter: neq('content', '')
});
Selecting fields
const showId = Math.random() < 0.5;
db.from('posts').getFullList({
select: {
id: showId,
title: true,
content: true
}
});
Filtering columns
Use the and
, or
and other utility functions to filter rows:
import { and, or, eq, gte, lt } from 'typed-pocketbase';
// get all posts created in 2022
db.from('posts').getFullList({
// a "manual" filter is a tuple of length 3
filter: and(['date', '<', '2023-01-01'], ['data', '>=', '2022-01-01'])
});
// get all posts expect for those created in 2022
db.from('posts').getFullList({
filter: or(['date', '>=', '2023-01-01'], ['data', '<', '2022-01-01'])
});
// get all posts that were create at '2023-01-01'
db.from('posts').getFullList({ filter: eq('date', '2023-01-01') });
// combine or/and with helpers and manual filters
db.from('posts').getFullList({
filter: or(
//
['date', '>=', '2023-01-01'],
lt('date', '2022-01-01')
)
});
// conditionally filter rows
// falsy values are excluded
db.from('posts').getFullList({
filter: and(
//
gte('date', '2022-01-01'),
!untilNow && lt('date', '2023-01-01')
)
});
// filter for columns in relations
// works up to 6 levels deep, including the top level
db.from('posts').getFullList({
filter: eq('owner.name', 'me')
});
Most filter operators are available as short hand function.
Visit the pocketbase documentation to find out about all filters in the List/Search records
section.
Sorting rows
db.from('posts').getFullList({
// sort by descending 'date'
sort: '-date'
});
db.from('posts').getFullList({
// sort by descending 'date' and ascending 'title'
sort: ['-date', '+title']
});
// conditionally sort rows
// falsy values are excluded
db.from('posts').getFullList({
sort: ['-date', sortTitle && '+title']
});
Expanding
In typed-pocketbase
expanding happens automatically when using select.
db.from('posts').getFullList({
select: {
expand: {
user: true
}
}
});
// select nested columns
db.from('posts').getFullList({
select: {
expand: {
user: {
name: true
avatar: true
}
}
}
});
// nested expand
db.from('posts').getFullList({
select:{
expand: {
user: {
expand: {
profile: true
}
}
}
}
});
Back relation expanding is support aswell:
db.from('user').getFullList({
select: {
expand: {
'posts(user)': {
title: true,
created: true
}
}
}
});
Helper methods:
createSelect
const select = db.from('posts').createSelect({
id: true,
content: true,
owner: true,
collectionName: true,
asd: true,
expand: {
owner: {
username: true,
email: true
}
}
});
createFilter
const filter = db
.from('posts')
.createFilter(or(eq('content', 'bla'), eq('published', true)));
createSort
const sort = db.from('posts').createSort('+id', '-date');
License
2 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
4 months ago
4 months ago
5 months ago
7 months ago
9 months ago
10 months ago
10 months ago
10 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago