@citolab/tspci 2.11.0 → 2.12.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/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [2.12.0](/compare/v2.11.0...v2.12.0) (2026-08-19)
7
+
8
+
9
+ ### Features
10
+
11
+ * include the SBOM in the exported package by default 376b89a
12
+
13
+
14
+
15
+
16
+
6
17
  # [2.11.0](/compare/v2.10.0...v2.11.0) (2026-08-19)
7
18
 
8
19
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@citolab/tspci",
3
- "version": "2.11.0",
3
+ "version": "2.12.0",
4
4
  "description": "an opiniated typescript ims-pci builder with tao integration",
5
5
  "author": "patrick <patrick.deklein@cito.nl>",
6
6
  "repository": "@citolab/tspci",
@@ -55,5 +55,5 @@
55
55
  "access": "public",
56
56
  "registry": "https://registry.npmjs.org/"
57
57
  },
58
- "gitHead": "ad0858f9b665b6778cdf19685e858e167847e930"
58
+ "gitHead": "eb7676525e9bf75daa9b2f42f035faed9b8e9a70"
59
59
  }
package/readme.md CHANGED
@@ -85,8 +85,9 @@ For more info: [@citolab/tspci-qti3](https://github.com/Citolab/tspci/tree/main/
85
85
  ### SBOM
86
86
 
87
87
  Every production build (`tspci`, `tspci --target ...`) writes a [CycloneDX](https://cyclonedx.org/) 1.6
88
- SBOM to `dist/sbom.cdx.json`. When you export a package, a copy is placed next to the package as
89
- `<package-name>.sbom.cdx.json`, so you keep one SBOM per released version.
88
+ SBOM to `dist/sbom.cdx.json`. A package export puts it in two places: inside the package next to the
89
+ bundle it describes, and next to the package as `<package-name>.sbom.cdx.json` so you keep one SBOM per
90
+ released version for your own technical documentation.
90
91
 
91
92
  The SBOM is built from the rollup module graph, so it lists the packages whose code actually ended up
92
93
  in the bundle. That is different from what `npm sbom`, `cyclonedx-npm` or Syft produce for a PCI: those
@@ -97,16 +98,30 @@ It also records a SHA-512 hash of the built bundle. A customer who integrates yo
97
98
  manufacturer of the complete product and has to do due diligence on integrated third party components;
98
99
  the hash lets them verify that the SBOM belongs to the bundle they received.
99
100
 
100
- The Cyber Resilience Act asks for an SBOM as part of the technical documentation, not as something you
101
- deliver with the product, so it is not put inside the package by default. Add `--include-sbom` if a
102
- customer wants it in the package anyway:
101
+ The SBOM ships inside the package because a file next to the zip does not survive an import into an
102
+ authoring system, and that system is exactly the party that needs it: it is the manufacturer of the
103
+ complete product and has to document the components it integrates. The Cyber Resilience Act does not
104
+ require in band delivery, so `--no-include-sbom` (or `config.tspci.sbom.includeInPackage: false`) keeps
105
+ it out of the package while still writing it to `dist` and next to the package:
103
106
 
104
107
  ```sh
105
- tspci --target qti3 --include-sbom
108
+ tspci --target qti3 --no-include-sbom
106
109
  ```
107
110
 
108
- Generating the SBOM needs no flag, it happens on every production build. Use `--no-sbom` to skip it for
109
- a single build, or `config.tspci.sbom.enabled: false` to switch it off for a project:
111
+ Where it lands inside the package differs per target, always next to the bundle:
112
+
113
+ | target | in the package |
114
+ | --- | --- |
115
+ | qti3 | `resources/pci/sbom.cdx.json`, listed as a file of the PCI resource in the manifest |
116
+ | tao | `interaction/runtime/js/sbom.cdx.json` |
117
+ | qbci | `ref/script/sbom.cdx.json` |
118
+
119
+ For qti3 it is a `<file>` of the existing PCI resource rather than a resource of its own. QTI has no
120
+ resource type for a bill of materials, and an unreferenced resource is what manifest driven tooling
121
+ drops first.
122
+
123
+ Generating the SBOM needs no flag either, it happens on every production build. Use `--no-sbom` to skip
124
+ it for a single build, or `config.tspci.sbom.enabled: false` to switch it off for a project:
110
125
 
111
126
  ```sh
112
127
  tspci --target qti3 --no-sbom
@@ -165,7 +180,7 @@ All settings are optional and live in `config.tspci.sbom` in your `package.json`
165
180
  | `supportPeriodEnd` | - | Recorded as a property on the PCI component |
166
181
  | `externalReferences` | - | CycloneDX external references for the PCI, e.g. your disclosure policy |
167
182
  | `additionalComponents` | `[]` | Components the bundler cannot see, e.g. CDN or vendored code |
168
- | `includeInPackage` | `false` | Always include the SBOM in the exported package |
183
+ | `includeInPackage` | `true` | Set to `false` to keep the SBOM out of the exported package |
169
184
  | `properties` | `[]` | Extra CycloneDX properties on the PCI component |
170
185
  | `warnings` | `true` | Set to `false` to silence the warnings about gaps |
171
186
  | `timestamp` | `false` | Include a build timestamp. Off by default so a rebuild of the same sources gives an identical document |
@@ -291,8 +306,8 @@ Available Commands
291
306
  --targetExt -tx Same as -target but reffering to a fully qualified package (not in @citolab)
292
307
  init Init PCI development environment.
293
308
  add --target Add specific implementation to the PCI.
294
- --include-sbom Include the generated SBOM in the exported package
295
- --no-sbom Do not generate an SBOM for this build
309
+ --no-include-sbom Keep the SBOM out of the exported package (included by default)
310
+ --no-sbom Do not generate an SBOM for this build
296
311
 
297
312
  Examples package.json scripts
298
313
  $ "dev": "tspci --dev",
package/release-notes.md CHANGED
@@ -1,3 +1,14 @@
1
+ # 2.12.0
2
+
3
+ - the SBOM is now included in the exported package by default, next to the bundle it describes: `resources/pci/sbom.cdx.json` (qti3), `interaction/runtime/js/sbom.cdx.json` (tao), `ref/script/sbom.cdx.json` (qbci)
4
+ - a copy is still written next to the package as `<package-name>.sbom.cdx.json` for your own technical documentation
5
+ - `--no-include-sbom` (or `config.tspci.sbom.includeInPackage: false`) keeps it out of the package, `--no-sbom` still skips it altogether
6
+ - replaces `--include-sbom` from 2.11.0, which is now the default. The flag is still accepted and does nothing
7
+
8
+ A file next to the zip does not survive an import into an authoring system, and that system is exactly
9
+ the party that needs the SBOM: it is the manufacturer of the complete product and has to document the
10
+ components it integrates.
11
+
1
12
  # 2.11.0
2
13
 
3
14
  - every production build writes a CycloneDX 1.6 SBOM of the bundle to `dist/sbom.cdx.json`, and a package export copies it next to the package as `<package-name>.sbom.cdx.json`
package/src/cli.js CHANGED
@@ -270,7 +270,7 @@ const run = async () => {
270
270
  console.log(`•\t${chalk.blueBright("--watch")} watch the files`);
271
271
  console.log(`•\t${chalk.blueBright("--target")} build a prod item and bundle for platform`);
272
272
  console.log(
273
- `•\t${chalk.blueBright("--include-sbom")} include the generated sbom (dist/sbom.cdx.json) in the package itself`
273
+ `•\t${chalk.blueBright("--no-include-sbom")} keep the generated sbom out of the exported package (it is included by default)`
274
274
  );
275
275
  console.log(`•\t${chalk.blueBright("--no-sbom")} do not generate an sbom for this build`);
276
276
  console.log("\n");