diff --git a/scripts/build/build-license.js b/scripts/build/build-dependencies-license.js similarity index 68% rename from scripts/build/build-license.js rename to scripts/build/build-dependencies-license.js index 6239194dc..e3039d975 100644 --- a/scripts/build/build-license.js +++ b/scripts/build/build-dependencies-license.js @@ -4,8 +4,6 @@ import { outdent } from "outdent"; import rollupPluginLicense from "rollup-plugin-license"; import { DIST_DIR, PROJECT_ROOT } from "../utils/index.js"; -const PROJECT_LICENSE_FILE = path.join(PROJECT_ROOT, "LICENSE"); -const LICENSE_FILE = path.join(DIST_DIR, "LICENSE"); const separator = `\n${"-".repeat(40)}\n\n`; function toBlockQuote(text) { @@ -44,7 +42,7 @@ function getDependencies(results) { return dependencies; } -async function getLicenseText(dependencies) { +function getLicenseText(dependencies) { dependencies = dependencies.filter( (dependency, index) => // Exclude ourself @@ -63,8 +61,6 @@ async function getLicenseText(dependencies) { dependencyA.version.localeCompare(dependencyB.version), ); - const prettierLicense = await fs.readFile(PROJECT_LICENSE_FILE, "utf8"); - const licenses = [ ...new Set( dependencies @@ -73,31 +69,16 @@ async function getLicenseText(dependencies) { ), ]; - const text = outdent` - # Prettier license + const head = outdent` + # Licenses of bundled dependencies - Prettier is released under the MIT license: - - ${prettierLicense.trim()} + The published Prettier artifact additionally contains code with the following licenses: + ${new Intl.ListFormat("en-US", { type: "conjunction" }).format(licenses)}. `; - if (licenses.length === 0) { - return text; - } - - const parts = [ - text, - outdent` - ## Licenses of bundled dependencies - - The published Prettier artifact additionally contains code with the following licenses: - ${licenses.join(", ")} - `, - ]; - const content = dependencies .map((dependency) => { - let text = `### ${dependency.name}@v${dependency.version}\n`; + let text = `## ${dependency.name}@v${dependency.version}\n`; const meta = []; @@ -106,16 +87,16 @@ async function getLicenseText(dependencies) { } if (dependency.license) { - meta.push(`License: ${dependency.license}`); + meta.push(`License: ${dependency.license} `); } if (dependency.homepage) { - meta.push(`Homepage: <${dependency.homepage}>`); + meta.push(`Homepage: <${dependency.homepage}> `); } if (dependency.repository?.url) { - meta.push(`Repository: <${dependency.repository.url}>`); + meta.push(`Repository: <${dependency.repository.url}> `); } if (dependency.author) { - meta.push(`Author: ${dependency.author.text()}`); + meta.push(`Author: ${dependency.author.text()} `); } if (dependency.contributors?.length > 0) { const contributors = dependency.contributors @@ -136,19 +117,14 @@ async function getLicenseText(dependencies) { }) .join(separator); - return [ - ...parts, - outdent` - ## Bundled dependencies - - ${content} - `, - ].join("\n\n"); + return [head, content].join("\n\n"); } -async function buildLicense({ file, files, results, cliOptions }) { +async function buildDependenciesLicense({ file, files, results, cliOptions }) { + const fileName = file.output.file; + if (files.at(-1) !== file) { - throw new Error("license should be last file to build."); + throw new Error(`${fileName} should be last file to build.`); } const shouldBuildLicense = @@ -157,7 +133,7 @@ async function buildLicense({ file, files, results, cliOptions }) { typeof cliOptions.minify !== "boolean"; if (!shouldBuildLicense) { - return; + return { skipped: true }; } const dependencies = getDependencies(results); @@ -166,9 +142,9 @@ async function buildLicense({ file, files, results, cliOptions }) { throw new Error("Fail to collect dependencies."); } - const text = await getLicenseText(dependencies); + const text = getLicenseText(dependencies); - await fs.writeFile(LICENSE_FILE, text); + await fs.writeFile(path.join(DIST_DIR, fileName), text); } -export default buildLicense; +export default buildDependenciesLicense; diff --git a/scripts/build/config.js b/scripts/build/config.js index a22205f94..6cd6a9a41 100644 --- a/scripts/build/config.js +++ b/scripts/build/config.js @@ -4,8 +4,8 @@ import url from "node:url"; import createEsmUtils from "esm-utils"; import { outdent } from "outdent"; import { copyFile, DIST_DIR, PROJECT_ROOT } from "../utils/index.js"; +import buildDependenciesLicense from "./build-dependencies-license.js"; import buildJavascriptModule from "./build-javascript-module.js"; -import buildLicense from "./build-license.js"; import buildPackageJson from "./build-package-json.js"; import buildTypes from "./build-types.js"; import esmifyTypescriptEslint from "./esmify-typescript-eslint.js"; @@ -859,7 +859,13 @@ const metaFiles = [ }, { input: "LICENSE", - build: buildLicense, + build: copyFileBuilder, + }, + { + output: { + file: "THIRD-PARTY-NOTICES.md", + }, + build: buildDependenciesLicense, }, ].map((file) => ({ ...file,