• Stars
    star
    158
  • Rank 237,131 (Top 5 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created almost 3 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿšฅ Minimal, type-safe REST client using JS proxies (36 loc)

unrested

Minimal, type-safe REST client using JS proxies.

โ„น๏ธ If you like this package, upvote this feature to be part of unjs/ofetch Much appreciated.

Features

  • ๐ŸŒ Lightweight, only 36 loc
  • ๐Ÿฆพ Strongly typed
  • ๐Ÿ“š Supports chain and bracket syntax
    • api.nested.users(1).get()
    • or api.nested.users["1"].get()
  • ๐Ÿชต Use other HTTP methods, like .post()

unrested uses ofetch for data fetching under the hood. Thus, every option available for ofetch is usable with unrested as well!

Installation

Run the following command to add unrested to your project.

# pnpm
pnpm add -D unrested

# npm
npm install -D unrested

# yarn
yarn add -D unrested

Usage

import { createClient } from 'unrested'

// The base URL default is `/`
const api = createClient()

unrested inherits ofetch's options. Refer to the documentation for a complete list of options.

import { createClient } from 'unrested'

// Set a custom base URL as needed
const api = createClient({
  baseURL: 'https://jsonplaceholder.typicode.com',
})

Path Segment Chaining

Chain single path segments or path ids by a dot. You can even type the response of your request!

// GET request to <baseURL>/users
const users = await api.users.get<UserResponse>()

// For GET request you can add search params
// <baseURL>/users?search=john
const users = await api.users.get<UserResponse>({ search: 'john' })

To include dynamic API path segments, you have two options:

// Typed GET request to <baseURL>/users/1
const userId = 1
// โ€ฆ using the chain syntax:
const user = await api.users(userId).get<UserResponse>()
// โ€ฆ or the bracket syntax:
const user = await api.users[`${userId}`].get<UserResponse>()

HTTP Request Methods

Add the appropriate method to the end of your API call. The following methods are supported:

  • get()
  • post()
  • put()
  • delete()
  • patch()

Payload Requests

For HTTP request methods supporting a payload, add it to the method call:

// POST request to <baseURL>/users
const response = await api.users.post({ name: 'foo' })

Default Options For ofetch

import { createClient } from 'unrested'

const api = createClient({
  baseURL: 'https://jsonplaceholder.typicode.com',
  async onRequestError({ request, options, error }) {
    console.log('[fetch request error]', request, error)
  },
  async onResponseError({ request, options, error }) {
    console.log('[fetch response error]', request, error)
  },
})

Override Default Options

You can add/overwrite ofetch options on a method-level:

const response = await api.users.get({
  headers: {
    'Cache-Control': 'no-cache',
  },
})

Credits

License

MIT License ยฉ 2022-2023 Johann Schopplich

More Repositories

1

unlazy

๐Ÿชง Universal lazy loading library for placeholder images leveraging native browser APIs
TypeScript
736
star
2

nuxt-gtag

๐Ÿ”ธ Google Analytics & Ads integration made easy
TypeScript
298
star
3

nuxt-api-party

๐Ÿฌ Securely connect to any API with a server proxy and generated composables
TypeScript
247
star
4

kirby-vue3-starterkit

โœจ Kirby + Vue SPA starter: automatic routing, i18n, SEO and more!
PHP
207
star
5

nuxt-prepare

๐ŸฆŽ Build actions for Nuxt
TypeScript
96
star
6

kirby-blurry-placeholder

๐Ÿ–ผ Blurry image placeholders for better UX
PHP
65
star
7

kirby-headless-starter

๐Ÿฆญ Headless-first Kirby starter with bearer token authentication and KQL utilities
PHP
64
star
8

pdfjs-serverless

๐Ÿชญ Serverless build of PDF.js for Deno, workers, and other nodeless environments
TypeScript
53
star
9

kirby-nuxt-starterkit

๐Ÿ’š Kirby's sample site โ€“ ported to Nuxt and Kirby Query Language
Vue
52
star
10

nuxt-vitalizer

๐Ÿชฟ Instantly better LCP scores in Google Lighthouse
TypeScript
52
star
11

kirbyup

๐Ÿ†™ Official bundler for Kirby Panel plugins
TypeScript
51
star
12

nitro-test-utils

๐Ÿงช Testing environment and utilities for Nitro
TypeScript
51
star
13

petite-vue-starter

๐Ÿฆ‹ Petite Vue + Vite + UnoCSS + TypeScript Starter
HTML
47
star
14

vue-signals

๐Ÿ“ถ Solid and Angular signals for Vue.js
TypeScript
46
star
15

loadeer

๐ŸฆŒ Tiny, performant, SEO-friendly lazy loading library. Deprecated, please use https://unlazy.byjohann.dev
TypeScript
44
star
16

kirby-vue-lightkit

โ›บ๏ธ Minimal Kirby + Vue starter: File-based routing, UnoCSS, SEO & more
TypeScript
43
star
17

nuxt-kql

๐Ÿซง Kirby's Query Language API for Nuxt
TypeScript
42
star
18

kirby-locked-pages

๐Ÿ” Password-protect pages, Panel blueprint included
PHP
41
star
19

kirby-writer-marks

Custom marks for Kirby's writer field โ€“ footnote mark included
JavaScript
35
star
20

kirby-content-translator

๐ŸŒ Moved to: https://kirby.tools/content-translator
PHP
34
star
21

kirby-punctuation-section

โœ’๏ธ Insert punctuation marks into your text with a single click
Vue
33
star
22

apiful

โœด๏ธ Unified, pluggable API client management for ofetch, route building and typed OpenAPI clients
TypeScript
33
star
23

cacao-kit-frontend

๐Ÿซ Best practice Nuxt and KQL starter for your headless Kirby CMS
TypeScript
30
star
24

kirby-headless

๐Ÿฆญ Kirby, but headless first with bearer token authentication and KQL utilities
PHP
30
star
25

kirby-vite-unocss-kit

๐ŸŽจ Minimal Vite + UnoCSS + Kirby integration
PHP
29
star
26

kirby-helpers

๐Ÿฌ Dotenv support, meta tag generation and more for Kirby CMS
PHP
26
star
27

animere

๐Ÿƒ CSS-driven scroll-based animations
TypeScript
26
star
28

unocss-cli

๐ŸŽจ Deprecated โ€” moved to @unocss/cli
TypeScript
25
star
29

kirby-algolia-docsearch

๐Ÿ”ฆ Index and search your Kirby site with Algolia DocSearch
PHP
25
star
30

kirby-hashed-assets

๐Ÿ›ท File name hashes support for css() and js() helpers. Without rewrite rules!
PHP
22
star
31

kirby-highlighter

๐ŸŒ Server-side syntax highlighting for the code block & KirbyText
PHP
20
star
32

vue-stickers

๐Ÿฆ One component, multiple fancy sticker variants
Vue
20
star
33

kirbylog

๐Ÿชƒ Zero-dependency global `kirbylog()` helper for any content
PHP
20
star
34

buldy

๐ŸŽˆ Modern CSS framework distilled from the best of larger frameworks
SCSS
18
star
35

kirby-serp-preview

๐Ÿ” Kirby Panel plugin for search engine result page previews
PHP
16
star
36

duecss

๐Ÿงถ Minimal CSS framework built upon & extended by UnoCSS
CSS
14
star
37

nuxt3-starter

๐ŸŒฌ Opinionated Nuxt 3 starter โ€“ incl. modals and more
Vue
14
star
38

plain-spa

๐Ÿฆข Modern SPA deployable as-is without any bundlers
JavaScript
14
star
39

kirbyuse

๐ŸŽ›๏ธ Collection of Vue Composition utilities and typed `window.panel` for Kirby CMS
TypeScript
14
star
40

tokenx

๐Ÿ“ GPT token estimation and context size utilities without a full tokenizer
TypeScript
13
star
41

cacao-kit-backend

๐Ÿซ Headless Kirby instance for the Cacao Kit frontend
PHP
12
star
42

kirby-types

๐ŸŽŠ A Collection of TypeScript types for the Kirby CMS
TypeScript
12
star
43

unacl

๐Ÿ™…โ€โ™€๏ธ๐Ÿ™†โ€โ™‚๏ธ Minimal, type-safe and reactive access control
TypeScript
12
star
44

vue-unquery

๐Ÿชบ Lightweight data management for Vue in suspense & non-suspense contexts
TypeScript
12
star
45

nuxt-i18n

๐Ÿ’ฌ Minimal module for i18n with locale auto-imports & localized routing
TypeScript
11
star
46

raster-sass

๐Ÿ“๏ธ Sass port of the Raster Grid System by Rasmus Andersson
SCSS
9
star
47

kirby-copilot

๐Ÿช AI-powered content generation for Kirby CMS
Vue
9
star
48

johannschopplich.com

๐Ÿ‚ My personal website โ€” built with Kirby & Vite
TypeScript
8
star
49

rollup-pluginkit

A boilerplate for a Kirby panel plugin using Rollup bundler
JavaScript
7
star
50

resultx

๐Ÿค Minimalist, strongly-typed result pattern for TypeScript
TypeScript
6
star
51

unjwt

๐Ÿ†“ Easy creation and verification of JWTs for Node.js, browser and workers
TypeScript
6
star
52

vue-i18n

๐ŸŒ Lightweight internationalization plugin for Vue
TypeScript
6
star
53

nuxt-plausible

๐ŸŽŸ๏ธ Nuxt 3 module to natively integrate Plausible analytics
TypeScript
4
star
54

kirby-seo-audit

๐Ÿƒ State-of-the-art SEO analysis for Kirby CMS
Vue
4
star
55

hashup

๐Ÿ”ข CLI to hash your Kirby build assets
TypeScript
3
star
56

kirby-modern

๐Ÿš€ Kirby starterkit enhanced with public folder setup, env variables, static site generator & more
PHP
3
star
57

utils

๐Ÿงฌ A collection of utilities for my projects
TypeScript
3
star
58

dachsbau-backend

๐Ÿฆก Kirby headless backend for dachsbau-tautenhain.de
PHP
3
star
59

a11y-kirby-vue-starterkit

โ™ฟ Kirby + Vue starterkit w/ accessible routing & SEO-friendliness
PHP
3
star
60

realtroll.de

๐ŸŽฎ Website fรผr den Spieleentwickler real Troll
CSS
3
star
61

kirby-vite

โšก๏ธ Vite integration for Kirby CMS
PHP
3
star
62

wordle-pwa

๐ŸฆŠ Wordle app to fork and customize for your friends
Vue
3
star
63

11th

๐Ÿงฐ Generic Eleventy starterkit with an emphasis on hashing assets and SEO
JavaScript
2
star
64

git-webhooks-auto-deployment

๐Ÿค– Auto deploys with one script. Compatible with GitHub, GitLab, Gitea and direct URL.
PHP
2
star
65

deno-deploy-docker

๐Ÿฆ• Run your Deno Deploy scripts in a Docker container
JavaScript
2
star
66

nitro-starter

๐Ÿ›Ž๏ธ Best practice Nitro Starter with full Vitest coverage
TypeScript
2
star
67

nuxt3-fetch-error-repro

Vue
2
star
68

bildhauer-volkmar-kuehn.de

๐Ÿฐ Personal website for German sculpting artist Volkmar Kรผhn
TypeScript
2
star
69

vitesse-prettier

๐ŸŒฌ Opiniated Vitesse variation
Vue
2
star
70

ui

A collection of Vue.js components for my projects
Vue
1
star
71

dachsbau-frontend

๐Ÿฆก Nuxt 3 & KQL frontend for dachsbau-tautenhain.de
Vue
1
star
72

kirby-nuxt-template-starterkit

๐Ÿ’š Kirby's sample site โ€“ ported to Nuxt 3 using Kirby templates
Vue
1
star
73

byjohann.link

๐Ÿ”— Personal linktree page
Vue
1
star