Stripe Search APIのクエリを簡単に構築するためのTypeScriptクエリビルダーライブラリです。
npm install stripe-search-qlimport { stripeQuery } from "stripe-search-ql";
// 完全一致検索
const query = stripeQuery()
.field("email")
.equals("amy@rocketrides.io")
.build();
// => 'email:"amy@rocketrides.io"'
// 数値比較
const amountQuery = stripeQuery()
.field("amount")
.greaterThan(1000)
.build();
// => 'amount>1000'
// 部分文字列マッチ
const substringQuery = stripeQuery()
.field("email")
.contains("amy")
.build();
// => 'email~"amy"'// AND演算子
const andQuery = stripeQuery()
.field("email")
.equals("amy@rocketrides.io")
.and()
.field("currency")
.equals("usd")
.build();
// => 'email:"amy@rocketrides.io" AND currency:"usd"'
// OR演算子
const orQuery = stripeQuery()
.field("currency")
.equals("usd")
.or()
.field("currency")
.equals("eur")
.build();
// => 'currency:"usd" OR currency:"eur"'// メタデータの完全一致
const metadataQuery = stripeQuery()
.metadata("donation-id")
.equals("asdf-jkl")
.build();
// => 'metadata["donation-id"]:"asdf-jkl"'
// メタデータの部分文字列マッチ
const metadataSubstringQuery = stripeQuery()
.metadata("key")
.contains("value")
.build();
// => 'metadata["key"]~"value"'// フィールドの否定
const negatedQuery = stripeQuery()
.not("currency")
.equals("jpy")
.build();
// => '-currency:"jpy"'
// メタデータの否定
const negatedMetadataQuery = stripeQuery()
.notMetadata("donation-id")
.equals("asdf-jkl")
.build();
// => '-metadata["donation-id"]:"asdf-jkl"'// フィールドがNULLかチェック
const nullCheckQuery = stripeQuery()
.field("url")
.isNull()
.build();
// => 'url:null'
// メタデータキーが存在しないかチェック
const metadataNullQuery = stripeQuery()
.notMetadata("donation-id")
.isNull()
.build();
// => '-metadata["donation-id"]:null'// より大きい
stripeQuery().field("amount").greaterThan(1000).build();
// => 'amount>1000'
// より小さい
stripeQuery().field("amount").lessThan(1000).build();
// => 'amount<1000'
// 以上
stripeQuery().field("amount").greaterThanOrEqual(1000).build();
// => 'amount>=1000'
// 以下
stripeQuery().field("amount").lessThanOrEqual(1000).build();
// => 'amount<=1000'// 複数の条件を組み合わせる
const complexQuery = stripeQuery()
.field("email")
.equals("amy@rocketrides.io")
.and()
.metadata("donation-id")
.equals("asdf-jkl")
.and()
.field("amount")
.greaterThan(1000)
.build();
// => 'email:"amy@rocketrides.io" AND metadata["donation-id"]:"asdf-jkl" AND amount>1000'新しいクエリビルダーインスタンスを作成します。
戻り値: SearchQueryBuilderインスタンス
field(field: string): FieldBuilder- フィールドを指定して検索条件を構築not(field: string): FieldBuilder- 否定のフィールドを指定して検索条件を構築
metadata(key: string): MetadataFieldBuilder- メタデータフィールドを指定して検索条件を構築notMetadata(key: string): MetadataFieldBuilder- 否定のメタデータフィールドを指定して検索条件を構築
and(): SearchQueryBuilder- AND演算子を追加or(): SearchQueryBuilder- OR演算子を追加
build(): string- 構築したクエリを文字列として返すreset(): SearchQueryBuilder- クエリをリセット
equals(value: string | number | null): SearchQueryBuilder- 完全一致 (:)contains(value: string): SearchQueryBuilder- 部分文字列マッチ (~, 最小3文字)greaterThan(value: number): SearchQueryBuilder- より大きい (>)lessThan(value: number): SearchQueryBuilder- より小さい (<)greaterThanOrEqual(value: number): SearchQueryBuilder- 以上 (>=)lessThanOrEqual(value: number): SearchQueryBuilder- 以下 (<=)isNull(): SearchQueryBuilder- NULL値チェック
equals(value: string | number | null): SearchQueryBuilder- 完全一致 (:)contains(value: string): SearchQueryBuilder- 部分文字列マッチ (~, 最小3文字)isNull(): SearchQueryBuilder- NULL値チェック(メタデータキーが存在しない場合)
構築したクエリは、Stripe SDKやAPIクライアントで使用できます。
import { stripeQuery } from "stripe-search-ql";
import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
// クエリを構築
const query = stripeQuery()
.field("email")
.equals("customer@example.com")
.build();
// Stripe APIで検索
const customers = await stripe.customers.search({
query: query,
});- 部分文字列マッチ (
~) は最小3文字が必要です - 同じクエリ内で
ANDとORを混在させることはできません(Stripe Search APIの制限) - 括弧による優先順位の指定はサポートされていません(Stripe Search APIの制限)
# 依存関係のインストール
npm install
# ビルド
npm run build
# テスト
npm test
# テスト(ウォッチモード)
npm run test:watch
# リンター
npm run lint
# フォーマッター
npm run format
# 型チェック
npm run typecheckMIT