Skip to content

Commit 725ecce

Browse files
committed
fix(namespaces): fix duplicates in mixed fields visitor
1 parent 13ec21c commit 725ecce

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

apidom/packages/@types/minim.d.ts

+4
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ declare module 'minim' {
112112
export class ObjectElement extends ArrayElement {
113113
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes);
114114

115+
remove(name: string): Element;
116+
115117
set(key: string | StringElement | number, value: any): ObjectElement;
116118

117119
hasKey(value: string): boolean;
@@ -128,6 +130,8 @@ declare module 'minim' {
128130
callback: (value: Element, key: Element, member: MemberElement) => MemberElement,
129131
thisArg?: unknown,
130132
): Array<MemberElement>;
133+
134+
keys(): unknown[];
131135
}
132136

133137
export class MemberElement extends Element {

apidom/packages/apidom-ns-asyncapi-2-0/src/refractor/visitors/generics/MixedFieldsVisitor.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import stampit from 'stampit';
2+
import { difference } from 'ramda';
23
import { noop } from 'ramda-adjunct';
34
import { ObjectElement, BREAK } from 'apidom';
45

@@ -12,14 +13,18 @@ const MixedFieldsVisitor = stampit(FixedFieldsVisitor, PatternedFieldsVisitor, {
1213
},
1314
methods: {
1415
ObjectElement(objectElement: ObjectElement) {
15-
const { specPath } = this;
16+
const { specPath, ignoredFields } = this;
1617

1718
try {
1819
this.specPath = this.specPathFixedFields;
20+
const fixedFields = this.retrieveFixedFields(this.specPath(objectElement));
21+
// let FixedFieldsVisitor only process fixed fields and leave rest to PatternedFieldsVisitor
22+
this.ignoredFields = [...ignoredFields, ...difference(objectElement.keys(), fixedFields)];
1923
// @ts-ignore
2024
FixedFieldsVisitor.compose.methods.ObjectElement.call(this, objectElement);
2125

2226
this.specPath = this.specPathPatternedFields;
27+
this.ignoredFields = ignoredFields;
2328
// @ts-ignore
2429
PatternedFieldsVisitor.compose.methods.ObjectElement.call(this, objectElement);
2530
} catch (e) {

apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/generics/MixedFieldsVisitor.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import stampit from 'stampit';
2+
import { difference } from 'ramda';
23
import { noop } from 'ramda-adjunct';
34
import { ObjectElement, BREAK } from 'apidom';
45

@@ -12,14 +13,18 @@ const MixedFieldsVisitor = stampit(FixedFieldsVisitor, PatternedFieldsVisitor, {
1213
},
1314
methods: {
1415
ObjectElement(objectElement: ObjectElement) {
15-
const { specPath } = this;
16+
const { specPath, ignoredFields } = this;
1617

1718
try {
1819
this.specPath = this.specPathFixedFields;
20+
const fixedFields = this.retrieveFixedFields(this.specPath(objectElement));
21+
// let FixedFieldsVisitor only process fixed fields and leave rest to PatternedFieldsVisitor
22+
this.ignoredFields = [...ignoredFields, ...difference(objectElement.keys(), fixedFields)];
1923
// @ts-ignore
2024
FixedFieldsVisitor.compose.methods.ObjectElement.call(this, objectElement);
2125

2226
this.specPath = this.specPathPatternedFields;
27+
this.ignoredFields = ignoredFields;
2328
// @ts-ignore
2429
PatternedFieldsVisitor.compose.methods.ObjectElement.call(this, objectElement);
2530
} catch (e) {

0 commit comments

Comments
 (0)