npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@graphql-mobius/react

v0.0.0-exp.2

Published

GraphQL Mobius binding for React

Downloads

10

Readme

React (GraphQL) Mobius

GraphQL Mobius binding for React

GraphQL to TypeScript type, no code gen with ith Prisma-like query syntax, fully type-safe.

Written purely in TypeScript type.

Brought to you by ElysiaJS

mobius


Experimental Library: Do not use on production

Why

Extending the vision of Mobius, we want to extends GraphQL Developer Experience to its fullest, and with React binding for Mobius, we change the way you write GraphQL, is that you don't want GraphQL at all.

Everything is an object, and function, we hide the GraphQL abstraction entirely, so you can focus writing your application.

How it works

We extends GraphQL Mobius which allows us to parse GraphQL schema to TypeScript type entirely in TypeScript type.

React Mobius use Proxy recursively to collect accessed property, and turns it into GraphQL Query and query via Mobius while providing full type safety experience from Mobius, creating an illusion of object.

React Mobius has 2 mode:

  1. TypeDefs only As Proxy is recursively used and there's no way to detect the last used property of the proxy, we introduced a ($) prefix to unwrap the proxy into primitive data, if you have better approach, feels free to open the issue and let us know.

  2. Literal Schema: Mobius can parse schema and quickly evaluate primitive type and detect the field recursively to stop the recursive proxy type.

This mode allows us to ditch prefix ($) entirely.

This is a good choice when you are using a public API, and is ok to expose it on client.

Prerequisted

  1. TypeScript > 5.0
  2. Set strict to true in tsconfig.json

Getting Start

  1. Define a GraphQL Schema in string (must be const)
  2. Cast schema to type using typeof (or pass it as literal params in constructor)

Then you can either use 2 Mobius mode:

  1. TypeDefs only Using typeDefs only (required $ prefix when accessing value)
import { createMobius } from '@graphql-mobius/react'

const typeDefs = `
    type A {
        A: String!
        B: String!
    }

    type Query {
        hello(word: String!): A!
    }
`

export const { useMobius } = createMobius<typeof typeDefs>({
    url: 'https://api.saltyaom.com/graphql'
})

const page = () => {
    const api = useMobius()

    return (
        <main>
            <h1>{api.hello({ word: "World" }).$A}</h1>
        </main>
    )
}
  1. Schema Literal Passing a schema literal to Mobius
import { createMobius } from '@graphql-mobius/react'

const typeDefs = `
    type A {
        A: String!
        B: String!
    }

    type Query {
        hello(word: String!): A!
    }
`

export const { useMobius } = createMobius({
    url: 'https://api.saltyaom.com/graphql',
    typeDefs
})

const page = () => {
    const api = useMobius()

    return (
        <main>
            <h1>{api.hello({ word: "World" }).A}</h1>
        </main>
    )
}