@cyclonedx/cyclonedx-library 1.0.2 → 1.2.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/README.md +2 -1
- package/dist.node/builders/{fromPackageJson.node.js → fromNodePackageJson.node.js} +10 -1
- package/dist.node/builders/fromNodePackageJson.node.js.map +1 -0
- package/dist.node/builders/index.node.js +3 -2
- package/dist.node/builders/index.node.js.map +1 -1
- package/dist.node/factories/{fromPackageJson.node.js → fromNodePackageJson.node.js} +1 -1
- package/dist.node/factories/fromNodePackageJson.node.js.map +1 -0
- package/dist.node/factories/index.node.js +3 -2
- package/dist.node/factories/index.node.js.map +1 -1
- package/dist.node/factories/packageUrl.js +17 -5
- package/dist.node/factories/packageUrl.js.map +1 -1
- package/dist.node/helpers/tree.js +23 -0
- package/dist.node/helpers/tree.js.map +1 -0
- package/dist.node/models/component.js +8 -0
- package/dist.node/models/component.js.map +1 -1
- package/dist.node/serialize/bomRefDiscriminator.js +3 -0
- package/dist.node/serialize/bomRefDiscriminator.js.map +1 -1
- package/dist.node/serialize/json/normalize.js +18 -4
- package/dist.node/serialize/json/normalize.js.map +1 -1
- package/dist.node/serialize/jsonSerializer.js +3 -0
- package/dist.node/serialize/jsonSerializer.js.map +1 -1
- package/dist.node/serialize/xml/normalize.js +24 -5
- package/dist.node/serialize/xml/normalize.js.map +1 -1
- package/dist.node/serialize/xmlBaseSerializer.js +3 -0
- package/dist.node/serialize/xmlBaseSerializer.js.map +1 -1
- package/dist.node/spec.js +11 -6
- package/dist.node/spec.js.map +1 -1
- package/dist.node/types/cpe.js +1 -1
- package/dist.node/types/cpe.js.map +1 -1
- package/dist.web/lib.dev.js +120 -21
- package/dist.web/lib.dev.js.map +1 -1
- package/dist.web/lib.js +1 -1
- package/package.json +4 -2
- package/src/builders/{fromPackageJson.node.ts → fromNodePackageJson.node.ts} +16 -4
- package/src/builders/index.node.ts +4 -1
- package/src/factories/{fromPackageJson.node.ts → fromNodePackageJson.node.ts} +0 -0
- package/src/factories/index.node.ts +4 -1
- package/src/factories/packageUrl.ts +31 -8
- package/src/helpers/tree.ts +20 -0
- package/src/models/component.ts +10 -0
- package/src/serialize/bomRefDiscriminator.ts +5 -0
- package/src/serialize/json/normalize.ts +19 -5
- package/src/serialize/jsonSerializer.ts +4 -0
- package/src/serialize/xml/normalize.ts +30 -9
- package/src/serialize/xmlBaseSerializer.ts +4 -0
- package/src/spec.ts +16 -4
- package/src/types/cpe.ts +2 -2
- package/dist.node/builders/fromPackageJson.node.js.map +0 -1
- package/dist.node/factories/fromPackageJson.node.js.map +0 -1
|
@@ -23,6 +23,7 @@ import * as Models from '../../models'
|
|
|
23
23
|
import { Protocol as Spec, Version as SpecVersion } from '../../spec'
|
|
24
24
|
import { NormalizerOptions } from '../types'
|
|
25
25
|
import { JsonSchema, Normalized } from './types'
|
|
26
|
+
import { treeIterator } from '../../helpers/tree'
|
|
26
27
|
|
|
27
28
|
export class Factory {
|
|
28
29
|
readonly #spec: Spec
|
|
@@ -103,6 +104,10 @@ abstract class Base implements Normalizer {
|
|
|
103
104
|
this._factory = factory
|
|
104
105
|
}
|
|
105
106
|
|
|
107
|
+
get factory (): Factory {
|
|
108
|
+
return this._factory
|
|
109
|
+
}
|
|
110
|
+
|
|
106
111
|
abstract normalize (data: object, options: NormalizerOptions): object | undefined
|
|
107
112
|
}
|
|
108
113
|
|
|
@@ -238,13 +243,16 @@ export class OrganizationalEntityNormalizer extends Base {
|
|
|
238
243
|
|
|
239
244
|
export class ComponentNormalizer extends Base {
|
|
240
245
|
normalize (data: Models.Component, options: NormalizerOptions): Normalized.Component | undefined {
|
|
241
|
-
|
|
246
|
+
const spec = this._factory.spec
|
|
247
|
+
const version: string = data.version ?? ''
|
|
248
|
+
return spec.supportsComponentType(data.type)
|
|
242
249
|
? {
|
|
243
250
|
type: data.type,
|
|
244
251
|
name: data.name,
|
|
245
252
|
group: data.group || undefined,
|
|
246
|
-
|
|
247
|
-
|
|
253
|
+
version: version.length > 0 || spec.requiresComponentVersion
|
|
254
|
+
? version
|
|
255
|
+
: undefined,
|
|
248
256
|
'bom-ref': data.bomRef.value || undefined,
|
|
249
257
|
supplier: data.supplier === undefined
|
|
250
258
|
? undefined
|
|
@@ -267,6 +275,9 @@ export class ComponentNormalizer extends Base {
|
|
|
267
275
|
: this._factory.makeForSWID().normalize(data.swid, options),
|
|
268
276
|
externalReferences: data.externalReferences.size > 0
|
|
269
277
|
? this._factory.makeForExternalReference().normalizeRepository(data.externalReferences, options)
|
|
278
|
+
: undefined,
|
|
279
|
+
components: data.components.size > 0
|
|
280
|
+
? this.normalizeRepository(data.components, options)
|
|
270
281
|
: undefined
|
|
271
282
|
}
|
|
272
283
|
: undefined
|
|
@@ -391,9 +402,12 @@ export class DependencyGraphNormalizer extends Base {
|
|
|
391
402
|
const allRefs = new Map<Models.BomRef, Models.BomRefRepository>()
|
|
392
403
|
if (data.metadata.component !== undefined) {
|
|
393
404
|
allRefs.set(data.metadata.component.bomRef, data.metadata.component.dependencies)
|
|
405
|
+
for (const component of data.metadata.component.components[treeIterator]()) {
|
|
406
|
+
allRefs.set(component.bomRef, component.dependencies)
|
|
407
|
+
}
|
|
394
408
|
}
|
|
395
|
-
for (const
|
|
396
|
-
allRefs.set(
|
|
409
|
+
for (const component of data.components[treeIterator]()) {
|
|
410
|
+
allRefs.set(component.bomRef, component.dependencies)
|
|
397
411
|
}
|
|
398
412
|
|
|
399
413
|
const normalized: Normalized.Dependency[] = []
|
|
@@ -42,6 +42,10 @@ export class JsonSerializer extends BaseSerializer<Normalized.Bom> {
|
|
|
42
42
|
this.#normalizerFactory = normalizerFactory
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
get normalizerFactory (): NormalizerFactory {
|
|
46
|
+
return this.#normalizerFactory
|
|
47
|
+
}
|
|
48
|
+
|
|
45
49
|
protected _normalize (
|
|
46
50
|
bom: Bom,
|
|
47
51
|
options: NormalizerOptions = {}
|
|
@@ -23,6 +23,7 @@ import * as Models from '../../models'
|
|
|
23
23
|
import { Protocol as Spec, Version as SpecVersion } from '../../spec'
|
|
24
24
|
import { NormalizerOptions } from '../types'
|
|
25
25
|
import { SimpleXml, XmlSchema } from './types'
|
|
26
|
+
import { treeIterator } from '../../helpers/tree'
|
|
26
27
|
|
|
27
28
|
export class Factory {
|
|
28
29
|
readonly #spec: Spec
|
|
@@ -103,6 +104,10 @@ abstract class Base implements Normalizer {
|
|
|
103
104
|
this._factory = factory
|
|
104
105
|
}
|
|
105
106
|
|
|
107
|
+
get factory (): Factory {
|
|
108
|
+
return this._factory
|
|
109
|
+
}
|
|
110
|
+
|
|
106
111
|
/**
|
|
107
112
|
* @param {*} data
|
|
108
113
|
* @param {NormalizerOptions} options
|
|
@@ -295,12 +300,21 @@ export class OrganizationalEntityNormalizer extends Base {
|
|
|
295
300
|
|
|
296
301
|
export class ComponentNormalizer extends Base {
|
|
297
302
|
normalize (data: Models.Component, options: NormalizerOptions, elementName: string): SimpleXml.Element | undefined {
|
|
298
|
-
|
|
303
|
+
const spec = this._factory.spec
|
|
304
|
+
if (!spec.supportsComponentType(data.type)) {
|
|
299
305
|
return undefined
|
|
300
306
|
}
|
|
301
307
|
const supplier: SimpleXml.Element | undefined = data.supplier === undefined
|
|
302
308
|
? undefined
|
|
303
309
|
: this._factory.makeForOrganizationalEntity().normalize(data.supplier, options, 'supplier')
|
|
310
|
+
const version: SimpleXml.Element | undefined = (
|
|
311
|
+
spec.requiresComponentVersion
|
|
312
|
+
? makeTextElement
|
|
313
|
+
: makeOptionalTextElement
|
|
314
|
+
)(
|
|
315
|
+
data.version ?? '',
|
|
316
|
+
'version'
|
|
317
|
+
)
|
|
304
318
|
const hashes: SimpleXml.Element | undefined = data.hashes.size > 0
|
|
305
319
|
? {
|
|
306
320
|
type: 'element',
|
|
@@ -326,6 +340,13 @@ export class ComponentNormalizer extends Base {
|
|
|
326
340
|
.normalizeRepository(data.externalReferences, options, 'reference')
|
|
327
341
|
}
|
|
328
342
|
: undefined
|
|
343
|
+
const components: SimpleXml.Element | undefined = data.components.size > 0
|
|
344
|
+
? {
|
|
345
|
+
type: 'element',
|
|
346
|
+
name: 'components',
|
|
347
|
+
children: this.normalizeRepository(data.components, options, 'component')
|
|
348
|
+
}
|
|
349
|
+
: undefined
|
|
329
350
|
return {
|
|
330
351
|
type: 'element',
|
|
331
352
|
name: elementName,
|
|
@@ -339,11 +360,7 @@ export class ComponentNormalizer extends Base {
|
|
|
339
360
|
makeOptionalTextElement(data.publisher, 'publisher'),
|
|
340
361
|
makeOptionalTextElement(data.group, 'group'),
|
|
341
362
|
makeTextElement(data.name, 'name'),
|
|
342
|
-
|
|
343
|
-
// version fallback to string for spec < 1.4
|
|
344
|
-
data.version ?? '',
|
|
345
|
-
'version'
|
|
346
|
-
),
|
|
363
|
+
version,
|
|
347
364
|
makeOptionalTextElement(data.description, 'description'),
|
|
348
365
|
makeOptionalTextElement(data.scope, 'scope'),
|
|
349
366
|
hashes,
|
|
@@ -352,7 +369,8 @@ export class ComponentNormalizer extends Base {
|
|
|
352
369
|
makeOptionalTextElement(data.cpe, 'cpe'),
|
|
353
370
|
makeOptionalTextElement(data.purl, 'purl'),
|
|
354
371
|
swid,
|
|
355
|
-
extRefs
|
|
372
|
+
extRefs,
|
|
373
|
+
components
|
|
356
374
|
].filter(isNotUndefined)
|
|
357
375
|
}
|
|
358
376
|
}
|
|
@@ -504,9 +522,12 @@ export class DependencyGraphNormalizer extends Base {
|
|
|
504
522
|
const allRefs = new Map<Models.BomRef, Models.BomRefRepository>()
|
|
505
523
|
if (data.metadata.component !== undefined) {
|
|
506
524
|
allRefs.set(data.metadata.component.bomRef, data.metadata.component.dependencies)
|
|
525
|
+
for (const component of data.metadata.component.components[treeIterator]()) {
|
|
526
|
+
allRefs.set(component.bomRef, component.dependencies)
|
|
527
|
+
}
|
|
507
528
|
}
|
|
508
|
-
for (const
|
|
509
|
-
allRefs.set(
|
|
529
|
+
for (const component of data.components[treeIterator]()) {
|
|
530
|
+
allRefs.set(component.bomRef, component.dependencies)
|
|
510
531
|
}
|
|
511
532
|
|
|
512
533
|
const normalized: Array<(SimpleXml.Element & { attributes: { ref: string } })> = []
|
|
@@ -42,6 +42,10 @@ export abstract class XmlBaseSerializer extends BaseSerializer<SimpleXml.Element
|
|
|
42
42
|
this.#normalizerFactory = normalizerFactory
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
get normalizerFactory (): NormalizerFactory {
|
|
46
|
+
return this.#normalizerFactory
|
|
47
|
+
}
|
|
48
|
+
|
|
45
49
|
protected _normalize (
|
|
46
50
|
bom: Bom,
|
|
47
51
|
options: NormalizerOptions = {}
|
package/src/spec.ts
CHANGED
|
@@ -52,6 +52,8 @@ export interface Protocol {
|
|
|
52
52
|
readonly supportsDependencyGraph: boolean
|
|
53
53
|
|
|
54
54
|
readonly supportsToolReferences: boolean
|
|
55
|
+
|
|
56
|
+
readonly requiresComponentVersion: boolean
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
/**
|
|
@@ -67,6 +69,7 @@ class Spec implements Protocol {
|
|
|
67
69
|
readonly #externalReferenceTypes: ReadonlySet<ExternalReferenceType>
|
|
68
70
|
readonly #supportsDependencyGraph: boolean
|
|
69
71
|
readonly #supportsToolReferences: boolean
|
|
72
|
+
readonly #requiresComponentVersion: boolean
|
|
70
73
|
|
|
71
74
|
constructor (
|
|
72
75
|
version: Version,
|
|
@@ -76,7 +79,8 @@ class Spec implements Protocol {
|
|
|
76
79
|
hashValuePattern: RegExp,
|
|
77
80
|
externalReferenceTypes: Iterable<ExternalReferenceType>,
|
|
78
81
|
supportsDependencyGraph: boolean,
|
|
79
|
-
supportsToolReferences: boolean
|
|
82
|
+
supportsToolReferences: boolean,
|
|
83
|
+
requiresComponentVersion: boolean
|
|
80
84
|
) {
|
|
81
85
|
this.#version = version
|
|
82
86
|
this.#formats = new Set(formats)
|
|
@@ -86,6 +90,7 @@ class Spec implements Protocol {
|
|
|
86
90
|
this.#externalReferenceTypes = new Set(externalReferenceTypes)
|
|
87
91
|
this.#supportsDependencyGraph = supportsDependencyGraph
|
|
88
92
|
this.#supportsToolReferences = supportsToolReferences
|
|
93
|
+
this.#requiresComponentVersion = requiresComponentVersion
|
|
89
94
|
}
|
|
90
95
|
|
|
91
96
|
get version (): Version {
|
|
@@ -120,6 +125,10 @@ class Spec implements Protocol {
|
|
|
120
125
|
get supportsToolReferences (): boolean {
|
|
121
126
|
return this.#supportsToolReferences
|
|
122
127
|
}
|
|
128
|
+
|
|
129
|
+
get requiresComponentVersion (): boolean {
|
|
130
|
+
return this.#requiresComponentVersion
|
|
131
|
+
}
|
|
123
132
|
}
|
|
124
133
|
|
|
125
134
|
/** Specification v1.2 */
|
|
@@ -172,7 +181,8 @@ export const Spec1dot2: Readonly<Protocol> = Object.freeze(new Spec(
|
|
|
172
181
|
ExternalReferenceType.Other
|
|
173
182
|
],
|
|
174
183
|
true,
|
|
175
|
-
false
|
|
184
|
+
false,
|
|
185
|
+
true
|
|
176
186
|
))
|
|
177
187
|
|
|
178
188
|
/** Specification v1.3 */
|
|
@@ -225,7 +235,8 @@ export const Spec1dot3: Readonly<Protocol> = Object.freeze(new Spec(
|
|
|
225
235
|
ExternalReferenceType.Other
|
|
226
236
|
],
|
|
227
237
|
true,
|
|
228
|
-
false
|
|
238
|
+
false,
|
|
239
|
+
true
|
|
229
240
|
))
|
|
230
241
|
|
|
231
242
|
/** Specification v1.4 */
|
|
@@ -279,7 +290,8 @@ export const Spec1dot4: Readonly<Protocol> = Object.freeze(new Spec(
|
|
|
279
290
|
ExternalReferenceType.Other
|
|
280
291
|
],
|
|
281
292
|
true,
|
|
282
|
-
true
|
|
293
|
+
true,
|
|
294
|
+
false
|
|
283
295
|
))
|
|
284
296
|
|
|
285
297
|
export const SpecVersionDict = Object.freeze(Object.fromEntries([
|
package/src/types/cpe.ts
CHANGED
|
@@ -24,8 +24,8 @@ Copyright (c) OWASP Foundation. All Rights Reserved.
|
|
|
24
24
|
*/
|
|
25
25
|
export type CPE = string
|
|
26
26
|
|
|
27
|
-
/* eslint-disable-next-line no-useless-escape -- value directly from XML
|
|
28
|
-
const cpePattern = /^([c][pP][eE]:\/[AHOaho]?(:[A-Za-z0-9\._\-~%]*){0,6})$|^(cpe:2\.3:[aho\*\-](:(((\?*|\*?)([a-zA-Z0-9\-\._]|(\\[
|
|
27
|
+
/* eslint-disable-next-line no-useless-escape -- value directly from XML, revert special-chars(like `&` -> `&`), and surrounded with `^` and `$` */
|
|
28
|
+
const cpePattern = /^([c][pP][eE]:\/[AHOaho]?(:[A-Za-z0-9\._\-~%]*){0,6})$|^(cpe:2\.3:[aho\*\-](:(((\?*|\*?)([a-zA-Z0-9\-\._]|(\\[\\\*\?!"#$$%&'\(\)\+,\/:;<=>@\[\]\^`\{\|}~]))+(\?*|\*?))|[\*\-])){5}(:(([a-zA-Z]{2,3}(-([a-zA-Z]{2}|[0-9]{3}))?)|[\*\-]))(:(((\?*|\*?)([a-zA-Z0-9\-\._]|(\\[\\\*\?!"#$$%&'\(\)\+,\/:;<=>@\[\]\^`\{\|}~]))+(\?*|\*?))|[\*\-])){4})$/
|
|
29
29
|
|
|
30
30
|
export function isCPE (value: any): value is CPE {
|
|
31
31
|
return typeof value === 'string' &&
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fromPackageJson.node.js","sourceRoot":"","sources":["../../src/builders/fromPackageJson.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fromPackageJson.node.js","sourceRoot":"","sources":["../../src/factories/fromPackageJson.node.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;EAiBE;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,kDAAmC;AACnC,gDAAiC;AACjC,0DAAwD;AAOxD,MAAa,wBAAwB;IACnC,sBAAsB,CAAE,IAAiB;QACvC,MAAM,IAAI,GAAgD,EAAE,CAAA;QAE5D,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;SAAE;QAAC,MAAM,GAAc;QAC1D,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;SAAE;QAAC,MAAM,GAAc;QAC/D,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAA;SAAE;QAAC,MAAM,GAAc;QAEnE,OAAO,IAAI,CAAC,MAAM,CAAC,6BAAc,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,CAAE,IAAiB;QAExB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAClC,IAAI,GAAG,CAAA;QACP,IAAI,OAA2B,CAAA;QAC/B,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAA;YACpB,OAAO,GAAG,wDAAwD,CAAA;YAClE,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;gBAEzF,GAAG,IAAI,GAAG,GAAG,UAAU,CAAC,SAAS,CAAA;gBACjC,OAAO,IAAI,6BAA6B,CAAA;aACzC;SACF;aAAM;YACL,GAAG,GAAG,UAAU,CAAA;YAChB,OAAO,GAAG,oDAAoD,CAAA;SAC/D;QACD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAC9C,CAAC,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,qBAAqB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC;YACjF,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAED,YAAY,CAAE,IAAiB;QAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA;QACzB,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAC9C,CAAC,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAC5B,GAAG,EAAE,KAAK,CAAC,qBAAqB,CAAC,OAAO,EACxC,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC;YAClE,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAED,gBAAgB,CAAE,IAAiB;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACtB,IAAI,GAAG,CAAA;QACP,IAAI,OAA2B,CAAA;QAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;YACd,OAAO,GAAG,kDAAkD,CAAA;SAC7D;aAAM;YACL,GAAG,GAAG,IAAI,CAAA;YACV,OAAO,GAAG,8CAA8C,CAAA;SACzD;QACD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAC9C,CAAC,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,qBAAqB,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC;YAC1F,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;CACF;AA3DD,4DA2DC"}
|