Skip to content

Commit 5da05d2

Browse files
authored
feat: license acknowledgement (#1052)
fixes #1051 ## Changed * Serializers and `License`-Normalizers will take license acknowledgement into account ([#1051] via [#1052]) ## Added: * Namespace `Enums` * New enum `LicenseAcknowledgement` ([#1051] via [#1052]) * Namespace `Models` * Class `LicenseExpression` got new property `acknowledgement` ([#1051] via [#1052]) * Class `NamedLicense` got new property `acknowledgement` ([#1051] via [#1052]) * Class `SpdxLicense` got new property `acknowledgement` ([#1051] via [#1052]) [#1051]: #1051 [#1052]: #1052 --------- Signed-off-by: Jan Kowalleck <[email protected]>
1 parent 3bb5cc7 commit 5da05d2

21 files changed

+218
-20
lines changed

.github/workflows/nodejs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ jobs:
117117
- "14.0.0" # lowest supported
118118
os:
119119
- ubuntu-latest
120-
- macos-latest
120+
- macos-13 # macos-latest has issues with node14
121121
- windows-latest
122122
timeout-minutes: 10
123123
steps:

HISTORY.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,19 @@ All notable changes to this project will be documented in this file.
66

77
<!-- add unreleased items here -->
88

9+
* Changed
10+
* Serializers and `License`-Normalizers will take license acknowledgement into account ([#1051] via [#1052])
11+
* Added:
12+
* Namespace `Enums`
13+
* New enum `LicenseAcknowledgement` ([#1051] via [#1052])
14+
* Namespace `Models`
15+
* Class `LicenseExpression` got new property `acknowledgement` ([#1051] via [#1052])
16+
* Class `NamedLicense` got new property `acknowledgement` ([#1051] via [#1052])
17+
* Class `SpdxLicense` got new property `acknowledgement` ([#1051] via [#1052])
18+
19+
[#1051]: https://github.com/CycloneDX/cyclonedx-javascript-library/issues/1051
20+
[#1052]: https://github.com/CycloneDX/cyclonedx-javascript-library/pull/1052
21+
922
## 6.5.1 -- 2024-04-16
1023

1124
* Dependencies

src/builders/fromNodePackageJson.node.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class ToolBuilder {
4747
}
4848

4949
// Current implementation does not return `undefined` yet, but it is an option for future implementation.
50-
// To prevent breaking changes, it is declared to return `undefined`.
50+
// To prevent future breaking changes, it is declared to return `undefined`.
5151
makeTool (data: PackageJson): Models.Tool | undefined {
5252
const [name, vendor] = typeof data.name === 'string'
5353
? splitNameGroup(data.name)

src/enums/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,6 @@ export * from './componentScope'
2222
export * from './componentType'
2323
export * from './externalReferenceType'
2424
export * from './hashAlogorithm'
25+
export * from './licenseAcknowledgement'
2526
export * from './lifecyclePhase'
2627
export * as Vulnerability from './vulnerability'
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*!
2+
This file is part of CycloneDX JavaScript Library.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
16+
SPDX-License-Identifier: Apache-2.0
17+
Copyright (c) OWASP Foundation. All Rights Reserved.
18+
*/
19+
20+
export enum LicenseAcknowledgement {
21+
Declared = 'declared',
22+
Concluded = 'concluded',
23+
}

src/models/license.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Copyright (c) OWASP Foundation. All Rights Reserved.
1818
*/
1919

2020
import type { Sortable } from '../_helpers/sortable'
21+
import type { LicenseAcknowledgement } from '../enums'
2122
import type { SpdxId } from '../spdx'
2223
import type { Attachment } from './attachment'
2324

@@ -31,6 +32,7 @@ import type { Attachment } from './attachment'
3132
export class LicenseExpression {
3233
/** @see {@link expression} */
3334
#expression!: string
35+
acknowledgement?: LicenseAcknowledgement
3436

3537
/**
3638
* @throws {@link RangeError} if `expression` is empty string
@@ -59,10 +61,12 @@ export class LicenseExpression {
5961
}
6062

6163
class DisjunctiveLicenseBase {
64+
acknowledgement?: LicenseAcknowledgement
6265
text?: Attachment
6366
#url?: URL | string
6467

6568
constructor (op: OptionalDisjunctiveLicenseProperties = {}) {
69+
this.acknowledgement = op.acknowledgement
6670
this.text = op.text
6771
this.url = op.url
6872
}
@@ -79,6 +83,7 @@ class DisjunctiveLicenseBase {
7983
}
8084

8185
interface OptionalDisjunctiveLicenseProperties {
86+
acknowledgement?: DisjunctiveLicenseBase['acknowledgement']
8287
text?: DisjunctiveLicenseBase['text']
8388
url?: DisjunctiveLicenseBase['url']
8489
}

src/serialize/json/normalize.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,9 @@ export class LicenseNormalizer extends BaseJsonNormalizer<Models.License> {
452452
return {
453453
license: {
454454
name: data.name,
455+
acknowledgement: this._factory.spec.supportsLicenseAcknowledgement
456+
? data.acknowledgement
457+
: undefined,
455458
text: data.text === undefined
456459
? undefined
457460
: this._factory.makeForAttachment().normalize(data.text, options),
@@ -467,6 +470,9 @@ export class LicenseNormalizer extends BaseJsonNormalizer<Models.License> {
467470
return {
468471
license: {
469472
id: data.id,
473+
acknowledgement: this._factory.spec.supportsLicenseAcknowledgement
474+
? data.acknowledgement
475+
: undefined,
470476
text: data.text === undefined
471477
? undefined
472478
: this._factory.makeForAttachment().normalize(data.text, options),
@@ -479,7 +485,10 @@ export class LicenseNormalizer extends BaseJsonNormalizer<Models.License> {
479485

480486
#normalizeLicenseExpression (data: Models.LicenseExpression): Normalized.LicenseExpression {
481487
return {
482-
expression: data.expression
488+
expression: data.expression,
489+
acknowledgement: this._factory.spec.supportsLicenseAcknowledgement
490+
? data.acknowledgement
491+
: undefined
483492
}
484493
}
485494

src/serialize/json/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ export namespace Normalized {
170170
export interface NamedLicense {
171171
license: {
172172
name: string
173+
acknowledgement?: Enums.LicenseAcknowledgement
173174
text?: Attachment
174175
url?: string
175176
}
@@ -179,13 +180,15 @@ export namespace Normalized {
179180
license: {
180181
/* see http://cyclonedx.org/schema/spdx */
181182
id: SpdxId
183+
acknowledgement?: Enums.LicenseAcknowledgement
182184
text?: Attachment
183185
url?: string
184186
}
185187
}
186188

187189
export interface LicenseExpression {
188190
expression: string
191+
acknowledgement?: Enums.LicenseAcknowledgement
189192
}
190193

191194
export type License = NamedLicense | SpdxLicense | LicenseExpression

src/serialize/xml/normalize.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,11 @@ export class LicenseNormalizer extends BaseXmlNormalizer<Models.License> {
578578
return {
579579
type: 'element',
580580
name: 'license',
581+
attributes: {
582+
acknowledgement: this._factory.spec.supportsLicenseAcknowledgement
583+
? data.acknowledgement
584+
: undefined
585+
},
581586
children: [
582587
makeTextElement(data.name, 'name'),
583588
data.text === undefined
@@ -595,6 +600,11 @@ export class LicenseNormalizer extends BaseXmlNormalizer<Models.License> {
595600
return {
596601
type: 'element',
597602
name: 'license',
603+
attributes: {
604+
acknowledgement: this._factory.spec.supportsLicenseAcknowledgement
605+
? data.acknowledgement
606+
: undefined
607+
},
598608
children: [
599609
makeTextElement(data.id, 'id'),
600610
data.text === undefined
@@ -608,7 +618,13 @@ export class LicenseNormalizer extends BaseXmlNormalizer<Models.License> {
608618
}
609619

610620
#normalizeLicenseExpression (data: Models.LicenseExpression): SimpleXml.Element {
611-
return makeTextElement(data.expression, 'expression')
621+
const elem = makeTextElement(data.expression, 'expression')
622+
elem.attributes = {
623+
acknowledgement: this._factory.spec.supportsLicenseAcknowledgement
624+
? data.acknowledgement
625+
: undefined
626+
}
627+
return elem
612628
}
613629

614630
/**

src/spec/_protocol.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export interface _SpecProtocol {
4646
supportsMetadataLicenses: boolean
4747
supportsMetadataProperties: boolean
4848
supportsExternalReferenceHashes: boolean
49+
supportsLicenseAcknowledgement: boolean
4950
}
5051

5152
/**
@@ -73,6 +74,7 @@ export class _Spec implements _SpecProtocol {
7374
readonly #supportsMetadataLicenses: boolean
7475
readonly #supportsMetadataProperties: boolean
7576
readonly #supportsExternalReferenceHashes: boolean
77+
readonly #supportsLicenseAcknowledgement: boolean
7678

7779
constructor (
7880
version: Version,
@@ -91,7 +93,8 @@ export class _Spec implements _SpecProtocol {
9193
supportsMetadataLifecycles: boolean,
9294
supportsMetadataLicenses: boolean,
9395
supportsMetadataProperties: boolean,
94-
supportsExternalReferenceHashes: boolean
96+
supportsExternalReferenceHashes: boolean,
97+
supportsLicenseAcknowledgement: boolean
9598
) {
9699
this.#version = version
97100
this.#formats = new Set(formats)
@@ -110,6 +113,7 @@ export class _Spec implements _SpecProtocol {
110113
this.#supportsMetadataLicenses = supportsMetadataLicenses
111114
this.#supportsMetadataProperties = supportsMetadataProperties
112115
this.#supportsExternalReferenceHashes = supportsExternalReferenceHashes
116+
this.#supportsLicenseAcknowledgement = supportsLicenseAcknowledgement
113117
}
114118

115119
get version (): Version {
@@ -186,4 +190,8 @@ export class _Spec implements _SpecProtocol {
186190
get supportsExternalReferenceHashes (): boolean {
187191
return this.#supportsExternalReferenceHashes
188192
}
193+
194+
get supportsLicenseAcknowledgement (): boolean {
195+
return this.#supportsLicenseAcknowledgement
196+
}
189197
}

0 commit comments

Comments
 (0)