1.0.0 • Published 6 months ago

@sportdevs/endpoint v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
6 months ago

SportDevs Endpoint Utility

A request generation utility for the SportDevs APIs.

Installation

You can install this library using npm, it's available as the @sportdevs/endpoint package.

npm install @sportdevs/endpoint

Usage

This library only has a single export called endpoint which can be used to generate request URLs.

import endpoint from "@sportdevs/endpoint";
// ... or
const endpoint = require("@sportdevs/endpoint").default;

You can chain all the transforms to create a complex query, like this:

endpoint("events")
  .property("season_id")
  .equals(18820)
  .or((obj) =>
    obj
      .property("away_team_score->current")
      .greaterThan(3)
      .property("home_team_score->current")
      .greaterThan(3)
  )
  .select("away_team_id", "home_team_id", "away_team_score", "home_team_score")
  .order((o) => o.property("id").descending);
// events?season_id=eq.18820&or=(away_team_score->current.gt.3,home_team_score->current.gt.3)&select=away_team_id,home_team_id,away_team_score,home_team_score&order=id.desc

endpoint(name)

Creates an object that is associated with an endpoint.

endpoint("events");

toString()

Turns an endpoint object to a string.

endpoint("events").toString();

Response Transforms

offset(value)

Skips value amount of elements.

endpoint("events").offset(1);
// events?offset=1

limit(value)

Limits the response to value amount of objects.

endpoint("events").limit(1);
// events?limit=1

select(...props)

Makes the returned object only contain the selected properties.

endpoint("events").select("home_team_id", "away_team_id");
// events?select=home_team_id,away_team_id

Property Transforms

All the property transforms can be negated using the not. prefix.

endpoint("events").property("id").not.lessThan(10);
// events?id=not.lt.10

property(name)

Applies a transform using a property.

endpoint("events").property("id").lessThan(10);
// events?id=lt.10

equals(value)

Checks if a property is equal to value.

endpoint("events").property("id").equals(10);
// events?id=eq.10

greaterThan(value)

Checks if a property is greater than value.

endpoint("events").property("id").greaterThan(10);
// events?id=gt.10

greaterThanOrEqual(value)

Checks if a property is greater than or equal to value.

endpoint("events").property("id").greaterThanOrEqual(10);
// events?id=gte.10

lessThan(value)

Checks if a property is less than value.

endpoint("events").property("id").lessThan(10);
// events?id=lt.10

lessThanOrEqual(value)

Checks if a property is less than or equal to value.

endpoint("events").property("id").lessThanOrEqual(10);
// events?id=lte.10

like(exp)

Checks if a property matches a glob expression.

endpoint("players").property("first_name").like("A*");
// players?first_name=like.A*

insensitive.like(exp)

Checks if a property matches a glob expression (case insensitive).

endpoint("players").property("first_name").insensitive.like("A*");
// players?first_name=ilike.A*

match(exp)

Checks is a property matches a POSIX regular expression.

endpoint("players").property("first_name").match("^A");
// players?first_name=match.^A

insensitive.match(exp)

Checks is a property matches a POSIX regular expression.

endpoint("players").property("first_name").insensitive.match("^A");
// players?first_name=imatch.^A

in(...values)

Checks if the property is inside the array value.

endpoint("events").property("id").in(1, 2, 3);
// events?id=in.(1,2,3)

is(value)

Checks if the property is exactly equal to value.

endpoint("events").property("id").is("null");
// events?id=is.null

Logical Transforms

All the logical transforms can be negated with the not. prefix.

endpoint("events").not.or((obj) =>
  obj.property("id").lessThan(10).property("id").not.equals(1)
);
// events?not.or=(id.lt.10,id.not.eq.1)

and(fn)

Combines the transforms using the logical and operator.

endpoint("events").and((obj) =>
  obj.property("id").lessThan(10).property("id").not.equals(1)
);
// events?and=(id.lt.10,id.not.eq.1)

or(fn)

Combines the transforms using the logical or operator.

endpoint("events").or((obj) =>
  obj.property("id").lessThan(10).property("id").not.equals(1)
);
// events?or=(id.lt.10,id.not.eq.1)

Sort Transforms

order(fn)

Applies a sorting transform.

endpoint("events").order((obj) => obj.property("id").ascending);
// events?order=id.asc

property(name)

Applies a sorting transform using a property.

endpoint("events").order((obj) => obj.property("id").ascending);
// events?order=id.asc

ascending

Sorts the returned objects in ascending order based on a property.

endpoint("events").order((obj) => obj.property("id").ascending);
// events?order=id.asc

descending

Sorts the returned objects in descending order based on a property.

endpoint("events").order((obj) => obj.property("id").descending);
// events?order=id.desc

nullsFirst

Makes the null values appear first.

endpoint("events").order(
  (obj) => obj.property("id").ascending.property("id").nullsFirst
);
// events?order=id.asc.nullsfirst

nullsLast

Makes the null values appear last.

endpoint("events").order(
  (obj) => obj.property("id").descending.property("id").nullsLast
);
// events?order=id.desc.nullslast
1.0.0

6 months ago