| ... | ... | @@ -67,7 +67,7 @@ interface CustomNoticeConfigEntry { |
| 67 | 67 | } |
| 68 | 68 | |
| 69 | 69 | interface PackageNoticeOverrideConfigEntry { |
| 70 | | readonly generatedNotice?: GeneratedNoticeConfigEntry; |
| 70 | readonly generatedNotices?: ReadonlyArray<GeneratedNoticeConfigEntry>; |
| 71 | 71 | readonly license?: string; |
| 72 | 72 | readonly name?: string; |
| 73 | 73 | readonly noticeFile?: string; |
| ... | ... | @@ -257,8 +257,16 @@ function decodePackageOverrides(value: unknown): ReadonlyArray<PackageNoticeOver |
| 257 | 257 | entry.generatedNotice === undefined |
| 258 | 258 | ? undefined |
| 259 | 259 | : decodeGeneratedNotice(entry.generatedNotice, `${context} generated notice`); |
| 260 | | if (noticeFile !== undefined && generatedNotice !== undefined) { |
| 261 | | throw new Error(`${context} cannot define both "noticeFile" and "generatedNotice".`); |
| 260 | const generatedNotices = decodeGeneratedNotices(entry.generatedNotices, context); |
| 261 | if ( |
| 262 | Number(noticeFile !== undefined) + |
| 263 | Number(generatedNotice !== undefined) + |
| 264 | Number(generatedNotices !== undefined) > |
| 265 | 1 |
| 266 | ) { |
| 267 | throw new Error( |
| 268 | `${context} can define only one of "noticeFile", "generatedNotice", or "generatedNotices".`, |
| 269 | ); |
| 262 | 270 | } |
| 263 | 271 | const sourceUrl = readOptionalString(entry, "sourceUrl", context); |
| 264 | 272 | return { |
| ... | ... | @@ -267,7 +275,8 @@ function decodePackageOverrides(value: unknown): ReadonlyArray<PackageNoticeOver |
| 267 | 275 | ...(version !== undefined ? { version } : {}), |
| 268 | 276 | ...(license !== undefined ? { license } : {}), |
| 269 | 277 | ...(noticeFile !== undefined ? { noticeFile } : {}), |
| 270 | | ...(generatedNotice !== undefined ? { generatedNotice } : {}), |
| 278 | ...(generatedNotice !== undefined ? { generatedNotices: [generatedNotice] } : {}), |
| 279 | ...(generatedNotices !== undefined ? { generatedNotices } : {}), |
| 271 | 280 | ...(sourceUrl !== undefined ? { sourceUrl } : {}), |
| 272 | 281 | }; |
| 273 | 282 | }); |
| ... | ... | @@ -396,9 +405,7 @@ function configuredGeneratedNotices( |
| 396 | 405 | ): ReadonlyArray<GeneratedNoticeConfigEntry> { |
| 397 | 406 | return [ |
| 398 | 407 | ...config.customNotices.flatMap((notice) => notice.generatedNotices ?? []), |
| 399 | | ...config.packageOverrides.flatMap((override) => |
| 400 | | override.generatedNotice ? [override.generatedNotice] : [], |
| 401 | | ), |
| 408 | ...config.packageOverrides.flatMap((override) => override.generatedNotices ?? []), |
| 402 | 409 | ]; |
| 403 | 410 | } |
| 404 | 411 | |
| ... | ... | @@ -780,9 +787,9 @@ async function packageEntry( |
| 780 | 787 | } |
| 781 | 788 | |
| 782 | 789 | const repositoryKey = repositoryNoticeKey(collected.packageJson, license); |
| 783 | | const noticeText = override?.generatedNotice |
| 790 | const noticeText = override?.generatedNotices |
| 784 | 791 | ? await generatedNoticeText( |
| 785 | | [override.generatedNotice], |
| 792 | override.generatedNotices, |
| 786 | 793 | configDirectory, |
| 787 | 794 | allowMissingGeneratedNotices, |
| 788 | 795 | ) |
| ... | ... | @@ -793,7 +800,7 @@ async function packageEntry( |
| 793 | 800 | : ((await packageNoticeText(collected.packageRoot, packageNotices)) ?? |
| 794 | 801 | (repositoryKey ? repositoryNotices.get(repositoryKey) : undefined)); |
| 795 | 802 | if (!noticeText) { |
| 796 | | if (override?.generatedNotice && allowMissingGeneratedNotices) return null; |
| 803 | if (override?.generatedNotices && allowMissingGeneratedNotices) return null; |
| 797 | 804 | throw new Error( |
| 798 | 805 | `${name}@${version} does not include a license or notice file. Add a package override with "noticeFile" or "generatedNotice" in the third-party license config.`, |
| 799 | 806 | ); |