JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 17
  • Score
    100M100P100Q47829F
  • License MIT

A comprehensive API linter for swagger files following Natura Cosmeticos best practices

Package Exports

  • @naturacosmeticos/api-linter

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@naturacosmeticos/api-linter) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@naturacosmeticos/api-linter

Build Status semantic-release NPM Known Vulnerabilities

A comprehensive API linter for swagger files using OpenAPI 3.0 following Natura Cosmeticos best practices

Installation

# with npm
npm install --save @naturacosmeticos/api-linter

# with yarn
yarn add @naturacosmeticos/api-linter

Usage

const path = require('path');
const { validate } = require('@naturacosmeticos/api-linter');

const swaggerFile = path.join('path', 'to', 'swagger', 'file.yml');

/**
 * Optional rules object for disabling/enabling rules
 */
const options = {
  "must-contain-port": true,
  "must-contain-server-url": true,
  "no-singular-resource": true,
  "must-contain-version": true,
  "must-contain-domain-and-context": true,
  "resource-spinal-case": true,
  "no-custom-media-type": true,
  "must-contain-media-type-version": true
};

const promise = validate(swaggerFile, options);

promise.then(faults => {
  console.log(faults);
}).catch(err => {
  console.error(err);
});

CLI

$ npm install -g @naturacosmeticos/api-linter

$ api-linter --help ## For options

$ api-linter --file=/path/to/swagger.yml ## Basic usage

Rules

These are the rules checked by the linter

{
  /**
   * Checks for missing port number on server url, defaults to `true`
   */
  "must-contain-port": boolean;
  /**
   * Checks for server url properties, defaults to true
   */
  "must-contain-server-url": boolean;
  /**
   * Allow resource names in singular, defaults to `true`
   */
  "no-singular-resource": boolean;
  /**
   * Checks for missing version number on server url, defaults to `true`
   */
  "must-contain-version": boolean;
  /**
   * Checks for missing `/domain/context` on server url, defaults to `true`
   */
  "must-contain-domain-and-context": boolean;
  /**
   * Checks for resources not using spinal case
   */
  "resource-spinal-case"?: boolean;
  /**
   * Checks for main media types defined in RFC 6838, defaults to `true`
   */
  "no-custom-media-type"?: boolean;
  /**
   * Checks for the presence of version parameter on vendor specific media types
   */
  "must-contain-media-type-version"?: boolean;
}