ts-swagger-fetch

CLI tool powered by node.js that (fetches and/or) transforms swagger definition files that you can easily incorporate into your TypeScript+React application.

Usage no npm install needed!

<script type="module">
  import tsSwaggerFetch from 'https://cdn.skypack.dev/ts-swagger-fetch';
</script>

README

TS Swagger 2 Fetch generator

CLI tool powered by node.js that (fetches and/or) transforms swagger definition files that you can easily incorporate into your TypeScript+React application.

install

npm i -D ts-swagger-fetch

configure

Config file is a json file that is expressed with this interface - ConfigFile.

interface ConfigFile {
  // path relative to the config file
  output: string;
  swaggers: SwaggerFileDescriptor[];
}

interface SwaggerFileDescriptor {

  // your custom name (will be visible in logs)
  name: string;

  // swagger definition file path relative to config file
  file: string;

  // swagger definition remote location information
  remote: SwaggerRemoteFileDescriptor;

  // should a factory function
  // allowing replacing window.fetch
  // be generated
  factory?: boolean;

  // Object here will override (overshadow)
  // contents of the swagger definition file
  overrides?: Partial<Spec>;
}

interface SwaggerRemoteFileDescriptor {
  url: string;
  username?: string;
  password?: string;
}

transform

  npx msf ./msfconfig.json
# ^ this will run it including node_modules in PATH
#      ^ this is a name of the CLI tool
#           ^ this is the path to your config file

incorporate

A) A fetch method

import { pet } from './test/output/pet';

async function shoutOutPet(id: number) {
  const response = await pet('get /pet/{petId}', {
    path: {
      petId: 0,
    },
  });

  switch (response.status) {
    case 200: return alert(
      `Dog's name ${response.json?.name ?? ''}`
    );
    case 400: return alert('Fatal error!');
    case 404: return alert('Not found');
    default: return;
  }
}

B) A factory function returning fetch method

import { petFactory } from './test/output/pet';

const pet = petFactory(window.fetch);

async function shoutOutPet(id: number) {
  const response = await pet('get /pet/{petId}', {
    path: {
      petId: 0,
    },
  });

  switch (response.status) {
    case 200: return alert(
      `Dog's name ${response.json?.name ?? ''}`
    );
    case 400: return alert('Fatal error!');
    case 404: return alert('Not found');
    default: return;
  }
}