Socket
Socket
Sign inDemoInstall

openapi3-ts

Package Overview
Dependencies
Maintainers
1
Versions
50
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

openapi3-ts - npm Package Compare versions

Comparing version 2.0.0 to 2.0.1

.eslintrc

9

Changelog.md
# Changelog: openapi3-ts
## Version 2.0.1
2020.12.31
- Updated testing libs
- Added ESList + Prettier, removed TSList support
- Refactor to be consistent with ESLint + Prettier code-style rules
- No functional changes in this version: just end of year house-keeping.
## Version 2.0.0

@@ -4,0 +13,0 @@

2

dist/dsl/index.d.ts

@@ -1,1 +0,1 @@

export * from "./OpenApiBuilder";
export * from './OpenApiBuilder';

@@ -1,2 +0,2 @@

import * as oa from "../model";
import * as oa from '../model';
export declare class OpenApiBuilder {

@@ -3,0 +3,0 @@ rootDoc: oa.OpenAPIObject;

@@ -7,6 +7,6 @@ "use strict";

this.rootDoc = doc || {
openapi: "3.0.0",
openapi: '3.0.0',
info: {
title: "app",
version: "version"
title: 'app',
version: 'version'
},

@@ -43,5 +43,5 @@ paths: {},

v = v || '';
let match = /(\d+)\.(\d+).(\d+)/.exec(v);
const match = /(\d+)\.(\d+).(\d+)/.exec(v);
if (match) {
let major = parseInt(match[1], 10);
const major = parseInt(match[1], 10);
if (major >= 3) {

@@ -55,3 +55,3 @@ return true;

if (!OpenApiBuilder.isValidOpenApiVersion(openApiVersion)) {
throw new Error("Invalid OpnApi version: " + openApiVersion + ". Follow convention: 3.x.y");
throw new Error('Invalid OpnApi version: ' + openApiVersion + '. Follow convention: 3.x.y');
}

@@ -58,0 +58,0 @@ this.rootDoc.openapi = openApiVersion;

@@ -1,2 +0,2 @@

export * from "./model";
export * from "./dsl";
export * from './model';
export * from './dsl';

@@ -1,3 +0,3 @@

export * from "./SpecificationExtension";
export * from "./OpenApi";
export * from "./Server";
export * from './SpecificationExtension';
export * from './OpenApi';
export * from './Server';

@@ -1,2 +0,2 @@

import { ISpecificationExtension } from "./SpecificationExtension";
import { ISpecificationExtension } from './SpecificationExtension';
export declare function getExtension(obj: ISpecificationExtension, extensionName: string): any;

@@ -213,3 +213,3 @@ export declare function addExtension(obj: ISpecificationExtension, extensionName: string, extension: any): void;

}
export declare function isReferenceObject(obj: object): obj is ReferenceObject;
export declare function isReferenceObject(obj: any): obj is ReferenceObject;
export interface SchemaObject extends ISpecificationExtension {

@@ -233,5 +233,5 @@ nullable?: boolean;

properties?: {
[propertyName: string]: (SchemaObject | ReferenceObject);
[propertyName: string]: SchemaObject | ReferenceObject;
};
additionalProperties?: (SchemaObject | ReferenceObject | boolean);
additionalProperties?: SchemaObject | ReferenceObject | boolean;
description?: string;

@@ -273,3 +273,3 @@ default?: any;

}
export declare type SecuritySchemeType = "apiKey" | "http" | "oauth2" | "openIdConnect";
export declare type SecuritySchemeType = 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
export interface SecuritySchemeObject extends ISpecificationExtension {

@@ -276,0 +276,0 @@ type: SecuritySchemeType;

@@ -25,3 +25,3 @@ "use strict";

function isReferenceObject(obj) {
return obj.hasOwnProperty("$ref");
return obj.hasOwnProperty('$ref');
}

@@ -28,0 +28,0 @@ exports.isReferenceObject = isReferenceObject;

@@ -1,2 +0,2 @@

import * as oa from "./OpenApi";
import * as oa from './OpenApi';
export declare class Server implements oa.ServerObject {

@@ -3,0 +3,0 @@ url: string;

@@ -9,4 +9,3 @@ "use strict";

if (!SpecificationExtension.isValidExtension(extensionName)) {
throw new Error("Invalid specification extension: '" +
extensionName + "'. Extensions must start with prefix 'x-");
throw new Error(`Invalid specification extension: '${extensionName}'. Extensions must start with prefix 'x-`);
}

@@ -20,4 +19,3 @@ if (this[extensionName]) {

if (!SpecificationExtension.isValidExtension(extensionName)) {
throw new Error("Invalid specification extension: '" +
extensionName + "'. Extensions must start with prefix 'x-");
throw new Error(`Invalid specification extension: '${extensionName}'. Extensions must start with prefix 'x-`);
}

@@ -24,0 +22,0 @@ this[extensionName] = payload;

{
"name": "openapi3-ts",
"version": "2.0.0",
"version": "2.0.1",
"description": "TS Model & utils for OpenAPI 3.x specification.",

@@ -15,3 +15,4 @@ "main": "dist/index.js",

"build:w": "tsc -p tsconfig.json -w",
"lint": "tslint -c tslint.json 'src/**/*.ts'",
"lint": "eslint src/**/*.ts --quiet",
"lint:fix": "eslint src/**/*.ts --quiet --fix",
"prepare": "npm run build",

@@ -59,15 +60,20 @@ "test:tdd": "mocha --recursive --reporter min --require ts-node/register --require source-map-support/register \"src/**/*.spec.ts\" --watch",

"devDependencies": {
"@types/chai": "^4.2.12",
"@types/mocha": "^8.0.3",
"@types/node": "^14.11.1",
"@types/chai": "^4.2.14",
"@types/mocha": "~8.2.0",
"@types/node": "^14.14.17",
"@typescript-eslint/eslint-plugin": "^4.11.1",
"@typescript-eslint/parser": "^4.11.1",
"chai": "^4.2.0",
"coveralls": "^3.1.0",
"mocha": "^8.1.3",
"eslint": "^7.16.0",
"eslint-config-prettier": "^7.1.0",
"eslint-plugin-prettier": "^3.3.0",
"mocha": "~8.2.1",
"mocha-teamcity-reporter": "^3.0.0",
"nyc": "^15.1.0",
"prettier": "^2.2.1",
"rimraf": "^3.0.2",
"ts-node": "^9.0.0",
"tslint": "^6.1.3",
"ts-node": "^9.1.1",
"typescript": "3.6.5"
}
}

@@ -7,6 +7,4 @@ # OpenApi3-TS

[![Coverage Status](https://coveralls.io/repos/github/metadevpro/openapi3-ts/badge.svg?branch=master)](https://coveralls.io/github/metadevpro/openapi3-ts?branch=master)
[![Dependency Status](https://david-dm.org/metadevpro/openapi3-ts.svg)](https://david-dm.org/metadevpro/openapi3-ts)
[![Known Vulnerabilities](https://snyk.io/test/github/metadevpro/openapi3-ts/badge.svg)](https://snyk.io/test/github/metadevpro/openapi3-ts)
[![Known Vulnerabilities](https://snyk.io/test/github/metadevpro/openapi3-ts/badge.svg?targetFile=package.json)](https://snyk.io/test/github/metadevpro/openapi3-ts?targetFile=package.json)
[![npm version](https://badge.fury.io/js/openapi3-ts.svg)](http://badge.fury.io/js/openapi3-ts)
[![Greenkeeper badge](https://badges.greenkeeper.io/metadevpro/openapi3-ts.svg)](https://greenkeeper.io/)

@@ -13,0 +11,0 @@ [![NPM](https://nodei.co/npm/openapi3-ts.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/openapi3-ts/)

@@ -1,1 +0,1 @@

export * from "./OpenApiBuilder";
export * from './OpenApiBuilder';

@@ -1,13 +0,13 @@

import "mocha";
import { expect } from "chai";
import { OpenApiBuilder } from ".";
import * as oa from "../model";
import 'mocha';
import { expect } from 'chai';
import { OpenApiBuilder } from '.';
import * as oa from '../model';
describe("OpenApiBuilder", () => {
it("Build empty Spec", () => {
describe('OpenApiBuilder', () => {
it('Build empty Spec', () => {
expect(OpenApiBuilder.create().getSpec()).eql({
openapi: "3.0.0",
openapi: '3.0.0',
info: {
title: "app",
version: "version"
title: 'app',
version: 'version'
},

@@ -30,8 +30,8 @@ paths: {},

});
it("Build with custom object", () => {
it('Build with custom object', () => {
const obj: oa.OpenAPIObject = {
openapi: "3.0.0",
openapi: '3.0.0',
info: {
title: "app1",
version: "version2"
title: 'app1',
version: 'version2'
},

@@ -55,63 +55,58 @@ paths: {},

});
it("addTitle", () => {
const sut = OpenApiBuilder.create().addTitle("app7").rootDoc;
expect(sut.info.title).eql("app7");
it('addTitle', () => {
const sut = OpenApiBuilder.create().addTitle('app7').rootDoc;
expect(sut.info.title).eql('app7');
});
it("addDescription", () => {
const sut = OpenApiBuilder.create().addDescription("desc 6").rootDoc;
expect(sut.info.description).eql("desc 6");
it('addDescription', () => {
const sut = OpenApiBuilder.create().addDescription('desc 6').rootDoc;
expect(sut.info.description).eql('desc 6');
});
it("addOpenApiVersion valid", () => {
const sut = OpenApiBuilder.create().addOpenApiVersion("3.2.4").rootDoc;
expect(sut.openapi).eql("3.2.4");
it('addOpenApiVersion valid', () => {
const sut = OpenApiBuilder.create().addOpenApiVersion('3.2.4').rootDoc;
expect(sut.openapi).eql('3.2.4');
});
it("addOpenApiVersion invalid", (done) => {
it('addOpenApiVersion invalid', (done) => {
try {
OpenApiBuilder.create().addOpenApiVersion("a.b.4").rootDoc;
done("failed");
}
catch (err) {
OpenApiBuilder.create().addOpenApiVersion('a.b.4').rootDoc;
done('failed');
} catch (err) {
done();
}
});
it("addOpenApiVersion missing value", (done) => {
it('addOpenApiVersion missing value', (done) => {
try {
OpenApiBuilder.create().addOpenApiVersion(null).rootDoc;
done("failed");
}
catch (err) {
done('failed');
} catch (err) {
done();
}
});
it("addOpenApiVersion empty", (done) => {
it('addOpenApiVersion empty', (done) => {
try {
OpenApiBuilder.create().addOpenApiVersion("").rootDoc;
done("failed");
}
catch (err) {
OpenApiBuilder.create().addOpenApiVersion('').rootDoc;
done('failed');
} catch (err) {
done();
}
});
it("addOpenApiVersion null", (done) => {
it('addOpenApiVersion null', (done) => {
try {
OpenApiBuilder.create().addOpenApiVersion(null).rootDoc;
done("failed");
}
catch (err) {
done('failed');
} catch (err) {
done();
}
});
it("addOpenApiVersion lower than 3", (done) => {
it('addOpenApiVersion lower than 3', (done) => {
try {
OpenApiBuilder.create().addOpenApiVersion("2.5.6").rootDoc;
done("failed");
}
catch (err) {
OpenApiBuilder.create().addOpenApiVersion('2.5.6').rootDoc;
done('failed');
} catch (err) {
done();
}
});
it("addInfo", () => {
it('addInfo', () => {
const info: oa.InfoObject = {
title: "app9",
version: "11.34.678"
title: 'app9',
version: '11.34.678'
};

@@ -121,41 +116,41 @@ const sut = OpenApiBuilder.create().addInfo(info).rootDoc;

});
it("addTitle", () => {
const sut = OpenApiBuilder.create().addTitle("t1").rootDoc;
expect(sut.info.title).eql("t1");
it('addTitle', () => {
const sut = OpenApiBuilder.create().addTitle('t1').rootDoc;
expect(sut.info.title).eql('t1');
});
it("addDescription", () => {
const sut = OpenApiBuilder.create().addDescription("desc 2").rootDoc;
expect(sut.info.description).eql("desc 2");
it('addDescription', () => {
const sut = OpenApiBuilder.create().addDescription('desc 2').rootDoc;
expect(sut.info.description).eql('desc 2');
});
it("addTermsOfService", () => {
const sut = OpenApiBuilder.create().addTermsOfService("tos 7").rootDoc;
expect(sut.info.termsOfService).eql("tos 7");
it('addTermsOfService', () => {
const sut = OpenApiBuilder.create().addTermsOfService('tos 7').rootDoc;
expect(sut.info.termsOfService).eql('tos 7');
});
it("addLicense", () => {
it('addLicense', () => {
const sut = OpenApiBuilder.create().addLicense({
name: "MIT",
url: "http://mit.edu/license"
name: 'MIT',
url: 'http://mit.edu/license'
}).rootDoc;
expect(sut.info.license).eql({
name: "MIT",
url: "http://mit.edu/license"
name: 'MIT',
url: 'http://mit.edu/license'
});
});
it("addContact", () => {
it('addContact', () => {
const sut = OpenApiBuilder.create().addContact({
name: "Alicia",
email: "alicia@acme.com",
url: "http://acme.com/~alicia"
name: 'Alicia',
email: 'alicia@acme.com',
url: 'http://acme.com/~alicia'
}).rootDoc;
expect(sut.info.contact).eql({
name: "Alicia",
email: "alicia@acme.com",
url: "http://acme.com/~alicia"
name: 'Alicia',
email: 'alicia@acme.com',
url: 'http://acme.com/~alicia'
});
});
it("addVersion", () => {
const sut = OpenApiBuilder.create().addVersion("7.52.46").rootDoc;
expect(sut.info.version).eql("7.52.46");
it('addVersion', () => {
const sut = OpenApiBuilder.create().addVersion('7.52.46').rootDoc;
expect(sut.info.version).eql('7.52.46');
});
it("addPath", () => {
it('addPath', () => {
const path1 = {

@@ -165,3 +160,3 @@ get: {

default: {
description: "object created"
description: 'object created'
}

@@ -171,78 +166,78 @@ }

};
const sut = OpenApiBuilder.create().addPath("/path1", path1).rootDoc;
expect(sut.paths["/path1"]).eql(path1);
const sut = OpenApiBuilder.create().addPath('/path1', path1).rootDoc;
expect(sut.paths['/path1']).eql(path1);
});
it("addSchema", () => {
it('addSchema', () => {
const schema1: oa.SchemaObject = {
type: "string",
format: "email"
type: 'string',
format: 'email'
};
const sut = OpenApiBuilder.create().addSchema("schema01", schema1).rootDoc;
const sut = OpenApiBuilder.create().addSchema('schema01', schema1).rootDoc;
expect(sut.components.schemas.schema01).eql(schema1);
});
it("addSchema reference", () => {
it('addSchema reference', () => {
const schema1 = {
$ref: "#/components/schemas/id"
$ref: '#/components/schemas/id'
};
const sut = OpenApiBuilder.create().addSchema("schema01", schema1).rootDoc;
const sut = OpenApiBuilder.create().addSchema('schema01', schema1).rootDoc;
expect(sut.components.schemas.schema01).eql(schema1);
});
it("addResponse", () => {
it('addResponse', () => {
const resp00 = {
description: "object created"
description: 'object created'
};
const sut = OpenApiBuilder.create().addResponse("resp00", resp00).rootDoc;
const sut = OpenApiBuilder.create().addResponse('resp00', resp00).rootDoc;
expect(sut.components.responses.resp00).eql(resp00);
});
it("addResponse reference", () => {
it('addResponse reference', () => {
const resp00 = {
$ref: "#/components/responses/reference"
$ref: '#/components/responses/reference'
};
const sut = OpenApiBuilder.create().addResponse("resp00", resp00).rootDoc;
const sut = OpenApiBuilder.create().addResponse('resp00', resp00).rootDoc;
expect(sut.components.responses.resp00).eql(resp00);
});
it("addParameter", () => {
it('addParameter', () => {
const par5 = {
name: "id",
in: "header" as oa.ParameterLocation,
name: 'id',
in: 'header' as oa.ParameterLocation,
schema: {
$ref: "#/components/schemas/id"
$ref: '#/components/schemas/id'
}
};
const sut = OpenApiBuilder.create().addParameter("par5", par5).rootDoc;
const sut = OpenApiBuilder.create().addParameter('par5', par5).rootDoc;
expect(sut.components.parameters.par5).eql(par5);
});
it("addParameter reference", () => {
it('addParameter reference', () => {
const par5 = {
$ref: "#/components/parameters/id"
$ref: '#/components/parameters/id'
};
const sut = OpenApiBuilder.create().addParameter("par5", par5).rootDoc;
const sut = OpenApiBuilder.create().addParameter('par5', par5).rootDoc;
expect(sut.components.parameters.par5).eql(par5);
});
it("addExample", () => {
it('addExample', () => {
const example4 = {
a: "a desc",
b: "a desc"
a: 'a desc',
b: 'a desc'
};
const sut = OpenApiBuilder.create().addExample("example4", example4).rootDoc;
const sut = OpenApiBuilder.create().addExample('example4', example4).rootDoc;
expect(sut.components.examples.example4).eql(example4);
});
it("addExample reference", () => {
it('addExample reference', () => {
const example4 = {
$ref: "#/components/examples/id"
$ref: '#/components/examples/id'
};
const sut = OpenApiBuilder.create().addExample("example4", example4).rootDoc;
const sut = OpenApiBuilder.create().addExample('example4', example4).rootDoc;
expect(sut.components.examples.example4).eql(example4);
});
it("addRequestBody", () => {
it('addRequestBody', () => {
const reqBody9: oa.RequestBodyObject = {
description: "Request body details",
description: 'Request body details',
content: {
"application/json": {
"schema": {
"$ref": "#/components/schemas/User"
'application/json': {
schema: {
$ref: '#/components/schemas/User'
},
"examples": {
examples: {
user: {
"$ref": "http://foo.bar/examples/user-example.json"
$ref: 'http://foo.bar/examples/user-example.json'
}

@@ -254,56 +249,56 @@ }

};
const sut = OpenApiBuilder.create().addRequestBody("reqBody9", reqBody9).rootDoc;
const sut = OpenApiBuilder.create().addRequestBody('reqBody9', reqBody9).rootDoc;
expect(sut.components.requestBodies.reqBody9).eql(reqBody9);
});
it("addRequestBody reference", () => {
it('addRequestBody reference', () => {
const reqBody9 = {
$ref: "#/components/requestBodies/id"
$ref: '#/components/requestBodies/id'
};
const sut = OpenApiBuilder.create().addRequestBody("reqBody9", reqBody9).rootDoc;
const sut = OpenApiBuilder.create().addRequestBody('reqBody9', reqBody9).rootDoc;
expect(sut.components.requestBodies.reqBody9).eql(reqBody9);
});
it("addHeaders", () => {
it('addHeaders', () => {
const h5: oa.HeaderObject = {
description: "header 5"
description: 'header 5'
};
const sut = OpenApiBuilder.create().addHeader("h5", h5).rootDoc;
const sut = OpenApiBuilder.create().addHeader('h5', h5).rootDoc;
expect(sut.components.headers.h5).eql(h5);
});
it("addHeaders Reference", () => {
it('addHeaders Reference', () => {
const h5: oa.HeaderObject = {
$ref: "#/components/headers/id"
$ref: '#/components/headers/id'
};
const sut = OpenApiBuilder.create().addHeader("h5", h5).rootDoc;
const sut = OpenApiBuilder.create().addHeader('h5', h5).rootDoc;
expect(sut.components.headers.h5).eql(h5);
});
it("addSecuritySchemes", () => {
it('addSecuritySchemes', () => {
const sec7: oa.SecuritySchemeObject = {
type: "http",
scheme: "basic"
type: 'http',
scheme: 'basic'
};
const sut = OpenApiBuilder.create().addSecurityScheme("sec7", sec7).rootDoc;
const sut = OpenApiBuilder.create().addSecurityScheme('sec7', sec7).rootDoc;
expect(sut.components.securitySchemes.sec7).eql(sec7);
});
it("addSecuritySchemes reference", () => {
it('addSecuritySchemes reference', () => {
const sec7 = {
$ref: "#/components/securitySchemes/id"
$ref: '#/components/securitySchemes/id'
};
const sut = OpenApiBuilder.create().addSecurityScheme("sec7", sec7).rootDoc;
const sut = OpenApiBuilder.create().addSecurityScheme('sec7', sec7).rootDoc;
expect(sut.components.securitySchemes.sec7).eql(sec7);
});
it("addLink", () => {
it('addLink', () => {
const link0: oa.LinkObject = {
href: "/users/10101110/department"
href: '/users/10101110/department'
};
const sut = OpenApiBuilder.create().addLink("link0", link0).rootDoc;
const sut = OpenApiBuilder.create().addLink('link0', link0).rootDoc;
expect(sut.components.links.link0).eql(link0);
});
it("addLink reference", () => {
it('addLink reference', () => {
const link0 = {
$ref: "#/components/links/id"
$ref: '#/components/links/id'
};
const sut = OpenApiBuilder.create().addLink("link0", link0).rootDoc;
const sut = OpenApiBuilder.create().addLink('link0', link0).rootDoc;
expect(sut.components.links.link0).eql(link0);
});
it("addCallback", () => {
it('addCallback', () => {
const cb1: oa.CallbackObject = {

@@ -313,3 +308,3 @@ '$request.body#/url': {

requestBody: {
description: "Callback payload",
description: 'Callback payload',
content: {

@@ -324,4 +319,5 @@ 'application/json': {

responses: {
"200": {
description: "webhook successfully processed an no retries will be performed"
'200': {
description:
'webhook successfully processed an no retries will be performed'
}

@@ -332,17 +328,17 @@ }

};
const sut = OpenApiBuilder.create().addCallback("cb1", cb1).rootDoc;
const sut = OpenApiBuilder.create().addCallback('cb1', cb1).rootDoc;
expect(sut.components.callbacks.cb1).eql(cb1);
});
it("addCallback reference", () => {
it('addCallback reference', () => {
const cb1 = {
$ref: "#/components/callbacks/id"
$ref: '#/components/callbacks/id'
};
const sut = OpenApiBuilder.create().addCallback("cb1", cb1).rootDoc;
const sut = OpenApiBuilder.create().addCallback('cb1', cb1).rootDoc;
expect(sut.components.callbacks.cb1).eql(cb1);
});
it("addTag", () => {
it('addTag', () => {
const t1: oa.TagObject = {
name: "resource",
"x-admin": true,
description: "my own tag",
name: 'resource',
'x-admin': true,
description: 'my own tag'
};

@@ -352,6 +348,6 @@ const sut = OpenApiBuilder.create().addTag(t1).rootDoc;

});
it("addExternalDocs", () => {
it('addExternalDocs', () => {
const eDocs: oa.ExternalDocumentationObject = {
url: "https://acme.com/docs",
description: "Main doc"
url: 'https://acme.com/docs',
description: 'Main doc'
};

@@ -361,5 +357,5 @@ const sut = OpenApiBuilder.create().addExternalDocs(eDocs).rootDoc;

});
it("addServer", () => {
it('addServer', () => {
const s1: oa.ServerObject = {
url: "http://api.quixote.org",
url: 'http://api.quixote.org',
variables: {}

@@ -371,3 +367,3 @@ };

it("getPath", () => {
it('getPath', () => {
const path1 = {

@@ -377,3 +373,3 @@ get: {

default: {
description: "object created"
description: 'object created'
}

@@ -383,5 +379,3 @@ }

};
const sut = OpenApiBuilder.create()
.addPath('/service7', path1)
.rootDoc;
const sut = OpenApiBuilder.create().addPath('/service7', path1).rootDoc;
oa.addExtension(sut.paths, 'x-my-extension', 42);

@@ -392,3 +386,3 @@

});
it("get invalid Path", () => {
it('get invalid Path', () => {
const path1 = {

@@ -398,3 +392,3 @@ get: {

default: {
description: "object created"
description: 'object created'
}

@@ -404,5 +398,3 @@ }

};
const sut = OpenApiBuilder.create()
.addPath('/service7', path1)
.rootDoc;
const sut = OpenApiBuilder.create().addPath('/service7', path1).rootDoc;
oa.addExtension(sut.paths, 'x-my-extension', 42);

@@ -412,3 +404,3 @@

});
it("getExtension", () => {
it('getExtension', () => {
const path1 = {

@@ -418,3 +410,3 @@ get: {

default: {
description: "object created"
description: 'object created'
}

@@ -424,5 +416,3 @@ }

};
const sut = OpenApiBuilder.create()
.addPath('/service7', path1)
.rootDoc;
const sut = OpenApiBuilder.create().addPath('/service7', path1).rootDoc;
oa.addExtension(sut.paths, 'x-my-extension', 42);

@@ -433,3 +423,3 @@

});
it("retrieve invalid extension", () => {
it('retrieve invalid extension', () => {
const path1 = {

@@ -439,3 +429,3 @@ get: {

default: {
description: "object created"
description: 'object created'
}

@@ -445,5 +435,3 @@ }

};
const sut = OpenApiBuilder.create()
.addPath('/service7', path1)
.rootDoc;
const sut = OpenApiBuilder.create().addPath('/service7', path1).rootDoc;
oa.addExtension(sut.paths, 'x-my-extension', 42);

@@ -454,7 +442,7 @@

describe("Serialize", () => {
it("getSpecAsJson", () => {
describe('Serialize', () => {
it('getSpecAsJson', () => {
const sut = OpenApiBuilder.create()
.addTitle("app9")
.addVersion("5.6.7")
.addTitle('app9')
.addVersion('5.6.7')
.getSpecAsJson();

@@ -465,9 +453,9 @@ expect(sut).eql(

});
it("getSpecAsYaml", () => {
it('getSpecAsYaml', () => {
const sut = OpenApiBuilder.create()
.addTitle("app9")
.addVersion("5.6.7")
.addTitle('app9')
.addVersion('5.6.7')
.getSpecAsYaml();
expect(sut).eql(
"openapi: 3.0.0\ninfo:\n title: app9\n version: 5.6.7\npaths: {}\ncomponents:\n schemas: {}\n responses: {}\n parameters: {}\n examples: {}\n requestBodies: {}\n headers: {}\n securitySchemes: {}\n links: {}\n callbacks: {}\ntags: []\nservers: []\n"
'openapi: 3.0.0\ninfo:\n title: app9\n version: 5.6.7\npaths: {}\ncomponents:\n schemas: {}\n responses: {}\n parameters: {}\n examples: {}\n requestBodies: {}\n headers: {}\n securitySchemes: {}\n links: {}\n callbacks: {}\ntags: []\nservers: []\n'
);

@@ -474,0 +462,0 @@ });

@@ -1,3 +0,3 @@

import * as oa from "../model";
import * as yaml from "yaml";
import * as oa from '../model';
import * as yaml from 'yaml';

@@ -16,9 +16,9 @@ // Internal DSL for building an OpenAPI 3.0.x contract

this.rootDoc = doc || {
openapi: "3.0.0",
openapi: '3.0.0',
info: {
title: "app",
version: "version"
title: 'app',
version: 'version'
},
paths: {},
components: {
paths: {},
components: {
schemas: {},

@@ -42,4 +42,3 @@ responses: {},

}
getSpecAsJson(replacer?: (key: string, value: any ) => any,
space?: string | number): string {
getSpecAsJson(replacer?: (key: string, value: any) => any, space?: string | number): string {
return JSON.stringify(this.rootDoc, replacer, space);

@@ -53,5 +52,5 @@ }

v = v || '';
let match = /(\d+)\.(\d+).(\d+)/.exec(v);
const match = /(\d+)\.(\d+).(\d+)/.exec(v);
if (match) {
let major = parseInt(match[1], 10);
const major = parseInt(match[1], 10);
if (major >= 3) {

@@ -66,3 +65,5 @@ return true;

if (!OpenApiBuilder.isValidOpenApiVersion(openApiVersion)) {
throw new Error("Invalid OpnApi version: " + openApiVersion + ". Follow convention: 3.x.y");
throw new Error(
'Invalid OpnApi version: ' + openApiVersion + '. Follow convention: 3.x.y'
);
}

@@ -120,3 +121,6 @@ this.rootDoc.openapi = openApiVersion;

}
addRequestBody(name: string, reqBody: oa.RequestBodyObject | oa.ReferenceObject): OpenApiBuilder {
addRequestBody(
name: string,
reqBody: oa.RequestBodyObject | oa.ReferenceObject
): OpenApiBuilder {
this.rootDoc.components.requestBodies[name] = reqBody;

@@ -129,3 +133,6 @@ return this;

}
addSecurityScheme(name: string, secScheme: oa.SecuritySchemeObject | oa.ReferenceObject): OpenApiBuilder {
addSecurityScheme(
name: string,
secScheme: oa.SecuritySchemeObject | oa.ReferenceObject
): OpenApiBuilder {
this.rootDoc.components.securitySchemes[name] = secScheme;

@@ -132,0 +139,0 @@ return this;

@@ -1,19 +0,19 @@

import "mocha";
import { expect } from "chai";
import 'mocha';
import { expect } from 'chai';
import { OpenApiBuilder, Server, ServerVariable } from ".";
import { OpenApiBuilder, Server, ServerVariable } from '.';
describe("Top barrel", () => {
it("OpenApiBuilder is exported", () => {
describe('Top barrel', () => {
it('OpenApiBuilder is exported', () => {
const sut = OpenApiBuilder.create();
expect(sut).not.null;
});
it("Server is exported", () => {
const sut = new Server("a", "b");
it('Server is exported', () => {
const sut = new Server('a', 'b');
expect(sut).not.null;
});
it("ServerVariable is exported", () => {
const sut = new ServerVariable("a", "b", "c");
it('ServerVariable is exported', () => {
const sut = new ServerVariable('a', 'b', 'c');
expect(sut).not.null;
});
});
});

@@ -1,2 +0,2 @@

export * from "./model";
export * from "./dsl";
export * from './model';
export * from './dsl';

@@ -1,3 +0,3 @@

export * from "./SpecificationExtension";
export * from "./OpenApi";
export * from "./Server";
export * from './SpecificationExtension';
export * from './OpenApi';
export * from './Server';

@@ -1,4 +0,10 @@

import "mocha";
import { expect } from "chai";
import { addExtension, isSchemaObject, isReferenceObject, SchemaObject, ReferenceObject } from "./OpenApi";
import 'mocha';
import { expect } from 'chai';
import {
addExtension,
isSchemaObject,
isReferenceObject,
SchemaObject,
ReferenceObject
} from './OpenApi';

@@ -5,0 +11,0 @@ describe('type-guards unit tests', () => {

// Typed interfaces for OpenAPI 3.0.0-RC
// see https://github.com/OAI/OpenAPI-Specification/blob/3.0.0-rc0/versions/3.0.md
import { ISpecificationExtension, SpecificationExtension } from "./SpecificationExtension";
import { ISpecificationExtension, SpecificationExtension } from './SpecificationExtension';

@@ -12,3 +12,7 @@ export function getExtension(obj: ISpecificationExtension, extensionName: string): any {

}
export function addExtension(obj: ISpecificationExtension, extensionName: string, extension: any): void {
export function addExtension(
obj: ISpecificationExtension,
extensionName: string,
extension: any
): void {
if (SpecificationExtension.isValidExtension(extensionName)) {

@@ -74,3 +78,3 @@ obj[extensionName] = extension;

// [path: string]: PathItemObject;
[path: string]: PathItemObject | any; // Hack for allowing ISpecificationExtension
[path: string]: PathItemObject | any; // Hack for allowing ISpecificationExtension
}

@@ -141,9 +145,9 @@

export type ParameterStyle =
'matrix'
| 'label'
| 'form'
| 'simple'
| 'spaceDelimited'
| 'pipeDelimited'
| 'deepObject';
| 'matrix'
| 'label'
| 'form'
| 'simple'
| 'spaceDelimited'
| 'pipeDelimited'
| 'deepObject';

@@ -185,11 +189,11 @@ export interface BaseParameterObject extends ISpecificationExtension {

// [property: string]: EncodingPropertyObject;
[property: string]: EncodingPropertyObject | any; // Hack for allowing ISpecificationExtension
[property: string]: EncodingPropertyObject | any; // Hack for allowing ISpecificationExtension
}
export interface EncodingPropertyObject {
contentType?: string;
headers?: {[key: string]: HeaderObject | ReferenceObject };
headers?: { [key: string]: HeaderObject | ReferenceObject };
style?: string;
explode?: boolean;
allowReserved?: boolean;
[key: string]: any; // (any) = Hack for allowing ISpecificationExtension
[key: string]: any; // (any) = Hack for allowing ISpecificationExtension
}

@@ -200,3 +204,3 @@ export interface ResponsesObject extends ISpecificationExtension {

// [statuscode: string]: ResponseObject | ReferenceObject;
[statuscode: string]: ResponseObject | ReferenceObject | any; // (any) = Hack for allowing ISpecificationExtension
[statuscode: string]: ResponseObject | ReferenceObject | any; // (any) = Hack for allowing ISpecificationExtension
}

@@ -211,7 +215,7 @@ export interface ResponseObject extends ISpecificationExtension {

// [name: string]: CallbackObject | ReferenceObject;
[name: string]: CallbackObject | ReferenceObject | any; // Hack for allowing ISpecificationExtension
[name: string]: CallbackObject | ReferenceObject | any; // Hack for allowing ISpecificationExtension
}
export interface CallbackObject extends ISpecificationExtension {
// [name: string]: PathItemObject;
[name: string]: PathItemObject | any; // Hack for allowing ISpecificationExtension
[name: string]: PathItemObject | any; // Hack for allowing ISpecificationExtension
}

@@ -243,4 +247,4 @@ export interface HeadersObject {

}
export interface HeaderObject extends BaseParameterObject {
}
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface HeaderObject extends BaseParameterObject {}
export interface TagObject extends ISpecificationExtension {

@@ -266,4 +270,4 @@ name: string;

*/
export function isReferenceObject(obj: object): obj is ReferenceObject {
return obj.hasOwnProperty("$ref");
export function isReferenceObject(obj: any): obj is ReferenceObject {
return obj.hasOwnProperty('$ref');
}

@@ -283,3 +287,13 @@

type?: 'integer' | 'number' | 'string' | 'boolean' | 'object' | 'null' | 'array';
format?: 'int32' | 'int64' | 'float' | 'double' | 'byte' | 'binary' | 'date' | 'date-time' | 'password' | string;
format?:
| 'int32'
| 'int64'
| 'float'
| 'double'
| 'byte'
| 'binary'
| 'date'
| 'date-time'
| 'password'
| string;
allOf?: (SchemaObject | ReferenceObject)[];

@@ -290,4 +304,4 @@ oneOf?: (SchemaObject | ReferenceObject)[];

items?: SchemaObject | ReferenceObject;
properties?: {[propertyName: string]: (SchemaObject | ReferenceObject)};
additionalProperties?: (SchemaObject | ReferenceObject | boolean);
properties?: { [propertyName: string]: SchemaObject | ReferenceObject };
additionalProperties?: SchemaObject | ReferenceObject | boolean;
description?: string;

@@ -333,3 +347,3 @@ default?: any;

propertyName: string;
mapping?: {[key: string]: string };
mapping?: { [key: string]: string };
}

@@ -344,7 +358,3 @@

}
export type SecuritySchemeType =
"apiKey"
| "http"
| "oauth2"
| "openIdConnect";
export type SecuritySchemeType = 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';

@@ -354,8 +364,8 @@ export interface SecuritySchemeObject extends ISpecificationExtension {

description?: string;
name?: string; // required only for apiKey
in?: string; // required only for apiKey
scheme?: string; // required only for http
name?: string; // required only for apiKey
in?: string; // required only for apiKey
scheme?: string; // required only for http
bearerFormat?: string;
flows?: OAuthFlowsObject; // required only for oauth2
openIdConnectUrl?: string; // required only for openIdConnect
flows?: OAuthFlowsObject; // required only for oauth2
openIdConnectUrl?: string; // required only for openIdConnect
}

@@ -362,0 +372,0 @@ export interface OAuthFlowsObject extends ISpecificationExtension {

@@ -1,26 +0,26 @@

import "mocha";
import { expect } from "chai";
import { Server, ServerVariable } from "./Server";
import * as oa from "../model";
import 'mocha';
import { expect } from 'chai';
import { Server, ServerVariable } from './Server';
import * as oa from '../model';
describe("Server", () => {
it("create server", () => {
let v1 = new ServerVariable("dev", ["dev", "qa", "prod"], "environment");
let sut = new Server("http://api.qa.machine.org", "qa maquine");
sut.addVariable("environment", v1);
describe('Server', () => {
it('create server', () => {
const v1 = new ServerVariable('dev', ['dev', 'qa', 'prod'], 'environment');
const sut = new Server('http://api.qa.machine.org', 'qa maquine');
sut.addVariable('environment', v1);
expect(sut.url).eql("http://api.qa.machine.org");
expect(sut.description).eql("qa maquine");
expect(sut.variables.environment.default).eql("dev");
expect(sut.url).eql('http://api.qa.machine.org');
expect(sut.description).eql('qa maquine');
expect(sut.variables.environment.default).eql('dev');
});
});
describe("ServerVariable", () => {
it("server var", () => {
let sut = new ServerVariable("dev", ["dev", "qa", "prod"], "environment");
describe('ServerVariable', () => {
it('server var', () => {
const sut = new ServerVariable('dev', ['dev', 'qa', 'prod'], 'environment');
expect(sut.default).eql("dev");
expect(sut.description).eql("environment");
expect(sut.enum).eql(["dev", "qa", "prod"]);
expect(sut.default).eql('dev');
expect(sut.description).eql('environment');
expect(sut.enum).eql(['dev', 'qa', 'prod']);
});
});

@@ -1,2 +0,2 @@

import * as oa from "./OpenApi";
import * as oa from './OpenApi';

@@ -15,3 +15,3 @@ // Server & Server Variable

}
addVariable(name: string, variable: ServerVariable) {
addVariable(name: string, variable: ServerVariable): void {
this.variables[name] = variable;

@@ -26,5 +26,3 @@ }

constructor(defaultValue: any,
enums?: any,
description?: string) {
constructor(defaultValue: any, enums?: any, description?: string) {
this.default = defaultValue;

@@ -34,2 +32,2 @@ this.enum = enums;

}
}
}

@@ -1,57 +0,55 @@

import "mocha";
import { expect } from "chai";
import { SpecificationExtension } from "./SpecificationExtension";
import 'mocha';
import { expect } from 'chai';
import { SpecificationExtension } from './SpecificationExtension';
describe("SpecificationExtension", () => {
it("addExtension() ok", () => {
let sut = new SpecificationExtension();
let extensionValue = { payload: 5 };
sut.addExtension("x-name", extensionValue);
describe('SpecificationExtension', () => {
it('addExtension() ok', () => {
const sut = new SpecificationExtension();
const extensionValue = { payload: 5 };
sut.addExtension('x-name', extensionValue);
expect(sut["x-name"]).eql(extensionValue);
expect(sut['x-name']).eql(extensionValue);
});
it("addExtension() invalid", (done) => {
let sut = new SpecificationExtension();
let extensionValue = { payload: 5 };
it('addExtension() invalid', (done) => {
const sut = new SpecificationExtension();
const extensionValue = { payload: 5 };
try {
sut.addExtension("y-name", extensionValue);
done("Must fail. Invalid extension");
}
catch (err) {
sut.addExtension('y-name', extensionValue);
done('Must fail. Invalid extension');
} catch (err) {
done();
}
});
it("getExtension() ok", () => {
let sut = new SpecificationExtension();
let extensionValue1 = { payload: 5 };
let extensionValue2 = { payload: 6 };
sut.addExtension("x-name", extensionValue1);
sut.addExtension("x-load", extensionValue2);
it('getExtension() ok', () => {
const sut = new SpecificationExtension();
const extensionValue1 = { payload: 5 };
const extensionValue2 = { payload: 6 };
sut.addExtension('x-name', extensionValue1);
sut.addExtension('x-load', extensionValue2);
expect(sut.getExtension("x-name")).eql(extensionValue1);
expect(sut.getExtension("x-load")).eql(extensionValue2);
expect(sut.getExtension('x-name')).eql(extensionValue1);
expect(sut.getExtension('x-load')).eql(extensionValue2);
});
it("getExtension() invalid", (done) => {
let sut = new SpecificationExtension();
it('getExtension() invalid', (done) => {
const sut = new SpecificationExtension();
try {
sut.getExtension("y-name");
done("Error. invalid extension");
}
catch (err) {
sut.getExtension('y-name');
done('Error. invalid extension');
} catch (err) {
done();
}
});
it("getExtension() not found", () => {
let sut = new SpecificationExtension();
expect(sut.getExtension("x-resource")).eql(null);
it('getExtension() not found', () => {
const sut = new SpecificationExtension();
expect(sut.getExtension('x-resource')).eql(null);
});
it("listExtensions()", () => {
let sut = new SpecificationExtension();
let extensionValue1 = { payload: 5 };
let extensionValue2 = { payload: 6 };
sut.addExtension("x-name", extensionValue1);
sut.addExtension("x-load", extensionValue2);
it('listExtensions()', () => {
const sut = new SpecificationExtension();
const extensionValue1 = { payload: 5 };
const extensionValue2 = { payload: 6 };
sut.addExtension('x-name', extensionValue1);
sut.addExtension('x-load', extensionValue2);
expect(sut.listExtensions()).eql(["x-name", "x-load"]);
expect(sut.listExtensions()).eql(['x-name', 'x-load']);
});
});

@@ -16,3 +16,3 @@ // Suport for Specification Extensions

static isValidExtension(extensionName: string) {
static isValidExtension(extensionName: string): boolean {
return /^x\-/.test(extensionName);

@@ -23,4 +23,5 @@ }

if (!SpecificationExtension.isValidExtension(extensionName)) {
throw new Error("Invalid specification extension: '" +
extensionName + "'. Extensions must start with prefix 'x-");
throw new Error(
`Invalid specification extension: '${extensionName}'. Extensions must start with prefix 'x-`
);
}

@@ -34,4 +35,5 @@ if (this[extensionName]) {

if (!SpecificationExtension.isValidExtension(extensionName)) {
throw new Error("Invalid specification extension: '" +
extensionName + "'. Extensions must start with prefix 'x-");
throw new Error(
`Invalid specification extension: '${extensionName}'. Extensions must start with prefix 'x-`
);
}

@@ -51,2 +53,2 @@ this[extensionName] = payload;

}
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc