circle-ir 3.201.0 → 3.203.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.
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Software Bill of Materials (SBOM) generation.
3
+ *
4
+ * cognium-dev — deterministic SBOM emission (Pillar I). The engine never
5
+ * reads the filesystem (browser-safety); the caller passes raw manifest text
6
+ * via the same {@link DependencyContext} surface the deserialization gate
7
+ * uses (#258/#261). This module turns those manifests into a normalized
8
+ * dependency list and emits two industry formats:
9
+ *
10
+ * - **CycloneDX 1.5** (`toCycloneDx`) — the OWASP BOM format.
11
+ * - **SPDX 2.3** (`toSpdx`) — the Linux Foundation format.
12
+ *
13
+ * Both outputs are deterministic: no timestamps, UUIDs, or randomness are
14
+ * introduced here. Volatile document metadata (generation time, serial
15
+ * number, namespace) is *injected* by the caller via {@link SbomMetadata},
16
+ * so a given input always produces byte-identical output unless the caller
17
+ * chooses otherwise — which keeps SBOMs diffable in CI and tests stable.
18
+ *
19
+ * Parsing is regex/`JSON.parse`-scoped, never a full TOML/XML tree: the only
20
+ * runtime dependencies circle-ir permits are `web-tree-sitter` and `yaml`,
21
+ * and a manifest dependency list needs nothing heavier.
22
+ */
23
+ import type { DependencyContext } from '../analyzer.js';
24
+ /** Package ecosystem, aligned with Package-URL (purl) `pkg:<type>` names. */
25
+ export type Ecosystem = 'npm' | 'pypi' | 'maven' | 'cargo' | 'golang';
26
+ /** How a dependency is used, mapped from the manifest's declaration site. */
27
+ export type DependencyScope = 'required' | 'optional' | 'dev';
28
+ /** One normalized dependency, ecosystem-agnostic. */
29
+ export interface Dependency {
30
+ /** Package name. For Maven this is `groupId:artifactId`. */
31
+ name: string;
32
+ /** Declared version spec verbatim (e.g. `^3.1.0`, `>=1.2`), or `'unknown'`. */
33
+ version: string;
34
+ ecosystem: Ecosystem;
35
+ scope: DependencyScope;
36
+ /** Package URL (https://github.com/package-url/purl-spec). */
37
+ purl: string;
38
+ }
39
+ /**
40
+ * Caller-injected document metadata. Everything here is optional; supplying
41
+ * it makes the output richer but non-deterministic (e.g. a real timestamp).
42
+ * Leaving it out yields a minimal, fully-deterministic document.
43
+ */
44
+ export interface SbomMetadata {
45
+ /** Name of the project the SBOM describes. */
46
+ name?: string;
47
+ /** Version of the project the SBOM describes. */
48
+ version?: string;
49
+ /** ISO-8601 generation time. Injected — never read from a clock here. */
50
+ timestamp?: string;
51
+ /** CycloneDX `serialNumber` (expected form `urn:uuid:...`). */
52
+ serialNumber?: string;
53
+ /** SPDX `documentNamespace`. Defaults to a cognium.dev URI. */
54
+ namespace?: string;
55
+ /** Generating tool name recorded in the document. Defaults to `circle-ir`. */
56
+ tool?: string;
57
+ }
58
+ /**
59
+ * Parse an npm `package.json`. `dependencies` → required,
60
+ * `optionalDependencies` / `peerDependencies` → optional,
61
+ * `devDependencies` → dev. Malformed JSON yields an empty list rather than
62
+ * throwing — a bad manifest should not abort a scan.
63
+ */
64
+ export declare function parseNpmDependencies(packageJson: string): Dependency[];
65
+ /**
66
+ * Parse a pip `requirements.txt`. Handles `name==1.2`, `name>=1.2`, `name~=1`,
67
+ * bare `name`, extras (`name[x]`), and environment markers (`; marker`).
68
+ * Skips comments, blank lines, and option lines (`-r`, `-e`, `--hash`, URLs).
69
+ */
70
+ export declare function parsePypiDependencies(requirementsTxt: string): Dependency[];
71
+ /**
72
+ * Parse a `pyproject.toml`. Covers the two dominant layouts:
73
+ *
74
+ * - **PEP 621** — `[project]` `dependencies = ["flask>=2.0", …]` (required)
75
+ * and `[project.optional-dependencies]` group arrays (optional).
76
+ * - **Poetry** — `[tool.poetry.dependencies]` (required, skipping the
77
+ * `python` version pin) and any `dev`/`group.*` dependency table (dev).
78
+ *
79
+ * TOML is scanned with regex, not a full parser (minimal-deps guardrail).
80
+ */
81
+ export declare function parsePyprojectDependencies(pyprojectToml: string): Dependency[];
82
+ /**
83
+ * Parse a Gradle build script (`build.gradle` Groovy or `build.gradle.kts`
84
+ * Kotlin DSL) dependency block. Recognises the common configurations
85
+ * (`implementation` / `api` / `compileOnly` / `runtimeOnly` /
86
+ * `annotationProcessor` / `kapt` / `classpath` and their `test*` variants) in
87
+ * both `impl 'g:a:v'` and `impl("g:a:v")` forms. Coordinates are Maven, so the
88
+ * ecosystem is `maven` and the name is `groupId:artifactId`. `test*`
89
+ * configurations map to the `dev` scope. `platform(...)` BOM imports are
90
+ * skipped (they declare no concrete artifact).
91
+ */
92
+ export declare function parseGradleDependencies(buildGradle: string): Dependency[];
93
+ /**
94
+ * Parse a Maven `pom.xml` `<dependency>` blocks. Name is `groupId:artifactId`.
95
+ * `<scope>test|provided</scope>` → dev, `<optional>true</optional>` → optional.
96
+ * A `${...}` version is recorded as `unknown` (unresolved property reference).
97
+ */
98
+ export declare function parseMavenDependencies(pomXml: string): Dependency[];
99
+ /**
100
+ * Parse a Cargo `Cargo.toml`. `[dependencies]` → required,
101
+ * `[dev-dependencies]` → dev, `[build-dependencies]` → optional. Handles both
102
+ * `name = "1.2"` and `name = { version = "1.2", ... }` forms.
103
+ */
104
+ export declare function parseCargoDependencies(cargoToml: string): Dependency[];
105
+ /**
106
+ * Parse a Go `go.mod`. Collects `require` directives in both the grouped
107
+ * `require ( ... )` block and single-line `require path v1.2.3` forms.
108
+ * A `// indirect` marker maps to the `optional` scope. The module path is
109
+ * the purl name (`pkg:golang/github.com/foo/bar@v1.2.3`).
110
+ */
111
+ export declare function parseGoDependencies(goMod: string): Dependency[];
112
+ /**
113
+ * Parse every manifest present in a {@link DependencyContext} into one
114
+ * de-duplicated dependency list. De-dup key is `ecosystem|name|version|scope`,
115
+ * so the same package declared once stays once but a genuine dev/required
116
+ * split is preserved.
117
+ */
118
+ export declare function collectDependencies(ctx: DependencyContext | undefined): Dependency[];
119
+ /** Emit a CycloneDX 1.5 BOM document object (serialize with `JSON.stringify`). */
120
+ export declare function toCycloneDx(deps: Dependency[], meta?: SbomMetadata): Record<string, unknown>;
121
+ /** Emit an SPDX 2.3 document object (serialize with `JSON.stringify`). */
122
+ export declare function toSpdx(deps: Dependency[], meta?: SbomMetadata): Record<string, unknown>;
123
+ //# sourceMappingURL=sbom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sbom.d.ts","sourceRoot":"","sources":["../../src/analysis/sbom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,6EAA6E;AAC7E,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtE,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;AAE9D,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,eAAe,CAAC;IACvB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA+CD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,EAAE,CAyBtE;AAoBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,GAAG,UAAU,EAAE,CAa3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,CAqE9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,EAAE,CAgBzE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAmBnE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,CA+BtE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CA0B/D;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,GAAG,SAAS,GAAG,UAAU,EAAE,CAmBpF;AAMD,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6BhG;AAOD,0EAA0E;AAC1E,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoC3F"}
@@ -0,0 +1,482 @@
1
+ /**
2
+ * Software Bill of Materials (SBOM) generation.
3
+ *
4
+ * cognium-dev — deterministic SBOM emission (Pillar I). The engine never
5
+ * reads the filesystem (browser-safety); the caller passes raw manifest text
6
+ * via the same {@link DependencyContext} surface the deserialization gate
7
+ * uses (#258/#261). This module turns those manifests into a normalized
8
+ * dependency list and emits two industry formats:
9
+ *
10
+ * - **CycloneDX 1.5** (`toCycloneDx`) — the OWASP BOM format.
11
+ * - **SPDX 2.3** (`toSpdx`) — the Linux Foundation format.
12
+ *
13
+ * Both outputs are deterministic: no timestamps, UUIDs, or randomness are
14
+ * introduced here. Volatile document metadata (generation time, serial
15
+ * number, namespace) is *injected* by the caller via {@link SbomMetadata},
16
+ * so a given input always produces byte-identical output unless the caller
17
+ * chooses otherwise — which keeps SBOMs diffable in CI and tests stable.
18
+ *
19
+ * Parsing is regex/`JSON.parse`-scoped, never a full TOML/XML tree: the only
20
+ * runtime dependencies circle-ir permits are `web-tree-sitter` and `yaml`,
21
+ * and a manifest dependency list needs nothing heavier.
22
+ */
23
+ // ---------------------------------------------------------------------------
24
+ // purl helpers
25
+ // ---------------------------------------------------------------------------
26
+ /**
27
+ * Reduce a declared version spec to a clean, exact-ish version for the purl,
28
+ * or `undefined` when the spec is a range/reference we should not pin. A purl
29
+ * without a version is valid, so omitting is preferable to guessing.
30
+ */
31
+ function purlVersion(spec) {
32
+ // Strip range operators/whitespace but NOT a leading `v` — Go module
33
+ // versions (`v1.2.3`) keep it as part of the canonical version.
34
+ const stripped = spec.trim().replace(/^[\s^~=<>]+/, '');
35
+ // Accept a single concrete version token (optional Go `v` prefix); reject
36
+ // residual ranges (`1.0 <2.0`), commas, or unresolved `${...}` / `*`.
37
+ if (/^v?[0-9][\w.\-+]*$/.test(stripped))
38
+ return stripped;
39
+ return undefined;
40
+ }
41
+ /** Percent-encode a purl name segment, preserving the `@scope/name` shape. */
42
+ function encodePurlName(name) {
43
+ return name
44
+ .split('/')
45
+ .map((seg) => encodeURIComponent(seg))
46
+ .join('/');
47
+ }
48
+ function makePurl(ecosystem, name, version) {
49
+ const v = purlVersion(version);
50
+ // Maven names are `groupId:artifactId`; the purl expresses that as the
51
+ // `namespace/name` path (`pkg:maven/groupId/artifactId`).
52
+ const path = ecosystem === 'maven' ? name.replace(':', '/') : name;
53
+ const base = `pkg:${ecosystem}/${encodePurlName(path)}`;
54
+ return v ? `${base}@${encodeURIComponent(v)}` : base;
55
+ }
56
+ function dep(ecosystem, name, version, scope) {
57
+ const v = version.trim() || 'unknown';
58
+ return { name, version: v, ecosystem, scope, purl: makePurl(ecosystem, name, v) };
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // per-ecosystem manifest parsers
62
+ // ---------------------------------------------------------------------------
63
+ /**
64
+ * Parse an npm `package.json`. `dependencies` → required,
65
+ * `optionalDependencies` / `peerDependencies` → optional,
66
+ * `devDependencies` → dev. Malformed JSON yields an empty list rather than
67
+ * throwing — a bad manifest should not abort a scan.
68
+ */
69
+ export function parseNpmDependencies(packageJson) {
70
+ if (!packageJson)
71
+ return [];
72
+ let parsed;
73
+ try {
74
+ parsed = JSON.parse(packageJson);
75
+ }
76
+ catch {
77
+ return [];
78
+ }
79
+ if (!parsed || typeof parsed !== 'object')
80
+ return [];
81
+ const obj = parsed;
82
+ const out = [];
83
+ const sections = [
84
+ ['dependencies', 'required'],
85
+ ['optionalDependencies', 'optional'],
86
+ ['peerDependencies', 'optional'],
87
+ ['devDependencies', 'dev'],
88
+ ];
89
+ for (const [key, scope] of sections) {
90
+ const block = obj[key];
91
+ if (!block || typeof block !== 'object')
92
+ continue;
93
+ for (const [name, spec] of Object.entries(block)) {
94
+ out.push(dep('npm', name, typeof spec === 'string' ? spec : 'unknown', scope));
95
+ }
96
+ }
97
+ return out;
98
+ }
99
+ /**
100
+ * Parse a single PEP 508 requirement string (`name[extras] (>=|==|~=…)ver ; marker`)
101
+ * into `{ name, version }`, or `null` when no name can be read. Shared by the
102
+ * `requirements.txt` and `pyproject.toml` parsers.
103
+ */
104
+ function parsePep508(spec) {
105
+ let s = spec.trim();
106
+ s = s.split(';')[0].trim(); // strip environment marker
107
+ if (!s)
108
+ return null;
109
+ const m = s.match(/^([A-Za-z0-9._-]+)\s*(?:\[[^\]]*\])?\s*(.*)$/);
110
+ if (!m)
111
+ return null;
112
+ const rest = m[2].trim();
113
+ // First comparator clause's version (drop `,` compound ranges and `(` groups).
114
+ const verMatch = rest.replace(/^\(/, '').match(/^(?:==|>=|<=|~=|!=|>|<|===)?\s*([^,\s)]+)/);
115
+ const version = verMatch && verMatch[1] ? verMatch[1] : 'unknown';
116
+ return { name: m[1], version };
117
+ }
118
+ /**
119
+ * Parse a pip `requirements.txt`. Handles `name==1.2`, `name>=1.2`, `name~=1`,
120
+ * bare `name`, extras (`name[x]`), and environment markers (`; marker`).
121
+ * Skips comments, blank lines, and option lines (`-r`, `-e`, `--hash`, URLs).
122
+ */
123
+ export function parsePypiDependencies(requirementsTxt) {
124
+ if (!requirementsTxt)
125
+ return [];
126
+ const out = [];
127
+ for (const raw of requirementsTxt.split(/\r?\n/)) {
128
+ let line = raw.trim();
129
+ if (!line || line.startsWith('#'))
130
+ continue;
131
+ if (line.startsWith('-') || /^[a-z]+:\/\//i.test(line))
132
+ continue; // options / URLs
133
+ line = line.split('#')[0].trim(); // strip trailing comment
134
+ if (!line)
135
+ continue;
136
+ const parsed = parsePep508(line);
137
+ if (parsed)
138
+ out.push(dep('pypi', parsed.name, parsed.version, 'required'));
139
+ }
140
+ return out;
141
+ }
142
+ /**
143
+ * Parse a `pyproject.toml`. Covers the two dominant layouts:
144
+ *
145
+ * - **PEP 621** — `[project]` `dependencies = ["flask>=2.0", …]` (required)
146
+ * and `[project.optional-dependencies]` group arrays (optional).
147
+ * - **Poetry** — `[tool.poetry.dependencies]` (required, skipping the
148
+ * `python` version pin) and any `dev`/`group.*` dependency table (dev).
149
+ *
150
+ * TOML is scanned with regex, not a full parser (minimal-deps guardrail).
151
+ */
152
+ export function parsePyprojectDependencies(pyprojectToml) {
153
+ if (!pyprojectToml)
154
+ return [];
155
+ const out = [];
156
+ // Line-scan tracking the current TOML table so `dependencies = [...]` under
157
+ // `[project]` (required) and arrays under `[project.optional-dependencies]`
158
+ // (optional) are distinguished, and Poetry tables are read as key/value.
159
+ const lines = pyprojectToml.split(/\r?\n/);
160
+ let table = '';
161
+ let poetryScope = null;
162
+ let inArray = false;
163
+ let arrayScope = 'required';
164
+ const pushReq = (raw, scope) => {
165
+ const cleaned = raw.trim().replace(/^["']|["'],?$/g, '').replace(/,$/, '').trim();
166
+ if (!cleaned)
167
+ return;
168
+ const parsed = parsePep508(cleaned);
169
+ if (parsed && parsed.name.toLowerCase() !== 'python')
170
+ out.push(dep('pypi', parsed.name, parsed.version, scope));
171
+ };
172
+ for (const raw of lines) {
173
+ const line = raw.trim();
174
+ if (!line || line.startsWith('#'))
175
+ continue;
176
+ if (inArray) {
177
+ if (line.startsWith(']')) {
178
+ inArray = false;
179
+ continue;
180
+ }
181
+ pushReq(line, arrayScope);
182
+ continue;
183
+ }
184
+ const header = line.match(/^\[([^\]]+)\]$/);
185
+ if (header) {
186
+ table = header[1];
187
+ if (table === 'tool.poetry.dependencies')
188
+ poetryScope = 'required';
189
+ else if (/^tool\.poetry\.(dev-dependencies|group\..+\.dependencies)$/.test(table))
190
+ poetryScope = 'dev';
191
+ else
192
+ poetryScope = null;
193
+ continue;
194
+ }
195
+ // PEP 621 array openers.
196
+ const arrayOpen = line.match(/^(dependencies|[A-Za-z0-9._-]+)\s*=\s*\[(.*)$/);
197
+ if (arrayOpen && (arrayOpen[1] === 'dependencies' || table === 'project.optional-dependencies')) {
198
+ arrayScope = arrayOpen[1] === 'dependencies' ? 'required' : 'optional';
199
+ const inline = arrayOpen[2];
200
+ if (inline.includes(']')) {
201
+ // single-line array
202
+ for (const item of inline.slice(0, inline.indexOf(']')).split(','))
203
+ pushReq(item, arrayScope);
204
+ }
205
+ else {
206
+ inArray = true;
207
+ if (inline.trim())
208
+ pushReq(inline, arrayScope);
209
+ }
210
+ continue;
211
+ }
212
+ // Poetry table entries: `name = "^1.0"` or `name = { version = "1.0" }`.
213
+ if (poetryScope) {
214
+ const kv = line.match(/^([A-Za-z0-9._-]+)\s*=\s*(.+)$/);
215
+ if (!kv || kv[1].toLowerCase() === 'python')
216
+ continue;
217
+ let version = 'unknown';
218
+ const strv = kv[2].match(/^["']([^"']+)["']/);
219
+ if (strv)
220
+ version = strv[1];
221
+ else {
222
+ const inlinev = kv[2].match(/version\s*=\s*["']([^"']+)["']/);
223
+ if (inlinev)
224
+ version = inlinev[1];
225
+ }
226
+ out.push(dep('pypi', kv[1], version, poetryScope));
227
+ }
228
+ }
229
+ return out;
230
+ }
231
+ /**
232
+ * Parse a Gradle build script (`build.gradle` Groovy or `build.gradle.kts`
233
+ * Kotlin DSL) dependency block. Recognises the common configurations
234
+ * (`implementation` / `api` / `compileOnly` / `runtimeOnly` /
235
+ * `annotationProcessor` / `kapt` / `classpath` and their `test*` variants) in
236
+ * both `impl 'g:a:v'` and `impl("g:a:v")` forms. Coordinates are Maven, so the
237
+ * ecosystem is `maven` and the name is `groupId:artifactId`. `test*`
238
+ * configurations map to the `dev` scope. `platform(...)` BOM imports are
239
+ * skipped (they declare no concrete artifact).
240
+ */
241
+ export function parseGradleDependencies(buildGradle) {
242
+ if (!buildGradle)
243
+ return [];
244
+ const out = [];
245
+ const re = /\b(implementation|api|compileOnly|compileOnlyApi|runtimeOnly|testImplementation|testCompileOnly|testRuntimeOnly|annotationProcessor|kapt|classpath)\s*[(\s]\s*['"]([\w.-]+:[\w.-]+(?::[\w.\-+]+)?)['"]/g;
246
+ let m;
247
+ while ((m = re.exec(buildGradle)) !== null) {
248
+ const config = m[1];
249
+ const coord = m[2].split(':');
250
+ if (coord.length < 2)
251
+ continue;
252
+ const name = `${coord[0]}:${coord[1]}`;
253
+ const version = coord[2] ?? 'unknown';
254
+ const scope = config.startsWith('test') ? 'dev' : 'required';
255
+ out.push(dep('maven', name, version, scope));
256
+ }
257
+ return out;
258
+ }
259
+ /**
260
+ * Parse a Maven `pom.xml` `<dependency>` blocks. Name is `groupId:artifactId`.
261
+ * `<scope>test|provided</scope>` → dev, `<optional>true</optional>` → optional.
262
+ * A `${...}` version is recorded as `unknown` (unresolved property reference).
263
+ */
264
+ export function parseMavenDependencies(pomXml) {
265
+ if (!pomXml)
266
+ return [];
267
+ const out = [];
268
+ const depRe = /<dependency>([\s\S]*?)<\/dependency>/g;
269
+ let m;
270
+ while ((m = depRe.exec(pomXml)) !== null) {
271
+ const block = m[1];
272
+ const gid = block.match(/<groupId>\s*([^<\s]+)\s*<\/groupId>/)?.[1];
273
+ const aid = block.match(/<artifactId>\s*([^<\s]+)\s*<\/artifactId>/)?.[1];
274
+ if (!gid || !aid)
275
+ continue;
276
+ let version = block.match(/<version>\s*([^<\s]+)\s*<\/version>/)?.[1] ?? 'unknown';
277
+ if (version.startsWith('${'))
278
+ version = 'unknown';
279
+ const mvnScope = block.match(/<scope>\s*([^<\s]+)\s*<\/scope>/)?.[1];
280
+ const optional = /<optional>\s*true\s*<\/optional>/.test(block);
281
+ const scope = mvnScope === 'test' || mvnScope === 'provided' ? 'dev' : optional ? 'optional' : 'required';
282
+ out.push(dep('maven', `${gid}:${aid}`, version, scope));
283
+ }
284
+ return out;
285
+ }
286
+ /**
287
+ * Parse a Cargo `Cargo.toml`. `[dependencies]` → required,
288
+ * `[dev-dependencies]` → dev, `[build-dependencies]` → optional. Handles both
289
+ * `name = "1.2"` and `name = { version = "1.2", ... }` forms.
290
+ */
291
+ export function parseCargoDependencies(cargoToml) {
292
+ if (!cargoToml)
293
+ return [];
294
+ const out = [];
295
+ let scope = null;
296
+ for (const raw of cargoToml.split(/\r?\n/)) {
297
+ const line = raw.trim();
298
+ if (!line || line.startsWith('#'))
299
+ continue;
300
+ const section = line.match(/^\[([^\]]+)\]$/);
301
+ if (section) {
302
+ const s = section[1];
303
+ if (s === 'dependencies')
304
+ scope = 'required';
305
+ else if (s === 'dev-dependencies')
306
+ scope = 'dev';
307
+ else if (s === 'build-dependencies')
308
+ scope = 'optional';
309
+ else
310
+ scope = null; // some other table — stop collecting until next dep table
311
+ continue;
312
+ }
313
+ if (!scope)
314
+ continue;
315
+ const kv = line.match(/^([A-Za-z0-9._-]+)\s*=\s*(.+)$/);
316
+ if (!kv)
317
+ continue;
318
+ const name = kv[1];
319
+ const value = kv[2].trim();
320
+ let version = 'unknown';
321
+ if (value.startsWith('"') || value.startsWith("'")) {
322
+ version = value.replace(/^["']|["'].*$/g, '');
323
+ }
324
+ else {
325
+ const inline = value.match(/version\s*=\s*["']([^"']+)["']/);
326
+ if (inline)
327
+ version = inline[1];
328
+ }
329
+ out.push(dep('cargo', name, version, scope));
330
+ }
331
+ return out;
332
+ }
333
+ /**
334
+ * Parse a Go `go.mod`. Collects `require` directives in both the grouped
335
+ * `require ( ... )` block and single-line `require path v1.2.3` forms.
336
+ * A `// indirect` marker maps to the `optional` scope. The module path is
337
+ * the purl name (`pkg:golang/github.com/foo/bar@v1.2.3`).
338
+ */
339
+ export function parseGoDependencies(goMod) {
340
+ if (!goMod)
341
+ return [];
342
+ const out = [];
343
+ let inBlock = false;
344
+ for (const raw of goMod.split(/\r?\n/)) {
345
+ const line = raw.trim();
346
+ if (!line || line.startsWith('//'))
347
+ continue;
348
+ if (!inBlock && /^require\s*\($/.test(line)) {
349
+ inBlock = true;
350
+ continue;
351
+ }
352
+ if (inBlock && line === ')') {
353
+ inBlock = false;
354
+ continue;
355
+ }
356
+ let spec;
357
+ if (inBlock)
358
+ spec = line;
359
+ else if (/^require\s+/.test(line))
360
+ spec = line.replace(/^require\s+/, '');
361
+ else
362
+ continue;
363
+ const indirect = /\/\/\s*indirect/.test(spec);
364
+ spec = spec.replace(/\/\/.*$/, '').trim();
365
+ const m = spec.match(/^(\S+)\s+(\S+)$/);
366
+ if (!m)
367
+ continue;
368
+ out.push(dep('golang', m[1], m[2], indirect ? 'optional' : 'required'));
369
+ }
370
+ return out;
371
+ }
372
+ // ---------------------------------------------------------------------------
373
+ // aggregation
374
+ // ---------------------------------------------------------------------------
375
+ /**
376
+ * Parse every manifest present in a {@link DependencyContext} into one
377
+ * de-duplicated dependency list. De-dup key is `ecosystem|name|version|scope`,
378
+ * so the same package declared once stays once but a genuine dev/required
379
+ * split is preserved.
380
+ */
381
+ export function collectDependencies(ctx) {
382
+ if (!ctx)
383
+ return [];
384
+ const all = [];
385
+ if (ctx.js?.packageJson)
386
+ all.push(...parseNpmDependencies(ctx.js.packageJson));
387
+ if (ctx.python?.requirementsTxt)
388
+ all.push(...parsePypiDependencies(ctx.python.requirementsTxt));
389
+ if (ctx.python?.pyprojectToml)
390
+ all.push(...parsePyprojectDependencies(ctx.python.pyprojectToml));
391
+ if (ctx.java?.pomXml)
392
+ all.push(...parseMavenDependencies(ctx.java.pomXml));
393
+ if (ctx.java?.buildGradle)
394
+ all.push(...parseGradleDependencies(ctx.java.buildGradle));
395
+ if (ctx.rust?.cargoToml)
396
+ all.push(...parseCargoDependencies(ctx.rust.cargoToml));
397
+ const seen = new Set();
398
+ const deduped = [];
399
+ for (const d of all) {
400
+ const key = `${d.ecosystem}|${d.name}|${d.version}|${d.scope}`;
401
+ if (seen.has(key))
402
+ continue;
403
+ seen.add(key);
404
+ deduped.push(d);
405
+ }
406
+ return deduped;
407
+ }
408
+ // ---------------------------------------------------------------------------
409
+ // emitters
410
+ // ---------------------------------------------------------------------------
411
+ /** Emit a CycloneDX 1.5 BOM document object (serialize with `JSON.stringify`). */
412
+ export function toCycloneDx(deps, meta = {}) {
413
+ const bom = {
414
+ bomFormat: 'CycloneDX',
415
+ specVersion: '1.5',
416
+ version: 1,
417
+ };
418
+ if (meta.serialNumber)
419
+ bom.serialNumber = meta.serialNumber;
420
+ const metadata = {};
421
+ if (meta.timestamp)
422
+ metadata.timestamp = meta.timestamp;
423
+ metadata.tools = [{ vendor: 'Cognium', name: meta.tool ?? 'circle-ir' }];
424
+ if (meta.name) {
425
+ metadata.component = {
426
+ type: 'application',
427
+ name: meta.name,
428
+ ...(meta.version ? { version: meta.version } : {}),
429
+ };
430
+ }
431
+ bom.metadata = metadata;
432
+ bom.components = deps.map((d) => ({
433
+ type: 'library',
434
+ name: d.name,
435
+ version: d.version,
436
+ purl: d.purl,
437
+ scope: d.scope === 'dev' ? 'excluded' : d.scope === 'optional' ? 'optional' : 'required',
438
+ 'bom-ref': d.purl,
439
+ }));
440
+ return bom;
441
+ }
442
+ /** SPDX identifiers allow only `[a-zA-Z0-9.-]`; sanitize everything else. */
443
+ function spdxId(raw) {
444
+ return raw.replace(/[^a-zA-Z0-9.-]/g, '-');
445
+ }
446
+ /** Emit an SPDX 2.3 document object (serialize with `JSON.stringify`). */
447
+ export function toSpdx(deps, meta = {}) {
448
+ const docName = meta.name ?? 'document';
449
+ const packages = deps.map((d, i) => ({
450
+ SPDXID: `SPDXRef-Package-${spdxId(d.ecosystem)}-${spdxId(d.name)}-${i}`,
451
+ name: d.name,
452
+ versionInfo: d.version,
453
+ downloadLocation: 'NOASSERTION',
454
+ filesAnalyzed: false,
455
+ externalRefs: [
456
+ {
457
+ referenceCategory: 'PACKAGE-MANAGER',
458
+ referenceType: 'purl',
459
+ referenceLocator: d.purl,
460
+ },
461
+ ],
462
+ }));
463
+ const relationships = packages.map((p) => ({
464
+ spdxElementId: 'SPDXRef-DOCUMENT',
465
+ relatedSpdxElement: p.SPDXID,
466
+ relationshipType: 'DESCRIBES',
467
+ }));
468
+ return {
469
+ spdxVersion: 'SPDX-2.3',
470
+ dataLicense: 'CC0-1.0',
471
+ SPDXID: 'SPDXRef-DOCUMENT',
472
+ name: docName,
473
+ documentNamespace: meta.namespace ?? `https://cognium.dev/spdxdocs/${spdxId(docName)}`,
474
+ creationInfo: {
475
+ created: meta.timestamp ?? '1970-01-01T00:00:00Z',
476
+ creators: [`Tool: ${meta.tool ?? 'circle-ir'}`],
477
+ },
478
+ packages,
479
+ relationships,
480
+ };
481
+ }
482
+ //# sourceMappingURL=sbom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sbom.js","sourceRoot":"","sources":["../../src/analysis/sbom.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,8 @@
4
4
  * A universal library for static analysis and taint tracking.
5
5
  */
6
6
  export { initAnalyzer, analyze, analyzeForAPI, analyzeProject, isAnalyzerInitialized, resetAnalyzer, type AnalyzerOptions, } from './analyzer.js';
7
+ export { parseNpmDependencies, parsePypiDependencies, parsePyprojectDependencies, parseMavenDependencies, parseGradleDependencies, parseCargoDependencies, parseGoDependencies, collectDependencies, toCycloneDx, toSpdx, } from './analysis/sbom.js';
8
+ export type { Dependency, Ecosystem, DependencyScope, SbomMetadata, } from './analysis/sbom.js';
7
9
  export type { NamingConventionOptions } from './analysis/passes/naming-convention-pass.js';
8
10
  export type { DependencyFanOutOptions } from './analysis/passes/dependency-fan-out-pass.js';
9
11
  export type { UnboundedCollectionOptions } from './analysis/passes/unbounded-collection-pass.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,6 +5,8 @@
5
5
  */
6
6
  // Main analyzer
7
7
  export { initAnalyzer, analyze, analyzeForAPI, analyzeProject, isAnalyzerInitialized, resetAnalyzer, } from './analyzer.js';
8
+ // SBOM generation (deterministic — CycloneDX 1.5 / SPDX 2.3 from manifests)
9
+ export { parseNpmDependencies, parsePypiDependencies, parsePyprojectDependencies, parseMavenDependencies, parseGradleDependencies, parseCargoDependencies, parseGoDependencies, collectDependencies, toCycloneDx, toSpdx, } from './analysis/sbom.js';
8
10
  // Runtime values, not just types. `SourceType` / `SinkType` above are
9
11
  // `export type`, so re-exporting the unions alone gives consumers nothing to
10
12
  // import at runtime — which is exactly what happened in 3.197.0, where the
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,OAAO,EACP,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,aAAa,GAEd,MAAM,eAAe,CAAC;AAyEvB,sEAAsE;AACtE,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,qEAAqE;AACrE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAY5D,sCAAsC;AACtC,OAAO,EACL,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,eAAe,GAMhB,MAAM,iBAAiB,CAAC;AAEzB,kBAAkB;AAClB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,MAAM,iBAAiB,CAAC;AAEzB,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,gCAAgC,EAChC,0BAA0B,EAC1B,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,kBAAkB,GAMnB,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iCAAiC,CAAC;AAExF,uBAAuB;AACvB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,mBAAmB;AACnB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAY9B,gCAAgC;AAChC,OAAO,EACL,MAAM,EACN,SAAS,EACT,eAAe,EACf,WAAW,EACX,WAAW,GAIZ,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,OAAO,EACP,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,aAAa,GAEd,MAAM,eAAe,CAAC;AAEvB,4EAA4E;AAC5E,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,MAAM,GACP,MAAM,oBAAoB,CAAC;AA+E5B,sEAAsE;AACtE,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,qEAAqE;AACrE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAY5D,sCAAsC;AACtC,OAAO,EACL,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,eAAe,GAMhB,MAAM,iBAAiB,CAAC;AAEzB,kBAAkB;AAClB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,MAAM,iBAAiB,CAAC;AAEzB,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,gCAAgC,EAChC,0BAA0B,EAC1B,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,kBAAkB,GAMnB,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iCAAiC,CAAC;AAExF,uBAAuB;AACvB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,mBAAmB;AACnB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAY9B,gCAAgC;AAChC,OAAO,EACL,MAAM,EACN,SAAS,EACT,eAAe,EACf,WAAW,EACX,WAAW,GAIZ,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "circle-ir",
3
- "version": "3.201.0",
3
+ "version": "3.203.0",
4
4
  "description": "High-performance Static Application Security Testing (SAST) library for detecting security vulnerabilities through taint analysis",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",