7.4.7 • Published 23 days ago

@smartlyio/oats v7.4.7

Weekly downloads
232
License
MIT
Repository
github
Last release
23 days ago

oats

Generator for typescript clients and servers from openapi3 specs

Server usage

// yarn ts-node examples/server.ts
import * as api from "../tmp/server.generated";
import * as types from "../tmp/server.types.generated";
import { runtime, server } from "../index";
import * as Koa from "koa";
import * as koaBody from "koa-body";

// setup a db :)
const values: { [key: string]: types.Item } = {};

// 'api.Endpoints' is the generated type of the server
const spec: api.Endpoints = {
  "/item": {
    post: async ctx => {
      if (ctx.headers.authorization !== 'Bearer ^-^') {
          return runtime.json(403, { message: 'Unauthorized'})
      }
      values[ctx.body.value.id] = types.Item.make({
        id: ctx.body.value.id,
        name: ctx.body.value.name
      }).success();
      return runtime.json(201, values[ctx.body.value.id]);
    }
  },
  "/item/{id}": {
    get: async ctx => {
      const item = values[ctx.params.id];
      if (item) {
        return runtime.json(200, item);
      }
      return runtime.json(400, { message: "not found" });
    }
  }
};

// 'server.koaBindRoutes'  binds the endpoint implemantion in'spec' to
// koa-router routes using a koa adapter
const routes = server.koaBindRoutes<api.Endpoints>(api.router, spec);

// finally we can create a Koa app from the routes
export function createApp() {
  const app = new Koa();
  // we need a bodyparser to make body contain json and deal with multipart
  // requests
  app.use(
    koaBody({
      multipart: true
    })
  );
  app.use(routes.routes());
  return app;
}

Client usage

// yarn ts-node examples/client.ts
import * as api from "../tmp/client.generated";
import { client } from "../index";
import * as app from "./server";

// 'api.client' is the abstract implementation of the client which is then
// mapped to axios requests using 'axiosAdapter'
const apiClient = api.client(client.axiosAdapter);
async function runClient() {
  try {
      const posted = await apiClient.item.post({
          headers: {
              authorization: 'Bearer ^-^'
          },
          body: client.json({ id: "id", name: "name" })
    });
    if (posted.status === 201) {
      const got = await apiClient.item(posted.value.value.id).get();
      if (got.status === 200 && got.value.value.id === "id") {
        process.exit(0);
      }
    }
  } catch (e) {
      console.log('Got error', e);
  }
  process.exit(1);
}

// spin up the server
const port = 12000;
app.createApp().listen(port, runClient);

Generating clients and servers

// yarn ts-node examples/driver.ts
import { driver } from "../index";

// generate server
driver.generate({
  generatedValueClassFile: "./tmp/server.types.generated.ts",
  generatedServerFile: "./tmp/server.generated.ts",
  runtimeFilePath: "./index.ts",
  header: "/* tslint:disable variable-name only-arrow-functions*/",
  openapiFilePath: "./test/example.yaml"
});

// generate client
driver.generate({
  generatedValueClassFile: "./tmp/client.types.generated.ts",
  runtimeFilePath: "./index.ts",
  generatedClientFile: "./tmp/client.generated.ts",
  header: "/* tslint:disable variable-name only-arrow-functions*/",
  openapiFilePath: "./test/example.yaml",
  // Omit error responses  from the client response types
  emitStatusCode: (code: number) => [200, 201].indexOf(code) >= 0
});
7.4.8-alpha.3

23 days ago

7.4.8-alpha.1

24 days ago

7.4.8-alpha.0

24 days ago

7.4.7

25 days ago

7.4.6

26 days ago

7.4.5

2 months ago

7.4.4

2 months ago

7.4.4-alpha.2

2 months ago

7.4.1-alpha.2

5 months ago

7.4.1

5 months ago

7.3.1-alpha.7

9 months ago

7.4.0

8 months ago

7.3.3-alpha.0

9 months ago

7.3.3-alpha.1

9 months ago

7.3.3-alpha.6

8 months ago

7.3.2

9 months ago

7.3.0

12 months ago

7.0.0

12 months ago

7.1.0

12 months ago

7.0.1-next.1

12 months ago

6.3.3-alpha.1

1 year ago

7.0.1-alpha.1

12 months ago

7.2.0

12 months ago

6.1.0

1 year ago

6.1.2

1 year ago

6.1.1

1 year ago

6.1.3

1 year ago

6.2.0

1 year ago

6.3.2-alpha.3

1 year ago

6.3.0

1 year ago

6.3.2

1 year ago

6.3.1

1 year ago

6.0.3

1 year ago

6.1.4-alpha.3

1 year ago

6.0.2

1 year ago

6.0.1

2 years ago

6.0.0

2 years ago

6.0.0-alpha.12

2 years ago

6.0.0-alpha.13

2 years ago

5.0.0

2 years ago

5.1.5

2 years ago

5.1.4

2 years ago

5.1.3

2 years ago

5.1.2

2 years ago

5.1.1

2 years ago

5.1.0

2 years ago

5.1.4-alpha.0

2 years ago

4.4.1-alpha.19

2 years ago

4.4.1-alpha.14

2 years ago

4.4.1-alpha.13

2 years ago

4.4.1-alpha.18

2 years ago

4.4.1-alpha.9

2 years ago

4.4.0

2 years ago

4.3.2

2 years ago

4.3.1

2 years ago

4.3.0

2 years ago

4.2.0

2 years ago

4.1.1-alpha.14

2 years ago

4.1.0

2 years ago

4.1.0-alpha.0

2 years ago

4.0.0-alpha.2

2 years ago

4.0.1

2 years ago

4.0.0

2 years ago

4.0.3

2 years ago

4.0.2

2 years ago

3.5.0

2 years ago

3.5.0-alpha.6

2 years ago

3.4.0

2 years ago

3.3.1-alpha.24

3 years ago

3.3.1

3 years ago

3.1.6-alpha.15

3 years ago

3.2.0

3 years ago

3.3.0-alpha.1

3 years ago

3.2.0-alpha.33

3 years ago

3.3.0

3 years ago

3.1.5

3 years ago

3.2.0-alpha.15

3 years ago

3.1.4-alpha.14

3 years ago

3.1.4

3 years ago

3.1.4-alpha.1

3 years ago

3.1.3

3 years ago

2.17.0

3 years ago

3.1.2

3 years ago

3.1.1

3 years ago

3.0.0

3 years ago

3.0.0-alpha.18

3 years ago

3.0.0-alpha.17

3 years ago

2.18.3-alpha.10

3 years ago

2.18.3-alpha.17

3 years ago

2.18.1

3 years ago

2.18.2

3 years ago

2.17.1-alpha.917

3 years ago

2.17.1-alpha.918

3 years ago

2.17.1-alpha.926

3 years ago

2.18.0

3 years ago

2.16.2

3 years ago

2.16.1

3 years ago

2.16.0

3 years ago

2.15.1

3 years ago

2.15.0

3 years ago

2.14.0

3 years ago

2.13.0

3 years ago

2.12.0

3 years ago

2.11.0

3 years ago

2.10.0

3 years ago

2.9.0

3 years ago

2.9.0-beta.1

3 years ago

2.8.0

3 years ago

2.7.4

3 years ago

2.7.3

3 years ago

2.7.2

3 years ago

2.7.0

4 years ago

2.7.1

4 years ago

2.7.0-beta.1

4 years ago

2.7.0-beta.2

4 years ago

2.6.0

4 years ago

2.5.9

4 years ago

2.5.8

4 years ago

2.5.4

4 years ago

2.5.3

4 years ago

2.5.6

4 years ago

2.5.5

4 years ago

2.5.7

4 years ago

2.5.2

4 years ago

2.5.1

4 years ago

2.5.0

4 years ago

2.4.1

4 years ago

2.4.0

4 years ago

2.3.0

4 years ago

2.2.1

4 years ago

2.1.1

4 years ago

2.1.0

4 years ago

2.0.0

4 years ago

1.7.3

4 years ago

1.7.2

4 years ago

1.7.1

4 years ago

1.7.0

4 years ago

1.6.3

4 years ago

1.6.2

4 years ago

1.6.1

4 years ago

1.6.1-beta.0

5 years ago

1.6.0

5 years ago

1.6.0-beta.3

5 years ago

1.6.0-beta.1

5 years ago

1.5.5

5 years ago

1.6.0-beta.0

5 years ago

1.5.4

5 years ago

1.5.4-beta.1

5 years ago

1.5.4-beta.0

5 years ago

1.5.3

5 years ago

1.5.2

5 years ago

1.5.1

5 years ago

1.5.0

5 years ago

1.5.0-beta.3

5 years ago

1.5.0-beta.2

5 years ago

1.5.0-beta.1

5 years ago

1.5.0-beta.0

5 years ago

1.4.2

5 years ago

1.4.0

5 years ago

1.3.1

5 years ago

1.3.0

5 years ago

1.2.0

5 years ago

1.1.0

5 years ago

1.0.0

5 years ago