Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Attributes, Meta, ObjectElement, StringElement } from 'minim';

class Discriminator extends ObjectElement {
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
super(content, meta, attributes);
this.element = 'discriminator';
}

get propertyName(): StringElement {
return this.get('propertyName');
}

set propertyName(propertyName: StringElement) {
this.set('propertyName', propertyName);
}

get mapping(): ObjectElement {
return this.get('mapping');
}

set mapping(mapping: ObjectElement) {
this.set('mapping', mapping);
}
}

export default Discriminator;
1 change: 1 addition & 0 deletions apidom/packages/apidom-ns-openapi-3-1/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export { keyMap, getNodeType } from './traversal/visitor';
export { default as CallbackElement } from './elements/Callback';
export { default as ComponentsElement } from './elements/Components';
export { default as ContactElement } from './elements/Contact';
export { default as DiscriminatorElement } from './elements/Discriminator';
export { default as ExternalDocumentationElement } from './elements/ExternalDocumentation';
export { default as InfoElement } from './elements/Info';
export { default as JsonSchemaDialectVisitor } from './elements/JsonSchemaDialect';
Expand Down
2 changes: 2 additions & 0 deletions apidom/packages/apidom-ns-openapi-3-1/src/namespace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { NamespacePluginOptions } from 'minim';
import CallbackElement from './elements/Callback';
import ComponentsElement from './elements/Components';
import ContactElement from './elements/Contact';
import DiscriminatorElement from './elements/Discriminator';
import ExternalDocumentationElement from './elements/ExternalDocumentation';
import InfoElement from './elements/Info';
import JsonSchemaDialectElement from './elements/JsonSchemaDialect';
Expand Down Expand Up @@ -30,6 +31,7 @@ const openApi3_1 = {
base.register('callback', CallbackElement);
base.register('components', ComponentsElement);
base.register('contact', ContactElement);
base.register('discriminator', DiscriminatorElement);
base.register('externalDocumentation', ExternalDocumentationElement);
base.register('info', InfoElement);
base.register('jsonSchemaDialect', JsonSchemaDialectElement);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import CallbackElement from '../elements/Callback';
import ComponentsElement from '../elements/Components';
import ContactElement from '../elements/Contact';
import DiscriminatorElement from '../elements/Discriminator';
import ExternalDocumentationElement from '../elements/ExternalDocumentation';
import InfoElement from '../elements/Info';
import JsonSchemaDialectElement from '../elements/JsonSchemaDialect';
Expand Down Expand Up @@ -43,6 +44,13 @@ ContactElement.refract = createRefractor([
'Contact',
'$visitor',
]);
DiscriminatorElement.refract = createRefractor([
'visitors',
'document',
'objects',
'Discriminator',
'$visitor',
]);
ExternalDocumentationElement.refract = createRefractor([
'visitors',
'document',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ import ParameterStyleVisitor from './visitors/open-api-3-1/parameter/StyleVisito
import ParameterExplodeVisitor from './visitors/open-api-3-1/parameter/ExplodeVisitor';
import ParameterAllowReservedVisitor from './visitors/open-api-3-1/parameter/AllowReservedVisitor';
import SchemaVisitor from './visitors/open-api-3-1/schema';
import DiscriminatorVisitor from './visitors/open-api-3-1/distriminator';
import DiscriminatorPropertyNameVisitor from './visitors/open-api-3-1/distriminator/PropertyNameVisitor';
import DiscriminatorMappingVisitor from './visitors/open-api-3-1/distriminator/MappingVisitor';
import ParameterExampleVisitor from './visitors/open-api-3-1/parameter/ExampleVisitor';
import ExamplesVisitor from './visitors/open-api-3-1/ExamplesVisitor';
import ContentVisitor from './visitors/open-api-3-1/ContentVisitor';
Expand Down Expand Up @@ -282,6 +285,13 @@ const specification = {
Schema: {
$visitor: SchemaVisitor,
},
Discriminator: {
$visitor: DiscriminatorVisitor,
fixedFields: {
propertyName: DiscriminatorPropertyNameVisitor,
mapping: DiscriminatorMappingVisitor,
},
},
SecurityRequirement: {
$visitor: SecurityRequirementVisitor,
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import stampit from 'stampit';
import { always } from 'ramda';
import { ObjectElement } from 'apidom';

import MapVisitor from '../../generics/MapVisitor';
import FallbackVisitor from '../../FallbackVisitor';
import { appendMetadata } from '../../../metadata';

const MappingVisitor = stampit(MapVisitor, FallbackVisitor, {
props: {
specPath: always(['value']),
},
init() {
this.element = new ObjectElement();
appendMetadata(['mapping'], this.element);
},
});

export default MappingVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const PropertyNameVisitor = stampit(FallbackVisitor);

export default PropertyNameVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import stampit from 'stampit';
import { always } from 'ramda';

import DiscriminatorElement from '../../../../elements/Discriminator';
import FallbackVisitor from '../../FallbackVisitor';
import FixedFieldsVisitor from '../../generics/FixedFieldsVisitor';

const DiscriminatorVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, {
props: {
specPath: always(['document', 'objects', 'Discriminator']),
canSupportSpecificationExtensions: true,
},
init() {
this.element = new DiscriminatorElement();
},
});

export default DiscriminatorVisitor;
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export const keyMap = {
CallbackElement: ['content'],
ComponentsElement: ['content'],
ContactElement: ['content'],
DiscriminatorElement: ['content'],
ExternalDocumentationElement: ['content'],
InfoElement: ['content'],
LicenseElement: ['content'],
Expand Down