fix(licenses): fall back to license URL for backend dependency links (#7046)

# Description of Changes

This change improves link handling in the third-party licenses section.

- Added a shared `getModuleUrl` helper that returns `moduleUrl` when
available and falls back to `moduleLicenseUrl`.
- Updated backend license entries to render as clickable links when only
a license URL is provided.
- Preserved the existing link behavior, including opening URLs in a new
tab with appropriate security attributes.
- Fixed inconsistent rendering where some dependency names appeared as
plain text despite having an available license URL.

The change was made to ensure backend dependency entries consistently
provide a usable external link, even when dependency metadata does not
include a dedicated module URL.


before:
<img width="1920" height="1080" alt="image"
src="https://github.com/user-attachments/assets/aafee561-43e0-4924-923f-eb4ecf00c873"
/>

after:
<img width="1920" height="1080" alt="image"
src="https://github.com/user-attachments/assets/10a6f76a-6852-49af-a987-e0a864ec0b91"
/>


---

## Checklist

### General

- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md)
(if applicable)
- [ ] I have performed a self-review of my own code
- [ ] My changes generate no new warnings

### Documentation

- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### Translations (if applicable)

- [ ] I ran
[`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md)

### UI Changes (if applicable)

- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)

### Testing (if applicable)

- [ ] I have run `task check` to verify linters, typechecks, and tests
pass
- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#7-testing)
for more details.
This commit is contained in:
Ludy
2026-07-20 11:59:27 +00:00
committed by GitHub
parent b509fae0c8
commit 47fe4a1d06
3 changed files with 201 additions and 155 deletions
+47 -4
View File
@@ -24,6 +24,8 @@ const OUTPUT_FILE = path.join(
// package.json lives at the workspace root (frontend/), not editor/. The
// script is at frontend/editor/scripts/, so walk up two levels.
const PACKAGE_JSON = path.join(import.meta.dirname, "..", "..", "package.json");
const PACKAGE_NAME_PATTERN =
/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/i;
// Ensure the output directory exists
const outputDir = path.dirname(OUTPUT_FILE);
@@ -74,9 +76,12 @@ try {
process.exit(1);
}
const existingModuleUrls = loadExistingModuleUrls();
// Convert license-checker format to array
const licenseArray = licenseData.map((dep) => {
let licenseType = dep.licenseType;
const projectUrl = getProjectUrl(dep.name, dep.link, existingModuleUrls);
// Handle missing or null licenses
if (!licenseType || licenseType === null || licenseType === undefined) {
@@ -114,9 +119,9 @@ try {
dep.remoteVersion ||
"unknown",
licenseType: licenseType,
repository: dep.link,
url: dep.link,
link: dep.link,
repository: projectUrl,
url: projectUrl,
link: projectUrl,
};
});
@@ -126,7 +131,7 @@ try {
const licenseType = Array.isArray(dep.licenseType)
? dep.licenseType.join(", ")
: dep.licenseType || "Unknown";
const licenseUrl = dep.link || getLicenseUrl(licenseType);
const licenseUrl = getLicenseUrl(licenseType) || dep.link;
return {
moduleName: dep.name,
@@ -224,6 +229,9 @@ try {
function getLicenseUrl(licenseType) {
if (!licenseType || licenseType === "Unknown") return "";
const explicitLicenseUrl = licenseType.match(/https?:\/\/\S+/)?.[0];
if (explicitLicenseUrl) return explicitLicenseUrl;
const licenseUrls = {
MIT: "https://opensource.org/licenses/MIT",
"MIT*": "https://opensource.org/licenses/MIT",
@@ -278,6 +286,41 @@ function getLicenseUrl(licenseType) {
return "";
}
function getProjectUrl(packageName, reportedUrl, existingModuleUrls) {
if (!PACKAGE_NAME_PATTERN.test(packageName)) {
throw new Error(`Invalid package name: ${packageName}`);
}
return (
normalizeProjectUrl(reportedUrl) ||
normalizeProjectUrl(existingModuleUrls.get(packageName)) ||
`https://www.npmjs.com/package/${packageName}`
);
}
function loadExistingModuleUrls() {
try {
const existingReport = JSON.parse(readFileSync(OUTPUT_FILE, "utf8"));
return new Map(
(existingReport.dependencies ?? [])
.filter((dependency) => dependency.moduleName && dependency.moduleUrl)
.map((dependency) => [dependency.moduleName, dependency.moduleUrl]),
);
} catch {
return new Map();
}
}
function normalizeProjectUrl(url) {
if (!url || url === "n/a") return "";
return url
.replace(/^git\+/, "")
.replace(/^git:\/\/github\.com\//, "https://github.com/")
.replace(/^github:/, "https://github.com/")
.replace(/\.git$/, "");
}
/**
* Check for potentially problematic licenses that may not be MIT/corporate compatible
*/
+149 -149
View File
@@ -2,528 +2,528 @@
"dependencies": [
{
"moduleName": "@atlaskit/pragmatic-drag-and-drop",
"moduleUrl": "git+https://github.com/atlassian/pragmatic-drag-and-drop.git",
"moduleUrl": "https://github.com/atlassian/pragmatic-drag-and-drop",
"moduleVersion": "1.7.9",
"moduleLicense": "Apache-2.0",
"moduleLicenseUrl": "git+https://github.com/atlassian/pragmatic-drag-and-drop.git"
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
{
"moduleName": "@cantoo/pdf-lib",
"moduleUrl": "git+https://github.com/cantoo-scribe/pdf-lib.git",
"moduleUrl": "https://github.com/cantoo-scribe/pdf-lib",
"moduleVersion": "2.6.5",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/cantoo-scribe/pdf-lib.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@dnd-kit/core",
"moduleUrl": "git+https://github.com/clauderic/dnd-kit.git",
"moduleUrl": "https://github.com/clauderic/dnd-kit",
"moduleVersion": "6.3.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/clauderic/dnd-kit.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/core",
"moduleUrl": "https://registry.npmjs.org/@embedpdf/core/-/core-2.14.4.tgz",
"moduleUrl": "https://www.npmjs.com/package/@embedpdf/core",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "https://registry.npmjs.org/@embedpdf/core/-/core-2.14.4.tgz"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/engines",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/models",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-annotation",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-attachment",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-bookmark",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-document-manager",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-export",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-history",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-interaction-manager",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-pan",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-print",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-redaction",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-render",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-rotate",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-scroll",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-search",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-selection",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-spread",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-thumbnail",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-tiling",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-viewport",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@embedpdf/plugin-zoom",
"moduleUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git",
"moduleUrl": "https://github.com/embedpdf/embed-pdf-viewer",
"moduleVersion": "2.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/embedpdf/embed-pdf-viewer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@emotion/react",
"moduleUrl": "git+https://github.com/emotion-js/emotion.git#main",
"moduleUrl": "https://github.com/emotion-js/emotion/tree/main/packages/react",
"moduleVersion": "11.14.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/emotion-js/emotion.git#main"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@emotion/styled",
"moduleUrl": "git+https://github.com/emotion-js/emotion.git#main",
"moduleUrl": "https://github.com/emotion-js/emotion/tree/main/packages/styled",
"moduleVersion": "11.14.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/emotion-js/emotion.git#main"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@iconify/react",
"moduleUrl": "git+https://github.com/iconify/iconify.git",
"moduleUrl": "https://github.com/iconify/iconify",
"moduleVersion": "6.0.2",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/iconify/iconify.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@mantine/core",
"moduleUrl": "git+https://github.com/mantinedev/mantine.git",
"moduleUrl": "https://github.com/mantinedev/mantine",
"moduleVersion": "8.3.18",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/mantinedev/mantine.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@mantine/dates",
"moduleUrl": "git+https://github.com/mantinedev/mantine.git",
"moduleUrl": "https://github.com/mantinedev/mantine",
"moduleVersion": "8.3.18",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/mantinedev/mantine.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@mantine/dropzone",
"moduleUrl": "git+https://github.com/mantinedev/mantine.git",
"moduleUrl": "https://github.com/mantinedev/mantine",
"moduleVersion": "8.3.18",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/mantinedev/mantine.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@mantine/hooks",
"moduleUrl": "git+https://github.com/mantinedev/mantine.git",
"moduleUrl": "https://github.com/mantinedev/mantine",
"moduleVersion": "8.3.18",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/mantinedev/mantine.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@mui/icons-material",
"moduleUrl": "git+https://github.com/mui/material-ui.git",
"moduleUrl": "https://github.com/mui/material-ui",
"moduleVersion": "9.0.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/mui/material-ui.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@mui/material",
"moduleUrl": "git+https://github.com/mui/material-ui.git",
"moduleUrl": "https://github.com/mui/material-ui",
"moduleVersion": "9.0.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/mui/material-ui.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@posthog/react",
"moduleUrl": "git+https://github.com/PostHog/posthog-js.git",
"moduleUrl": "https://github.com/PostHog/posthog-js",
"moduleVersion": "1.8.2",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/PostHog/posthog-js.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@reactour/tour",
"moduleUrl": "git+https://github.com/elrumordelaluz/reactour.git",
"moduleUrl": "https://github.com/elrumordelaluz/reactour",
"moduleVersion": "3.8.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/elrumordelaluz/reactour.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@stripe/react-stripe-js",
"moduleUrl": "https://github.com/stripe/react-stripe-js.git",
"moduleUrl": "https://github.com/stripe/react-stripe-js",
"moduleVersion": "4.0.2",
"moduleLicense": "MIT",
"moduleLicenseUrl": "https://github.com/stripe/react-stripe-js.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@stripe/stripe-js",
"moduleUrl": "https://github.com/stripe/stripe-js.git",
"moduleUrl": "https://github.com/stripe/stripe-js",
"moduleVersion": "7.9.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "https://github.com/stripe/stripe-js.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@supabase/supabase-js",
"moduleUrl": "https://github.com/supabase/supabase-js.git",
"moduleUrl": "https://github.com/supabase/supabase-js",
"moduleVersion": "2.100.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "https://github.com/supabase/supabase-js.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@tailwindcss/postcss",
"moduleUrl": "https://github.com/tailwindlabs/tailwindcss.git",
"moduleUrl": "https://github.com/tailwindlabs/tailwindcss",
"moduleVersion": "4.2.2",
"moduleLicense": "MIT",
"moduleLicenseUrl": "https://github.com/tailwindlabs/tailwindcss.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@tanstack/react-virtual",
"moduleUrl": "git+https://github.com/TanStack/virtual.git",
"moduleUrl": "https://github.com/TanStack/virtual",
"moduleVersion": "3.13.23",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/TanStack/virtual.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@tauri-apps/api",
"moduleUrl": "git+https://github.com/tauri-apps/tauri.git",
"moduleUrl": "https://github.com/tauri-apps/tauri",
"moduleVersion": "2.10.1",
"moduleLicense": "Apache-2.0 OR MIT",
"moduleLicenseUrl": "git+https://github.com/tauri-apps/tauri.git"
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
{
"moduleName": "@tauri-apps/plugin-dialog",
"moduleUrl": "git+https://github.com/tauri-apps/plugins-workspace.git",
"moduleUrl": "https://github.com/tauri-apps/plugins-workspace",
"moduleVersion": "2.7.0",
"moduleLicense": "MIT OR Apache-2.0",
"moduleLicenseUrl": "git+https://github.com/tauri-apps/plugins-workspace.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@tauri-apps/plugin-fs",
"moduleUrl": "git+https://github.com/tauri-apps/plugins-workspace.git",
"moduleUrl": "https://github.com/tauri-apps/plugins-workspace",
"moduleVersion": "2.5.0",
"moduleLicense": "MIT OR Apache-2.0",
"moduleLicenseUrl": "git+https://github.com/tauri-apps/plugins-workspace.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@tauri-apps/plugin-http",
"moduleUrl": "git+https://github.com/tauri-apps/plugins-workspace.git",
"moduleUrl": "https://github.com/tauri-apps/plugins-workspace",
"moduleVersion": "2.5.7",
"moduleLicense": "MIT OR Apache-2.0",
"moduleLicenseUrl": "git+https://github.com/tauri-apps/plugins-workspace.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@tauri-apps/plugin-notification",
"moduleUrl": "git+https://github.com/tauri-apps/plugins-workspace.git",
"moduleUrl": "https://github.com/tauri-apps/plugins-workspace",
"moduleVersion": "2.3.3",
"moduleLicense": "MIT OR Apache-2.0",
"moduleLicenseUrl": "git+https://github.com/tauri-apps/plugins-workspace.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@tauri-apps/plugin-shell",
"moduleUrl": "git+https://github.com/tauri-apps/plugins-workspace.git",
"moduleUrl": "https://github.com/tauri-apps/plugins-workspace",
"moduleVersion": "2.3.5",
"moduleLicense": "MIT OR Apache-2.0",
"moduleLicenseUrl": "git+https://github.com/tauri-apps/plugins-workspace.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "@userback/widget",
"moduleUrl": "git+https://github.com/userback/widget-js.git",
"moduleUrl": "https://github.com/userback/widget-js",
"moduleVersion": "0.3.12",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/userback/widget-js.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "autoprefixer",
"moduleUrl": "git+https://github.com/postcss/autoprefixer.git",
"moduleUrl": "postcss/autoprefixer",
"moduleVersion": "10.4.27",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/postcss/autoprefixer.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "axios",
"moduleUrl": "git+https://github.com/axios/axios.git",
"moduleUrl": "https://github.com/axios/axios",
"moduleVersion": "1.15.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/axios/axios.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "d3",
"moduleUrl": "git+https://github.com/d3/d3.git",
"moduleUrl": "https://github.com/d3/d3",
"moduleVersion": "7.9.0",
"moduleLicense": "ISC",
"moduleLicenseUrl": "git+https://github.com/d3/d3.git"
"moduleLicenseUrl": "https://opensource.org/licenses/ISC"
},
{
"moduleName": "globals",
"moduleUrl": "git+https://github.com/sindresorhus/globals.git",
"moduleUrl": "sindresorhus/globals",
"moduleVersion": "17.5.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/sindresorhus/globals.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "i18next",
"moduleUrl": "git+https://github.com/i18next/i18next.git",
"moduleUrl": "https://github.com/i18next/i18next",
"moduleVersion": "25.10.10",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/i18next/i18next.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "i18next-browser-languagedetector",
"moduleUrl": "git+https://github.com/i18next/i18next-browser-languageDetector.git",
"moduleUrl": "https://github.com/i18next/i18next-browser-languageDetector",
"moduleVersion": "8.2.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/i18next/i18next-browser-languageDetector.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "jszip",
"moduleUrl": "git+https://github.com/Stuk/jszip.git",
"moduleUrl": "https://github.com/Stuk/jszip",
"moduleVersion": "3.10.1",
"moduleLicense": "(MIT OR GPL-3.0-or-later)",
"moduleLicenseUrl": "git+https://github.com/Stuk/jszip.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "license-report",
"moduleUrl": "git+https://github.com/bepo65/license-report.git",
"moduleUrl": "https://github.com/kessler/license-report",
"moduleVersion": "6.8.2",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/bepo65/license-report.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "pdfjs-dist",
"moduleUrl": "git+https://github.com/mozilla/pdf.js.git",
"moduleUrl": "https://github.com/mozilla/pdf.js",
"moduleVersion": "5.5.207",
"moduleLicense": "Apache-2.0",
"moduleLicenseUrl": "git+https://github.com/mozilla/pdf.js.git"
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
{
"moduleName": "peerjs",
"moduleUrl": "git+https://github.com/peers/peerjs.git",
"moduleUrl": "https://github.com/peers/peerjs",
"moduleVersion": "1.5.5",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/peers/peerjs.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "pixelmatch",
"moduleUrl": "git+https://github.com/mapbox/pixelmatch.git",
"moduleUrl": "https://github.com/mapbox/pixelmatch",
"moduleVersion": "7.1.0",
"moduleLicense": "ISC",
"moduleLicenseUrl": "git+https://github.com/mapbox/pixelmatch.git"
"moduleLicenseUrl": "https://opensource.org/licenses/ISC"
},
{
"moduleName": "posthog-js",
"moduleUrl": "https://github.com/PostHog/posthog-js",
"moduleVersion": "1.363.3",
"moduleLicense": "SEE LICENSE IN LICENSE https://github.com/PostHog/posthog-js/blob/main/LICENSE",
"moduleLicenseUrl": "https://github.com/PostHog/posthog-js"
"moduleLicenseUrl": "https://github.com/PostHog/posthog-js/blob/main/LICENSE"
},
{
"moduleName": "qrcode.react",
"moduleUrl": "git+https://github.com/zpao/qrcode.react.git",
"moduleUrl": "https://github.com/zpao/qrcode.react",
"moduleVersion": "4.2.0",
"moduleLicense": "ISC",
"moduleLicenseUrl": "git+https://github.com/zpao/qrcode.react.git"
"moduleLicenseUrl": "https://opensource.org/licenses/ISC"
},
{
"moduleName": "react",
"moduleUrl": "git+https://github.com/facebook/react.git",
"moduleUrl": "https://github.com/facebook/react",
"moduleVersion": "19.2.4",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/facebook/react.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "react-dom",
"moduleUrl": "git+https://github.com/facebook/react.git",
"moduleUrl": "https://github.com/facebook/react",
"moduleVersion": "19.2.4",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/facebook/react.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "react-easy-crop",
"moduleUrl": "git+https://github.com/ValentinH/react-easy-crop.git",
"moduleUrl": "https://github.com/ValentinH/react-easy-crop",
"moduleVersion": "5.5.6",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/ValentinH/react-easy-crop.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "react-i18next",
"moduleUrl": "git+https://github.com/i18next/react-i18next.git",
"moduleUrl": "https://github.com/i18next/react-i18next",
"moduleVersion": "16.6.6",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/i18next/react-i18next.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "react-markdown",
"moduleUrl": "git+https://github.com/remarkjs/react-markdown.git",
"moduleUrl": "remarkjs/react-markdown",
"moduleVersion": "9.1.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/remarkjs/react-markdown.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "react-rnd",
"moduleUrl": "git+https://github.com/bokuweb/react-rnd.git",
"moduleUrl": "https://github.com/bokuweb/react-rnd",
"moduleVersion": "10.5.3",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/bokuweb/react-rnd.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "react-router-dom",
"moduleUrl": "git+https://github.com/remix-run/react-router.git",
"moduleUrl": "https://github.com/remix-run/react-router",
"moduleVersion": "7.13.2",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/remix-run/react-router.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "recharts",
"moduleUrl": "git+https://github.com/recharts/recharts.git",
"moduleUrl": "https://github.com/recharts/recharts",
"moduleVersion": "3.8.0",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/recharts/recharts.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "remark-gfm",
"moduleUrl": "git+https://github.com/remarkjs/remark-gfm.git",
"moduleUrl": "remarkjs/remark-gfm",
"moduleVersion": "4.0.1",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/remarkjs/remark-gfm.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "signature_pad",
"moduleUrl": "git+https://github.com/szimek/signature_pad.git",
"moduleUrl": "https://github.com/szimek/signature_pad",
"moduleVersion": "5.1.3",
"moduleLicense": "MIT",
"moduleLicenseUrl": "git+https://github.com/szimek/signature_pad.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "smol-toml",
"moduleUrl": "github:squirrelchat/smol-toml",
"moduleUrl": "https://github.com/squirrelchat/smol-toml",
"moduleVersion": "1.6.1",
"moduleLicense": "BSD-3-Clause",
"moduleLicenseUrl": "github:squirrelchat/smol-toml"
"moduleLicenseUrl": "https://opensource.org/licenses/BSD-3-Clause"
},
{
"moduleName": "tailwindcss",
"moduleUrl": "https://github.com/tailwindlabs/tailwindcss.git",
"moduleUrl": "https://github.com/tailwindlabs/tailwindcss",
"moduleVersion": "4.2.2",
"moduleLicense": "MIT",
"moduleLicenseUrl": "https://github.com/tailwindlabs/tailwindcss.git"
"moduleLicenseUrl": "https://opensource.org/licenses/MIT"
},
{
"moduleName": "web-vitals",
"moduleUrl": "git+https://github.com/GoogleChrome/web-vitals.git",
"moduleUrl": "https://github.com/GoogleChrome/web-vitals",
"moduleVersion": "5.1.0",
"moduleLicense": "Apache-2.0",
"moduleLicenseUrl": "git+https://github.com/GoogleChrome/web-vitals.git"
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
}
]
}
@@ -32,6 +32,9 @@ interface LicensesSectionBodyProps {
dependencies: Dependency[];
}
const getModuleUrl = (dependency: Dependency) =>
dependency.moduleUrl || dependency.moduleLicenseUrl;
function LicensesSectionBody({
title,
description,
@@ -106,9 +109,9 @@ function LicensesSectionBody({
sortedDependencies.map((dependency) => (
<Table.Tr key={getDependencyKey(dependency)}>
<Table.Td>
{dependency.moduleUrl ? (
{getModuleUrl(dependency) ? (
<Anchor
href={dependency.moduleUrl}
href={getModuleUrl(dependency)}
target="_blank"
rel="noopener noreferrer"
>