-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
specification-extension.ts
53 lines (49 loc) · 1.64 KB
/
specification-extension.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// https://github.com/metadevpro/openapi3-ts/blob/master/src/model/SpecificationExtension.ts
// Suport for Specification Extensions
// as described in
// https://github.com/OAI/OpenAPI-Specification/blob/3.0.0-rc0/versions/3.0.md#specificationExtensions
// Specification Extensions
// ^x-
export interface ISpecificationExtension {
// Cannot constraint to "^x-" but can filter them later to access to them
[extensionName: string]: any;
}
export class SpecificationExtension implements ISpecificationExtension {
// Cannot constraint to "^x-" but can filter them later to access to them
[extensionName: string]: any
static isValidExtension(extensionName: string) {
return /^x\-/.test(extensionName);
}
getExtension(extensionName: string): any {
if (!SpecificationExtension.isValidExtension(extensionName)) {
throw new Error(
"Invalid specification extension: '" + extensionName +
"'. Extensions must start with prefix 'x-",
);
}
if (this[extensionName]) {
return this[extensionName];
}
return null;
}
addExtension(extensionName: string, payload: any): void {
if (!SpecificationExtension.isValidExtension(extensionName)) {
throw new Error(
"Invalid specification extension: '" + extensionName +
"'. Extensions must start with prefix 'x-",
);
}
this[extensionName] = payload;
}
listExtensions(): string[] {
let res: string[] = [];
for (let propName in this) {
if (this.hasOwnProperty(propName)) {
if (SpecificationExtension.isValidExtension(propName)) {
res.push(propName);
}
}
}
return res;
}
}