@ploaness/governance 1.7.0 → 1.9.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.
Files changed (53) hide show
  1. package/dist/compliance-report-assets.d.ts +20 -0
  2. package/dist/compliance-report-assets.d.ts.map +1 -0
  3. package/dist/compliance-report-assets.js +223 -0
  4. package/dist/compliance-report-assets.js.map +1 -0
  5. package/dist/compliance-report-html.d.ts +18 -0
  6. package/dist/compliance-report-html.d.ts.map +1 -0
  7. package/dist/compliance-report-html.js +350 -0
  8. package/dist/compliance-report-html.js.map +1 -0
  9. package/dist/compliance-report-markup.d.ts +63 -0
  10. package/dist/compliance-report-markup.d.ts.map +1 -0
  11. package/dist/compliance-report-markup.js +116 -0
  12. package/dist/compliance-report-markup.js.map +1 -0
  13. package/dist/compliance-report-outline.d.ts +33 -0
  14. package/dist/compliance-report-outline.d.ts.map +1 -0
  15. package/dist/compliance-report-outline.js +109 -0
  16. package/dist/compliance-report-outline.js.map +1 -0
  17. package/dist/compliance-report.d.ts +142 -0
  18. package/dist/compliance-report.d.ts.map +1 -0
  19. package/dist/compliance-report.js +240 -0
  20. package/dist/compliance-report.js.map +1 -0
  21. package/dist/index.d.ts +6 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +6 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/license-allowlist.d.ts +14 -0
  26. package/dist/license-allowlist.d.ts.map +1 -1
  27. package/dist/license-allowlist.js +28 -9
  28. package/dist/license-allowlist.js.map +1 -1
  29. package/dist/license-inventory.d.ts +25 -0
  30. package/dist/license-inventory.d.ts.map +1 -0
  31. package/dist/license-inventory.js +41 -0
  32. package/dist/license-inventory.js.map +1 -0
  33. package/dist/pdf-outline.d.ts +7 -0
  34. package/dist/pdf-outline.d.ts.map +1 -0
  35. package/dist/pdf-outline.js +69 -0
  36. package/dist/pdf-outline.js.map +1 -0
  37. package/dist/sbom-policy.d.ts +17 -0
  38. package/dist/sbom-policy.d.ts.map +1 -1
  39. package/dist/sbom-policy.js +76 -1
  40. package/dist/sbom-policy.js.map +1 -1
  41. package/dist/settings-layering.js +1 -1
  42. package/dist/settings-layering.js.map +1 -1
  43. package/dist/settings.d.ts +1 -3
  44. package/dist/settings.d.ts.map +1 -1
  45. package/dist/settings.js +5 -5
  46. package/dist/settings.js.map +1 -1
  47. package/dist/vulnerability-policy.d.ts +42 -29
  48. package/dist/vulnerability-policy.d.ts.map +1 -1
  49. package/dist/vulnerability-policy.js +56 -58
  50. package/dist/vulnerability-policy.js.map +1 -1
  51. package/dist/wiring-policy.js +2 -2
  52. package/dist/wiring-policy.js.map +1 -1
  53. package/package.json +1 -1
@@ -0,0 +1,240 @@
1
+ // The open source software report on dependencies: the evidence behind the licence and vulnerability
2
+ // gates, assembled into one model a reviewer outside the project can read. Everything here is derived from
3
+ // values already read.
4
+ import { asRecord, readKey } from './json-shapes.js';
5
+ import { LICENSE_POLICY, licenseClassOf } from './license-allowlist.js';
6
+ import { coordinateOf } from './license-inventory.js';
7
+ import { severityRank, } from './vulnerability-policy.js';
8
+ const byText = (left, right) => left.localeCompare(right);
9
+ const byName = (left, right) => left.name.localeCompare(right.name) || left.version.localeCompare(right.version);
10
+ // A directory dependency has no version, so it is identified by its name alone.
11
+ const coordinatesOf = (entry) => entry.versions.length === 0
12
+ ? [entry.name]
13
+ : entry.versions.map((version) => coordinateOf(entry.name, version));
14
+ const rowsOf = (entry) => (entry.versions.length === 0 ? [''] : entry.versions).map((version) => ({ version, entry }));
15
+ const reportPackages = (input) => {
16
+ const production = new Set(input.production.flatMap((entry) => coordinatesOf(entry)));
17
+ const direct = new Set(input.directNames);
18
+ return input.packages
19
+ .flatMap((entry) => rowsOf(entry))
20
+ .map(({ version, entry }) => ({
21
+ name: entry.name,
22
+ version,
23
+ license: entry.license,
24
+ licenseClass: licenseClassOf(entry.license),
25
+ isProduction: production.has(version.length > 0 ? coordinateOf(entry.name, version) : entry.name),
26
+ isDirect: direct.has(entry.name),
27
+ homepage: entry.homepage,
28
+ }))
29
+ .toSorted(byName);
30
+ };
31
+ const countLicenses = (packages) => [...new Set(packages.map((row) => row.license))]
32
+ .map((license) => ({
33
+ license,
34
+ licenseClass: licenseClassOf(license),
35
+ count: packages.filter((row) => row.license === license).length,
36
+ }))
37
+ .toSorted((left, right) => right.count - left.count || left.license.localeCompare(right.license));
38
+ const countClasses = (packages) => ({
39
+ permissive: packages.filter((row) => row.licenseClass === 'permissive').length,
40
+ 'weak-copyleft': packages.filter((row) => row.licenseClass === 'weak-copyleft').length,
41
+ refused: packages.filter((row) => row.licenseClass === 'refused').length,
42
+ });
43
+ // Every advisory once, most severe first, so the list reads the way a reviewer triages.
44
+ const reportAdvisories = (classification, packages) => {
45
+ const production = new Set(packages.filter((row) => row.isProduction).map((row) => row.name));
46
+ return [
47
+ ...classification.open.map((advisory) => ({
48
+ advisory,
49
+ isProduction: production.has(advisory.packageName),
50
+ mitigation: undefined,
51
+ isHarnessMitigation: false,
52
+ })),
53
+ ...classification.mitigated.map((entry) => ({
54
+ advisory: entry.advisory,
55
+ isProduction: production.has(entry.advisory.packageName),
56
+ mitigation: entry.exception,
57
+ isHarnessMitigation: entry.isHarnessException,
58
+ })),
59
+ ].toSorted((left, right) => severityRank(right.advisory.severity) - severityRank(left.advisory.severity) ||
60
+ left.advisory.packageName.localeCompare(right.advisory.packageName) ||
61
+ left.advisory.id.localeCompare(right.advisory.id));
62
+ };
63
+ // A line that opens a list item or a copyright statement starts a new line of its own, and so does the line
64
+ // after a heading or a ruled separator. Every other line of a paragraph continues the one before it:
65
+ // licence files are wrapped at a fixed width for a terminal, and keeping those breaks in a proportional
66
+ // column leaves every line ragged. A copyright statement names a year, (c) or the sign, so a sentence that
67
+ // merely wraps before "Copyright Holder" continues.
68
+ const LIST_ITEM = /^(?:[-*+\u{2022}]\s|\(?(?:\d{1,3}|[a-z]|[ivx]{2,4})[.)]\s)/iu;
69
+ const COPYRIGHT_LINE = /^(?:copyright\s+(?:\(c\)|\u{A9}|\d{4})|\u{A9})/iu;
70
+ const PARAGRAPH_BREAK = /\n[ \t]*\n/u;
71
+ // Licence files bundled into a Markdown document quote each licence (`> `) and title it with a heading
72
+ // (`## name`), and list the package's facts as `License: MIT` lines. The markers are markup, not words.
73
+ const QUOTE_MARKERS = /^[ \t]*(?:>[ \t]?)+/u;
74
+ const MARKDOWN_HEADING = /^#{1,6}[ \t]+/u;
75
+ const FIELD_LINE = /^[A-Z][A-Za-z]{1,20}(?: [A-Za-z]{1,20})?:[ \t]/u;
76
+ const SEPARATOR = /^[-=_*~]{3,}$/u;
77
+ const HEADING_LENGTH = 40;
78
+ const LOWERCASE = /\p{Ll}/u;
79
+ const LETTER = /\p{L}/u;
80
+ const HYPHENATED_END = /\p{L}-$/u;
81
+ const LOWERCASE_START = /^\p{Ll}/u;
82
+ // A short line with letters and no lowercase one is a heading such as PREAMBLE, not the start of a sentence.
83
+ const isHeading = (line) => line.length < HEADING_LENGTH && LETTER.test(line) && !LOWERCASE.test(line);
84
+ // The line itself announces something new: a list item, a copyright statement, a field, a heading, a rule.
85
+ const opensLine = (line) => LIST_ITEM.test(line) ||
86
+ COPYRIGHT_LINE.test(line) ||
87
+ FIELD_LINE.test(line) ||
88
+ MARKDOWN_HEADING.test(line) ||
89
+ SEPARATOR.test(line);
90
+ // The line before it stands alone, so nothing continues it: a field, a rule, a heading.
91
+ const endsLine = (previous) => FIELD_LINE.test(previous) || SEPARATOR.test(previous) || MARKDOWN_HEADING.test(previous) || isHeading(previous);
92
+ const startsLine = (previous, line) => opensLine(line) || endsLine(previous);
93
+ const joinLines = (lines, line) => {
94
+ const previous = lines.at(-1);
95
+ if (previous === undefined || startsLine(previous, line)) {
96
+ return [...lines, line];
97
+ }
98
+ // A word broken at a hyphen is rejoined without a space, so `non-` and `exclusive` read `non-exclusive`.
99
+ const separator = HYPHENATED_END.test(previous) && LOWERCASE_START.test(line) ? '' : ' ';
100
+ return [...lines.slice(0, -1), `${previous}${separator}${line}`];
101
+ };
102
+ /**
103
+ * Reflow a licence file for a proportional column. Words and their order are unchanged; only the
104
+ * fixed-width line breaks inside a paragraph are removed, and runs of spaces collapse to one.
105
+ * @param text the licence file as shipped.
106
+ * @returns the text with paragraphs separated by a blank line and kept line breaks by a newline.
107
+ */
108
+ export const reflowLicenseText = (text) => text
109
+ .replaceAll('\r\n', '\n')
110
+ .split('\n')
111
+ .map((line) => line.replace(QUOTE_MARKERS, ''))
112
+ .join('\n')
113
+ .trim()
114
+ .split(PARAGRAPH_BREAK)
115
+ .map((block) => block
116
+ .split('\n')
117
+ .map((line) => line.trim().replaceAll(/[ \t]+/gu, ' '))
118
+ .filter((line) => line.length > 0)
119
+ .reduce((lines, line) => joinLines(lines, line), [])
120
+ .join('\n'))
121
+ .filter((block) => block.length > 0)
122
+ .join('\n\n');
123
+ // Attribution obligations attach to what is distributed, so the notices cover the production graph.
124
+ // Identical texts are printed once; most permissive licences differ only in their copyright line, so
125
+ // the grouping is by the reflowed text rather than by the licence name.
126
+ const groupNotices = (notices, distributed) => {
127
+ const entries = notices
128
+ .filter((notice) => distributed.has(notice.coordinate))
129
+ .flatMap((notice) => notice.files.map((file) => ({
130
+ text: reflowLicenseText(file.text),
131
+ fileName: file.name,
132
+ coordinate: notice.coordinate,
133
+ })));
134
+ return [...new Set(entries.map((entry) => entry.text))]
135
+ .map((text) => {
136
+ const sharing = entries.filter((entry) => entry.text === text);
137
+ return {
138
+ text,
139
+ fileNames: [...new Set(sharing.map((entry) => entry.fileName))].toSorted(byText),
140
+ coordinates: [...new Set(sharing.map((entry) => entry.coordinate))].toSorted(byText),
141
+ };
142
+ })
143
+ .toSorted((left, right) => (left.coordinates[0] ?? '').localeCompare(right.coordinates[0] ?? ''));
144
+ };
145
+ const coordinateOfRow = (row) => row.version.length > 0 ? coordinateOf(row.name, row.version) : row.name;
146
+ const draftReasonsOf = (input, isWithinPolicy) => [
147
+ ...(input.source.isDirty ? ['The working tree has uncommitted changes, so no commit describes this source.'] : []),
148
+ ...(isWithinPolicy ? [] : ["The dependencies don't satisfy the policy this report states."]),
149
+ ];
150
+ /**
151
+ * Assemble the compliance report.
152
+ * @param input the inventory, the vulnerability classification and the provenance already read.
153
+ * @returns the report model the renderer prints.
154
+ */
155
+ export const buildComplianceReport = (input) => {
156
+ const packages = reportPackages(input);
157
+ const refused = packages.filter((row) => row.licenseClass === 'refused');
158
+ const isMeetsPolicy = refused.length === 0 && input.vulnerabilities.open.length === 0 && input.vulnerabilities.deadEntries.length === 0;
159
+ const distributed = new Set(packages
160
+ .filter((row) => row.isProduction)
161
+ .map((row) => coordinateOfRow(row)));
162
+ const shipped = new Set(input.notices
163
+ .filter((notice) => notice.files.length > 0)
164
+ .map((notice) => notice.coordinate));
165
+ return {
166
+ projectName: input.projectName,
167
+ projectDescription: input.projectDescription,
168
+ source: input.source,
169
+ generatedAt: input.generatedAt,
170
+ harnessVersion: input.harnessVersion,
171
+ isWithinPolicy: isMeetsPolicy,
172
+ draftReasons: draftReasonsOf(input, isMeetsPolicy),
173
+ packages,
174
+ productionCount: packages.filter((row) => row.isProduction).length,
175
+ directCount: packages.filter((row) => row.isDirect).length,
176
+ licenseCounts: countLicenses(packages),
177
+ classCounts: countClasses(packages),
178
+ copyleft: packages.filter((row) => row.licenseClass === 'weak-copyleft'),
179
+ refused,
180
+ policy: LICENSE_POLICY,
181
+ vulnerabilities: input.vulnerabilities,
182
+ advisories: reportAdvisories(input.vulnerabilities, packages),
183
+ advisoryRecords: input.advisoryRecords,
184
+ auditedAt: input.auditedAt,
185
+ sbom: input.sbom,
186
+ notices: groupNotices(input.notices, distributed),
187
+ withoutNotice: [...distributed].filter((coordinate) => !shipped.has(coordinate)).toSorted(byText),
188
+ };
189
+ };
190
+ /** Where the compliance report is written unless the command names another directory. */
191
+ export const DEFAULT_REPORT_OUTPUT = 'dist/compliance';
192
+ /** The file name every report starts with, which is also how a stale one is recognised. */
193
+ export const REPORT_FILE_PREFIX = 'oss-compliance-report-';
194
+ const SHORT_COMMIT_LENGTH = 12;
195
+ const NOT_A_NAME_CHARACTER = /[^a-z0-9]+/u;
196
+ /**
197
+ * The report's file name without extension: the project and the commit it describes.
198
+ * @param projectName the root manifest's name, which may be scoped.
199
+ * @param commit the source commit.
200
+ * @returns a name safe on every filesystem.
201
+ */
202
+ export const reportFileStem = (projectName, commit) => {
203
+ const name = projectName
204
+ .toLowerCase()
205
+ .split(NOT_A_NAME_CHARACTER)
206
+ .filter((part) => part.length > 0)
207
+ .join('-');
208
+ return `${REPORT_FILE_PREFIX}${name.length > 0 ? name : 'project'}-${commit.slice(0, SHORT_COMMIT_LENGTH)}`;
209
+ };
210
+ const OUTPUT_OPTION = '--output';
211
+ /**
212
+ * Parse the compliance report command grammar: no argument, or one output directory.
213
+ * @param arguments_ the arguments after the command name.
214
+ * @returns the output directory, or undefined when the arguments are not that grammar.
215
+ */
216
+ export const parseComplianceReportArguments = (arguments_) => {
217
+ if (arguments_.length === 0) {
218
+ return { output: DEFAULT_REPORT_OUTPUT };
219
+ }
220
+ const [option, value = '', ...extra] = arguments_;
221
+ if (option !== OUTPUT_OPTION || extra.length > 0) {
222
+ return undefined;
223
+ }
224
+ return value.length > 0 && !value.startsWith('-') ? { output: value } : undefined;
225
+ };
226
+ const DECLARING_GROUPS = [
227
+ 'dependencies',
228
+ 'devDependencies',
229
+ 'optionalDependencies',
230
+ 'peerDependencies',
231
+ ];
232
+ /**
233
+ * The packages any workspace manifest declares, which is what makes a dependency direct.
234
+ * @param manifests every workspace manifest, as parsed JSON.
235
+ * @returns the declared package names, each once.
236
+ */
237
+ export const directDependencyNames = (manifests) => [
238
+ ...new Set(manifests.flatMap((manifest) => DECLARING_GROUPS.flatMap((group) => Object.keys(asRecord(readKey(manifest, group)))))),
239
+ ];
240
+ //# sourceMappingURL=compliance-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-report.js","sourceRoot":"","sources":["../src/compliance-report.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,2GAA2G;AAC3G,uBAAuB;AACvB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAqB,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC1F,OAAO,EAAE,YAAY,EAAyB,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAGL,YAAY,GAGb,MAAM,2BAA2B,CAAA;AAgHlC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;AAEjF,MAAM,MAAM,GAAG,CAAC,IAAmB,EAAE,KAAoB,EAAU,EAAE,CACnE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAElF,gFAAgF;AAChF,MAAM,aAAa,GAAG,CAAC,KAAuB,EAAqB,EAAE,CACnE,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;IACzB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IACd,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAe,EAAU,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;AAExF,MAAM,MAAM,GAAG,CAAC,KAAuB,EAA6E,EAAE,CACpH,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;AAEtG,MAAM,cAAc,GAAG,CAAC,KAA4B,EAA4B,EAAE;IAChF,MAAM,UAAU,GAAwB,IAAI,GAAG,CAC7C,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAuB,EAAqB,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAC/F,CAAA;IACD,MAAM,MAAM,GAAwB,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IAC9D,OAAO,KAAK,CAAC,QAAQ;SAClB,OAAO,CAAC,CAAC,KAAuB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACnD,GAAG,CACF,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAiB,EAAE,CAAC,CAAC;QACtC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO;QACP,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3C,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACjG,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CACH;SACA,QAAQ,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,QAAkC,EAA2B,EAAE,CACpF,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAkB,EAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;KACpE,GAAG,CACF,CAAC,OAAe,EAAgB,EAAE,CAAC,CAAC;IAClC,OAAO;IACP,YAAY,EAAE,cAAc,CAAC,OAAO,CAAC;IACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,MAAM;CACxF,CAAC,CACH;KACA,QAAQ,CACP,CAAC,IAAkB,EAAE,KAAmB,EAAU,EAAE,CAClD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CACxE,CAAA;AAEL,MAAM,YAAY,GAAG,CAAC,QAAkC,EAA0C,EAAE,CAAC,CAAC;IACpG,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,YAAY,CAAC,CAAC,MAAM;IACtG,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,eAAe,CAAC,CAAC,MAAM;IAC9G,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,MAAM;CACjG,CAAC,CAAA;AAEF,wFAAwF;AACxF,MAAM,gBAAgB,GAAG,CACvB,cAA2C,EAC3C,QAAkC,EACP,EAAE;IAC7B,MAAM,UAAU,GAAwB,IAAI,GAAG,CAC7C,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAkB,EAAU,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CACjH,CAAA;IACD,OAAO;QACL,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CACxB,CAAC,QAAkB,EAAkB,EAAE,CAAC,CAAC;YACvC,QAAQ;YACR,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YAClD,UAAU,EAAE,SAAS;YACrB,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CACH;QACD,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAC7B,CAAC,KAAwB,EAAkB,EAAE,CAAC,CAAC;YAC7C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;YACxD,UAAU,EAAE,KAAK,CAAC,SAAS;YAC3B,mBAAmB,EAAE,KAAK,CAAC,kBAAkB;SAC9C,CAAC,CACH;KACF,CAAC,QAAQ,CACR,CAAC,IAAoB,EAAE,KAAqB,EAAU,EAAE,CACtD,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5E,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CACpD,CAAA;AACH,CAAC,CAAA;AAED,4GAA4G;AAC5G,qGAAqG;AACrG,wGAAwG;AACxG,2GAA2G;AAC3G,oDAAoD;AACpD,MAAM,SAAS,GAAW,8DAA8D,CAAA;AACxF,MAAM,cAAc,GAAW,kDAAkD,CAAA;AACjF,MAAM,eAAe,GAAW,aAAa,CAAA;AAC7C,uGAAuG;AACvG,wGAAwG;AACxG,MAAM,aAAa,GAAW,sBAAsB,CAAA;AACpD,MAAM,gBAAgB,GAAW,gBAAgB,CAAA;AACjD,MAAM,UAAU,GAAW,iDAAiD,CAAA;AAC5E,MAAM,SAAS,GAAW,gBAAgB,CAAA;AAC1C,MAAM,cAAc,GAAW,EAAE,CAAA;AACjC,MAAM,SAAS,GAAW,SAAS,CAAA;AACnC,MAAM,MAAM,GAAW,QAAQ,CAAA;AAC/B,MAAM,cAAc,GAAW,UAAU,CAAA;AACzC,MAAM,eAAe,GAAW,UAAU,CAAA;AAE1C,6GAA6G;AAC7G,MAAM,SAAS,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEvH,2GAA2G;AAC3G,MAAM,SAAS,GAAG,CAAC,IAAY,EAAW,EAAE,CAC1C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IACpB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEtB,wFAAwF;AACxF,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAW,EAAE,CAC7C,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAA;AAEjH,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAErG,MAAM,SAAS,GAAG,CAAC,KAAwB,EAAE,IAAY,EAAqB,EAAE;IAC9E,MAAM,QAAQ,GAAuB,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACjD,IAAI,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAA;IACzB,CAAC;IACD,yGAAyG;IACzG,MAAM,SAAS,GAAW,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;IAChG,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC,CAAA;AAClE,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE,CACxD,IAAI;KACD,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC;KACxB,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;KAC9D,IAAI,CAAC,IAAI,CAAC;KACV,IAAI,EAAE;KACN,KAAK,CAAC,eAAe,CAAC;KACtB,GAAG,CAAC,CAAC,KAAa,EAAU,EAAE,CAC7B,KAAK;KACF,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;KACtE,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KAClD,MAAM,CAAC,CAAC,KAAwB,EAAE,IAAY,EAAqB,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;KACjG,IAAI,CAAC,IAAI,CAAC,CACd;KACA,MAAM,CAAC,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;KACpD,IAAI,CAAC,MAAM,CAAC,CAAA;AAQjB,oGAAoG;AACpG,qGAAqG;AACrG,wEAAwE;AACxE,MAAM,YAAY,GAAG,CAAC,OAAkC,EAAE,WAAgC,EAA0B,EAAE;IACpH,MAAM,OAAO,GAA2B,OAAO;SAC5C,MAAM,CAAC,CAAC,MAAsB,EAAW,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SAC/E,OAAO,CAAC,CAAC,MAAsB,EAA0B,EAAE,CAC1D,MAAM,CAAC,KAAK,CAAC,GAAG,CACd,CAAC,IAAgB,EAAe,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CACH,CACF,CAAA;IACH,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;SACzE,GAAG,CAAC,CAAC,IAAY,EAAe,EAAE;QACjC,MAAM,OAAO,GAA2B,OAAO,CAAC,MAAM,CAAC,CAAC,KAAkB,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;QAC5G,OAAO;YACL,IAAI;YACJ,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAU,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrG,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAU,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC1G,CAAA;IACH,CAAC,CAAC;SACD,QAAQ,CAAC,CAAC,IAAiB,EAAE,KAAkB,EAAU,EAAE,CAC1D,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACtE,CAAA;AACL,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,GAAkB,EAAU,EAAE,CACrD,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;AAEzE,MAAM,cAAc,GAAG,CAAC,KAA4B,EAAE,cAAuB,EAAqB,EAAE,CAAC;IACnG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,+EAA+E,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClH,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC;CAC7F,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAA4B,EAAoB,EAAE;IACtF,MAAM,QAAQ,GAA6B,cAAc,CAAC,KAAK,CAAC,CAAA;IAChE,MAAM,OAAO,GAA6B,QAAQ,CAAC,MAAM,CACvD,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS,CAChE,CAAA;IACD,MAAM,aAAa,GACjB,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAA;IACnH,MAAM,WAAW,GAAwB,IAAI,GAAG,CAC9C,QAAQ;SACL,MAAM,CAAC,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;SACzD,GAAG,CAAC,CAAC,GAAkB,EAAU,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAC7D,CAAA;IACD,MAAM,OAAO,GAAwB,IAAI,GAAG,CAC1C,KAAK,CAAC,OAAO;SACV,MAAM,CAAC,CAAC,MAAsB,EAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACpE,GAAG,CAAC,CAAC,MAAsB,EAAU,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAC9D,CAAA;IACD,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC;QAClD,QAAQ;QACR,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM;QAC1F,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM;QAClF,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC;QACtC,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC;QACnC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,eAAe,CAAC;QAChG,OAAO;QACP,MAAM,EAAE,cAAc;QACtB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,UAAU,EAAE,gBAAgB,CAAC,KAAK,CAAC,eAAe,EAAE,QAAQ,CAAC;QAC7D,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC;QACjD,aAAa,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,UAAkB,EAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;KACnH,CAAA;AACH,CAAC,CAAA;AAED,yFAAyF;AACzF,MAAM,CAAC,MAAM,qBAAqB,GAAW,iBAAiB,CAAA;AAE9D,2FAA2F;AAC3F,MAAM,CAAC,MAAM,kBAAkB,GAAW,wBAAwB,CAAA;AAElE,MAAM,mBAAmB,GAAW,EAAE,CAAA;AACtC,MAAM,oBAAoB,GAAW,aAAa,CAAA;AAElD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,WAAmB,EAAE,MAAc,EAAU,EAAE;IAC5E,MAAM,IAAI,GAAW,WAAW;SAC7B,WAAW,EAAE;SACb,KAAK,CAAC,oBAAoB,CAAC;SAC3B,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SAClD,IAAI,CAAC,GAAG,CAAC,CAAA;IACZ,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAAE,CAAA;AAC7G,CAAC,CAAA;AAED,MAAM,aAAa,GAAW,UAAU,CAAA;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,UAA6B,EACY,EAAE;IAC3C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAA;IAC1C,CAAC;IACD,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,UAAU,CAAA;IACjD,IAAI,MAAM,KAAK,aAAa,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACnF,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAsB;IAC1C,cAAc;IACd,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;CACnB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,SAA6B,EAAqB,EAAE,CAAC;IACzF,GAAG,IAAI,GAAG,CACR,SAAS,CAAC,OAAO,CAAC,CAAC,QAAiB,EAAqB,EAAE,CACzD,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAa,EAAqB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAChH,CACF;CACF,CAAA"}
package/dist/index.d.ts CHANGED
@@ -15,6 +15,10 @@ export * from './bundle-budget.js';
15
15
  export * from './checkov-check.js';
16
16
  export * from './checkov-policy.js';
17
17
  export * from './commit-message.js';
18
+ export * from './compliance-report.js';
19
+ export * from './compliance-report-assets.js';
20
+ export * from './compliance-report-html.js';
21
+ export { contentsPages } from './compliance-report-outline.js';
18
22
  export * from './config-references.js';
19
23
  export * from './container-failure.js';
20
24
  export * from './container-files.js';
@@ -42,6 +46,7 @@ export * from './layout-defects.js';
42
46
  export * from './layout-snapshot.js';
43
47
  export * from './layout-text.js';
44
48
  export * from './license-allowlist.js';
49
+ export * from './license-inventory.js';
45
50
  export * from './network-policy.js';
46
51
  export * from './oxlint-policy.js';
47
52
  export * from './oxlint-report.js';
@@ -55,6 +60,7 @@ export * from './payload-defaults.js';
55
60
  export * from './payload-policy.js';
56
61
  export * from './payload-security.js';
57
62
  export * from './payload-source.js';
63
+ export * from './pdf-outline.js';
58
64
  export * from './production-server.js';
59
65
  export * from './relationship-cleanup.js';
60
66
  export * from './release-age.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -19,6 +19,10 @@ export * from './bundle-budget.js';
19
19
  export * from './checkov-check.js';
20
20
  export * from './checkov-policy.js';
21
21
  export * from './commit-message.js';
22
+ export * from './compliance-report.js';
23
+ export * from './compliance-report-assets.js';
24
+ export * from './compliance-report-html.js';
25
+ export { contentsPages } from './compliance-report-outline.js';
22
26
  export * from './config-references.js';
23
27
  export * from './container-failure.js';
24
28
  export * from './container-files.js';
@@ -46,6 +50,7 @@ export * from './layout-defects.js';
46
50
  export * from './layout-snapshot.js';
47
51
  export * from './layout-text.js';
48
52
  export * from './license-allowlist.js';
53
+ export * from './license-inventory.js';
49
54
  export * from './network-policy.js';
50
55
  export * from './oxlint-policy.js';
51
56
  export * from './oxlint-report.js';
@@ -59,6 +64,7 @@ export * from './payload-defaults.js';
59
64
  export * from './payload-policy.js';
60
65
  export * from './payload-security.js';
61
66
  export * from './payload-source.js';
67
+ export * from './pdf-outline.js';
62
68
  export * from './production-server.js';
63
69
  export * from './relationship-cleanup.js';
64
70
  export * from './release-age.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,20 @@
7
7
  * @returns whether the policy permits it.
8
8
  */
9
9
  export declare const isLicenseAllowed: (expression: string) => boolean;
10
+ /** How the policy admits a declared licence. */
11
+ export type LicenseClass = 'permissive' | 'weak-copyleft' | 'refused';
12
+ /**
13
+ * Classify a declared licence by the least restrictive way the policy admits it. An expression that a
14
+ * permissive choice satisfies is permissive, even when a copyleft alternative is also offered.
15
+ * @param expression the declared licence.
16
+ * @returns the class the policy places it in.
17
+ */
18
+ export declare const licenseClassOf: (expression: string) => LicenseClass;
19
+ /** The license identifiers the policy admits, by group, for a reader of the policy. */
20
+ export declare const LICENSE_POLICY: {
21
+ readonly permissive: readonly string[];
22
+ readonly weakCopyleft: readonly string[];
23
+ };
10
24
  export interface LicensedPackage {
11
25
  readonly name: string;
12
26
  readonly license: string;
@@ -1 +1 @@
1
- {"version":3,"file":"license-allowlist.d.ts","sourceRoot":"","sources":["../src/license-allowlist.ts"],"names":[],"mappings":"AAmKA;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,OAQrD,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAGD,eAAO,MAAM,qBAAqB,GAAI,UAAU,SAAS,eAAe,EAAE,KAAG,SAAS,eAAe,EACP,CAAA"}
1
+ {"version":3,"file":"license-allowlist.d.ts","sourceRoot":"","sources":["../src/license-allowlist.ts"],"names":[],"mappings":"AAoLA;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,OAAiE,CAAA;AAEvH,gDAAgD;AAChD,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,eAAe,GAAG,SAAS,CAAA;AAErE;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,YAAY,MAAM,KAAG,YAKnD,CAAA;AAED,uFAAuF;AACvF,eAAO,MAAM,cAAc,EAAE;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;CACiB,CAAA;AAE3D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAGD,eAAO,MAAM,qBAAqB,GAAI,UAAU,SAAS,eAAe,EAAE,KAAG,SAAS,eAAe,EACP,CAAA"}
@@ -73,12 +73,14 @@ const ALLOWED = new Set([...PERMISSIVE, ...WEAK_COPYLEFT]);
73
73
  // least three ways. The allowlist is matched on a folded id so a casing difference is not a licence
74
74
  // decision. A `WITH` exception (`GPL-2.0 WITH Classpath-exception-2.0`) names the same licence plus a
75
75
  // grant, so the licence half decides; a `+` suffix means "or later", which is the same licence too.
76
- const ALLOWED_FOLDED = new Set([...ALLOWED].map((id) => id.toLowerCase()));
76
+ const folded = (ids) => new Set(ids.map((id) => id.toLowerCase()));
77
+ const ALLOWED_FOLDED = folded([...ALLOWED]);
78
+ const PERMISSIVE_FOLDED = folded(PERMISSIVE);
77
79
  // Anchored on a single space run rather than a nested quantifier: `\s+WITH\s+(?:\S.*)?$` backtracks
78
80
  // super-linearly on a long id, and an expression comes from a registry rather than from this repository.
79
81
  const WITH_EXCEPTION = /\sWITH\s[\s\S]*$/i;
80
82
  const OR_LATER = /\+$/;
81
- const isAllowedId = (id) => ALLOWED_FOLDED.has(id.trim().replace(WITH_EXCEPTION, '').replace(OR_LATER, '').toLowerCase());
83
+ const acceptsIdIn = (accepted) => (id) => accepted.has(id.trim().replace(WITH_EXCEPTION, '').replace(OR_LATER, '').toLowerCase());
82
84
  // The operators, lowest precedence first. SPDX binds AND more tightly than OR, so a correct evaluator
83
85
  // splits on OR before AND - and the ONLY correct order is that one. Splitting on AND first, after
84
86
  // stripping the parentheses, turned `(MIT OR Apache-2.0) AND ISC` into the operands
@@ -132,6 +134,17 @@ const unwrap = (expression) => {
132
134
  ? unwrap(trimmed.slice(1, -1))
133
135
  : trimmed;
134
136
  };
137
+ const matchesPolicy = (expression, isAccepted) => {
138
+ const clean = unwrap(expression);
139
+ const alternatives = splitOutside(clean, OR);
140
+ if (alternatives.length > 1) {
141
+ return alternatives.some((part) => matchesPolicy(part, isAccepted));
142
+ }
143
+ const conjuncts = splitOutside(clean, AND);
144
+ return conjuncts.length > 1
145
+ ? conjuncts.every((part) => matchesPolicy(part, isAccepted))
146
+ : isAccepted(clean);
147
+ };
135
148
  /**
136
149
  * Evaluate an SPDX licence expression against the policy.
137
150
  *
@@ -140,15 +153,21 @@ const unwrap = (expression) => {
140
153
  * @param expression the declared licence, which may be a compound SPDX expression.
141
154
  * @returns whether the policy permits it.
142
155
  */
143
- export const isLicenseAllowed = (expression) => {
144
- const clean = unwrap(expression);
145
- const alternatives = splitOutside(clean, OR);
146
- if (alternatives.length > 1) {
147
- return alternatives.some((part) => isLicenseAllowed(part));
156
+ export const isLicenseAllowed = (expression) => matchesPolicy(expression, acceptsIdIn(ALLOWED_FOLDED));
157
+ /**
158
+ * Classify a declared licence by the least restrictive way the policy admits it. An expression that a
159
+ * permissive choice satisfies is permissive, even when a copyleft alternative is also offered.
160
+ * @param expression the declared licence.
161
+ * @returns the class the policy places it in.
162
+ */
163
+ export const licenseClassOf = (expression) => {
164
+ if (matchesPolicy(expression, acceptsIdIn(PERMISSIVE_FOLDED))) {
165
+ return 'permissive';
148
166
  }
149
- const conjuncts = splitOutside(clean, AND);
150
- return conjuncts.length > 1 ? conjuncts.every((part) => isLicenseAllowed(part)) : isAllowedId(clean);
167
+ return isLicenseAllowed(expression) ? 'weak-copyleft' : 'refused';
151
168
  };
169
+ /** The license identifiers the policy admits, by group, for a reader of the policy. */
170
+ export const LICENSE_POLICY = { permissive: PERMISSIVE, weakCopyleft: WEAK_COPYLEFT };
152
171
  // Return the packages whose license is not permitted by policy; an empty array means a clean tree.
153
172
  export const findLicenseViolations = (packages) => packages.filter((package_) => !isLicenseAllowed(package_.license));
154
173
  //# sourceMappingURL=license-allowlist.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"license-allowlist.js","sourceRoot":"","sources":["../src/license-allowlist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"license-allowlist.js","sourceRoot":"","sources":["../src/license-allowlist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /** One package of the resolved set as the licence inventory reports it. */
2
+ export interface InventoryPackage {
3
+ readonly name: string;
4
+ /** Every installed version. A directory dependency has none, because pnpm reports its version as null. */
5
+ readonly versions: readonly string[];
6
+ readonly license: string;
7
+ /** The installed package directories, where the licence files the package ships are found. */
8
+ readonly paths: readonly string[];
9
+ readonly homepage: string | undefined;
10
+ }
11
+ /**
12
+ * Read the stdout of `pnpm licenses list --json`: packages grouped by their declared licence.
13
+ * @param json the command's stdout.
14
+ * @returns every reported package, or undefined when the text is not that inventory.
15
+ */
16
+ export declare const parseLicenseInventory: (json: string) => readonly InventoryPackage[] | undefined;
17
+ /** The coordinate a package version is identified by across the inventory, the SBOM and the report. */
18
+ export declare const coordinateOf: (name: string, version: string) => string;
19
+ /**
20
+ * Index the declared licence of every installed package version.
21
+ * @param packages the parsed inventory.
22
+ * @returns the licence by `name@version`; a directory dependency without a version is absent.
23
+ */
24
+ export declare const licensesByCoordinate: (packages: readonly InventoryPackage[]) => ReadonlyMap<string, string>;
25
+ //# sourceMappingURL=license-inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-inventory.d.ts","sourceRoot":"","sources":["../src/license-inventory.ts"],"names":[],"mappings":"AAGA,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0GAA0G;IAC1G,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC;AAoBD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,SAAS,gBAAgB,EAAE,GAAG,SASlF,CAAA;AAED,uGAAuG;AACvG,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,MAA8B,CAAA;AAE3F;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,UAAU,SAAS,gBAAgB,EAAE,KAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAQpG,CAAA"}
@@ -0,0 +1,41 @@
1
+ // The licence inventory pnpm reports for the resolved set, read into one shape every consumer shares.
2
+ import { asRecord, asText, isArray, isRecord, parseJsonc } from './json-shapes.js';
3
+ const strings = (raw) => isArray(raw) ? raw.filter((entry) => typeof entry === 'string') : [];
4
+ const asInventoryPackage = (raw, group) => {
5
+ const entry = asRecord(raw);
6
+ const homepage = asText(entry['homepage']);
7
+ // The group key is the licence pnpm grouped the entry under; the entry repeats it, and the entry wins
8
+ // when both are present because it is the value read from the package itself.
9
+ const license = asText(entry['license']);
10
+ return {
11
+ name: asText(entry['name']),
12
+ versions: strings(entry['versions']),
13
+ license: license.length > 0 ? license : group,
14
+ paths: strings(entry['paths']),
15
+ homepage: homepage.length > 0 ? homepage : undefined,
16
+ };
17
+ };
18
+ /**
19
+ * Read the stdout of `pnpm licenses list --json`: packages grouped by their declared licence.
20
+ * @param json the command's stdout.
21
+ * @returns every reported package, or undefined when the text is not that inventory.
22
+ */
23
+ export const parseLicenseInventory = (json) => {
24
+ const inventory = parseJsonc(json).value;
25
+ if (!isRecord(inventory) || isArray(inventory)) {
26
+ return undefined;
27
+ }
28
+ return Object.entries(inventory).flatMap(([group, entries]) => (isArray(entries) ? entries : []).map((entry) => asInventoryPackage(entry, group)));
29
+ };
30
+ /** The coordinate a package version is identified by across the inventory, the SBOM and the report. */
31
+ export const coordinateOf = (name, version) => `${name}@${version}`;
32
+ /**
33
+ * Index the declared licence of every installed package version.
34
+ * @param packages the parsed inventory.
35
+ * @returns the licence by `name@version`; a directory dependency without a version is absent.
36
+ */
37
+ export const licensesByCoordinate = (packages) => new Map(packages.flatMap((entry) => entry.versions.map((version) => [
38
+ coordinateOf(entry.name, version),
39
+ entry.license,
40
+ ])));
41
+ //# sourceMappingURL=license-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-inventory.js","sourceRoot":"","sources":["../src/license-inventory.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAalF,MAAM,OAAO,GAAG,CAAC,GAAY,EAAqB,EAAE,CAClD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAEhG,MAAM,kBAAkB,GAAG,CAAC,GAAY,EAAE,KAAa,EAAoB,EAAE;IAC3E,MAAM,KAAK,GAA4B,QAAQ,CAAC,GAAG,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAW,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;IAClD,sGAAsG;IACtG,8EAA8E;IAC9E,MAAM,OAAO,GAAW,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;IAChD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;QAC7C,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACrD,CAAA;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAA2C,EAAE;IAC7F,MAAM,SAAS,GAAY,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAA;IACjD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CACtC,CAAC,CAAC,KAAK,EAAE,OAAO,CAA6B,EAA+B,EAAE,CAC5E,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAc,EAAoB,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAChH,CAAA;AACH,CAAC,CAAA;AAED,uGAAuG;AACvG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,OAAe,EAAU,EAAE,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAA;AAE3F;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAqC,EAA+B,EAAE,CACzG,IAAI,GAAG,CACL,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAuB,EAA0C,EAAE,CACnF,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAe,EAA6B,EAAE,CAAC;IACjE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;IACjC,KAAK,CAAC,OAAO;CACd,CAAC,CACH,CACF,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Map each bookmark title of a PDF to the page it points at.
3
+ * @param pdf the PDF bytes, read as Latin-1 text.
4
+ * @returns the 1-based page number by bookmark title; empty when the structure is not recognised.
5
+ */
6
+ export declare const outlinePages: (pdf: string) => ReadonlyMap<string, number>;
7
+ //# sourceMappingURL=pdf-outline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-outline.d.ts","sourceRoot":"","sources":["../src/pdf-outline.ts"],"names":[],"mappings":"AAmEA;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAqBpE,CAAA"}
@@ -0,0 +1,69 @@
1
+ // Read the page each bookmark of a Chromium-printed PDF points at. The browser cannot number a table of
2
+ // contents while it paginates, so the report is printed once, its bookmarks are read here, and the
3
+ // numbers are written into the contents before the final print. Only the uncompressed object syntax
4
+ // Chromium writes is read; anything else yields no numbers rather than wrong ones.
5
+ const OBJECT_HEADER = /(\d{1,10}) 0 obj\b/u;
6
+ const KIDS = /\/Kids\s*\[([^\]]*)\]/u;
7
+ const REFERENCE = /(\d{1,10}) 0 R\b/gu;
8
+ const CATALOG = /\/Type\s{0,4}\/Catalog\b/u;
9
+ const PAGES_ROOT = /\/Pages\s{1,4}(\d{1,10}) 0 R/u;
10
+ const TITLE = /\/Title\s*(\((?:\\.|[^\\)])*\)|<[0-9A-Fa-f\s]*>)/u;
11
+ const DESTINATION = /\/Dest\s{0,4}\[\s{0,4}(\d{1,10}) 0 R/u;
12
+ const OCTAL = /^[0-7]{1,3}/u;
13
+ const ESCAPES = { n: '\n', r: '\r', t: '\t', b: '\b', f: '\f' };
14
+ const HEX_RADIX = 16;
15
+ const OCTAL_RADIX = 8;
16
+ const UTF16_UNIT = 4;
17
+ const BOM = 'FEFF';
18
+ // Each object runs to its `endobj`. Its dictionary is what precedes any stream, which keeps the binary
19
+ // stream data out of every pattern below.
20
+ const objectsOf = (pdf) => new Map(pdf.split('endobj').flatMap((chunk) => {
21
+ const header = OBJECT_HEADER.exec(chunk);
22
+ if (header === null) {
23
+ return [];
24
+ }
25
+ const body = chunk.slice(header.index + header[0].length);
26
+ const stream = body.indexOf('stream');
27
+ return [[header[1] ?? '', stream === -1 ? body : body.slice(0, stream)]];
28
+ }));
29
+ const referencesIn = (text) => [...text.matchAll(REFERENCE)].map((match) => match[1] ?? '');
30
+ // A page-tree node lists its kids; a kid without kids of its own is a page. Depth-first order is page order.
31
+ const pagesUnder = (node, objects, seen) => {
32
+ const kids = KIDS.exec(objects.get(node) ?? '')?.[1];
33
+ if (kids === undefined || seen.has(node)) {
34
+ return [node];
35
+ }
36
+ const visited = new Set([...seen, node]);
37
+ return referencesIn(kids).flatMap((kid) => pagesUnder(kid, objects, visited));
38
+ };
39
+ const literalString = (body) => body.replaceAll(/\\([0-7]{1,3}|[\s\S])/gu, (_whole, escaped) => OCTAL.test(escaped) ? String.fromCodePoint(Number.parseInt(escaped, OCTAL_RADIX)) : (ESCAPES[escaped] ?? escaped));
40
+ const hexString = (body) => {
41
+ const hex = body.replaceAll(/\s/gu, '').toUpperCase();
42
+ const units = hex.startsWith(BOM) ? hex.slice(BOM.length) : hex;
43
+ return Array.from({ length: Math.floor(units.length / UTF16_UNIT) }, (_unused, index) => String.fromCodePoint(Number.parseInt(units.slice(index * UTF16_UNIT, (index + 1) * UTF16_UNIT), HEX_RADIX))).join('');
44
+ };
45
+ const decodeTitle = (raw) => raw.startsWith('(') ? literalString(raw.slice(1, -1)) : hexString(raw.slice(1, -1));
46
+ /**
47
+ * Map each bookmark title of a PDF to the page it points at.
48
+ * @param pdf the PDF bytes, read as Latin-1 text.
49
+ * @returns the 1-based page number by bookmark title; empty when the structure is not recognised.
50
+ */
51
+ export const outlinePages = (pdf) => {
52
+ const objects = objectsOf(pdf);
53
+ const root = [...objects.values()]
54
+ .map((body) => (CATALOG.test(body) ? PAGES_ROOT.exec(body)?.[1] : undefined))
55
+ .find((found) => found !== undefined);
56
+ if (root === undefined) {
57
+ return new Map();
58
+ }
59
+ const order = new Map(pagesUnder(root, objects, new Set()).map((page, index) => [
60
+ page,
61
+ index + 1,
62
+ ]));
63
+ return new Map([...objects.values()].flatMap((body) => {
64
+ const title = TITLE.exec(body)?.[1];
65
+ const page = order.get(DESTINATION.exec(body)?.[1] ?? '');
66
+ return title === undefined || page === undefined ? [] : [[decodeTitle(title), page]];
67
+ }));
68
+ };
69
+ //# sourceMappingURL=pdf-outline.js.map