![require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages](https://cdn.sanity.io/images/cgdhsj6q/production/be8ab80c8efa5907bc341c6fefe9aa20d239d890-1600x1097.png?w=400&fit=max&auto=format)
Security News
require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
swagger2openapi-lxwang2
Advanced tools
Convert Swagger 2.0 definitions to OpenApi 3.0 and validate
Convert Swagger 2.0 definitions into OpenApi 3.0.x
The online version of the converter/validator runs on a Linode VPS. If you are considering a hosted server, please sign up through this link so we both receive free credit.
Currently tracking v3.0.x
This is a node.js module, which you can run on the command line. First ensure you have npm installed (tested on version 6.1+), and then install as follows:
npm install -g swagger2openapi
Or, add it to your node.js projects as shown below in option B.
swagger2openapi [options] [filename|url]
Options:
--refSiblings mode to handle $ref's with sibling properties
[choices: "remove", "preserve", "allOf"]
--resolveInternal resolve internal references also [boolean]
--warnProperty Property name to use for warning extensions
[string] [default: "x-s2o-warning"]
--version Show version number [boolean]
-c, --components output information to unresolve a definition [boolean]
-d, --debug enable debug mode, adds specification-extensions[boolean]
-e, --encoding encoding for input/output files[string] [default: "utf8"]
-f, --fatal make resolution errors fatal [boolean]
-h, --help Show help [boolean]
-i, --indent JSON indent to use, defaults to 4 spaces [string]
-o, --outfile the output file to write to [string]
-p, --patch fix up small errors in the source definition [boolean]
-r, --resolve resolve external references [boolean]
-t, --targetVersion override default target version of 3.0.0 [string]
-u, --url url of original spec, creates x-origin entry [string]
-v, --verbose increase verbosity [count]
-w, --warnOnly Do not throw on non-patchable errors, add warning
extensions [boolean]
-y, --yaml write YAML, default JSON (overridden by --outfile
filepath extension) [boolean]
-b, --rbname Extension to use to preserve body parameter names in
converted operations ("" == disabled)
[string] [default: ""]
const converter = require('swagger2openapi');
let options = {};
//options.patch = true; // fix up small errors in the source definition
//options.warnOnly = true; // Do not throw on non-patchable errors
converter.convertObj(swagger, options, function(err, options){
// options.openapi contains the converted definition
});
// also available are asynchronous convertFile, convertUrl, convertStr and convertStream functions
// if you omit the callback parameter, you will instead receive a Promise
Note that the options
object passed in is modified/extended by the convert*
functions.
See the boast command-line tool for a fuller CLI tool for converting, validating and linting.
See here for complete documentation of the options
object.
Or use the online version which also includes its own API.
oas-validate
can be used as a validator if given one or more existing OpenAPI 3.x definitions. The validator (however it is called) uses WHATWG URL parsing if available (node 7.x and above). The validator can have a linting mode enabled with the --lint
option. Rules are defined here. Contributions of rules and rule actions for the linter are very much appreciated.
oas-validate.js [options] {path-to-docs}...
Options:
--lint lint the definition [boolean]
--validateSchema Run schema validation step: first, last* or never [string]
--warnOnly Do not throw on non-patchable errors [boolean]
-h, --help Show help [boolean]
--version Show version number [boolean]
-e, --encoding encoding for input/output files [string] [default: "utf8"]
-f, --fail path to docs expected to fail [string]
-j, --jsonschema path to alternative JSON schema [string]
-l, --laxurls lax checking of empty urls [boolean]
-m, --mediatype check media-types against RFC pattern [boolean]
-n, --nopatch do not patch minor errors in the source definition [boolean]
-o, --output output conversion result [string] [default: "openapi.yaml"]
-q, --quiet do not show test passes on console, for CI [boolean]
-r, --resolve resolve external references [boolean]
-s, --stop stop on first error [boolean]
-v, --verbose increase verbosity [count]
-w, --whatwg enable WHATWG URL parsing [boolean]
-y, --yaml skip YAML-safe test [boolean]
swagger2openapi
by default preserves almost all $ref
JSON references in your API definition, and does not dereference
every item, as with some model-based parsers. The exception is internal references within externally referenced documents. To enable internal $ref
resolution across the whole document, use the --resolveInternal
option, which also disables creation of $ref
s for shared requestBodies
.
swagger2openapi
will automatically 'repair' a number of problems where non-compliant Swagger 2.0 schemas have been used. It will attempt to transform JSON schemas (used incorrectly) into OpenAPI 3.0.x Schema objects.
swagger2openapi
has support for a limited number of real-world specification extensions which have a direct bearing on the conversion. All other specification extensions are left untouched. swagger2openapi is swaggerplusplus-compatible.
It is expected to be able to configure the process of specification-extension modification using options or a plugin mechanism in a future release.
To run a test-suite:
node oas-validate [-f {path-to-expected-failures}]... [{path-to-APIs|single-file...}]
The test harness currently expects files with a .json
or .yaml
extension, or a single named file, and has been tested on LTS Node.js versions against
Additionally swagger2openapi
has been tested on a corpus of 74,426 real-world valid Swagger 2.0 definitions from GitHub and SwaggerHub. However, if you have a definition which causes errors in the converter or does not pass validation, please do not hesitate to raise an issue.
Regression tests (thanks @domharrington) live in the /test
directory and can be run with npx mocha
. Each sub-directory of s2o-test
should contain an input swagger.yaml
file, an expected output openapi.yaml
file and an optional options.yaml
file. You can put private test cases in sub-directories starting with an underscore character. In the resolver
sub-directory, each directory should contain an input.yaml
, an output.yaml
and an optional options.yaml
file.
BSD-3-Clause except the openapi-3.0.json
schema, which is taken from the OpenAPI-Specification which is licensed under the Apache-2 license.
FAQs
Convert Swagger 2.0 definitions to OpenApi 3.0 and validate
We found that swagger2openapi-lxwang2 demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
Security News
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.