Skip to content

Commit

Permalink
Merge pull request #1 from jay-es/filter
Browse files Browse the repository at this point in the history
add filter
  • Loading branch information
jay-es committed May 31, 2023
2 parents cbdd825 + 690a19f commit 13d4012
Show file tree
Hide file tree
Showing 18 changed files with 141 additions and 41 deletions.
18 changes: 18 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Publish Package to npmjs
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v3
with:
node-version: 18
registry-url: "https://registry.npmjs.org"
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
4 changes: 4 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx lint-staged
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ $ yarn add @jay-es/jsonplaceholder-client
const post = await getPost(1);

// Listing all resources
const posts = await getPosts();
const allPosts = await getPosts();

// Filtering resources
const user1Posts = await getPosts({ userId: 1 });

// Creating a resource
await createPost({ userId: 7, title: "Foo", body: "Lorem ipsum" });
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@jay-es/jsonplaceholder-client",
"version": "0.1.0",
"version": "0.2.0",
"description": "Fully typed client for JSONPlaceholder",
"main": "dist/index.js",
"types": "dist/index.d.ts",
Expand Down
19 changes: 15 additions & 4 deletions src/client/albums.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,22 @@ import {
import { Album } from "../validators";

describe.concurrent("Albums", () => {
it("getAlbums", async () => {
const res = await getAlbums();
describe("getAlbums", () => {
it("all", async () => {
const res = await getAlbums();

expect(Array.isArray(res)).toBeTruthy();
expect(res.every((v) => Album.parse(v))).toBeTruthy();
expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(100);
expect(res.every((v) => Album.parse(v))).toBeTruthy();
});

it("filter", async () => {
const res = await getAlbums({ userId: 1 });

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(10);
expect(res.every((v) => Album.parse(v))).toBeTruthy();
});
});

describe("getAlbum", () => {
Expand Down
4 changes: 2 additions & 2 deletions src/client/albums.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { Album } from "../types";
import { getAll, getOne, create, update, patch, del } from "../helpers";
import { getList, getOne, create, update, patch, del } from "../helpers";

export const getAlbums = getAll<Album>("albums");
export const getAlbums = getList<Album>("albums");
export const getAlbum = getOne<Album>("albums");
export const createAlbum = create<Album>("albums");
export const updateAlbum = update<Album>("albums");
Expand Down
19 changes: 15 additions & 4 deletions src/client/comments.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,22 @@ import {
import { Comment } from "../validators";

describe.concurrent("Comments", () => {
it("getComments", async () => {
const res = await getComments();
describe("getComments", () => {
it("all", async () => {
const res = await getComments();

expect(Array.isArray(res)).toBeTruthy();
expect(res.every((v) => Comment.parse(v))).toBeTruthy();
expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(500);
expect(res.every((v) => Comment.parse(v))).toBeTruthy();
});

it("filter", async () => {
const res = await getComments({ postId: 1 });

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(5);
expect(res.every((v) => Comment.parse(v))).toBeTruthy();
});
});

describe("getComment", () => {
Expand Down
4 changes: 2 additions & 2 deletions src/client/comments.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { Comment } from "../types";
import { getAll, getOne, create, update, patch, del } from "../helpers";
import { getList, getOne, create, update, patch, del } from "../helpers";

export const getComments = getAll<Comment>("comments");
export const getComments = getList<Comment>("comments");
export const getComment = getOne<Comment>("comments");
export const createComment = create<Comment>("comments");
export const updateComment = update<Comment>("comments");
Expand Down
5 changes: 5 additions & 0 deletions src/client/nested.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,39 @@ describe.concurrent("nested", () => {
const res = await getAlbumPhotos(1);

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(50);
expect(res.every((v) => Photo.parse(v))).toBeTruthy();
});

it("getPostComments", async () => {
const res = await getPostComments(1);

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(5);
expect(res.every((v) => Comment.parse(v))).toBeTruthy();
});

it("getUserAlbums", async () => {
const res = await getUserAlbums(1);

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(10);
expect(res.every((v) => Album.parse(v))).toBeTruthy();
});

it("getUserPosts", async () => {
const res = await getUserPosts(1);

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(10);
expect(res.every((v) => Post.parse(v))).toBeTruthy();
});

it("getUserTodos", async () => {
const res = await getUserTodos(1);

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(20);
expect(res.every((v) => Todo.parse(v))).toBeTruthy();
});
});
19 changes: 15 additions & 4 deletions src/client/photos.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,22 @@ import {
import { Photo } from "../validators";

describe.concurrent("Photos", () => {
it("getPhotos", async () => {
const res = await getPhotos();
describe("getPhotos", () => {
it("all", async () => {
const res = await getPhotos();

expect(Array.isArray(res)).toBeTruthy();
expect(res.every((v) => Photo.parse(v))).toBeTruthy();
expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(5000);
expect(res.every((v) => Photo.parse(v))).toBeTruthy();
});

it("filter", async () => {
const res = await getPhotos({ albumId: 1 });

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(50);
expect(res.every((v) => Photo.parse(v))).toBeTruthy();
});
});

describe("getPhoto", () => {
Expand Down
4 changes: 2 additions & 2 deletions src/client/photos.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { Photo } from "../types";
import { getAll, getOne, create, update, patch, del } from "../helpers";
import { getList, getOne, create, update, patch, del } from "../helpers";

export const getPhotos = getAll<Photo>("photos");
export const getPhotos = getList<Photo>("photos");
export const getPhoto = getOne<Photo>("photos");
export const createPhoto = create<Photo>("photos");
export const updatePhoto = update<Photo>("photos");
Expand Down
19 changes: 15 additions & 4 deletions src/client/posts.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,22 @@ import {
import { Post } from "../validators";

describe.concurrent("Posts", () => {
it("getPosts", async () => {
const res = await getPosts();
describe("getPosts", () => {
it("all", async () => {
const res = await getPosts();

expect(Array.isArray(res)).toBeTruthy();
expect(res.every((v) => Post.parse(v))).toBeTruthy();
expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(100);
expect(res.every((v) => Post.parse(v))).toBeTruthy();
});

it("filter", async () => {
const res = await getPosts({ userId: 1 });

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(10);
expect(res.every((v) => Post.parse(v))).toBeTruthy();
});
});

describe("getPost", () => {
Expand Down
4 changes: 2 additions & 2 deletions src/client/posts.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { Post } from "../types";
import { getAll, getOne, create, update, patch, del } from "../helpers";
import { getList, getOne, create, update, patch, del } from "../helpers";

export const getPosts = getAll<Post>("posts");
export const getPosts = getList<Post>("posts");
export const getPost = getOne<Post>("posts");
export const createPost = create<Post>("posts");
export const updatePost = update<Post>("posts");
Expand Down
19 changes: 15 additions & 4 deletions src/client/todos.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,22 @@ import {
import { Todo } from "../validators";

describe.concurrent("Todos", () => {
it("getTodos", async () => {
const res = await getTodos();
describe("getTodos", () => {
it("all", async () => {
const res = await getTodos();

expect(Array.isArray(res)).toBeTruthy();
expect(res.every((v) => Todo.parse(v))).toBeTruthy();
expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(200);
expect(res.every((v) => Todo.parse(v))).toBeTruthy();
});

it("filter", async () => {
const res = await getTodos({ userId: 1 });

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(20);
expect(res.every((v) => Todo.parse(v))).toBeTruthy();
});
});

describe("getTodo", () => {
Expand Down
4 changes: 2 additions & 2 deletions src/client/todos.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { Todo } from "../types";
import { getAll, getOne, create, update, patch, del } from "../helpers";
import { getList, getOne, create, update, patch, del } from "../helpers";

export const getTodos = getAll<Todo>("todos");
export const getTodos = getList<Todo>("todos");
export const getTodo = getOne<Todo>("todos");
export const createTodo = create<Todo>("todos");
export const updateTodo = update<Todo>("todos");
Expand Down
19 changes: 15 additions & 4 deletions src/client/users.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,22 @@ import {
import { User } from "../validators";

describe.concurrent("Users", () => {
it("getUsers", async () => {
const res = await getUsers();
describe("getUsers", () => {
it("all", async () => {
const res = await getUsers();

expect(Array.isArray(res)).toBeTruthy();
expect(res.every((v) => User.parse(v))).toBeTruthy();
expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(10);
expect(res.every((v) => User.parse(v))).toBeTruthy();
});

it("filter", async () => {
const res = await getUsers({ id: 1 });

expect(Array.isArray(res)).toBeTruthy();
expect(res).toHaveLength(1);
expect(res.every((v) => User.parse(v))).toBeTruthy();
});
});

describe("getUser", () => {
Expand Down
4 changes: 2 additions & 2 deletions src/client/users.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { User } from "../types";
import { getAll, getOne, create, update, patch, del } from "../helpers";
import { getList, getOne, create, update, patch, del } from "../helpers";

export const getUsers = getAll<User>("users");
export const getUsers = getList<User>("users");
export const getUser = getOne<User>("users");
export const createUser = create<User>("users");
export const updateUser = update<User>("users");
Expand Down
10 changes: 7 additions & 3 deletions src/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,14 @@ const mutate = (
headers: { "Content-type": "application/json; charset=UTF-8" },
}).then(toJson);

export const getAll =
export const getList =
<T extends Item>(name: ItemName) =>
(): Promise<T[]> =>
get(name);
(filter?: Partial<T>): Promise<T[]> => {
if (!filter) return get(name);

const params = Object.entries(filter).map(([k, v]) => `${k}=${v}`);
return get(`${name}?${params.join("&")}`);
};

export const getOne =
<T extends Item>(name: ItemName) =>
Expand Down

0 comments on commit 13d4012

Please sign in to comment.