Bibliothek zum Serialisieren und Deserialisieren der PocketBase-Filtersyntax.
Sie können PBF einfach mit npm oder Yarn installieren:
npm install pbf
oder
yarn add pbf
PBF erleichtert die Arbeit mit der PocketBase-Filtersyntax. Hier ist ein kurzes Beispiel für den Einstieg:
import * as pbf from "@nedpals/pbf" ;
import PocketBase from "pocketbase" ;
const pb = new PocketBase ( "<pocketbase url>" ) ;
const result = await pb . collection ( 'example' ) . getList ( 1 , 20 , {
filter : pbf . stringify ( pbf . and (
pbf . eq ( 'status' , true ) ,
pbf . gt ( 'created' , new Date ( "2022-08-01" ) )
) ) // status = true && created > "2022-08-01 10:00:00.000Z"
} ) ;
Um einen Filter zu negieren (z. B. gleich zu ungleich und zu oder), können Sie die not
-Funktion verwenden. Dadurch wird nicht der Wert negiert, sondern nur der verwendete Operator.
import * as pbf from "@nedpals/pbf" ;
pbf . stringify ( pbf . not ( pbf . eq ( "is_repost" , false ) ) ) // is_repost = false
In manchen Fällen möchten Sie einen Suchfilter erstellen, bei dem einige der Filter durch Kurzschließen bedingt aktiviert werden. Sie können dies tun, indem Sie den Modifikator .maybe
hinzufügen, bevor Sie die Operatoren aufrufen. Dadurch werden alle falschen Werte herausgefiltert und die entsprechenden Filter ausgegeben.
import * as pbf from "@nedpals/pbf" ;
pbf . stringify ( pbf . and . maybe (
false && pbf . eq ( 'f' , 4 ) ,
null ,
pbf . eq ( 'd' , 1 ) ,
0 ,
pbf . not ( pbf . eq ( 'e' , 1 ) ) ,
) ) ; // d = 1 && e != 1
Anstatt immer wieder mehrere Vergleichsfilter für dasselbe Feld schreiben zu müssen, bietet PBF eine einfache Verknüpfung durch either
Modifikatoren.
import * as pbf from "@nedpals/pbf" ;
// shortcut for pbf.or(pbf.eq("size", "L"), pbf.eq("size", "XL"), pbf.eq("size", "XXL"))
pbf . stringify ( pbf . eq . either ( "size" , [ "L" , "XL" , "XXL" ] ) ) ; // (size = "L" || size = "XL") || size = "XXL"
PBF unterstützt auch das Parsen von Rohfilterzeichenfolgen in ein geeignetes PBF-Format. Dies ist großartig, wenn Sie die URL-Suchanfrage analysieren oder einfach nur ein PocketBase-ähnliches Sucherlebnis erstellen möchten:
import * as pbf from "@nedpals/pbf" ;
const result = pbf . parse ( "title = 'example'" ) ; // equivalent to eq("title", "example");
// You can also inject/bind values to placeholders
const resultB = pbf . parse ( "title = {:title}" , { title : "Foo bar" } ) // equivalent of eq("title", "Foo bar")
Um die Serialisierung/Deserialisierung zu ermöglichen, speichert PBF es als Objekt nach einem Syntaxbaumformat zur Unterscheidung von logischen Filtern, Vergleichsfiltern und Container-/Klammerfiltern.
// Taken and modified from the source code for brevity
type FilterValue = number | boolean | string | Date | null ;
type Filter = ComparisonFilter | LogicalFilter | ContainerFilter ;
type Metadata = Record < string , any >
// eg. a = 1
interface ComparisonFilter {
field : string
op : Operator
value : FilterValue
meta ?: Metadata
}
// eg. a > 1 && b = 2
interface LogicalFilter {
lhs : Filter
op : Operator
rhs : Filter
meta ?: Metadata
}
// eg. (c = 3)
interface ContainerFilter {
op : Operator
filter : Filter
meta ?: Metadata
}
Dies erleichtert auch die manuelle Erstellung von Filtern, insbesondere beim Erstellen dynamischer facettenartiger Filter:
const filter : Filter = {
op : "and" ,
lhs : {
op : "gte" ,
field : "shoe_size" ,
value : 20
} ,
rhs : {
op : "eq" ,
field : "color" ,
value : "burgundy"
}
}
pbf . stringify ( filter ) // shoe_size >= 20 && color = "burgundy"
Ab PocketBase JS SDK 0.19.0 wurde eine neue Funktion hinzugefügt, die es ermöglicht, Filter ähnlich wie PBF zu erstellen. Es gibt jedoch einige wesentliche Unterschiede zwischen den beiden Ansätzen.
PocketBase stellt nur sicher, dass Werte ordnungsgemäß maskiert und an den Filter gebunden werden. Der Benutzer ist weiterhin für die Erstellung der Filtersyntax verantwortlich, die fehleranfällig sein kann. PBF hingegen bietet eine umfassendere Lösung, indem es auch eine einfache und umfassende Möglichkeit bietet, komplexe Suchfilter zu erstellen, ohne sich um die Syntax kümmern zu müssen.
PBF wurde ebenfalls als einmalige Hilfsfunktion erstellt, bevor diese Funktion zu PocketBase hinzugefügt wurde.
pbf ist unter der MIT-Lizenz lizenziert.
Beiträge sind willkommen! Bitte zögern Sie nicht, Probleme zu eröffnen oder Anfragen zu stellen.