0.2.2 • Published 6 months ago

remix-easy-mode v0.2.2

Weekly downloads
-
License
MIT
Repository
github
Last release
6 months ago

Remix Easy Mode

Simple, typesafe toolkit for developing highly interactive Remix apps

Features

  • 100% typesafe
  • Built on zod
  • Inspired by TRPC
  • Designed for building highly interactive apps
  • Bone-simple client form validations
  • Server-side input validations a la TRPC
  • Session middleware via "bouncer" pattern
  • onSuccess, onError, and onSettled mutation callbacks a la react-query
  • Input helpers are unstyled (and polymorphic, if you want to supply your own input components)
  • Optional custom serializers (e.g., superjson)
  • MIT licensed

Installation

npm i remix-easy-mode zod

Usage

Resource Route

import type { DataFunctionArgs } from "@remix-run/server-runtime"
import { dataFunctionHelper, useAction } from "remix-easy-mode"
import { z } from "zod"

const schema = z.object({
  someUserInput: z.string(),
})

// this is like a TRPC procedure
export const action = (ctx: DataFunctionArgs) => {
  return dataFunctionHelper({
    ctx,
    schema,
    bouncer: async ({ ctx, csrfToken }) => {
      // (1) throw error or (2) return user session
    },
    fn: async ({ input, session }) => console.log({ input, session }), // typesafe!,
  })
}

// return hook from your resource route to use on client
export function useExample() {
  return useAction<typeof action, typeof schema>({
    path: "/resource-route",
    schema,
    onSuccess: (res) => console.log(res), // typesafe!,
  })
}

Client-side Form

import { InputHelper } from "remix-easy-mode"
import { useExample } from "./resource-route"
import { StyledInput } from "./your-custom-input-component"

export default function Index() {
  const { Form, fields } = useExample()

  return (
    <div>
      <Form
        csrfToken="whatever" // optional
        onSuccess={(res) => console.log(res)} // typesafe!
      >
        <InputHelper {...fields.someUserInput.props} component={StyledInput} />

        <button>Submit</button>
      </Form>
    </div>
  )
}

Example App

To run the example app:

pnpm install
cd packages/example
pnpm run dev

Then visit localhost:3000.

Peer Dependencies

react, @remix-run/react, @remix-run/server-runtime, zod

Disclaimer

This is a work in progress. It's not yet battle-tested, and the pre-1.0.0 API will change without notice. If you want to use this in production, be careful, and set your dependency to a specific version.

0.1.2

6 months ago

0.2.2-beta.0

6 months ago

0.2.0-beta.0

6 months ago

0.2.1

6 months ago

0.2.0

6 months ago

0.2.2

6 months ago

0.1.0-beta.3

11 months ago

0.1.0-beta.2

11 months ago

0.1.0-beta.5

11 months ago

0.1.0-beta.4

11 months ago

0.1.0-beta.1

11 months ago

0.1.0-beta.0

11 months ago

0.1.0

11 months ago

0.1.1

10 months ago

0.0.3-beta.2

11 months ago

0.0.3-beta.3

11 months ago

0.0.3-beta.0

11 months ago

0.0.3-beta.1

11 months ago

0.0.24

1 year ago

0.0.23

1 year ago

0.0.22

1 year ago

0.0.21

1 year ago

0.0.21-beta.37

1 year ago

0.0.21-beta.36

1 year ago

0.0.21-beta.35

1 year ago

0.0.21-beta.34

1 year ago

0.0.21-beta.33

1 year ago

0.0.21-beta.32

1 year ago

0.0.21-beta.31

1 year ago

0.0.21-beta.30

1 year ago

0.0.21-beta.29

1 year ago

0.0.21-beta.28

1 year ago

0.0.21-beta.27

1 year ago

0.0.21-beta.26

1 year ago

0.0.21-beta.25

1 year ago

0.0.21-beta.24

1 year ago

0.0.21-beta.23

1 year ago

0.0.21-beta.22

1 year ago

0.0.21-beta.21

1 year ago

0.0.21-beta.20

1 year ago

0.0.21-beta.19

1 year ago

0.0.21-beta.18

1 year ago

0.0.21-beta.17

1 year ago

0.0.21-beta.16

1 year ago

0.0.21-beta.15

1 year ago

0.0.21-beta.14

1 year ago

0.0.21-beta.13

1 year ago

0.0.21-beta.12

1 year ago

0.0.21-beta.11

1 year ago

0.0.21-beta.10

1 year ago

0.0.21-beta.9

1 year ago

0.0.21-beta.8

1 year ago

0.0.21-beta.7

1 year ago

0.0.21-beta.6

1 year ago

0.0.21-beta.5

1 year ago

0.0.21-beta.4

1 year ago

0.0.21-beta.3

1 year ago

0.0.21-beta.2

1 year ago

0.0.21-beta.1

1 year ago

0.0.21-beta.0

1 year ago

0.0.20

1 year ago

0.0.19

1 year ago