Skip to content

Commit 0fdccab

Browse files
refactor: rename semi-breaking changes to risky in FE code (#4)
1 parent fa9c742 commit 0fdccab

25 files changed

+282
-142
lines changed

package-lock.json

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

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@netcracker/qubership-apihub-api-processor",
3-
"version": "3.1.1-dev.0",
3+
"version": "3.1.1",
44
"description": "",
55
"license": "Apache-2.0",
66
"module": "dist/esm/src/index.js",
@@ -34,7 +34,7 @@
3434
"release-finish": "release-finish"
3535
},
3636
"dependencies": {
37-
"@netcracker/qubership-apihub-api-diff": "1.1.0",
37+
"@netcracker/qubership-apihub-api-diff": "dev",
3838
"@netcracker/qubership-apihub-api-unifier": "1.0.4",
3939
"@netcracker/qubership-apihub-json-crawl": "1.0.4",
4040
"@netcracker/qubership-apihub-graphapi": "1.0.8",
@@ -83,4 +83,4 @@
8383
"engines": {
8484
"node": ">=18.0.0"
8585
}
86-
}
86+
}

src/apitypes/rest/rest.changes.ts

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,20 @@
1616

1717
import { RestOperationData, VersionRestOperation } from './rest.types'
1818
import { areDeprecatedOriginsNotEmpty, isOperationRemove, removeComponents } from '../../utils'
19-
import { apiDiff, breaking, COMPARE_MODE_OPERATION, Diff, DiffAction, semiBreaking } from '@netcracker/qubership-apihub-api-diff'
19+
import {
20+
apiDiff,
21+
breaking,
22+
COMPARE_MODE_OPERATION,
23+
Diff,
24+
DiffAction,
25+
risky,
26+
} from '@netcracker/qubership-apihub-api-diff'
2027
import { MESSAGE_SEVERITY, NORMALIZE_OPTIONS, ORIGINS_SYMBOL } from '../../consts'
21-
import { BREAKING_CHANGE_TYPE, CompareOperationsPairContext, SEMI_BREAKING_CHANGE_TYPE } from '../../types'
28+
import {
29+
BREAKING_CHANGE_TYPE,
30+
CompareOperationsPairContext,
31+
RISKY_CHANGE_TYPE,
32+
} from '../../types'
2233
import { isObject } from '@netcracker/qubership-apihub-json-crawl'
2334
import { areDeclarationPathsEqual } from '../../utils/path'
2435
import { JSON_SCHEMA_PROPERTY_DEPRECATED, pathItemToFullPath, resolveOrigins } from '@netcracker/qubership-apihub-api-unifier'
@@ -48,7 +59,7 @@ export const compareRestOperationsData = async (current: VersionRestOperation |
4859
normalizedResult: true,
4960
beforeSource: previous?.data,
5061
afterSource: current?.data,
51-
}
62+
},
5263
)
5364
const olnyBreaking = diffResult.diffs.filter((diff) => diff.type === breaking)
5465
if (olnyBreaking.length > 0 && previous?.operationId) {
@@ -61,7 +72,7 @@ async function reclassifyBreakingChanges(
6172
operationId: string,
6273
mergedJso: unknown,
6374
diffs: Diff[],
64-
ctx: CompareOperationsPairContext
75+
ctx: CompareOperationsPairContext,
6576
): Promise<void> {
6677
if (!ctx.previousVersion || !ctx.previousPackageId) {
6778
return
@@ -71,6 +82,7 @@ async function reclassifyBreakingChanges(
7182
return
7283
}
7384
previosVersionDeprecations.operations[0]
85+
7486
const previousOperation = previosVersionDeprecations.operations[0]
7587

7688
if (!previousOperation?.deprecatedItems) { return }
@@ -82,7 +94,7 @@ async function reclassifyBreakingChanges(
8294

8395
const deprecatedInVersionsCount = previousOperation?.deprecatedInPreviousVersions?.length ?? 0
8496
if (isOperationRemove(diff) && deprecatedInVersionsCount > 1) {
85-
diff.type = semiBreaking
97+
diff.type = risky
8698
continue
8799
}
88100

@@ -93,7 +105,7 @@ async function reclassifyBreakingChanges(
93105
if (!isObject(diff.beforeNormalizedValue)) {
94106
ctx.notifications.push({
95107
severity: MESSAGE_SEVERITY.Error,
96-
message: '[Semi-breaking validation] Something wrong with beforeNormalizedValue from diff',
108+
message: '[Risky validation] Something wrong with beforeNormalizedValue from diff',
97109
})
98110
continue
99111
}
@@ -102,7 +114,7 @@ async function reclassifyBreakingChanges(
102114
if (!areDeprecatedOriginsNotEmpty(diff.beforeNormalizedValue)) {
103115
ctx.notifications.push({
104116
severity: MESSAGE_SEVERITY.Error,
105-
message: '[Semi-breaking validation] Something wrong with origins',
117+
message: '[Risky validation] Something wrong with origins',
106118
})
107119
continue
108120
}
@@ -125,16 +137,16 @@ async function reclassifyBreakingChanges(
125137
}
126138

127139
if (deprecatedItem && deprecatedItem?.deprecatedInPreviousVersions?.length > 1) {
128-
diff.type = semiBreaking
140+
diff.type = risky
129141
}
130142
}
131-
// mark removed required status of the property as semi-breaking
143+
// mark removed required status of the property as risky
132144
if (diffs.length) {
133145
const requiredProperties = findRequiredRemovedProperties(mergedJso, diffs)
134146

135147
requiredProperties?.forEach(prop => {
136-
if (prop.propDiff.type === SEMI_BREAKING_CHANGE_TYPE && prop.requiredDiff?.type === BREAKING_CHANGE_TYPE) {
137-
prop.requiredDiff.type = semiBreaking
148+
if (prop.propDiff.type === RISKY_CHANGE_TYPE && prop.requiredDiff?.type === BREAKING_CHANGE_TYPE) {
149+
prop.requiredDiff.type = risky
138150
}
139151
})
140152
}

src/builder.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
ResolvedVersionOperationsHashMap,
3131
VALIDATION_RULES_SEVERITY_LEVEL_WARNING,
3232
VersionId,
33+
VersionsComparison,
3334
} from './types'
3435
import {
3536
ApiBuilder,
@@ -46,7 +47,6 @@ import {
4647
OperationChanges,
4748
VersionCache,
4849
VersionDocument,
49-
VersionsComparisonDto,
5050
} from './types/internal'
5151
import type { NotificationMessage, PackageConfig } from './types/package'
5252
import { graphqlApiBuilder, REST_API_TYPE, restApiBuilder, textApiBuilder, unknownApiBuilder } from './apitypes'
@@ -81,7 +81,7 @@ export class PackageVersionBuilder implements IPackageVersionBuilder {
8181
apiBuilders: ApiBuilder[] = []
8282
documents = new Map<string, VersionDocument>()
8383
operations = new Map<string, ApiOperation>()
84-
comparisons: VersionsComparisonDto[] = []
84+
comparisons: VersionsComparison[] = []
8585

8686
versionsCache = new Map<string, VersionCache>()
8787
referencesCache = new Map<string, BuildConfigRef[]>()
@@ -473,7 +473,10 @@ export class PackageVersionBuilder implements IPackageVersionBuilder {
473473
return []
474474
}
475475

476-
const referencesCache: BuildConfigRef[] = Object.values(versionReferences.packages ?? {}).filter(pack => !pack.deletedAt).map(pack => ({ refId: pack.refId, version: pack.version }))
476+
const referencesCache: BuildConfigRef[] = Object.values(versionReferences.packages ?? {}).filter(pack => !pack.deletedAt).map(pack => ({
477+
refId: pack.refId,
478+
version: pack.version,
479+
}))
477480
this.referencesCache.set(compositeKey, referencesCache)
478481

479482
return referencesCache

src/components/compare/bwc.validation.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import { BREAKING_CHANGE_TYPE, OperationChanges } from '../../types'
1818
import { API_KIND } from '../../consts'
19-
import { markChangeAsSemiBreaking } from '../../utils/changes'
19+
import { markChangeAsRisky } from '../../utils/changes'
2020

2121
export function validateBwcBreakingChanges(
2222
operationChanges: OperationChanges,
@@ -31,6 +31,6 @@ export function validateBwcBreakingChanges(
3131
if (diff.type !== BREAKING_CHANGE_TYPE) {
3232
continue
3333
}
34-
markChangeAsSemiBreaking(diff, operationChanges)
34+
markChangeAsRisky(diff, operationChanges)
3535
}
3636
}

src/components/compare/compare.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,17 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { BuildConfigRef, CompareContext, VersionParams, VersionsComparison, VersionsComparisonDto } from '../../types'
17+
import { BuildConfigRef, CompareContext, VersionParams, VersionsComparison } from '../../types'
1818
import { compareVersionsOperations } from './compare.operations'
1919
import { getSplittedVersionKey } from '../../utils'
20-
import { toVersionsComparisonDto } from '../../utils/transformToDto'
21-
import { MESSAGE_SEVERITY } from '../../consts'
2220
import { asyncDebugPerformance, DebugPerformanceContext } from '../../utils/logs'
2321

2422
export async function compareVersions(
2523
prev: VersionParams,
2624
curr: VersionParams,
2725
ctx: CompareContext,
2826
debugCtx?: DebugPerformanceContext,
29-
): Promise<VersionsComparisonDto[]> {
27+
): Promise<VersionsComparison[]> {
3028
let comparisons: VersionsComparison[] = []
3129
await asyncDebugPerformance('[CompareVersions]', async (versionsDebugContext) => {
3230
comparisons = await compareVersionsReferences(prev, curr, ctx)
@@ -37,14 +35,7 @@ export async function compareVersions(
3735
))
3836
}, debugCtx, prev ? [prev[1], prev[0]] : ['empty previous id', 'empty previous version'])
3937

40-
const logError = (message: string): void => {
41-
ctx.notifications.push({
42-
severity: MESSAGE_SEVERITY.Error,
43-
message: message,
44-
})
45-
}
46-
47-
return comparisons.map(comparison => toVersionsComparisonDto(comparison, logError))
38+
return comparisons
4839
}
4940

5041
export async function compareVersionsReferences(

src/components/package.ts

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
import JSZip from 'jszip'
1818
import { version } from '../../package.json'
1919

20-
import type {
20+
import {
2121
ApiOperation,
2222
BuilderContext,
23-
BuildResult,
23+
BuildResultDto,
2424
PackageComparison,
2525
PackageComparisonOperations,
2626
PackageComparisons,
@@ -30,10 +30,12 @@ import type {
3030
PackageOperation,
3131
PackageOperations,
3232
VersionDocument,
33+
BuildResult,
3334
} from '../types'
3435
import { unknownApiBuilder } from '../apitypes'
35-
import { PACKAGE } from '../consts'
36+
import { MESSAGE_SEVERITY, PACKAGE } from '../consts'
3637
import { takeIf, toPackageDocument } from '../utils'
38+
import { toVersionsComparisonDto } from '../utils/transformToDto'
3739

3840
export interface ZipTool {
3941
// todo method should only accept Blob content, transformation is not a responsibility of this method
@@ -48,30 +50,41 @@ export const createVersionPackage = async (
4850
ctx: BuilderContext,
4951
options?: JSZip.JSZipGeneratorOptions,
5052
): Promise<any> => {
51-
await createInfoFile(zip, buildResult.config)
53+
const logError = (message: string): void => {
54+
ctx.notifications.push({
55+
severity: MESSAGE_SEVERITY.Error,
56+
message: message,
57+
})
58+
}
59+
const buildResultDto: BuildResultDto = {
60+
...buildResult,
61+
comparisons: buildResult.comparisons.map(comparison => toVersionsComparisonDto(comparison, logError)),
62+
}
63+
64+
await createInfoFile(zip, buildResultDto.config)
5265

53-
const documents = buildResult.merged ? [buildResult.merged] : [...buildResult.documents.values()]
66+
const documents = buildResultDto.merged ? [buildResultDto.merged] : [...buildResultDto.documents.values()]
5467

5568
createDocumentsFile(zip, documents)
5669
await createDocumentDataFiles(zip, documents, ctx)
5770

58-
createOperationsFile(zip, buildResult.operations)
71+
createOperationsFile(zip, buildResultDto.operations)
5972
const operationsDir = zip.folder(PACKAGE.OPERATIONS_DIR_NAME)!
60-
for (const { data, operationId } of buildResult.operations.values()) {
73+
for (const { data, operationId } of buildResultDto.operations.values()) {
6174
createOperationDataFile(operationsDir, operationId, data)
6275
}
6376

64-
if (buildResult.comparisons.length) {
65-
const comparisons: PackageComparison[] = buildResult.comparisons.map(({ data, ...rest }) => rest)
77+
if (buildResultDto.comparisons.length) {
78+
const comparisons: PackageComparison[] = buildResultDto.comparisons.map(({ data, ...rest }) => rest)
6679
createComparisonsFile(zip, { comparisons })
6780
const comparisonsDir = zip.folder(PACKAGE.COMPARISONS_DIR_NAME)
6881

69-
for (const comparison of buildResult.comparisons) {
82+
for (const comparison of buildResultDto.comparisons) {
7083
if (!comparison.comparisonFileId || !comparison.data) { continue }
7184
createComparisonDataFile(comparisonsDir!, comparison.comparisonFileId, { operations: comparison.data })
7285
}
7386
}
74-
createNotificationsFile(zip, { notifications: buildResult.notifications })
87+
createNotificationsFile(zip, { notifications: buildResultDto.notifications })
7588

7689
return await zip.buildResult(options)
7790
}

src/consts.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121
ChangeSummary,
2222
DEPRECATED_CHANGE_TYPE,
2323
NON_BREAKING_CHANGE_TYPE,
24-
SEMI_BREAKING_CHANGE_TYPE,
24+
RISKY_CHANGE_TYPE, SEMI_BREAKING_CHANGE_TYPE,
2525
UNCLASSIFIED_CHANGE_TYPE,
2626
VALIDATION_RULES_SEVERITY_LEVEL_WARNING,
2727
ValidationRulesSeverity,
@@ -138,6 +138,15 @@ export const NORMALIZE_OPTIONS: NormalizeOptions = {
138138
}
139139

140140
export const EMPTY_CHANGE_SUMMARY: ChangeSummary = {
141+
[BREAKING_CHANGE_TYPE]: 0,
142+
[NON_BREAKING_CHANGE_TYPE]: 0,
143+
[RISKY_CHANGE_TYPE]: 0,
144+
[DEPRECATED_CHANGE_TYPE]: 0,
145+
[ANNOTATION_CHANGE_TYPE]: 0,
146+
[UNCLASSIFIED_CHANGE_TYPE]: 0,
147+
}
148+
149+
export const EMPTY_CHANGE_SUMMARY_DTO = {
141150
[BREAKING_CHANGE_TYPE]: 0,
142151
[NON_BREAKING_CHANGE_TYPE]: 0,
143152
[SEMI_BREAKING_CHANGE_TYPE]: 0,

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ export * from './components'
2121
export * from './consts'
2222
export * from './types'
2323
export { calculateChangeId, calculateDiffId, calculateImpactedSummary, convertToSlug, removeComponents } from './utils'
24+
export { convertDtoFieldOperationTypes, replacePropertyInChangesSummary } from './utils/transformToDto'

0 commit comments

Comments
 (0)