0.63.6 • Published 5 months ago

@tracktile/axiom v0.63.6

Weekly downloads
-
License
MIT
Repository
github
Last release
5 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

0.63.4

5 months ago

0.63.6

5 months ago

0.63.5

5 months ago

1.4.4

1 year ago

1.4.3

1 year ago

1.4.2

1 year ago

1.4.1

1 year ago

1.4.0

1 year ago

1.2.41

1 year ago

1.2.42

1 year ago

1.2.40

1 year ago

1.2.45

1 year ago

1.2.43

1 year ago

1.2.44

1 year ago

1.2.49

1 year ago

1.2.47

1 year ago

1.2.48

1 year ago

1.2.18

1 year ago

1.3.6

1 year ago

1.3.5

1 year ago

1.3.3

1 year ago

1.3.2

1 year ago

1.3.1

1 year ago

1.3.0

1 year ago

1.2.20

1 year ago

1.2.23

1 year ago

1.2.24

1 year ago

1.2.21

1 year ago

1.2.22

1 year ago

1.2.27

1 year ago

1.2.28

1 year ago

1.2.25

1 year ago

1.2.26

1 year ago

1.2.29

1 year ago

1.2.30

1 year ago

1.2.31

1 year ago

1.2.35

1 year ago

1.2.32

1 year ago

1.2.33

1 year ago

1.2.38

1 year ago

1.2.39

1 year ago

1.2.36

1 year ago

1.2.37

1 year ago

1.2.8

1 year ago

1.2.7

1 year ago

1.2.6

1 year ago

1.2.5

1 year ago

1.2.3

1 year ago

1.3.8

1 year ago

1.2.12

1 year ago

1.2.13

1 year ago

1.2.10

1 year ago

1.2.11

1 year ago

1.2.14

1 year ago

1.2.15

1 year ago

1.0.82

2 years ago

1.0.81

2 years ago

1.0.80

2 years ago

1.0.77

2 years ago

1.0.79

2 years ago

1.0.78

2 years ago

1.0.73

2 years ago

1.0.72

2 years ago

1.0.71

2 years ago

1.0.70

2 years ago

1.0.76

2 years ago

1.0.75

2 years ago

1.0.74

2 years ago

1.0.69

2 years ago

1.0.68

2 years ago

1.0.67

2 years ago

1.0.66

2 years ago

1.0.65

2 years ago

1.0.0-beta.70

2 years ago

1.0.0-beta.66

2 years ago

1.0.0-beta.67

2 years ago

1.0.0-beta.64

2 years ago

1.0.0-beta.65

2 years ago

1.0.0-beta.62

2 years ago

1.0.0-beta.63

2 years ago

1.0.0-beta.60

2 years ago

1.0.0-beta.68

2 years ago

1.0.0-beta.69

2 years ago

1.0.0-beta.55

2 years ago

1.0.0-beta.56

2 years ago

1.0.0-beta.53

2 years ago

1.0.0-beta.54

2 years ago

1.0.0-beta.51

2 years ago

1.0.0-beta.52

2 years ago

1.0.0-beta.50

2 years ago

1.0.0-beta.59

2 years ago

1.0.0-beta.57

2 years ago

1.0.0-beta.58

2 years ago

1.0.0-beta.44

2 years ago

1.0.0-beta.45

2 years ago

1.0.0-beta.42

2 years ago

1.0.0-beta.43

2 years ago

1.0.0-beta.40

2 years ago

1.0.0-beta.41

2 years ago

1.0.0-beta.48

2 years ago

1.0.0-beta.46

2 years ago

1.0.0-beta.47

2 years ago

1.0.0-beta.33

2 years ago

1.0.0-beta.34

2 years ago

1.0.0-beta.31

2 years ago

1.0.0-beta.32

2 years ago

1.0.0-beta.30

2 years ago

1.0.0-beta.39

2 years ago

1.0.0-beta.37

2 years ago

1.0.0-beta.38

2 years ago

1.0.0-beta.35

2 years ago

1.0.0-beta.36

2 years ago

1.0.0-beta.99

2 years ago

1.0.0-beta.98

2 years ago

1.0.0-beta.95

2 years ago

1.0.0-beta.96

2 years ago

1.0.0-beta.93

2 years ago

1.0.0-beta.91

2 years ago

1.0.0-beta.92

2 years ago

1.0.0-beta.90

2 years ago

1.0.0-beta.88

2 years ago

1.0.0-beta.89

2 years ago

1.0.0-beta.86

2 years ago

1.0.0-beta.87

2 years ago

1.0.0-beta.84

2 years ago

1.0.0-beta.85

2 years ago

1.0.0-beta.82

2 years ago

1.0.0-beta.83

2 years ago

1.0.0-beta.80

2 years ago

1.0.0-beta.81

2 years ago

1.0.0-beta.77

2 years ago

1.0.0-beta.78

2 years ago

1.0.0-beta.75

2 years ago

1.0.0-beta.76

2 years ago

1.0.0-beta.73

2 years ago

1.0.0-beta.74

2 years ago

1.0.0-beta.72

2 years ago

1.0.0-beta.79

2 years ago

1.0.0-beta.136

2 years ago

1.0.0-beta.137

2 years ago

1.0.0-beta.134

2 years ago

1.0.0-beta.135

2 years ago

1.0.0-beta.132

2 years ago

1.0.0-beta.133

2 years ago

1.0.0-beta.130

2 years ago

1.0.0-beta.131

2 years ago

1.0.62

2 years ago

1.0.61

2 years ago

1.0.60

2 years ago

1.0.0-beta.138

2 years ago

1.0.0-beta.139

2 years ago

1.0.64

2 years ago

1.0.63

2 years ago

1.0.0-beta.125

2 years ago

1.0.0-beta.126

2 years ago

1.0.0-beta.123

2 years ago

1.0.0-beta.124

2 years ago

1.0.0-beta.121

2 years ago

1.0.0-beta.122

2 years ago

1.0.0-beta.120

2 years ago

1.0.0-beta.129

2 years ago

1.0.0-beta.127

2 years ago

1.0.0-beta.128

2 years ago

1.0.39

2 years ago

1.0.38

2 years ago

1.0.0-beta.114

2 years ago

1.0.0-beta.115

2 years ago

1.0.0-beta.112

2 years ago

1.0.0-beta.113

2 years ago

1.0.0-beta.110

2 years ago

1.0.0-beta.111

2 years ago

1.0.40

2 years ago

1.0.0-beta.118

2 years ago

1.0.0-beta.119

2 years ago

1.0.0-beta.116

2 years ago

1.0.0-beta.117

2 years ago

1.0.44

2 years ago

1.0.43

2 years ago

1.0.42

2 years ago

1.0.41

2 years ago

1.0.48

2 years ago

1.0.47

2 years ago

1.0.46

2 years ago

1.0.45

2 years ago

1.0.49

2 years ago

1.0.0-beta.103

2 years ago

1.0.0-beta.104

2 years ago

1.0.0-beta.101

2 years ago

1.0.0-beta.102

2 years ago

1.0.0-beta.100

2 years ago

1.0.51

2 years ago

1.0.0-beta.107

2 years ago

1.0.50

2 years ago

1.0.0-beta.108

2 years ago

1.0.0-beta.105

2 years ago

1.0.0-beta.106

2 years ago

1.0.55

2 years ago

1.0.54

2 years ago

1.0.53

2 years ago

1.0.52

2 years ago

1.0.59

2 years ago

1.0.58

2 years ago

1.0.57

2 years ago

1.0.56

2 years ago

1.0.19

2 years ago

1.0.2

2 years ago

1.0.18

2 years ago

1.0.1

2 years ago

1.0.17

2 years ago

1.0.16

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.0-beta.22

2 years ago

1.0.0-beta.23

2 years ago

1.0.0-beta.20

2 years ago

1.0.0-beta.21

2 years ago

1.0.22

2 years ago

1.0.20

2 years ago

1.0.0-beta.28

2 years ago

1.0.0-beta.29

2 years ago

1.0.26

2 years ago

1.0.0-beta.26

2 years ago

1.0.25

2 years ago

1.0.0-beta.27

2 years ago

1.0.24

2 years ago

1.0.0-beta.24

2 years ago

1.0.23

2 years ago

1.0.0-beta.25

2 years ago

1.0.29

2 years ago

1.0.28

2 years ago

1.0.27

2 years ago

1.0.0-beta.11

2 years ago

1.0.0-beta.12

2 years ago

1.0.0-beta.10

2 years ago

1.0.33

2 years ago

1.0.0-beta.19

2 years ago

1.0.32

2 years ago

1.0.31

2 years ago

1.0.0-beta.17

2 years ago

1.0.30

2 years ago

1.0.0-beta.18

2 years ago

1.0.37

2 years ago

1.0.0-beta.15

2 years ago

1.0.36

2 years ago

1.0.0-beta.16

2 years ago

1.0.35

2 years ago

1.0.0-beta.13

2 years ago

1.0.34

2 years ago

1.0.0-beta.14

2 years ago

1.0.0-beta.140

2 years ago

1.0.0-beta.2

2 years ago

1.0.0-beta.3

2 years ago

1.0.0-beta.4

2 years ago

1.0.0-beta.143

2 years ago

1.0.0-beta.144

2 years ago

1.0.0-beta.141

2 years ago

1.0.0-beta.142

2 years ago

1.0.0-beta.1

2 years ago

1.0.0-beta.6

2 years ago

1.0.0-beta.7

2 years ago

1.0.0-beta.8

2 years ago

1.0.0-beta.9

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.13

2 years ago

1.0.12

2 years ago

0.5.0

2 years ago

0.5.1

2 years ago

0.4.5

2 years ago

0.4.4

2 years ago

0.4.7

2 years ago

0.4.6

2 years ago

0.4.3

2 years ago

0.4.2

2 years ago

0.3.0

2 years ago

0.2.0

2 years ago

0.3.6

2 years ago

0.3.5

2 years ago

0.4.1

2 years ago

0.3.2

2 years ago

0.4.0

2 years ago

0.3.4

2 years ago

0.1.6

2 years ago

0.3.3

2 years ago

0.1.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.5

2 years ago

0.0.20

2 years ago

0.0.21

2 years ago

0.0.22

2 years ago

0.0.23

2 years ago

0.0.18

2 years ago

0.0.16

2 years ago

0.0.17

2 years ago

0.0.15

2 years ago

0.0.14

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago