Skip to content

Commit 6773a6a

Browse files
committed
Merge branch 'hotfix'
2 parents 5f5892c + 4c16f6d commit 6773a6a

File tree

4 files changed

+45
-7
lines changed

4 files changed

+45
-7
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@netcracker/qubership-apihub-api-unifier",
3-
"version": "2.4.3",
3+
"version": "2.4.4",
44
"description": "Tools for JsonSchema/Openapi/GraphQL spec for unified processing",
55
"module": "./dist/index.es.js",
66
"main": "./dist/index.cjs.js",

src/resolvers/basic.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,16 @@ export const and: MergeResolver<boolean> = args => mergeResultWithSameValueOrigi
4747
export const or: MergeResolver<boolean> = args => mergeResultWithSameValueOrigins(args, args => args.reduce((r, v) => r || v, false))
4848
export const minValue: MergeResolver<number> = args => mergeResultWithSameValueOrigins(args, args => Math.min(...args))
4949
export const maxValue: MergeResolver<number> = args => mergeResultWithSameValueOrigins(args, args => Math.max(...args))
50-
export const mergePattern: MergeResolver<string> = args => mergeResultWithAllOrigins(args, (args) => args.reduce((r, v) => `${r}(?=${v})`, ''))
50+
export const mergePattern: MergeResolver<string> = args => mergeResultWithAllOrigins(args, (args) => {
51+
// Collect unique patterns and sort them for deterministic results
52+
const uniquePatterns = uniqueItems(args).sort()
53+
// If there's only one unique pattern, return it as-is
54+
if (uniquePatterns.length === 1) {
55+
return uniquePatterns[0]
56+
}
57+
// Otherwise, merge unique patterns using lookahead assertions
58+
return uniquePatterns.reduce((r, v) => `${r}(?=${v})`, '')
59+
})
5160
export const equal: MergeResolver<unknown> = args => mergeResultWithAllOrigins(args, ([one, ...others]) => others.find((v) => !deepEqual(v, one)) ? undefined : one)
5261
export const mergeObjects: MergeResolver<Jso> = args => mergeResultWithAllOrigins(args, ([one, ...others]) => others.reduce((r, v) => mergeValues(r, v), isArray(one) ? [...one] : { ...one }))
5362
export const mergeCombination: MergeResolver<unknown[]> = (args, ctx) => {

test/oas/merge.jsonschema.test.ts

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -554,8 +554,8 @@ describe('basic allOf merge cases', function () {
554554
],
555555
}, { allowNotValidSyntheticChanges: true })
556556
expect(result).toEqual({
557-
type: JSON_SCHEMA_NODE_SYNTHETIC_TYPE_NOTHING,
558-
},
557+
type: JSON_SCHEMA_NODE_SYNTHETIC_TYPE_NOTHING,
558+
},
559559
)
560560
})
561561

@@ -1268,7 +1268,7 @@ describe('basic allOf merge cases', function () {
12681268
})
12691269

12701270
expect(result).toEqual({
1271-
pattern: '(?=fdsaf)(?=abba)',
1271+
pattern: '(?=abba)(?=fdsaf)',
12721272
})
12731273

12741274
const result2 = normalize({
@@ -1284,6 +1284,35 @@ describe('basic allOf merge cases', function () {
12841284
})
12851285
})
12861286

1287+
it('merges schemas with all identical patterns in allOf to exactly the same pattern', function () {
1288+
const result = normalize({
1289+
allOf: [
1290+
{ pattern: 'abc' },
1291+
{ pattern: 'abc' },
1292+
{ pattern: 'abc' },
1293+
],
1294+
})
1295+
1296+
expect(result).toEqual({
1297+
pattern: 'abc',
1298+
})
1299+
})
1300+
1301+
it('merges schemas with several identical patterns in allOf to lookahead assertions for unique patterns', function () {
1302+
const result = normalize({
1303+
allOf: [
1304+
{ pattern: 'abc' },
1305+
{ pattern: 'abc' },
1306+
{ pattern: 'def' },
1307+
{ pattern: 'def' },
1308+
],
1309+
})
1310+
1311+
expect(result).toEqual({
1312+
pattern: '(?=abc)(?=def)',
1313+
})
1314+
})
1315+
12871316
it('merges multipleOf using allOf or direct assignment', function () {
12881317
const result = normalize({
12891318
allOf: [

0 commit comments

Comments
 (0)