@citolab/tspci 2.11.0 → 2.12.1
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 +22 -0
- package/package.json +2 -2
- package/preset/base/tsconfig.json +4 -3
- package/readme.md +26 -11
- package/release-notes.md +16 -0
- package/src/cli.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
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.1](/compare/v2.12.0...v2.12.1) (2026-08-19)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* make the generated tsconfig ready for TypeScript 6 cdcc84d
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [2.12.0](/compare/v2.11.0...v2.12.0) (2026-08-19)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* include the SBOM in the exported package by default 376b89a
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
6
28
|
# [2.11.0](/compare/v2.10.0...v2.11.0) (2026-08-19)
|
|
7
29
|
|
|
8
30
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@citolab/tspci",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.1",
|
|
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": "
|
|
58
|
+
"gitHead": "525a89e24eb69a03fbf3f0b76c33f865f38f44ad"
|
|
59
59
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
3
|
"declaration": true,
|
|
4
|
-
"lib": ["
|
|
5
|
-
"module": "
|
|
6
|
-
"moduleResolution": "
|
|
4
|
+
"lib": ["es2017", "dom", "dom.iterable"],
|
|
5
|
+
"module": "esnext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
7
|
"removeComments": true,
|
|
8
8
|
"sourceMap": true,
|
|
9
9
|
"strict": false,
|
|
10
10
|
"target": "es6",
|
|
11
11
|
"outDir": "./dist",
|
|
12
|
+
"rootDir": "./src",
|
|
12
13
|
"jsx": "react-jsx",
|
|
13
14
|
"jsxImportSource": "preact",
|
|
14
15
|
"allowSyntheticDefaultImports": true,
|
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`.
|
|
89
|
-
`<package-name>.sbom.cdx.json
|
|
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
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
109
|
-
|
|
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` | `
|
|
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
|
|
295
|
-
--no-sbom
|
|
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,19 @@
|
|
|
1
|
+
# 2.12.1
|
|
2
|
+
|
|
3
|
+
- `tspci init` now writes a tsconfig that is ready for TypeScript 6: an explicit `rootDir` of `./src`, `moduleResolution: "bundler"` instead of the deprecated node10 resolution, `module: "esnext"` and `lib: es2017`
|
|
4
|
+
- existing PCIs keep their own tsconfig.json, apply the same four changes there to silence the TypeScript 6 warnings
|
|
5
|
+
|
|
6
|
+
# 2.12.0
|
|
7
|
+
|
|
8
|
+
- 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)
|
|
9
|
+
- a copy is still written next to the package as `<package-name>.sbom.cdx.json` for your own technical documentation
|
|
10
|
+
- `--no-include-sbom` (or `config.tspci.sbom.includeInPackage: false`) keeps it out of the package, `--no-sbom` still skips it altogether
|
|
11
|
+
- replaces `--include-sbom` from 2.11.0, which is now the default. The flag is still accepted and does nothing
|
|
12
|
+
|
|
13
|
+
A file next to the zip does not survive an import into an authoring system, and that system is exactly
|
|
14
|
+
the party that needs the SBOM: it is the manufacturer of the complete product and has to document the
|
|
15
|
+
components it integrates.
|
|
16
|
+
|
|
1
17
|
# 2.11.0
|
|
2
18
|
|
|
3
19
|
- 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")}
|
|
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");
|