Type safe RPC

Arc

                         SVELTE
                    ┌─────────────┐
                    │ UI          │
                    │ Components  │
                    └──────┬──────┘
                           │
                 Convex client
                           │
          ┌────────────────┼────────────────┐
          ↓                ↓                ↓
       Queries          Mutations        Actions
          │                │                │
          │                │                ├── Stripe
          │                │                ├── WhatsApp
          │                │                ├── OpenAI
          │                │                └── Email
          │                │
          └────────────────┤
                           ↓
                       Database

How Convex generate API system

  1. Let say project structure:
convex/
├── orders.ts
│    ├── createOrder
│    └── getOrder
│
├── products.ts
│    ├── getProducts
│    └── updateProduct
│
└── users.ts
     └── getUser
  1. In covex/order.ts
import { mutation } from "./_generated/server";

export const createOrder = mutation({
  handler: async (ctx, args) => {
    // business logic
  },
});
  1. When run Convex development / deployment, convex generate API references
convex/orders.ts
      │
      └── createOrder
             │
             ↓
      generated API object
             │
             ↓
       api.orders.createOrder
  1. So all API references will be:
api
│
├── orders
│    ├── createOrder
│    └── getOrder
│
├── products
│    ├── getProducts
│    └── updateProduct
│
└── users
     └── getUser
  1. Convex will generate a folder /generated, example:
convex/_generated/
├── api.d.ts
├── api.js
└── dataModel.d.ts
  1. So frontend just import