1.0.82 • Published 3 months ago

@tracktile/axiom v1.0.82

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

Features

  • :muscle: Based on Tanstack Query and Typebox, Koa, and openapi3-ts.

  • :pencil2: Define your API models once and use them anywhere in your App, frontend or backend.

  • :lock: Automatically validate request and response data against your defined model.

  • :necktie: Optimistic mutations by default.

  • :notebook_with_decorative_cover: Automatically generates an OpenAPI schema describing your API as YAML or JSON.

  • :battery: Deploy your API as microservice, or a modular monolith to AWS Lambda using our provided CDK construct.

  • :runner: Run all of your services in a single process for local development. Deploy as separate services.

Installation

  npm install @tracktile/axiom

Usage

Models

import { createModel, T } from "@tracktile/axiom";

// Declare a model to be used across your app.
export const User = createModel({
  name: "User",
  resource: "/users",
  model: T.Object({
    id: T.String(),
    name: T.String(),
    email: T.String(),
    enabled: T.Boolean(),
  }),
  create: T.Object({
    name: T.String(),
    email: T.String(),
  }),
});

Client

import { createProcedure, T } from '@tracktile/axiom';
import { createUseApiHook, createApiProvider } from "@tracktile/axiom/client";

// Create a procedure
// Procedures are not cached and represent RPC calls
export const SendAlert = createProcedure({
  name: "SendAlert",
  method: "post",
  resource: "/events",
  params: T.Object({
    message: T.String(),
    time: T.String({ format: "date-time" }),
  }),
  result: T.Boolean(),
});

// Collect your models
  const models = { User }

// Collect your procedures
const fns = { SendAlert }

// Create an APIProvider based on your models
const ApiProvider = createApiProvider({ models, fns });

// Create a useApi hook based on your models
const useApi = createUseApiHook({ models, fn });

// Use them to access your API in your application!
// Queries are cached and retried automatically
// Mutations are optimistic by default and retry forever

const MyAwesomeComponent = () => {
  // Access stateful queries and mutations with accurate type safety, inferred from your models.
  const { data: users, isLoading: isLoadingUsers, dataUpdatedAt: usersUpdatedAt } = api.User.search();

  // Use offline first optimistic mutations
  const { mutate: createUser, isLoading: isCreatingUser} = api.User.create()

  // Invoke your bound RPC style calls
  const { run: sendAlert } = api.SendAlert.run({
    // And pass mutation options based on the call
    retry: true,
  });

  return (
    <>
      <div>{JSON.stringify(user)}</div>
      <div>Fetched: {usersUpdatedAt}</div>
      <button onPress={() => createUser({
        name: 'My User',
        email: 'user@users.com',
      })}>Add</button>
      <button onPress={sendAlert}>Add</button>
    </>
  )
}

const App = () =>
  <ApiProvider baseUrl="https://my.awesome.backend">
    <MyAwesomeComponent>
  </ApiProvider>

Server

import { T } from "@tracktile/axiom";
import { Service, Controller, serverless } from "@tracktile/axiom/server";

const controller = new Controller({
  tags: ["example"],
});

controller.addOperation(
  {
    name: "CreateUser",
    method: "post",
    path: "/users",
    req: User.schemas.create,
    res: User.schemas.model,
  },
  async (ctx, next) => {
    // ctx.request.body is validated and type inferred as User.schemas.create
    // Create and return the user
    return next();
  }
);

const service = new Service({
  title: "example",
  description: "Example service",
  version: "1.0.0",
  controllers: [controller],
});

// Start a local server
service.start(3000);

// Or mount your API inside of an Lambda function
exports.handler = serverless(service);

Generate OpenAPI Documentation

axiom --in=./myService.ts --out=./my-api-schema.yaml --yaml
OR
axiom --in=./myCombinedServices.ts --out=./my-api-schema.json --json

Examples

Small example project can be found in the example/ folder.

Authors

1.0.82

3 months ago

1.0.81

4 months ago

1.0.80

4 months ago

1.0.77

4 months ago

1.0.79

4 months ago

1.0.78

4 months ago

1.0.73

5 months ago

1.0.72

5 months ago

1.0.71

5 months ago

1.0.70

5 months ago

1.0.76

5 months ago

1.0.75

5 months ago

1.0.74

5 months ago

1.0.69

5 months ago

1.0.68

5 months ago

1.0.67

5 months ago

1.0.66

5 months ago

1.0.65

5 months ago

1.0.0-beta.70

8 months ago

1.0.0-beta.66

8 months ago

1.0.0-beta.67

8 months ago

1.0.0-beta.64

8 months ago

1.0.0-beta.65

8 months ago

1.0.0-beta.62

8 months ago

1.0.0-beta.63

8 months ago

1.0.0-beta.60

8 months ago

1.0.0-beta.68

8 months ago

1.0.0-beta.69

8 months ago

1.0.0-beta.55

8 months ago

1.0.0-beta.56

8 months ago

1.0.0-beta.53

8 months ago

1.0.0-beta.54

8 months ago

1.0.0-beta.51

8 months ago

1.0.0-beta.52

8 months ago

1.0.0-beta.50

8 months ago

1.0.0-beta.59

8 months ago

1.0.0-beta.57

8 months ago

1.0.0-beta.58

8 months ago

1.0.0-beta.44

8 months ago

1.0.0-beta.45

8 months ago

1.0.0-beta.42

8 months ago

1.0.0-beta.43

8 months ago

1.0.0-beta.40

8 months ago

1.0.0-beta.41

8 months ago

1.0.0-beta.48

8 months ago

1.0.0-beta.46

8 months ago

1.0.0-beta.47

8 months ago

1.0.0-beta.33

8 months ago

1.0.0-beta.34

8 months ago

1.0.0-beta.31

8 months ago

1.0.0-beta.32

8 months ago

1.0.0-beta.30

8 months ago

1.0.0-beta.39

8 months ago

1.0.0-beta.37

8 months ago

1.0.0-beta.38

8 months ago

1.0.0-beta.35

8 months ago

1.0.0-beta.36

8 months ago

1.0.0-beta.99

8 months ago

1.0.0-beta.98

8 months ago

1.0.0-beta.95

8 months ago

1.0.0-beta.96

8 months ago

1.0.0-beta.93

8 months ago

1.0.0-beta.91

8 months ago

1.0.0-beta.92

8 months ago

1.0.0-beta.90

8 months ago

1.0.0-beta.88

8 months ago

1.0.0-beta.89

8 months ago

1.0.0-beta.86

8 months ago

1.0.0-beta.87

8 months ago

1.0.0-beta.84

8 months ago

1.0.0-beta.85

8 months ago

1.0.0-beta.82

8 months ago

1.0.0-beta.83

8 months ago

1.0.0-beta.80

8 months ago

1.0.0-beta.81

8 months ago

1.0.0-beta.77

8 months ago

1.0.0-beta.78

8 months ago

1.0.0-beta.75

8 months ago

1.0.0-beta.76

8 months ago

1.0.0-beta.73

8 months ago

1.0.0-beta.74

8 months ago

1.0.0-beta.72

8 months ago

1.0.0-beta.79

8 months ago

1.0.0-beta.136

7 months ago

1.0.0-beta.137

7 months ago

1.0.0-beta.134

7 months ago

1.0.0-beta.135

7 months ago

1.0.0-beta.132

7 months ago

1.0.0-beta.133

7 months ago

1.0.0-beta.130

8 months ago

1.0.0-beta.131

8 months ago

1.0.62

6 months ago

1.0.61

6 months ago

1.0.60

6 months ago

1.0.0-beta.138

7 months ago

1.0.0-beta.139

7 months ago

1.0.64

5 months ago

1.0.63

5 months ago

1.0.0-beta.125

8 months ago

1.0.0-beta.126

8 months ago

1.0.0-beta.123

8 months ago

1.0.0-beta.124

8 months ago

1.0.0-beta.121

8 months ago

1.0.0-beta.122

8 months ago

1.0.0-beta.120

8 months ago

1.0.0-beta.129

8 months ago

1.0.0-beta.127

8 months ago

1.0.0-beta.128

8 months ago

1.0.39

6 months ago

1.0.38

6 months ago

1.0.0-beta.114

8 months ago

1.0.0-beta.115

8 months ago

1.0.0-beta.112

8 months ago

1.0.0-beta.113

8 months ago

1.0.0-beta.110

8 months ago

1.0.0-beta.111

8 months ago

1.0.40

6 months ago

1.0.0-beta.118

8 months ago

1.0.0-beta.119

8 months ago

1.0.0-beta.116

8 months ago

1.0.0-beta.117

8 months ago

1.0.44

6 months ago

1.0.43

6 months ago

1.0.42

6 months ago

1.0.41

6 months ago

1.0.48

6 months ago

1.0.47

6 months ago

1.0.46

6 months ago

1.0.45

6 months ago

1.0.49

6 months ago

1.0.0-beta.103

8 months ago

1.0.0-beta.104

8 months ago

1.0.0-beta.101

8 months ago

1.0.0-beta.102

8 months ago

1.0.0-beta.100

8 months ago

1.0.51

6 months ago

1.0.0-beta.107

8 months ago

1.0.50

6 months ago

1.0.0-beta.108

8 months ago

1.0.0-beta.105

8 months ago

1.0.0-beta.106

8 months ago

1.0.55

6 months ago

1.0.54

6 months ago

1.0.53

6 months ago

1.0.52

6 months ago

1.0.59

6 months ago

1.0.58

6 months ago

1.0.57

6 months ago

1.0.56

6 months ago

1.0.19

6 months ago

1.0.2

6 months ago

1.0.18

6 months ago

1.0.1

6 months ago

1.0.17

6 months ago

1.0.16

6 months ago

1.0.9

6 months ago

1.0.8

6 months ago

1.0.7

6 months ago

1.0.6

6 months ago

1.0.5

6 months ago

1.0.4

6 months ago

1.0.3

6 months ago

1.0.0-beta.22

8 months ago

1.0.0-beta.23

8 months ago

1.0.0-beta.20

8 months ago

1.0.0-beta.21

8 months ago

1.0.22

6 months ago

1.0.20

6 months ago

1.0.0-beta.28

8 months ago

1.0.0-beta.29

8 months ago

1.0.26

6 months ago

1.0.0-beta.26

8 months ago

1.0.25

6 months ago

1.0.0-beta.27

8 months ago

1.0.24

6 months ago

1.0.0-beta.24

8 months ago

1.0.23

6 months ago

1.0.0-beta.25

8 months ago

1.0.29

6 months ago

1.0.28

6 months ago

1.0.27

6 months ago

1.0.0-beta.11

8 months ago

1.0.0-beta.12

8 months ago

1.0.0-beta.10

8 months ago

1.0.33

6 months ago

1.0.0-beta.19

8 months ago

1.0.32

6 months ago

1.0.31

6 months ago

1.0.0-beta.17

8 months ago

1.0.30

6 months ago

1.0.0-beta.18

8 months ago

1.0.37

6 months ago

1.0.0-beta.15

8 months ago

1.0.36

6 months ago

1.0.0-beta.16

8 months ago

1.0.35

6 months ago

1.0.0-beta.13

8 months ago

1.0.34

6 months ago

1.0.0-beta.14

8 months ago

1.0.0-beta.140

7 months ago

1.0.0-beta.2

9 months ago

1.0.0-beta.3

9 months ago

1.0.0-beta.4

9 months ago

1.0.0-beta.143

7 months ago

1.0.0-beta.144

7 months ago

1.0.0-beta.141

7 months ago

1.0.0-beta.142

7 months ago

1.0.0-beta.1

9 months ago

1.0.0-beta.6

9 months ago

1.0.0-beta.7

9 months ago

1.0.0-beta.8

9 months ago

1.0.0-beta.9

9 months ago

1.0.11

6 months ago

1.0.10

6 months ago

1.0.15

6 months ago

1.0.14

6 months ago

1.0.13

6 months ago

1.0.12

6 months ago

0.5.0

10 months ago

0.5.1

10 months ago

0.4.5

11 months ago

0.4.4

11 months ago

0.4.7

11 months ago

0.4.6

11 months ago

0.4.3

11 months ago

0.4.2

11 months ago

0.3.0

1 year ago

0.2.0

1 year ago

0.3.6

11 months ago

0.3.5

12 months ago

0.4.1

11 months ago

0.3.2

12 months ago

0.4.0

11 months ago

0.3.4

12 months ago

0.1.6

1 year ago

0.3.3

12 months ago

0.1.0

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.5

1 year ago

0.0.20

1 year ago

0.0.21

1 year ago

0.0.22

1 year ago

0.0.23

1 year ago

0.0.18

1 year ago

0.0.16

1 year ago

0.0.17

1 year ago

0.0.15

1 year ago

0.0.14

1 year ago

0.0.12

1 year ago

0.0.11

1 year ago

0.0.10

1 year ago

0.0.9

1 year ago

0.0.8

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago