Skip to content

Robin40/async-stuff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@tdc-cl/async-stuff

Installation

Install async-stuff and its peer dependencies

TypeScript type definitions included

npm

npm install @tdc-cl/async-stuff decimal.js js-joda superstruct

yarn

yarn add @tdc-cl/async-stuff decimal.js js-joda superstruct

Basic example

// types.ts

export interface EmailPass {
    email: string;
    pass: string;
}

export interface Tokens {
    access: string;
    refresh: string;
}

export interface Todo {
    id: number;
    title: string;
    done: boolean;
}
// endpoints.ts

import { Server } from '@tdc-cl/async-stuff';
import { EmailPass, Tokens, Todo } from './types';

const server = new Server('http.../api');

export const login = server.endpoint.post<EmailPass, Tokens>('login/');

export const getAllTodos = server.endpoint.getAll<Todo[]>('/user/todos');
export const todoById = server.endpoint.get<number, Todo>('user/todos/');
export const createTodo = server.endpoint.post<Omit<Todo, 'id'>, void>('/user/todos/');
export const replaceTodo = server.endpoint.put<number, Omit<Todo, 'id'>, Todo>('user/todos');
export const patchTodo = server.endpoint.patch<number, Partial<Omit<Todo, 'id'>>, Todo>('/user/todos');
export const deleteTodo = server.endpoint.delete<number, void>('user/todos');
// LoginForm.tsx

import { login } from './endpoints';

export default function LoginForm() {
    async function onSubmit() {
        const tokens = await login.fetch({ user: ..., pass: ... });
        // `tokens` is of type `Tokens` as defined in the endpoint
        ...
    }
    ...
}
// Todos.tsx

import { getAllTodos, todoById, createTodo, replaceTodo, patchTodo, deleteTodo } from './endpoints';
import { Todo } from './types';

...

const todos: Todo[] = await getAllTodos.fetch();
const newTodo: Todo = await createTodo.fetch({ title: 'foo', done: false });
const thatTodo: Todo = await todoById.fetch(newTodo.id);
const anotherTodo: Todo = await replaceTodo.fetch(thatTodo.id, { title: 'bar', done: false });
const doneTodo: Todo = await patchTodo.fetch(anotherTodo.id, { done: true });
await deleteTodo.fetch(doneTodo.id);

Note: authentication tokens will be handled in a future version

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published