Skip to content

Commit e2e0390

Browse files
committed
wip
Signed-off-by: Jan Kowalleck <[email protected]>
1 parent 9d6fd34 commit e2e0390

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

src/models/bom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ Copyright (c) OWASP Foundation. All Rights Reserved.
2020
import type { PositiveInteger } from '../types/integer'
2121
import { isPositiveInteger } from '../types/integer'
2222
import { ComponentRepository } from './component'
23-
import { ServiceRepository } from './service'
2423
import { Metadata } from './metadata'
24+
import { ServiceRepository } from './service'
2525
import { VulnerabilityRepository } from './vulnerability/vulnerability'
2626

2727
export interface OptionalBomProperties {

src/serialize/json/normalize.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ export class Factory {
5656
return new ComponentNormalizer(this)
5757
}
5858

59+
makeForService (): ServiceNormalizer {
60+
return new ServiceNormalizer(this)
61+
}
62+
5963
makeForComponentEvidence (): ComponentEvidenceNormalizer {
6064
return new ComponentEvidenceNormalizer(this)
6165
}
@@ -189,6 +193,9 @@ export class BomNormalizer extends BaseJsonNormalizer<Models.Bom> {
189193
? this._factory.makeForComponent().normalizeIterable(data.components, options)
190194
// spec < 1.4 requires `component` to be array
191195
: [],
196+
services: this._factory.spec.supportsServices && data.services.size > 0
197+
? this._factory.makeForService().normalizeIterable(data.services, options)
198+
: undefined,
192199
dependencies: this._factory.spec.supportsDependencyGraph
193200
? this._factory.makeForDependencyGraph().normalize(data, options)
194201
: undefined,
@@ -406,6 +413,10 @@ export class ComponentNormalizer extends BaseJsonNormalizer<Models.Component> {
406413
}
407414
}
408415

416+
export class ServiceNormalizer extends BaseJsonNormalizer<Models.Service> {
417+
// TODO
418+
}
419+
409420
export class ComponentEvidenceNormalizer extends BaseJsonNormalizer<Models.ComponentEvidence> {
410421
normalize (data: Models.ComponentEvidence, options: NormalizerOptions): Normalized.ComponentEvidence {
411422
return {

src/serialize/json/types.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export namespace Normalized {
8080
serialNumber?: string
8181
metadata?: Metadata
8282
components?: Component[]
83+
services?: Service[]
8384
externalReferences?: ExternalReference[]
8485
dependencies?: Dependency[]
8586
vulnerabilities?: Vulnerability[]
@@ -158,6 +159,18 @@ export namespace Normalized {
158159
properties?: Property[]
159160
}
160161

162+
export interface Service {
163+
'bom-ref'?: RefType
164+
provider?: OrganizationalEntity
165+
group?: string
166+
name: string
167+
version?: string
168+
description?: string
169+
externalReferences?: ExternalReference[]
170+
services?: Service[]
171+
properties?: Property[]
172+
}
173+
161174
export interface ComponentEvidence {
162175
licenses?: License[]
163176
copyright?: Copyright[]

src/serialize/xml/normalize.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ export class Factory {
6161
return new ComponentNormalizer(this)
6262
}
6363

64+
makeForService (): ServiceNormalizer {
65+
return new ServiceNormalizer(this)
66+
}
67+
68+
69+
6470
makeForComponentEvidence (): ComponentEvidenceNormalizer {
6571
return new ComponentEvidenceNormalizer(this)
6672
}
@@ -189,6 +195,13 @@ export class BomNormalizer extends BaseXmlNormalizer<Models.Bom> {
189195
? this._factory.makeForComponent().normalizeIterable(data.components, options, 'component')
190196
: undefined
191197
}
198+
const services: SimpleXml.Element | undefined = this._factory.spec.supportsServices && data.services.size > 0
199+
? {
200+
type: 'element',
201+
name: 'services',
202+
children: this._factory.makeForService().normalizeIterable(data.services, options, 'service')
203+
}
204+
: undefined
192205
const vulnerabilities: SimpleXml.Element | undefined = this._factory.spec.supportsVulnerabilities && data.vulnerabilities.size > 0
193206
? {
194207
type: 'element',
@@ -212,6 +225,7 @@ export class BomNormalizer extends BaseXmlNormalizer<Models.Bom> {
212225
? this._factory.makeForMetadata().normalize(data.metadata, options, 'metadata')
213226
: undefined,
214227
components,
228+
services,
215229
this._factory.spec.supportsDependencyGraph
216230
? this._factory.makeForDependencyGraph().normalize(data, options, 'dependencies')
217231
: undefined,
@@ -528,6 +542,11 @@ export class ComponentNormalizer extends BaseXmlNormalizer<Models.Component> {
528542
}
529543
}
530544

545+
export class ServiceNormalizer extends BaseXmlNormalizer<Models.Service> {
546+
//TODO
547+
}
548+
549+
531550
export class ComponentEvidenceNormalizer extends BaseXmlNormalizer<Models.ComponentEvidence> {
532551
normalize (data: Models.ComponentEvidence, options: NormalizerOptions, elementName: string): SimpleXml.Element {
533552
const licenses: SimpleXml.Element | undefined = data.licenses.size > 0

0 commit comments

Comments
 (0)