@cyclonedx/cyclonedx-library 6.3.2 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyclonedx/cyclonedx-library",
3
- "version": "6.3.2",
3
+ "version": "6.4.0",
4
4
  "description": "Core functionality of CycloneDX for JavaScript (Node.js or WebBrowser).",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -18,9 +18,11 @@ Copyright (c) OWASP Foundation. All Rights Reserved.
18
18
  */
19
19
 
20
20
  import type { Component } from './component'
21
+ import { LicenseRepository } from './license'
21
22
  import { LifecycleRepository } from './lifecycle'
22
23
  import { OrganizationalContactRepository } from './organizationalContact'
23
24
  import type { OrganizationalEntity } from './organizationalEntity'
25
+ import { PropertyRepository } from './property'
24
26
  import { ToolRepository } from './tool'
25
27
 
26
28
  export interface OptionalMetadataProperties {
@@ -31,6 +33,8 @@ export interface OptionalMetadataProperties {
31
33
  component?: Metadata['component']
32
34
  manufacture?: Metadata['manufacture']
33
35
  supplier?: Metadata['supplier']
36
+ licenses?: Metadata['licenses']
37
+ properties?: Metadata['properties']
34
38
  }
35
39
 
36
40
  export class Metadata {
@@ -41,6 +45,8 @@ export class Metadata {
41
45
  component?: Component
42
46
  manufacture?: OrganizationalEntity
43
47
  supplier?: OrganizationalEntity
48
+ licenses: LicenseRepository
49
+ properties: PropertyRepository
44
50
 
45
51
  constructor (op: OptionalMetadataProperties = {}) {
46
52
  this.timestamp = op.timestamp
@@ -50,5 +56,7 @@ export class Metadata {
50
56
  this.component = op.component
51
57
  this.manufacture = op.manufacture
52
58
  this.supplier = op.supplier
59
+ this.licenses = op.licenses ?? new LicenseRepository()
60
+ this.properties = op.properties ?? new PropertyRepository()
53
61
  }
54
62
  }
@@ -223,7 +223,13 @@ export class MetadataNormalizer extends BaseJsonNormalizer<Models.Metadata> {
223
223
  : orgEntityNormalizer.normalize(data.manufacture, options),
224
224
  supplier: data.supplier === undefined
225
225
  ? undefined
226
- : orgEntityNormalizer.normalize(data.supplier, options)
226
+ : orgEntityNormalizer.normalize(data.supplier, options),
227
+ licenses: this._factory.spec.supportsMetadataLicenses && data.licenses.size > 0
228
+ ? this._factory.makeForLicense().normalizeIterable(data.licenses, options)
229
+ : undefined,
230
+ properties: this._factory.spec.supportsMetadataProperties && data.properties.size > 0
231
+ ? this._factory.makeForProperty().normalizeIterable(data.properties, options)
232
+ : undefined
227
233
  }
228
234
  }
229
235
  }
@@ -94,6 +94,7 @@ export namespace Normalized {
94
94
  manufacture?: OrganizationalEntity
95
95
  supplier?: OrganizationalEntity
96
96
  licenses?: License[]
97
+ properties?: Property[]
97
98
  }
98
99
 
99
100
  export interface LifecyclePhase {
@@ -246,6 +246,20 @@ export class MetadataNormalizer extends BaseXmlNormalizer<Models.Metadata> {
246
246
  children: this._factory.makeForOrganizationalContact().normalizeIterable(data.authors, options, 'author')
247
247
  }
248
248
  : undefined
249
+ const licenses: SimpleXml.Element | undefined = this._factory.spec.supportsMetadataLicenses && data.licenses.size > 0
250
+ ? {
251
+ type: 'element',
252
+ name: 'licenses',
253
+ children: this._factory.makeForLicense().normalizeIterable(data.licenses, options)
254
+ }
255
+ : undefined
256
+ const properties: SimpleXml.Element | undefined = this._factory.spec.supportsMetadataProperties && data.properties.size > 0
257
+ ? {
258
+ type: 'element',
259
+ name: 'properties',
260
+ children: this._factory.makeForProperty().normalizeIterable(data.properties, options, 'property')
261
+ }
262
+ : undefined
249
263
  return {
250
264
  type: 'element',
251
265
  name: elementName,
@@ -262,7 +276,9 @@ export class MetadataNormalizer extends BaseXmlNormalizer<Models.Metadata> {
262
276
  : orgEntityNormalizer.normalize(data.manufacture, options, 'manufacture'),
263
277
  data.supplier === undefined
264
278
  ? undefined
265
- : orgEntityNormalizer.normalize(data.supplier, options, 'supplier')
279
+ : orgEntityNormalizer.normalize(data.supplier, options, 'supplier'),
280
+ licenses,
281
+ properties
266
282
  ].filter(isNotUndefined)
267
283
  }
268
284
  }
@@ -43,6 +43,8 @@ export interface _SpecProtocol {
43
43
  supportsVulnerabilityRatingMethod: (rm: Vulnerability.RatingMethod | any) => boolean
44
44
  supportsComponentEvidence: boolean
45
45
  supportsMetadataLifecycles: boolean
46
+ supportsMetadataLicenses: boolean
47
+ supportsMetadataProperties: boolean
46
48
  supportsExternalReferenceHashes: boolean
47
49
  }
48
50
 
@@ -68,6 +70,8 @@ export class _Spec implements _SpecProtocol {
68
70
  readonly #supportsVulnerabilities: boolean
69
71
  readonly #supportsComponentEvidence: boolean
70
72
  readonly #supportsMetadataLifecycles: boolean
73
+ readonly #supportsMetadataLicenses: boolean
74
+ readonly #supportsMetadataProperties: boolean
71
75
  readonly #supportsExternalReferenceHashes: boolean
72
76
 
73
77
  constructor (
@@ -85,6 +89,8 @@ export class _Spec implements _SpecProtocol {
85
89
  vulnerabilityRatingMethods: Iterable<Vulnerability.RatingMethod>,
86
90
  supportsComponentEvidence: boolean,
87
91
  supportsMetadataLifecycles: boolean,
92
+ supportsMetadataLicenses: boolean,
93
+ supportsMetadataProperties: boolean,
88
94
  supportsExternalReferenceHashes: boolean
89
95
  ) {
90
96
  this.#version = version
@@ -101,6 +107,8 @@ export class _Spec implements _SpecProtocol {
101
107
  this.#vulnerabilityRatingMethods = new Set(vulnerabilityRatingMethods)
102
108
  this.#supportsComponentEvidence = supportsComponentEvidence
103
109
  this.#supportsMetadataLifecycles = supportsMetadataLifecycles
110
+ this.#supportsMetadataLicenses = supportsMetadataLicenses
111
+ this.#supportsMetadataProperties = supportsMetadataProperties
104
112
  this.#supportsExternalReferenceHashes = supportsExternalReferenceHashes
105
113
  }
106
114
 
@@ -167,6 +175,14 @@ export class _Spec implements _SpecProtocol {
167
175
  return this.#supportsMetadataLifecycles
168
176
  }
169
177
 
178
+ get supportsMetadataLicenses (): boolean {
179
+ return this.#supportsMetadataLicenses
180
+ }
181
+
182
+ get supportsMetadataProperties (): boolean {
183
+ return this.#supportsMetadataProperties
184
+ }
185
+
170
186
  get supportsExternalReferenceHashes (): boolean {
171
187
  return this.#supportsExternalReferenceHashes
172
188
  }
@@ -79,6 +79,8 @@ export const Spec1dot2: Readonly<_SpecProtocol> = Object.freeze(new _Spec(
79
79
  [],
80
80
  false,
81
81
  false,
82
+ false,
83
+ false,
82
84
  false
83
85
  ))
84
86
 
@@ -139,6 +141,8 @@ export const Spec1dot3: Readonly<_SpecProtocol> = Object.freeze(new _Spec(
139
141
  [],
140
142
  true,
141
143
  false,
144
+ true,
145
+ true,
142
146
  true
143
147
  ))
144
148
 
@@ -206,6 +210,8 @@ export const Spec1dot4: Readonly<_SpecProtocol> = Object.freeze(new _Spec(
206
210
  ],
207
211
  true,
208
212
  false,
213
+ true,
214
+ true,
209
215
  true
210
216
  ))
211
217
 
@@ -302,6 +308,8 @@ export const Spec1dot5: Readonly<_SpecProtocol> = Object.freeze(new _Spec(
302
308
  ],
303
309
  true,
304
310
  true,
311
+ true,
312
+ true,
305
313
  true
306
314
  ))
307
315