From 629408e8fc95d90e5b8ec02555fef85548b158b2 Mon Sep 17 00:00:00 2001 From: Steffen Becker Date: Sun, 6 Sep 2026 21:20:44 +0200 Subject: [PATCH] docs: the vendored count.js carries its ISC notice in licenses.txt The collector walks node_modules, so a file copied into public/ had no entry. The copy has no copyright line of its own; the text is upstream's LICENSE section for count.js, with the project's copyright holder. --- public/licenses.txt | 18 ++++++++++++++++++ scripts/collect-licenses.mjs | 22 +++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/public/licenses.txt b/public/licenses.txt index 2109a35..c320ea8 100644 --- a/public/licenses.txt +++ b/public/licenses.txt @@ -9,6 +9,24 @@ full. Fonts and language data carry their licenses beside them, under Generated by scripts/collect-licenses.mjs — do not edit by hand. +------------------------------------------------------------------------------ +public/count.js (GoatCounter) — ISC — Martin Tournoij +------------------------------------------------------------------------------ + +Copyright © Martin Tournoij + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + ------------------------------------------------------------------------------ @babel/runtime — MIT — The Babel Team (https://babel.dev/team) ------------------------------------------------------------------------------ diff --git a/scripts/collect-licenses.mjs b/scripts/collect-licenses.mjs index 6bb09e1..0d6b395 100644 --- a/scripts/collect-licenses.mjs +++ b/scripts/collect-licenses.mjs @@ -5,6 +5,26 @@ import { readdir, readFile, writeFile } from 'node:fs/promises'; const LICENSE_FILE = /^(LICENSE|LICENCE|COPYING)(\.\w+)?$/i; +// Copied into public/ rather than installed, so no package.json carries the notice. +const VENDORED = [{ + name: 'public/count.js (GoatCounter)', + license: 'ISC', + who: 'Martin Tournoij ', + text: `Copyright © Martin Tournoij + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE.`, +}]; + // Read from disk, never through require: an export map that hides package.json // would silently drop the package (TipTap, odf-kit and docx all do). const manifest = async (name) => { @@ -58,7 +78,7 @@ async function entry(name) { return { name, license: pkg.license, who, text }; } -const found = []; +const found = [...VENDORED]; const missing = []; for (const name of [...(await resolveTree(roots))].sort()) { const found_ = await entry(name);