Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ajarc

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ajarc

🫙 An O(1) fetch client for OpenAPIs

  • 0.0.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Ajar

Ajar is an O(1) fetch client for APIs that implement the OpenAPI specification. It consumes a generic interface generated by openapi-typescript-codegen and returns a fully typed, deeply nested object that maps to fetch calls.

const client = Ajar<paths>()

client.feeds.get()
client.user["500"].comments.post()
client.user["500"].posts["3"].get()

Because it is implemented almost entirely using TypeScript's extensive type system, Ajar is largely capable of 'dissolving' during code compilation. In your app's bundle, all that remains is a lightweight1 core library that does not grow over time.

Currently, Ajar only implements a small subset of the OpenAPI specification2, however it should be more than enough for almost every project.

How it works

Ajar makes use of JavaScript proxies to create an infinitely nested object, and each entry exposes a number of methods. This roughly maps to:

type AjarObject = {
    [key: string]: AjarObject
    get: () => {}
    post: () => {}
    ...
}

This object is then artificially restricted to a set of known paths using the type system. This approach is advantageous because it means there is no runtime growth.

Project status

Ajar is not currently usable. Almost all typing work has been completed, however the actual client is still a stub.

  • 🟦 Extract response from paths
  • 🟦 Generate basic chain type from a path
  • 🟦 Generate a complete chained type from the paths type
  • 🟨 Basic proxy
  • 🟦 Support parameters in the chained type
  • 🟨 Create basic fetch client inside the proxy callback
  • 🟦 Type response
  • ⭐ Regression tests

Credits

This project was heavily inspired by the hono client which pioneered our usage of proxies.


It all started with a message:

In the SolidJS discord, BTW ;)

Footnotes

  1. When the core JavaScript is complete I'll have concrete numbers, however I'm positive it will not exceed 1kb. In addition, an optimization push will be made before every release

  2. Look: at the end of the day, Ajar was made to solve my problems. I hope it solves yours as well, but I can tell you right now that I've already spent enough time wrangling with typescript to last a lifetime (and I'm pretty young, for the record). I don't want to prematurely squander even more time solving edge cases people (or more likely, corporations) might encounter. I try to live my life in the now. I'm happy to accept PRs (and even issues I guess, though I might ask for a "donation") that help push Ajar closer to compliance, just know it's not a goal.

Keywords

FAQs

Package last updated on 13 Mar 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc