Skip to content

Commit d7d54b1

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

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

src/models/tool.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@ Copyright (c) OWASP Foundation. All Rights Reserved.
1919

2020
import type { Comparable } from '../_helpers/sortable'
2121
import { SortableComparables } from '../_helpers/sortable'
22-
import {type Component, ComponentRepository} from "./component";
22+
import type { Component } from "./component";
23+
import { ComponentRepository} from "./component";
2324
import { ExternalReferenceRepository } from './externalReference'
2425
import { HashDictionary } from './hash'
26+
import type { Service } from "./service";
27+
import { ServiceRepository } from "./service";
2528

2629
export interface OptionalToolProperties {
2730
vendor?: Tool['vendor']
@@ -64,32 +67,41 @@ export class Tool implements Comparable<Tool> {
6467
externalReferences: component.externalReferences
6568
})
6669
}
70+
71+
static fromService(service: Service): Tool {
72+
return new Tool({
73+
vendor: service.group,
74+
name: service.name,
75+
version: service.version,
76+
externalReferences: service.externalReferences
77+
})
78+
}
6779
}
6880

6981
export class ToolRepository extends SortableComparables<Tool> {
7082
}
7183

7284

7385
export interface OptionalToolsProperties {
74-
components?: ComponentRepository
75-
// TODO: services
76-
tools?: ToolRepository
86+
components?: Tools['components']
87+
services?: Tools['services']
88+
tools?: Tools['tools']
7789
}
7890

7991
export class Tools {
8092
components: ComponentRepository
81-
// TODO: services
93+
services: ServiceRepository
8294
tools: ToolRepository
8395

8496
constructor(op: OptionalToolsProperties = {}) {
8597
this.components = op.components ?? new ComponentRepository()
86-
// TODO: this.services
98+
this.services = op.services ?? new ServiceRepository()
8799
this.tools = op.tools ?? new ToolRepository()
88100
}
89101

90102
get size(): number {
91103
return this.components.size
92-
// TODO: this.services
104+
+ this.services.size
93105
+ this.tools.size
94106
}
95107
}

src/serialize/json/normalize.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,13 @@ export class ToolsNormalizer extends BaseJsonNormalizer<Models.Tools> {
297297
return this._factory.makeForTool().normalizeIterable(
298298
new ToolRepository(chainI<Models.Tool>(
299299
Array.from(data.components, Tool.fromComponent),
300-
// TODO services
300+
Array.from(data.services, Tool.fromService),
301301
data.tools,
302302
)), options)
303303
}
304304
return {
305-
components: this._factory.makeForComponent().normalizeIterable(data.components, options)
306-
// TODO services
305+
components: this._factory.makeForComponent().normalizeIterable(data.components, options),
306+
services: this._factory.makeForService().normalizeIterable(data.services, options)
307307
}
308308
}
309309
}

src/serialize/json/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export namespace Normalized {
120120
/** since CDX 1.5 */
121121
export interface Tools {
122122
components: Component[]
123-
// TODO: services
123+
services: Service[]
124124
}
125125

126126
export type ToolsType = Tools | Tool[]

src/serialize/xml/normalize.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ export class ToolsNormalizer extends BaseXmlNormalizer<Models.Tools> {
380380
children = this._factory.makeForTool().normalizeIterable(
381381
new ToolRepository(chainI(
382382
Array.from(data.components, Tool.fromComponent),
383-
// TODO services
383+
Array.from(data.services, Tool.fromService),
384384
data.tools,
385385
)), options, 'tool')
386386
} else {
@@ -392,7 +392,13 @@ export class ToolsNormalizer extends BaseXmlNormalizer<Models.Tools> {
392392
children: this._factory.makeForComponent().normalizeIterable(data.components, options, 'component')
393393
})
394394
}
395-
// TODO data.services
395+
if (data.components.size > 0) {
396+
children.push({
397+
type: 'element',
398+
name: 'services',
399+
children: this._factory.makeForService().normalizeIterable(data.services, options, 'service')
400+
})
401+
}
396402
}
397403
return {
398404
type: 'element',

0 commit comments

Comments
 (0)