Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 22:27 UTC

mattiasw / ExifReader

A JavaScript Exif info parser.

JavaScriptMPL-2.0★ 992 Sterne⑂ 106 Forksseit Jan. 2012Auf GitHub ansehen ↗

mattiasw/ExifReader erreicht einen Gesundheitsindex von 75 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (95/100) ab, am schwächsten bei Sustainability & Governance (60/100). Zuletzt vor 1 Tag aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

75
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

75
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Mattias WallanderPersönliches Konto
28 Follower17 öffentliche Reposseit Jan. 2011

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
npmexifreader4.41.3854.905130vor 5 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

95Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 1 Tagen
33.9/36Commit-Rhythmus — 49/52 Wochen mit Commits
18/18Commit-Volumen — 194 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year194
human_commit_share0,82
days_since_last_push1
active_weeks_last_year49
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 5,6 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count100
latest_release_tagv4.41.3
releases_from_tagsnein
days_since_latest_release5
mean_days_between_releases5,6

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

88Exzellent · 18 % des Gesamtindex
Wie die Bewertung erfolgt
48.6/60Stars — 992 Stars
16.8/25Forks — 106 Forks
6/15Watcher — 13 Watcher
Verwendete Eingangsdaten
forks106
stars992
watchers13
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MPL-2.0)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
7.2/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templateja
has_code_of_conductja
has_pull_request_templateja
Wie die Bewertung erfolgt
79.1/80Downloads pro Monat — 854.905 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesexifreader
dependents
ecosystemsnpm
total_downloads
monthly_downloads854.905
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

60Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
1.3/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 94 % der Commits
13.5/13.5Breite der Beitragenden — 26 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled26
top_contributor_share0,941
Wie die Bewertung erfolgt
45.7/46.8Issue-Lösungsquote — 98 % der Issues geschlossen
32.8/38.3PR-Annahme — 424/494 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/11 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs424
open_issues4
closed_issues174
issue_closed_ratio0,978
closed_unmerged_prs70
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
10.5/25Reichweite des Inhabers — 28 Follower von mattiasw
21.1/25Kontohistorie — 17 öffentliche Repos, Kontoalter ca. 15 Jahre
Verwendete Eingangsdaten
followers28
owner_typeUser
is_verified
owner_loginmattiasw
public_repos17
account_age_days5.669
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 130 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesexifreader
ecosystemsnpm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

70Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 5 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — eslint.config.mjs
0/9.6Pre-Commit-Hooks
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 4 out of 4 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_configja
has_precommit_confignein

Dokumentation

40Gefährdet
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
0/10Wiki
Verwendete Eingangsdaten
topics
has_wikinein
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

62Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — keine Daten
2.5/2.5CI-Tests — 4 out of 4 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/11 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
5/5SAST — SAST tool is run on all commits
2/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 12 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): branch_protection. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages1
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:exifreader@4.41.3 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 1 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

66Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
28/40Lesbare Commit-Historie — 43 von 82 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,524
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes7.089
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — eslint.config.mjs
11/11Statische Typprüfung — test/types/tsconfig.json
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
8/8Automatisierte Wartung — 18 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json
has_dockerfileja
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configstest/types/tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,18
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — JavaScript mit Typprüfungs-Konfiguration (test/types/tsconfig.json)
54.6/55Handhabbare Dateigrößen — 1/149 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJavaScript
largest_source_bytes84.419
source_files_sampled149
oversized_source_files1
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

992GitHub-Sterne
26Mitwirkende
194Commits, letzte 12 Monate
1Tage seit letztem Push
100Releases
1Bus-Faktor
4offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 106 ⇿
0Sterne
106Forks
97Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

02040608010012010422013-042019-112026-07
Major 1Minor 49Patch 47

Jeder Punkt umfasst 13 Tage.

OpenSSF Scorecard 5.2 / 10
5.2Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-23 22:26 UTC

10Binary-Artifactsno binaries found in the repo
k. A.Branch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests4 out of 4 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/11 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
10SASTSAST tool is run on all commits
4Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities12 existing vulnerabilities detected
Alle Abhängigkeiten 730

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 0 direkte und 730 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
npm@aashutoshrathi/word-wrap1.2.6indirekt
npm@babel/code-frame7.29.7indirekt
npm@babel/compat-data7.29.7indirekt
npm@babel/core7.29.7indirekt
npm@babel/generator7.29.7indirekt
npm@babel/helper-annotate-as-pure7.29.7indirekt
npm@babel/helper-compilation-targets7.29.7indirekt
npm@babel/helper-create-class-features-plugin7.29.7indirekt
npm@babel/helper-create-regexp-features-plugin7.29.7indirekt
npm@babel/helper-define-polyfill-provider0.6.6indirekt
npm@babel/helper-globals7.29.7indirekt
npm@babel/helper-member-expression-to-functions7.29.7indirekt
npm@babel/helper-module-imports7.29.7indirekt
npm@babel/helper-module-transforms7.29.7indirekt
npm@babel/helper-optimise-call-expression7.29.7indirekt
npm@babel/helper-plugin-utils7.29.7indirekt
npm@babel/helper-remap-async-to-generator7.29.7indirekt
npm@babel/helper-replace-supers7.29.7indirekt
npm@babel/helper-skip-transparent-expression-wrappers7.29.7indirekt
npm@babel/helper-string-parser7.29.7indirekt
npm@babel/helper-validator-identifier7.29.7indirekt
npm@babel/helper-validator-option7.29.7indirekt
npm@babel/helper-wrap-function7.29.7indirekt
npm@babel/helpers7.29.7indirekt
npm@babel/parser7.29.7indirekt
npm@babel/plugin-bugfix-firefox-class-in-computed-class-key7.29.7indirekt
npm@babel/plugin-bugfix-safari-class-field-initializer-scope7.29.7indirekt
npm@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression7.29.7indirekt
npm@babel/plugin-bugfix-safari-rest-destructuring-rhs-array7.29.7indirekt
npm@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining7.29.7indirekt
npm@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly7.29.7indirekt
npm@babel/plugin-proposal-private-property-in-object7.21.0-placeholder-for-preset-env.2indirekt
npm@babel/plugin-syntax-import-assertions7.29.7indirekt
npm@babel/plugin-syntax-import-attributes7.29.7indirekt
npm@babel/plugin-syntax-unicode-sets-regex7.18.6indirekt
npm@babel/plugin-transform-arrow-functions7.29.7indirekt
npm@babel/plugin-transform-async-generator-functions7.29.7indirekt
npm@babel/plugin-transform-async-to-generator7.29.7indirekt
npm@babel/plugin-transform-block-scoped-functions7.29.7indirekt
npm@babel/plugin-transform-block-scoping7.29.7indirekt
npm@babel/plugin-transform-class-properties7.29.7indirekt
npm@babel/plugin-transform-class-static-block7.29.7indirekt
npm@babel/plugin-transform-classes7.29.7indirekt
npm@babel/plugin-transform-computed-properties7.29.7indirekt
npm@babel/plugin-transform-destructuring7.29.7indirekt
npm@babel/plugin-transform-dotall-regex7.29.7indirekt
npm@babel/plugin-transform-duplicate-keys7.29.7indirekt
npm@babel/plugin-transform-duplicate-named-capturing-groups-regex7.29.7indirekt
npm@babel/plugin-transform-dynamic-import7.29.7indirekt
npm@babel/plugin-transform-explicit-resource-management7.29.7indirekt
npm@babel/plugin-transform-exponentiation-operator7.29.7indirekt
npm@babel/plugin-transform-export-namespace-from7.29.7indirekt
npm@babel/plugin-transform-for-of7.29.7indirekt
npm@babel/plugin-transform-function-name7.29.7indirekt
npm@babel/plugin-transform-json-strings7.29.7indirekt
npm@babel/plugin-transform-literals7.29.7indirekt
npm@babel/plugin-transform-logical-assignment-operators7.29.7indirekt
npm@babel/plugin-transform-member-expression-literals7.29.7indirekt
npm@babel/plugin-transform-modules-amd7.29.7indirekt
npm@babel/plugin-transform-modules-commonjs7.29.7indirekt
npm@babel/plugin-transform-modules-systemjs7.29.7indirekt
npm@babel/plugin-transform-modules-umd7.29.7indirekt
npm@babel/plugin-transform-named-capturing-groups-regex7.29.7indirekt
npm@babel/plugin-transform-new-target7.29.7indirekt
npm@babel/plugin-transform-nullish-coalescing-operator7.29.7indirekt
npm@babel/plugin-transform-numeric-separator7.29.7indirekt
npm@babel/plugin-transform-object-rest-spread7.29.7indirekt
npm@babel/plugin-transform-object-super7.29.7indirekt
npm@babel/plugin-transform-optional-catch-binding7.29.7indirekt
npm@babel/plugin-transform-optional-chaining7.29.7indirekt
npm@babel/plugin-transform-parameters7.29.7indirekt
npm@babel/plugin-transform-private-methods7.29.7indirekt
npm@babel/plugin-transform-private-property-in-object7.29.7indirekt
npm@babel/plugin-transform-property-literals7.29.7indirekt
npm@babel/plugin-transform-regenerator7.29.7indirekt
npm@babel/plugin-transform-regexp-modifiers7.29.7indirekt
npm@babel/plugin-transform-reserved-words7.29.7indirekt
npm@babel/plugin-transform-shorthand-properties7.29.7indirekt
npm@babel/plugin-transform-spread7.29.7indirekt
npm@babel/plugin-transform-sticky-regex7.29.7indirekt
npm@babel/plugin-transform-template-literals7.29.7indirekt
npm@babel/plugin-transform-typeof-symbol7.29.7indirekt
npm@babel/plugin-transform-unicode-escapes7.29.7indirekt
npm@babel/plugin-transform-unicode-property-regex7.29.7indirekt
npm@babel/plugin-transform-unicode-regex7.29.7indirekt
npm@babel/plugin-transform-unicode-sets-regex7.29.7indirekt
npm@babel/preset-env7.29.7indirekt
npm@babel/preset-modules0.1.6-no-external-pluginsindirekt
npm@babel/template7.29.7indirekt
npm@babel/traverse7.29.7indirekt
npm@babel/types7.29.7indirekt
npm@bcoe/v8-coverage1.0.2indirekt
npm@cypress/request4.0.0indirekt
npm@cypress/xvfb1.2.4indirekt
npm@discoveryjs/json-ext1.1.0indirekt
npm@epic-web/invariant1.0.0indirekt
npm@eslint-community/eslint-utils4.9.1indirekt
npm@eslint-community/regexpp4.12.2indirekt
npm@eslint/config-array0.21.2indirekt
npm@eslint/config-helpers0.4.2indirekt
npm@eslint/core0.17.0indirekt
npm@eslint/eslintrc3.3.5indirekt
npm@eslint/js9.39.4indirekt
npm@eslint/js9.39.5indirekt
npm@eslint/object-schema2.1.7indirekt
npm@eslint/plugin-kit0.4.1indirekt
npm@humanfs/core0.19.2indirekt
npm@humanfs/node0.16.8indirekt
npm@humanfs/types0.15.0indirekt
npm@humanwhocodes/module-importer1.0.1indirekt
npm@humanwhocodes/retry0.4.3indirekt
npm@isaacs/cliui8.0.2indirekt
npm@istanbuljs/schema0.1.6indirekt
npm@jridgewell/gen-mapping0.3.12indirekt
npm@jridgewell/remapping2.3.5indirekt
npm@jridgewell/resolve-uri3.1.0indirekt
npm@jridgewell/source-map0.3.6indirekt
npm@jridgewell/sourcemap-codec1.5.4indirekt
npm@jridgewell/trace-mapping0.3.29indirekt
npm@jsonjoy.com/base641.1.2indirekt
npm@jsonjoy.com/json-pack1.1.0indirekt
npm@jsonjoy.com/util1.3.0indirekt
npm@leichtgewicht/ip-codec2.0.5indirekt
npm@noble/hashes1.4.0indirekt
npm@peculiar/asn1-cms2.6.0indirekt
npm@peculiar/asn1-csr2.6.0indirekt
npm@peculiar/asn1-ecc2.6.0indirekt
npm@peculiar/asn1-pfx2.6.0indirekt
npm@peculiar/asn1-pkcs82.6.0indirekt
npm@peculiar/asn1-pkcs92.6.0indirekt
npm@peculiar/asn1-rsa2.6.0indirekt
npm@peculiar/asn1-schema2.6.0indirekt
npm@peculiar/asn1-x5092.6.0indirekt
npm@peculiar/asn1-x509-attr2.6.0indirekt
npm@peculiar/x5091.14.3indirekt
npm@pkgjs/parseargs0.11.0indirekt
npm@types/body-parser1.19.4indirekt
npm@types/bonjour3.5.13indirekt
npm@types/connect3.4.37indirekt
npm@types/connect-history-api-fallback1.5.4indirekt
npm@types/estree1.0.9indirekt
npm@types/express4.17.25indirekt
npm@types/express-serve-static-core4.17.39indirekt
npm@types/http-errors2.0.3indirekt
npm@types/http-proxy1.17.15indirekt
npm@types/istanbul-lib-coverage2.0.6indirekt
npm@types/json-schema7.0.15indirekt
npm@types/mime1.3.4indirekt
npm@types/node26.1.1indirekt
npm@types/qs6.9.9indirekt
npm@types/range-parser1.2.6indirekt
npm@types/retry0.12.2indirekt
npm@types/send0.17.3indirekt
npm@types/serve-index1.9.4indirekt
npm@types/serve-static1.15.7indirekt
npm@types/sinonjs__fake-timers8.1.1indirekt
npm@types/sizzle2.3.3indirekt
npm@types/sockjs0.3.36indirekt
npm@types/tmp0.2.6indirekt
npm@types/ws8.5.10indirekt
npm@typescript/typescript-aix-ppc647.0.2indirekt
npm@typescript/typescript-darwin-arm647.0.2indirekt
npm@typescript/typescript-darwin-x647.0.2indirekt
npm@typescript/typescript-freebsd-arm647.0.2indirekt
npm@typescript/typescript-freebsd-x647.0.2indirekt
npm@typescript/typescript-linux-arm7.0.2indirekt
npm@typescript/typescript-linux-arm647.0.2indirekt
npm@typescript/typescript-linux-loong647.0.2indirekt
npm@typescript/typescript-linux-mips64el7.0.2indirekt
npm@typescript/typescript-linux-ppc647.0.2indirekt
npm@typescript/typescript-linux-riscv647.0.2indirekt
npm@typescript/typescript-linux-s390x7.0.2indirekt
npm@typescript/typescript-linux-x647.0.2indirekt
npm@typescript/typescript-netbsd-arm647.0.2indirekt
npm@typescript/typescript-netbsd-x647.0.2indirekt
npm@typescript/typescript-openbsd-arm647.0.2indirekt
npm@typescript/typescript-openbsd-x647.0.2indirekt
npm@typescript/typescript-sunos-x647.0.2indirekt
npm@typescript/typescript-win32-arm647.0.2indirekt
npm@typescript/typescript-win32-x647.0.2indirekt
npm@webassemblyjs/ast1.14.1indirekt
npm@webassemblyjs/floating-point-hex-parser1.13.2indirekt
npm@webassemblyjs/helper-api-error1.13.2indirekt
npm@webassemblyjs/helper-buffer1.14.1indirekt
npm@webassemblyjs/helper-numbers1.13.2indirekt
npm@webassemblyjs/helper-wasm-bytecode1.13.2indirekt
npm@webassemblyjs/helper-wasm-section1.14.1indirekt
npm@webassemblyjs/ieee7541.13.2indirekt
npm@webassemblyjs/leb1281.13.2indirekt
npm@webassemblyjs/utf81.13.2indirekt
npm@webassemblyjs/wasm-edit1.14.1indirekt
npm@webassemblyjs/wasm-gen1.14.1indirekt
npm@webassemblyjs/wasm-opt1.14.1indirekt
npm@webassemblyjs/wasm-parser1.14.1indirekt
npm@webassemblyjs/wast-printer1.14.1indirekt
npm@xmldom/xmldom0.9.10indirekt
npm@xtuc/ieee7541.2.0indirekt
npm@xtuc/long4.2.2indirekt
npmaccepts1.3.8indirekt
npmacorn8.16.0indirekt
npmacorn-import-phases1.0.4indirekt
npmacorn-jsx5.3.2indirekt
npmajv6.15.0indirekt
npmajv8.18.0indirekt
npmajv-formats2.1.1indirekt
npmajv-keywords5.1.0indirekt
npmansi-escapes7.3.0indirekt
npmansi-html-community0.0.8indirekt
npmansi-regex5.0.1indirekt
npmansi-regex6.0.1indirekt
npmansi-regex6.2.2indirekt
npmansi-styles4.3.0indirekt
npmansi-styles6.2.3indirekt
npmanymatch3.1.2indirekt
npmarch2.2.0indirekt
npmargparse2.0.1indirekt
npmarray-flatten1.1.1indirekt
npmasn10.2.6indirekt
npmasn1js3.0.7indirekt
npmassert-plus1.0.0indirekt
npmasynckit0.4.0indirekt
npmat-least-node1.0.0indirekt
npmaws-sign20.7.0indirekt
npmaws41.13.2indirekt
npmbabel-loader10.1.1indirekt
npmbabel-plugin-polyfill-corejs20.4.15indirekt
npmbabel-plugin-polyfill-corejs30.14.0indirekt
npmbabel-plugin-polyfill-regenerator0.6.6indirekt
npmbalanced-match1.0.0indirekt
npmbalanced-match4.0.4indirekt
npmbase64-js1.5.1indirekt
npmbaseline-browser-mapping2.9.11indirekt
npmbatch0.6.1indirekt
npmbcrypt-pbkdf1.0.2indirekt
npmbinary-extensions2.2.0indirekt
npmblob-util2.0.2indirekt
npmbluebird3.7.2indirekt
npmbody-parser1.20.4indirekt
npmbonjour-service1.2.1indirekt
npmboolbase2.0.0indirekt
npmbrace-expansion1.1.15indirekt
npmbrace-expansion2.0.3indirekt
npmbrace-expansion5.0.6indirekt
npmbraces3.0.3indirekt
npmbrowser-stdout1.3.1indirekt
npmbrowserslist4.28.1indirekt
npmbuffer5.7.1indirekt
npmbuffer-from1.1.1indirekt
npmbundle-name4.1.0indirekt
npmbytes3.1.2indirekt
npmbytestreamjs2.0.1indirekt
npmc811.0.0indirekt
npmcachedir2.4.0indirekt
npmcall-bind-apply-helpers1.0.2indirekt
npmcall-bound1.0.4indirekt
npmcallsites3.1.0indirekt
npmcamelcase6.2.0indirekt
npmcaniuse-lite1.0.30001761indirekt
npmcaseless0.12.0indirekt
npmchai6.2.2indirekt
npmchalk4.1.2indirekt
npmchokidar3.6.0indirekt
npmchokidar4.0.3indirekt
npmchrome-trace-event1.0.3indirekt
npmci-info4.1.0indirekt
npmcli-cursor5.0.0indirekt
npmcli-table30.6.1indirekt
npmcli-truncate5.2.0indirekt
npmcliui8.0.1indirekt
npmclone-deep4.0.1indirekt
npmcolor-convert2.0.1indirekt
npmcolor-name1.1.4indirekt
npmcolorette2.0.20indirekt
npmcolors1.4.0indirekt
npmcombined-stream1.0.8indirekt
npmcommander14.0.3indirekt
npmcommander2.20.3indirekt
npmcommander6.2.1indirekt
npmcommon-tags1.8.0indirekt
npmcompressible2.0.18indirekt
npmcompression1.8.1indirekt
npmconcat-map0.0.1indirekt
npmconnect-history-api-fallback2.0.0indirekt
npmcontent-disposition0.5.4indirekt
npmcontent-type1.0.5indirekt
npmconvert-source-map2.0.0indirekt
npmcookie0.7.1indirekt
npmcookie-signature1.0.6indirekt
npmcore-js-compat3.48.0indirekt
npmcore-util-is1.0.2indirekt
npmcross-env10.1.0indirekt
npmcross-spawn7.0.6indirekt
npmcss-select7.0.0indirekt
npmcss-what8.0.0indirekt
npmcssom0.5.0indirekt
npmcypress15.18.1indirekt
npmdashdash1.14.1indirekt
npmdayjs1.10.7indirekt
npmdebug2.6.9indirekt
npmdebug3.2.7indirekt
npmdebug4.4.3indirekt
npmdecamelize4.0.0indirekt
npmdeep-is0.1.4indirekt
npmdefault-browser5.2.1indirekt
npmdefault-browser-id5.0.0indirekt
npmdefine-lazy-prop3.0.0indirekt
npmdelayed-stream1.0.0indirekt
npmdepd1.1.2indirekt
npmdepd2.0.0indirekt
npmdestroy1.2.0indirekt
npmdetect-node2.1.0indirekt
npmdiff7.0.0indirekt
npmdns-packet5.6.1indirekt
npmdom-serializer2.0.0indirekt
npmdom-serializer3.1.1indirekt
npmdomelementtype2.3.0indirekt
npmdomelementtype3.0.0indirekt
npmdomhandler5.0.3indirekt
npmdomhandler6.0.1indirekt
npmdomutils3.2.2indirekt
npmdomutils4.0.2indirekt
npmdunder-proto1.0.1indirekt
npmeastasianwidth0.2.0indirekt
npmecc-jsbn0.1.2indirekt
npmee-first1.1.1indirekt
npmelectron-to-chromium1.5.267indirekt
npmemoji-regex10.6.0indirekt
npmemoji-regex8.0.0indirekt
npmemoji-regex9.2.2indirekt
npmencodeurl1.0.2indirekt
npmencodeurl2.0.0indirekt
npmend-of-stream1.4.4indirekt
npmenhanced-resolve5.24.1indirekt
npmentities4.5.0indirekt
npmentities7.0.1indirekt
npmentities8.0.0indirekt
npmenvinfo7.21.0indirekt
npmenvironment1.1.0indirekt
npmes-define-property1.0.1indirekt
npmes-errors1.3.0indirekt
npmes-module-lexer2.1.0indirekt
npmes-object-atoms1.1.1indirekt
npmes-set-tostringtag2.1.0indirekt
npmescalade3.2.0indirekt
npmescape-html1.0.3indirekt
npmescape-string-regexp4.0.0indirekt
npmeslint9.39.4indirekt
npmeslint-plugin-cypress6.4.1indirekt
npmeslint-scope5.1.1indirekt
npmeslint-scope8.4.0indirekt
npmeslint-visitor-keys3.4.3indirekt
npmeslint-visitor-keys4.2.1indirekt
npmespree10.4.0indirekt
npmesquery1.5.0indirekt
npmesrecurse4.3.0indirekt
npmestraverse4.3.0indirekt
npmestraverse5.2.0indirekt
npmestraverse5.3.0indirekt
npmesutils2.0.2indirekt
npmetag1.8.1indirekt
npmeventemitter26.4.7indirekt
npmeventemitter34.0.7indirekt
npmeventemitter35.0.4indirekt
npmevents3.3.0indirekt
npmexeca4.1.0indirekt
npmexecutable4.1.1indirekt
npmexpress4.22.1indirekt
npmextend3.0.2indirekt
npmextsprintf1.3.0indirekt
npmfast-deep-equal3.1.3indirekt
npmfast-json-stable-stringify2.1.0indirekt
npmfast-levenshtein2.0.6indirekt
npmfast-uri3.1.2indirekt
npmfaye-websocket0.11.4indirekt
npmfile-entry-cache8.0.0indirekt
npmfill-range7.1.1indirekt
npmfinalhandler1.3.1indirekt
npmfind-up4.1.0indirekt
npmfind-up5.0.0indirekt
npmflat5.0.2indirekt
npmflat-cache4.0.1indirekt
npmflatted3.4.2indirekt
npmfollow-redirects1.16.0indirekt
npmforeground-child3.3.1indirekt
npmforever-agent0.6.1indirekt
npmform-data4.0.6indirekt
npmforwarded0.2.0indirekt
npmfresh0.5.2indirekt
npmfs-extra9.1.0indirekt
npmfsevents2.3.2indirekt
npmfunction-bind1.1.2indirekt
npmgensync1.0.0-beta.2indirekt
npmget-caller-file2.0.5indirekt
npmget-east-asian-width1.6.0indirekt
npmget-intrinsic1.3.0indirekt
npmget-proto1.0.1indirekt
npmget-stream5.2.0indirekt
npmgetpass0.1.7indirekt
npmglob10.5.0indirekt
npmglob13.0.6indirekt
npmglob-parent5.1.2indirekt
npmglob-parent6.0.2indirekt
npmglobal-dirs3.0.0indirekt
npmglobals14.0.0indirekt
npmglobals17.7.0indirekt
npmgopd1.2.0indirekt
npmgraceful-fs4.2.11indirekt
npmhandle-thing2.0.1indirekt
npmhas-flag4.0.0indirekt
npmhas-symbols1.1.0indirekt
npmhas-tostringtag1.0.2indirekt
npmhasha5.2.2indirekt
npmhasown2.0.4indirekt
npmhe1.2.0indirekt
npmhpack.js2.1.6indirekt
npmhtml-escaper2.0.2indirekt
npmhtml-escaper3.0.3indirekt
npmhtmlparser210.1.0indirekt
npmhttp-deceiver1.2.7indirekt
npmhttp-errors1.6.3indirekt
npmhttp-errors2.0.0indirekt
npmhttp-errors2.0.1indirekt
npmhttp-parser-js0.5.8indirekt
npmhttp-proxy1.18.1indirekt
npmhttp-proxy-middleware2.0.9indirekt
npmhttp-signature1.4.0indirekt
npmhuman-signals1.1.1indirekt
npmhusky9.1.7indirekt
npmhyperdyperid1.2.0indirekt
npmiconv-lite0.4.24indirekt
npmieee7541.2.1indirekt
npmignore5.3.2indirekt
npmimport-fresh3.3.1indirekt
npmimport-local3.2.0indirekt
npmimurmurhash0.1.4indirekt
npminherits2.0.3indirekt
npminherits2.0.4indirekt
npmini2.0.0indirekt
npminterpret3.1.1indirekt
npmipaddr.js1.9.1indirekt
npmipaddr.js2.1.0indirekt
npmis-binary-path2.1.0indirekt
npmis-core-module2.16.1indirekt
npmis-docker3.0.0indirekt
npmis-extglob2.1.1indirekt
npmis-fullwidth-code-point3.0.0indirekt
npmis-fullwidth-code-point5.1.0indirekt
npmis-glob4.0.1indirekt
npmis-glob4.0.3indirekt
npmis-inside-container1.0.0indirekt
npmis-installed-globally0.4.0indirekt
npmis-network-error1.1.0indirekt
npmis-number7.0.0indirekt
npmis-path-inside3.0.3indirekt
npmis-plain-obj2.1.0indirekt
npmis-plain-obj3.0.0indirekt
npmis-plain-object2.0.4indirekt
npmis-stream2.0.1indirekt
npmis-typedarray1.0.0indirekt
npmis-unicode-supported0.1.0indirekt
npmis-wsl3.1.0indirekt
npmisarray1.0.0indirekt
npmisexe2.0.0indirekt
npmisexe4.0.0indirekt
npmisobject3.0.1indirekt
npmisstream0.1.2indirekt
npmistanbul-lib-coverage3.2.2indirekt
npmistanbul-lib-report3.0.1indirekt
npmistanbul-reports3.2.0indirekt
npmjackspeak3.4.3indirekt
npmjest-worker27.5.1indirekt
npmjs-tokens4.0.0indirekt
npmjs-yaml4.2.0indirekt
npmjsbn0.1.1indirekt
npmjsesc3.1.0indirekt
npmjson-buffer3.0.1indirekt
npmjson-parse-even-better-errors6.0.0indirekt
npmjson-schema0.4.0indirekt
npmjson-schema-traverse0.4.1indirekt
npmjson-schema-traverse1.0.0indirekt
npmjson-stable-stringify-without-jsonify1.0.1indirekt
npmjson-stringify-safe5.0.1indirekt
npmjson52.2.3indirekt
npmjsonfile6.1.0indirekt
npmjsprim2.0.2indirekt
npmkeyv4.5.4indirekt
npmkind-of6.0.3indirekt
npmlaunch-editor2.14.1indirekt
npmlevn0.4.1indirekt
npmlinkedom0.18.13indirekt
npmlistr29.0.5indirekt
npmloader-runner4.3.2indirekt
npmlocate-path5.0.0indirekt
npmlocate-path6.0.0indirekt
npmlodash4.18.1indirekt
npmlodash.debounce4.0.8indirekt
npmlodash.merge4.6.2indirekt
npmlodash.once4.1.1indirekt
npmlog-symbols4.1.0indirekt
npmlog-update6.1.0indirekt
npmlru-cache10.4.3indirekt
npmlru-cache11.5.1indirekt
npmlru-cache5.1.1indirekt
npmmake-dir4.0.0indirekt
npmmath-intrinsics1.1.0indirekt
npmmedia-typer0.3.0indirekt
npmmemfs4.11.1indirekt
npmmemorystream0.3.1indirekt
npmmerge-descriptors1.0.3indirekt
npmmerge-stream2.0.0indirekt
npmmethods1.1.2indirekt
npmmicromatch4.0.8indirekt
npmmime1.6.0indirekt
npmmime-db1.52.0indirekt
npmmime-db1.54.0indirekt
npmmime-types2.1.35indirekt
npmmimic-fn2.1.0indirekt
npmmimic-function5.0.1indirekt
npmminimalistic-assert1.0.1indirekt
npmminimatch10.2.5indirekt
npmminimatch3.1.5indirekt
npmminimatch9.0.9indirekt
npmminimist1.2.8indirekt
npmminimizer-webpack-plugin5.6.1indirekt
npmminipass7.1.3indirekt
npmmocha11.7.6indirekt
npmms2.0.0indirekt
npmms2.1.3indirekt
npmmulticast-dns7.2.5indirekt
npmnatural-compare1.4.0indirekt
npmnegotiator0.6.3indirekt
npmnegotiator0.6.4indirekt
npmneo-async2.6.2indirekt
npmnode-releases2.0.27indirekt
npmnormalize-path3.0.0indirekt
npmnpm-normalize-package-bin6.0.0indirekt
npmnpm-run-all29.0.2indirekt
npmnpm-run-path4.0.1indirekt
npmnth-check3.0.1indirekt
npmobject-inspect1.13.4indirekt
npmobuf1.1.2indirekt
npmon-finished2.4.1indirekt
npmon-headers1.1.0indirekt
npmonce1.4.0indirekt
npmonetime5.1.2indirekt
npmonetime7.0.0indirekt
npmopen10.1.0indirekt
npmoptionator0.9.3indirekt
npmospath1.2.2indirekt
npmp-limit2.3.0indirekt
npmp-limit3.1.0indirekt
npmp-locate4.1.0indirekt
npmp-locate5.0.0indirekt
npmp-retry6.2.0indirekt
npmp-try2.2.0indirekt
npmpackage-json-from-dist1.0.1indirekt
npmparent-module1.0.1indirekt
npmparseurl1.3.3indirekt
npmpath-exists4.0.0indirekt
npmpath-key3.1.1indirekt
npmpath-parse1.0.7indirekt
npmpath-scurry1.11.1indirekt
npmpath-scurry2.0.2indirekt
npmpath-to-regexp0.1.13indirekt
npmpend1.2.0indirekt
npmperformance-now2.1.0indirekt
npmpicocolors1.1.1indirekt
npmpicomatch2.3.2indirekt
npmpicomatch4.0.4indirekt
npmpidtree1.0.0indirekt
npmpify2.3.0indirekt
npmpkg-dir4.2.0indirekt
npmpkijs3.3.3indirekt
npmprelude-ls1.2.1indirekt
npmpretty-bytes5.6.0indirekt
npmprocess0.11.10indirekt
npmprocess-nextick-args2.0.1indirekt
npmproxy-addr2.0.7indirekt
npmproxy-from-env1.0.0indirekt
npmpump3.0.0indirekt
npmpunycode2.3.1indirekt
npmpvtsutils1.3.6indirekt
npmpvutils1.1.5indirekt
npmqs6.14.2indirekt
npmrandombytes2.1.0indirekt
npmrange-parser1.2.1indirekt
npmraw-body2.5.3indirekt
npmread-package-json-fast6.0.0indirekt
npmreadable-stream2.3.8indirekt
npmreadable-stream3.6.2indirekt
npmreaddirp3.6.0indirekt
npmreaddirp4.1.2indirekt
npmrechoir0.8.0indirekt
npmreflect-metadata0.2.2indirekt
npmregenerate1.4.2indirekt
npmregenerate-unicode-properties10.2.2indirekt
npmregexpu-core6.4.0indirekt
npmregjsgen0.8.0indirekt
npmregjsparser0.13.0indirekt
npmrequest-progress3.0.0indirekt
npmrequire-directory2.1.1indirekt
npmrequire-from-string2.0.2indirekt
npmrequires-port1.0.0indirekt
npmresolve1.22.11indirekt
npmresolve-cwd3.0.0indirekt
npmresolve-from4.0.0indirekt
npmresolve-from5.0.0indirekt
npmrestore-cursor5.1.0indirekt
npmretry0.13.1indirekt
npmrfdc1.4.1indirekt
npmrimraf5.0.10indirekt
npmrun-applescript7.0.0indirekt
npmsafe-buffer5.1.2indirekt
npmsafe-buffer5.2.1indirekt
npmsafer-buffer2.1.2indirekt
npmschema-utils4.3.3indirekt
npmselect-hose2.0.0indirekt
npmselfsigned5.5.0indirekt
npmsemver6.3.1indirekt
npmsemver7.8.2indirekt
npmsend0.19.0indirekt
npmserialize-javascript6.0.2indirekt
npmserve-index1.9.1indirekt
npmserve-static1.16.2indirekt
npmsetprototypeof1.1.0indirekt
npmsetprototypeof1.2.0indirekt
npmshallow-clone3.0.1indirekt
npmshebang-command2.0.0indirekt
npmshebang-regex3.0.0indirekt
npmshell-quote1.8.4indirekt
npmside-channel1.1.0indirekt
npmside-channel-list1.0.0indirekt
npmside-channel-map1.0.1indirekt
npmside-channel-weakmap1.0.2indirekt
npmsignal-exit3.0.7indirekt
npmsignal-exit4.1.0indirekt
npmslice-ansi7.1.2indirekt
npmslice-ansi8.0.0indirekt
npmsockjs0.3.24indirekt
npmsource-map0.6.1indirekt
npmsource-map-support0.5.20indirekt
npmspdy4.0.2indirekt
npmspdy-transport3.0.0indirekt
npmsshpk1.18.0indirekt
npmstatuses1.5.0indirekt
npmstatuses2.0.1indirekt
npmstatuses2.0.2indirekt
npmstring-replace-loader3.3.0indirekt
npmstring-width4.2.3indirekt
npmstring-width5.1.2indirekt
npmstring-width7.2.0indirekt
npmstring-width8.2.1indirekt
npmstring_decoder1.1.1indirekt
npmstrip-ansi6.0.1indirekt
npmstrip-ansi7.1.0indirekt
npmstrip-ansi7.2.0indirekt
npmstrip-final-newline2.0.0indirekt
npmstrip-json-comments3.1.1indirekt
npmsupports-color7.2.0indirekt
npmsupports-color8.1.1indirekt
npmsupports-preserve-symlinks-flag1.0.0indirekt
npmsysteminformation5.31.17indirekt
npmtapable2.3.3indirekt
npmterser5.37.0indirekt
npmterser-webpack-plugin5.6.1indirekt
npmtest-exclude8.0.0indirekt
npmthingies1.21.0indirekt
npmthrottleit1.0.0indirekt
npmthunky1.1.0indirekt
npmtldts6.1.86indirekt
npmtldts-core6.1.86indirekt
npmtmp0.2.7indirekt
npmto-regex-range5.0.1indirekt
npmtoidentifier1.0.1indirekt
npmtough-cookie5.1.2indirekt
npmtree-dump1.0.2indirekt
npmtree-kill1.2.2indirekt
npmtslib1.14.1indirekt
npmtslib2.7.0indirekt
npmtslib2.8.1indirekt
npmtsyringe4.10.0indirekt
npmtunnel-agent0.6.0indirekt
npmtweetnacl0.14.5indirekt
npmtype-check0.4.0indirekt
npmtype-fest0.8.1indirekt
npmtype-is1.6.18indirekt
npmtypescript7.0.2indirekt
npmuhyphen0.2.0indirekt
npmundici-types8.3.0indirekt
npmunicode-canonical-property-names-ecmascript2.0.1indirekt
npmunicode-match-property-ecmascript2.0.0indirekt
npmunicode-match-property-value-ecmascript2.2.1indirekt
npmunicode-property-aliases-ecmascript2.2.0indirekt
npmuniversalify2.0.0indirekt
npmunpipe1.0.0indirekt
npmuntildify4.0.0indirekt
npmupdate-browserslist-db1.2.3indirekt
npmuri-js4.4.1indirekt
npmutil-deprecate1.0.2indirekt
npmutils-merge1.0.1indirekt
npmuuid8.3.2indirekt
npmv8-to-istanbul9.3.0indirekt
npmvary1.1.2indirekt
npmverror1.10.0indirekt
npmwatchpack2.5.2indirekt
npmwbuf1.7.3indirekt
npmwebpack5.108.4indirekt
npmwebpack-cli7.2.1indirekt
npmwebpack-dev-middleware7.4.2indirekt
npmwebpack-dev-server5.2.6indirekt
npmwebpack-merge6.0.1indirekt
npmwebpack-sources3.5.0indirekt
npmwebsocket-driver0.7.5indirekt
npmwebsocket-extensions0.1.4indirekt
npmwhich2.0.2indirekt
npmwhich7.0.0indirekt
npmwildcard2.0.1indirekt
npmworkerpool9.3.2indirekt
npmwrap-ansi7.0.0indirekt
npmwrap-ansi8.1.0indirekt
npmwrap-ansi9.0.2indirekt
npmwrappy1.0.2indirekt
npmws8.21.0indirekt
npmy18n5.0.8indirekt
npmyallist3.1.1indirekt
npmyargs17.7.2indirekt
npmyargs-parser21.1.1indirekt
npmyargs-unparser2.0.0indirekt
npmyauzl3.3.2indirekt
npmyocto-queue0.1.0indirekt
Abhängigkeits-Advisories 0

Die Installation von npm:exifreader@4.41.3 zieht 1 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 8377,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Dockerfile": 3181,
        "JavaScript": 1076607,
        "TypeScript": 17943
      },
      "pushed_at": "2026-07-22T14:02:52Z",
      "created_at": "2012-01-01T23:05:20Z",
      "owner_type": "User",
      "updated_at": "2026-07-22T14:07:41Z",
      "description": "A JavaScript Exif info parser.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MPL-2.0",
      "default_branch": "main",
      "license_spdx_raw": "MPL-2.0",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Mattias Wallander",
      "type": "User",
      "login": "mattiasw",
      "company": null,
      "location": "Sweden",
      "followers": 28,
      "avatar_url": "https://avatars.githubusercontent.com/u/564615?v=4",
      "created_at": "2011-01-14T12:54:55Z",
      "is_verified": null,
      "public_repos": 17,
      "account_age_days": 5669
    },
    "license": {
      "state": "standard",
      "spdx_id": "MPL-2.0",
      "raw_spdx": "MPL-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v4.41.3",
          "kind": "patch",
          "published_at": "2026-07-18T14:48:16Z"
        },
        {
          "tag": "v4.41.2",
          "kind": "patch",
          "published_at": "2026-07-18T12:18:41Z"
        },
        {
          "tag": "v4.41.1",
          "kind": "patch",
          "published_at": "2026-07-18T10:14:24Z"
        },
        {
          "tag": "v4.41.0",
          "kind": "minor",
          "published_at": "2026-06-08T09:32:56Z"
        },
        {
          "tag": "v4.40.5",
          "kind": "patch",
          "published_at": "2026-06-03T18:55:02Z"
        },
        {
          "tag": "v4.40.4",
          "kind": "patch",
          "published_at": "2026-06-03T14:18:01Z"
        },
        {
          "tag": "v4.40.3",
          "kind": "patch",
          "published_at": "2026-05-31T18:48:20Z"
        },
        {
          "tag": "v4.40.2",
          "kind": "patch",
          "published_at": "2026-05-30T20:52:39Z"
        },
        {
          "tag": "v4.40.1",
          "kind": "patch",
          "published_at": "2026-05-30T18:47:46Z"
        },
        {
          "tag": "v4.40.0",
          "kind": "minor",
          "published_at": "2026-05-29T13:36:56Z"
        },
        {
          "tag": "v4.39.1",
          "kind": "patch",
          "published_at": "2026-05-19T11:05:08Z"
        },
        {
          "tag": "v4.39.0",
          "kind": "minor",
          "published_at": "2026-05-15T17:49:13Z"
        },
        {
          "tag": "v4.38.1",
          "kind": "patch",
          "published_at": "2026-04-09T09:23:13Z"
        },
        {
          "tag": "v4.38.0",
          "kind": "minor",
          "published_at": "2026-04-07T08:24:50Z"
        },
        {
          "tag": "v4.37.1",
          "kind": "patch",
          "published_at": "2026-04-05T15:06:25Z"
        },
        {
          "tag": "v4.37.0",
          "kind": "minor",
          "published_at": "2026-03-11T13:56:42Z"
        },
        {
          "tag": "v4.36.2",
          "kind": "patch",
          "published_at": "2026-02-19T12:34:30Z"
        },
        {
          "tag": "v4.36.1",
          "kind": "patch",
          "published_at": "2026-01-25T20:03:09Z"
        },
        {
          "tag": "v4.36.0",
          "kind": "minor",
          "published_at": "2026-01-11T14:50:39Z"
        },
        {
          "tag": "v4.35.0",
          "kind": "minor",
          "published_at": "2026-01-09T14:56:56Z"
        },
        {
          "tag": "v4.34.0",
          "kind": "minor",
          "published_at": "2026-01-05T21:24:38Z"
        },
        {
          "tag": "v4.33.1",
          "kind": "patch",
          "published_at": "2025-12-05T15:04:04Z"
        },
        {
          "tag": "v4.32.0",
          "kind": "minor",
          "published_at": "2025-09-20T17:31:45Z"
        },
        {
          "tag": "v4.31.2",
          "kind": "patch",
          "published_at": "2025-08-29T18:05:10Z"
        },
        {
          "tag": "v4.31.1",
          "kind": "patch",
          "published_at": "2025-06-17T21:08:25Z"
        },
        {
          "tag": "v4.31.0",
          "kind": "minor",
          "published_at": "2025-05-27T18:18:44Z"
        },
        {
          "tag": "v4.30.1",
          "kind": "patch",
          "published_at": "2025-05-08T20:41:21Z"
        },
        {
          "tag": "v4.30.0",
          "kind": "minor",
          "published_at": "2025-05-01T07:19:41Z"
        },
        {
          "tag": "v4.29.0",
          "kind": "minor",
          "published_at": "2025-04-21T13:04:55Z"
        },
        {
          "tag": "v4.28.1",
          "kind": "patch",
          "published_at": "2025-04-09T17:50:16Z"
        },
        {
          "tag": "v4.28.0",
          "kind": "minor",
          "published_at": "2025-04-07T15:23:47Z"
        },
        {
          "tag": "v4.27.0",
          "kind": "minor",
          "published_at": "2025-03-24T16:18:59Z"
        },
        {
          "tag": "v4.26.2",
          "kind": "patch",
          "published_at": "2025-03-05T17:55:38Z"
        },
        {
          "tag": "v4.26.1",
          "kind": "patch",
          "published_at": "2025-01-26T20:40:56Z"
        },
        {
          "tag": "v4.26.0",
          "kind": "minor",
          "published_at": "2024-12-25T21:14:51Z"
        },
        {
          "tag": "v4.25.0",
          "kind": "minor",
          "published_at": "2024-10-28T21:34:00Z"
        },
        {
          "tag": "v4.24.0",
          "kind": "minor",
          "published_at": "2024-10-25T12:32:57Z"
        },
        {
          "tag": "v4.23.7",
          "kind": "patch",
          "published_at": "2024-10-07T19:52:57Z"
        },
        {
          "tag": "v4.23.6",
          "kind": "patch",
          "published_at": "2024-10-04T10:44:16Z"
        },
        {
          "tag": "v4.23.5",
          "kind": "patch",
          "published_at": "2024-09-05T17:27:42Z"
        },
        {
          "tag": "v4.23.4",
          "kind": "patch",
          "published_at": "2024-09-05T15:49:42Z"
        },
        {
          "tag": "v4.23.3",
          "kind": "patch",
          "published_at": "2024-06-12T07:51:29Z"
        },
        {
          "tag": "v4.23.2",
          "kind": "patch",
          "published_at": "2024-05-29T10:41:13Z"
        },
        {
          "tag": "v4.23.1",
          "kind": "patch",
          "published_at": "2024-05-04T19:10:36Z"
        },
        {
          "tag": "v4.22.1",
          "kind": "patch",
          "published_at": "2024-04-08T18:55:35Z"
        },
        {
          "tag": "v4.22.0",
          "kind": "minor",
          "published_at": "2024-04-06T14:08:51Z"
        },
        {
          "tag": "v4.21.1",
          "kind": "patch",
          "published_at": "2024-03-10T17:34:25Z"
        },
        {
          "tag": "v4.21.0",
          "kind": "minor",
          "published_at": "2024-02-04T20:39:11Z"
        },
        {
          "tag": "v4.20.0",
          "kind": "minor",
          "published_at": "2023-12-28T19:48:38Z"
        },
        {
          "tag": "v4.19.1",
          "kind": "patch",
          "published_at": "2023-12-18T06:21:43Z"
        },
        {
          "tag": "v4.19.0",
          "kind": "minor",
          "published_at": "2023-12-17T20:46:54Z"
        },
        {
          "tag": "v4.18.0",
          "kind": "minor",
          "published_at": "2023-12-16T22:15:27Z"
        },
        {
          "tag": "v4.17.0",
          "kind": "minor",
          "published_at": "2023-11-19T16:58:03Z"
        },
        {
          "tag": "v4.16.0",
          "kind": "minor",
          "published_at": "2023-10-31T14:49:24Z"
        },
        {
          "tag": "v4.15.0",
          "kind": "minor",
          "published_at": "2023-10-26T17:02:48Z"
        },
        {
          "tag": "v4.14.1",
          "kind": "patch",
          "published_at": "2023-10-21T14:57:21Z"
        },
        {
          "tag": "4.14.0",
          "kind": "minor",
          "published_at": "2023-10-21T13:48:35Z"
        },
        {
          "tag": "4.13.2",
          "kind": "patch",
          "published_at": "2023-10-07T18:29:15Z"
        },
        {
          "tag": "4.13.1",
          "kind": "patch",
          "published_at": "2023-10-03T20:19:05Z"
        },
        {
          "tag": "4.13.0",
          "kind": "minor",
          "published_at": "2023-07-06T20:52:22Z"
        },
        {
          "tag": "4.12.1",
          "kind": "patch",
          "published_at": "2023-06-08T19:05:00Z"
        },
        {
          "tag": "4.12.0",
          "kind": "minor",
          "published_at": "2023-03-28T19:38:45Z"
        },
        {
          "tag": "4.11.1",
          "kind": "patch",
          "published_at": "2023-03-17T21:53:56Z"
        },
        {
          "tag": "4.11.0",
          "kind": "minor",
          "published_at": "2023-03-13T20:41:41Z"
        },
        {
          "tag": "4.10.0",
          "kind": "minor",
          "published_at": "2023-03-10T22:37:39Z"
        },
        {
          "tag": "4.9.2",
          "kind": "patch",
          "published_at": "2023-02-26T17:09:54Z"
        },
        {
          "tag": "4.9.1",
          "kind": "patch",
          "published_at": "2022-12-19T17:18:11Z"
        },
        {
          "tag": "4.9.0",
          "kind": "minor",
          "published_at": "2022-12-12T21:32:20Z"
        },
        {
          "tag": "4.8.1",
          "kind": "patch",
          "published_at": "2022-11-08T21:37:43Z"
        },
        {
          "tag": "4.8.0",
          "kind": "minor",
          "published_at": "2022-11-07T19:38:40Z"
        },
        {
          "tag": "4.7.0",
          "kind": "minor",
          "published_at": "2022-11-04T21:23:37Z"
        },
        {
          "tag": "4.6.0",
          "kind": "minor",
          "published_at": "2022-10-01T19:03:12Z"
        },
        {
          "tag": "4.5.1",
          "kind": "patch",
          "published_at": "2022-08-02T18:58:40Z"
        },
        {
          "tag": "4.5.0",
          "kind": "minor",
          "published_at": "2022-04-12T05:21:38Z"
        },
        {
          "tag": "4.4.0",
          "kind": "minor",
          "published_at": "2022-03-12T21:37:32Z"
        },
        {
          "tag": "4.3.1",
          "kind": "patch",
          "published_at": "2022-03-11T06:42:29Z"
        },
        {
          "tag": "4.3.0",
          "kind": "minor",
          "published_at": "2022-03-04T22:35:00Z"
        },
        {
          "tag": "4.2.0",
          "kind": "minor",
          "published_at": "2022-01-23T15:55:45Z"
        },
        {
          "tag": "4.1.1",
          "kind": "patch",
          "published_at": "2021-12-30T17:15:55Z"
        },
        {
          "tag": "4.1.0",
          "kind": "minor",
          "published_at": "2021-11-21T17:47:53Z"
        },
        {
          "tag": "4.0.0",
          "kind": "major",
          "published_at": "2021-10-31T15:59:13Z"
        },
        {
          "tag": "3.16.0",
          "kind": "minor",
          "published_at": "2021-06-06T16:51:14Z"
        },
        {
          "tag": "3.15.0",
          "kind": "minor",
          "published_at": "2021-04-25T15:49:44Z"
        },
        {
          "tag": "3.14.1",
          "kind": "patch",
          "published_at": "2021-03-13T12:28:58Z"
        },
        {
          "tag": "3.14.0",
          "kind": "minor",
          "published_at": "2021-01-31T17:44:26Z"
        },
        {
          "tag": "3.13.0",
          "kind": "minor",
          "published_at": "2020-12-30T11:15:27Z"
        },
        {
          "tag": "3.12.6",
          "kind": "patch",
          "published_at": "2020-11-23T21:49:55Z"
        },
        {
          "tag": "3.12.5",
          "kind": "patch",
          "published_at": "2020-11-21T21:59:00Z"
        },
        {
          "tag": "3.12.4",
          "kind": "patch",
          "published_at": "2020-11-21T10:28:21Z"
        },
        {
          "tag": "3.12.3",
          "kind": "patch",
          "published_at": "2020-10-10T07:37:49Z"
        },
        {
          "tag": "3.12.2",
          "kind": "patch",
          "published_at": "2020-08-19T19:17:49Z"
        },
        {
          "tag": "3.12.1",
          "kind": "patch",
          "published_at": "2020-08-17T16:20:05Z"
        },
        {
          "tag": "3.12.0",
          "kind": "minor",
          "published_at": "2020-06-01T18:49:46Z"
        },
        {
          "tag": "3.11.2",
          "kind": "patch",
          "published_at": "2020-05-09T11:25:58Z"
        },
        {
          "tag": "3.11.1",
          "kind": "patch",
          "published_at": "2020-05-08T18:02:15Z"
        },
        {
          "tag": "3.11.0",
          "kind": "minor",
          "published_at": "2020-05-02T21:50:16Z"
        },
        {
          "tag": "3.10.0",
          "kind": "minor",
          "published_at": "2020-05-01T13:05:48Z"
        },
        {
          "tag": "3.9.0",
          "kind": "minor",
          "published_at": "2020-04-19T18:51:40Z"
        },
        {
          "tag": "3.8.0",
          "kind": "minor",
          "published_at": "2020-04-14T21:08:13Z"
        },
        {
          "tag": "3.7.0",
          "kind": "minor",
          "published_at": "2020-04-11T15:34:34Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "74910ccf10e7c037a9f520bceb3191bc48a5dde2",
          "body": null,
          "is_bot": false,
          "headline": "Replace imgur e2e image with gh-pages copy",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-22T14:02:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "611b8b6cf908d36f0262f1f0c9a6a09604ec47f5",
          "body": null,
          "is_bot": false,
          "headline": "4.41.3",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T14:45:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5465bfc56a0a4b58c84228d82f933480237bfc5",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.41.3",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T14:45:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "126ee912abb9ce71f185401e1d608f5d89827c8d",
          "body": null,
          "is_bot": false,
          "headline": "Ignore CLAUDE.local.md",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T14:42:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e8986c970c2debcde61c08eb78ff7f04aec0633",
          "body": "The src/package.json added in 4.41.1 for native ESM shadowed the root\npackage.json's sideEffects declaration, so webpack kept unreferenced\nmodules and custom builds came out roughly twice their intended size.\nDeclare sideEffects in src/package.json too, and add a bundle-size guard\nto the custom-build suite since the parse-output comparison alone cannot\ncatch a bloated but functionally correct bundle.",
          "is_bot": false,
          "headline": "Restore side-effect-free tree-shaking of the src modules",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T14:41:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7e73b043ecbb207a0a9e8455b20428e94cd61c6",
          "body": null,
          "is_bot": false,
          "headline": "4.41.2",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:14:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f53ba58bbe273e9640fd57ce45558799f784b4e1",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.41.2",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:14:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f548d92aebeff148ed83f91460dcfa5b3dd8affe",
          "body": null,
          "is_bot": false,
          "headline": "Add built files",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0044ddf78cb8b9063c177005b2d250539573c4c8",
          "body": "The custom_test-issue-240-xmp-full-cpu.jpeg fixture takes 26 to 43\nseconds per parse pair on a mid-range machine depending on thermal\nstate, measured with an interleaved benchmark at both the branch base\nand HEAD (the refactor branch is marginally faster, so the failures\nwere not a regression). The \n[…]\nthing is already broken, so passing runs are unaffected.\n\nVerified: full integration suite 3367 passing on a loaded machine\nthat previously produced five timeouts, unit suite 1221 passing,\nlint clean.",
          "is_bot": false,
          "headline": "Raise the per-image timeout headroom in the oracle suites",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3cffc8822aae637b59df9c166c6b418c668ce085",
          "body": "Isomorphism card\n\nChange: same lever as the png-file-tags table, applied to\ngif-file-tags. Six getters with the shared guard-read-wrap shape\nbecome a FIELDS table and one getFieldTag reader. Value lambdas\nreceive the row's offset so the bit-mask reads of byte 10 stay\nexplicit per row.\n\nEquivalence c\n[…]\ned-buffer cases.\n\nVerification:\n- Unit tests: 1221 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: src/gif-file-tags.js 116 to 53.",
          "is_bot": false,
          "headline": "Table-drive the GIF header fields",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "621a73b5d4d5afc4f0c674ec772bf12948e7fdf1",
          "body": "Isomorphism card\n\nChange: the seven png-file-tags getters repeated the same\nguard-read-wrap shape with different offsets, sizes, readers, and\ndescription formatters. They become a FIELDS table and one\ngetFieldTag reader.\n\nEquivalence contract:\n- Key order and presence: read still produces all seven \n[…]\n21 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Coverage improved to 95.83/93.19/98.39/95.83.\n- Lint and type tests clean.\n- LOC: src/png-file-tags.js 137 to 62.",
          "is_bot": false,
          "headline": "Table-drive the PNG file header fields",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f4e093a97336892efd419575144e3b5a90daaec",
          "body": "Isomorphism card\n\nChange: the multi-Exif segment chooser kept four parallel locals and\nthree count-indexed arms where the second and third differed only in\nlazily scoring the stored first segment. It becomes one\nbestExifSegment object with a lazy score sentinel.\n\nEquivalence contract:\n- One segment:\n[…]\n- Golden corpus: sha256 identical to baseline 9122f420, including\n  captured console.warn calls.\n- Lint and type tests clean.\n- LOC: src/image-header-jpeg.js net -7 with the fast-path comment\n  added.",
          "is_bot": false,
          "headline": "Track the best Exif segment with one running-best object",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6bc6fab28b75e99fe433248f22f94496af41f195",
          "body": "Isomorphism card\n\nChange: the mergeXmpGroupAssign and mergeBrobXmpDeferred handlers in\napplyMergeStep ended with the same nine lines, expanded assignment or\nflat hoist with _raw stripped. They now call a shared mergeXmpGroup\nnext to its siblings mergeAssignGroup and mergeMergeGroup.\n\nEquivalence con\n[…]\n none involved.\n\nVerification:\n- Unit tests: 1221 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: src/loadview-pipeline.js net -7.",
          "is_bot": false,
          "headline": "Share the XMP flat and expanded merge between the two XMP steps",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "344eb1b19cdf1b1b8ecd5a1ef922a35d8bd4625f",
          "body": "Isomorphism card\n\nChange: isHeicFile and isAvifFile duplicated the null-guard, parseBox\ncall, and brand comparison. The shared hasMajorBrand(dataView, brands)\nlives in image-header-iso-bmff.js next to parseBox. HEIC passes its\nnine-brand list, AVIF passes ['avif']. The two modules stay separate\nso t\n[…]\n effects: none involved.\n\nVerification:\n- Unit tests: 1221 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: net -13 across 3 files.",
          "is_bot": false,
          "headline": "Share the ISO-BMFF major-brand recognizer between HEIC and AVIF",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f210db9e7162304c0d190ab3c518a6382c3656e",
          "body": "Isomorphism card\n\nChange: shouldReadFileTagsForFileTypeOnlyOptimization expressed one\nboolean condition as six early-return blocks. It becomes three\nstatements with the same truth table.\n\nEquivalence contract, by case analysis:\n- No includeTags: true before and after.\n- composite === true, or compos\n[…]\nng, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420, including the\n  filter-include and filter-exclude variants.\n- Lint and type tests clean.\n- LOC: src/exif-reader.js net -20.",
          "is_bot": false,
          "headline": "Flatten the FileType-only optimization predicate",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "370c8b1c289c3a8b97e0a8e8d1810391ac553197",
          "body": "Isomorphism card\n\nChange: getItemInformationBoxOffsetsAndSizes built an offsets object\nand a sizes object but its only caller used a single number, the item\ninfos offset. The name also promised sizes that were never returned.\nThe computation collapses into parseItemInformationBox as\ncontentOffset + \n[…]\neferences.\n\nVerification:\n- Unit tests: 1221 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: src/image-header-iso-bmff.js net -15.",
          "is_bot": false,
          "headline": "Inline the iinf offset computation",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b842dbd32586fec65078a1395a3dc9b03fc9f2a",
          "body": "Isomorphism card\n\nChange: BOX_TYPE_OFFSET and BOX_MIN_LENGTH were function locals in\nparseBox and duplicated in image-header-jxl.js (the latter under the\nname BOX_HEADER_MIN_SIZE). They move to module scope in\nimage-header-iso-bmff.js, next to the other box constants, and the\nJXL finder imports them\n[…]\nader-iso-bmff, no\n  new dependency edge.\n\nVerification:\n- Unit tests: 1221 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: net -2.",
          "is_bot": false,
          "headline": "Share the ISO-BMFF box layout constants with the JXL finder",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f702707d19b799efc7bcab0aca860bad4f6e482b",
          "body": "Implements the dedup designed in FOLLOWUP-dedup-metadata-blocks.md.\n\nIsomorphism card\n\nChange: the guarded metadata-block push appeared byte-identically in\nthe jpeg, png, webp, and jxl finders, with equivalent variants in gif,\nxml, and two iso-bmff sites. All eight sites now call\npushMetadataBlock(m\n[…]\n the helper, none removed.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Coverage 95.50/92.96/98.38/95.50, above thresholds.\n- Lint and type tests clean.\n- LOC: src net -30 across 8 files.",
          "is_bot": false,
          "headline": "Extract the shared metadata-block push helper",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9015a842212682ef32f70b84dd554265a347395d",
          "body": "Isomorphism card\n\nChange: icc-tags.js and icc-tag-names.js each defined an identical\nsliceToString. The dictionary keeps the definition and exports it, the\nparser imports it and drops its copy. The parser already imported the\ndictionary, so no new dependency edge or cycle is introduced.\n\nEquivalence\n[…]\nnd\n  neither ships otherwise, unchanged.\n\nVerification:\n- Unit tests: 1218 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: net -4.",
          "is_bot": false,
          "headline": "Share one sliceToString between the ICC parser and dictionary",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "48087d385115fb4c244e34812c46d3bd41b023d8",
          "body": "Isomorphism card\n\nChange: getStringValue in tag-names-utils.js was byte-identical to\ngetStringValueFromArray in utils.js. It becomes a renaming re-export.\nThe import keeps a local binding because getEncodedString in the same\nfile calls it.\n\nEquivalence contract:\n- Inputs covered: every dictionary de\n[…]\nurface touched.\n\nVerification:\n- Unit tests: 1218 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: src/tag-names-utils.js 33 to 32.",
          "is_bot": false,
          "headline": "Reuse getStringValueFromArray as the dictionaries' getStringValue",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a01e087d0333944911a4173c993e447d9f92bb31",
          "body": "Isomorphism card\n\nChange: totalSizeFromFetchResponse and totalSizeFromNodeResponse\nduplicated the header parsing, differing only in how a header is\nlooked up (Headers.get versus plain property). The parsing moves into\ntotalSizeFromRangeHeaders and the two wrappers keep their own guards\nand lookups.\n\n[…]\ne effects: none.\n\nVerification:\n- Unit tests: 1218 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: src/file-loaders.js 328 to 317.",
          "is_bot": false,
          "headline": "Share the Content-Range and Content-Length size parsing",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "371c6fa42b85c793cb2cf88e6f20d22ea0b0d690",
          "body": "Isomorphism card\n\nChange: the three identical typeof Promise === 'undefined' guards in\nload, loadView, and loadAuto move into assertPromiseSupport in\nutils.js. The similar looking guard inside the ICC deferred branch is\nNOT touched because its condition is !async, a different check that\nonly shares \n[…]\nssing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Coverage 95.47/92.96/98.38/95.47, above thresholds.\n- Lint and type tests clean.\n- LOC: net -4 (sites -10, helper +6).",
          "is_bot": false,
          "headline": "Share one Promise availability guard",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "16d8f522b21b9b0fa6194c28d8cfb7494b21d176",
          "body": "Isomorphism card\n\nChange: the string and browser File branches of load were identical\nexcept for which loader function they called. They become one branch\nthat selects the loader with a ternary.\n\nEquivalence contract:\n- Inputs covered: URL and path strings, browser File objects, and the\n  buffer fal\n[…]\n, byte identical.\n\nVerification:\n- Unit tests: 1218 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: src/exif-reader.js 975 to 968.",
          "is_bot": false,
          "headline": "Merge the twin file path and File object branches in load",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "750f8f52dab321101f804443d3b38400cff55298",
          "body": "Isomorphism card\n\nChange: exif-reader.js carried its own copy of the getDataView\ntry-native-fall-back-to-wrapper helper. It now imports the one in\nutils.js and drops the local copy plus the direct DataViewWrapper\nimport. The two duplicate utils import statements are merged.\n\nEquivalence contract:\n- \n[…]\nurface\n  touched.\n\nVerification:\n- Unit tests: 1218 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: src/exif-reader.js 985 to 975.",
          "is_bot": false,
          "headline": "Reuse the shared getDataView from utils",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fc39855dec2f59146d36de7d681c35048dacf9c1",
          "body": "Isomorphism card\n\nChange: readExifIfd, readGpsIfd, and readInteroperabilityIfd in\ntags.js were copies differing only in pointer-tag key and IFD type.\nThey become one readSubIfd function driven by a SUB_IFDS table, called\nin a loop from read.\n\nEquivalence contract:\n- Inputs covered: every TIFF-based \n[…]\ng the 'exif'\n  group key.\n\nVerification:\n- Unit tests: 1218 passing, count unchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: src/tags.js 107 to 68.",
          "is_bot": false,
          "headline": "Collapse the three sub-IFD readers into one table-driven reader",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "574f0c733e61f58762a1880ce7eb983f3e5dbfc3",
          "body": "Isomorphism card\n\nChange: replace the ten one-line has*Data predicates that just test\nx !== undefined with the test itself at their call sites, and delete\nthe function definitions. The three array predicates (hasXmpData,\nhasIccData, hasPngTextData) and the two maker-note predicates\n(hasCanonData, ha\n[…]\nunchanged.\n- Golden corpus: sha256 identical to baseline 9122f420.\n- Coverage 95.44/92.88/98.39/95.44, above thresholds 93/90/98/93.\n- Lint and type tests clean.\n- LOC: src/exif-reader.js 1027 to 985.",
          "is_bot": false,
          "headline": "Inline the trivial has*Data offset predicates",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "24459341a1bfdadcaf86738fbaf1c13cf6ede3ec",
          "body": "Isomorphism card\n\nChange: delete the second-level default object for loadView's options\nparameter. The per-property destructuring defaults already produce the\nexact same values when the argument is omitted, and the object is never\nconsulted when a caller passes an options object.\n\nEquivalence contra\n[…]\n: 1218 passing, count unchanged.\n- Golden corpus (186 fixture images x 8 option variants): sha256\n  identical to baseline 9122f420.\n- Lint and type tests clean.\n- LOC: src/exif-reader.js 1037 to 1027.",
          "is_bot": false,
          "headline": "Remove redundant default options object from loadView",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T12:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "16f0a9ab7c26c000c117c4ffb91e11449e79c7c1",
          "body": null,
          "is_bot": false,
          "headline": "Link security advisory in changelog for 4.41.1",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T11:16:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76dd683f869848b0e5317eec8931dc182815a46b",
          "body": "When the buffer ends in the middle of an iloc item header, a DataView\nread would throw and the whole box was discarded, losing the items\nthat were fully present. Now parsing stops cleanly at the first\ntruncated header and returns the valid prefix, so Exif and XMP that\nare actually in the buffer are still found. This is a graceful\ndegradation fix for truncated files and partial reads, not a\nsecurity fix.",
          "is_bot": false,
          "headline": "Return valid items from a truncated HEIC/AVIF iloc box",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T11:16:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20dfd6ec542fb4cb0933b512a02a92997828374c",
          "body": null,
          "is_bot": false,
          "headline": "4.41.1",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T10:11:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "744098996a71aa2e5fb0215170ded05c88a919f1",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.41.1",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T10:10:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17b901cd192d2c90d7f9f347bd3073b28b482699",
          "body": "…fcc)\n\nA malformed ISO-BMFF iloc box could cause excessive memory allocation\nduring parsing. Bound parsing to the available input so allocation stays\nproportional to file size. Add regression tests.",
          "is_bot": false,
          "headline": "Fix denial-of-service on crafted HEIC/AVIF metadata (GHSA-pj96-35fp-c…",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-18T10:03:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e2a930978671b4530c00fd7cda287c0f9a5b6ef",
          "body": "Bumps the all-dependencies group with 2 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) and [typescript](https://github.com/microsoft/TypeScript).\n\n\nUpdates `@eslint/js` from 9.39.4 to 9.39.5\n- [Release notes](https://github.com/eslint/eslint/releases)\n- [Commits](https\n[…]\ndependency-version: 7.0.2\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n  dependency-group: all-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the all-dependencies group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-17T11:40:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "30623d32d3b877a9137a1f5393db0fd4030ba4fe",
          "body": "Bumps [systeminformation](https://github.com/sebhildebrandt/systeminformation) from 5.31.6 to 5.31.17.\n- [Release notes](https://github.com/sebhildebrandt/systeminformation/releases)\n- [Changelog](https://github.com/sebhildebrandt/systeminformation/blob/master/CHANGELOG.md)\n- [Commits](https://githu\n[…]\ne/v5.31.6...v5.31.17)\n\n---\nupdated-dependencies:\n- dependency-name: systeminformation\n  dependency-version: 5.31.17\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump systeminformation from 5.31.6 to 5.31.17",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-16T05:59:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2718a31fb7b9cfda9f235c5aa399c097edf2e074",
          "body": "Bumps [websocket-driver](https://github.com/faye/websocket-driver-node) from 0.7.4 to 0.7.5.\n- [Changelog](https://github.com/faye/websocket-driver-node/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/faye/websocket-driver-node/compare/0.7.4...0.7.5)\n\n---\nupdated-dependencies:\n- dependency-name: websocket-driver\n  dependency-version: 0.7.5\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump websocket-driver from 0.7.4 to 0.7.5",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-16T05:58:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "252bc748e632d6ca3640b62a043740c1ea8242c4",
          "body": "Bumps [ws](https://github.com/websockets/ws) from 8.18.0 to 8.21.0.\n- [Release notes](https://github.com/websockets/ws/releases)\n- [Commits](https://github.com/websockets/ws/compare/8.18.0...8.21.0)\n\n---\nupdated-dependencies:\n- dependency-name: ws\n  dependency-version: 8.21.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump ws from 8.18.0 to 8.21.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-11T15:04:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87fc9d86887896949ee658bd908e0036443f3303",
          "body": "Bumps the all-dependencies group with 6 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.0.1` | `26.1.1` |\n| [cypress](https://github.com/cypress-io/cypress) | `15.18.0` | `15.18.1`\n[…]\ndependency-version: 5.2.6\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: all-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the all-dependencies group across 1 directory with 6 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-11T14:49:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3de2e6f5fd4e648241a4b038beac3addfa2a0ed",
          "body": null,
          "is_bot": false,
          "headline": "Upgrade actions/checkout to v7",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-07-05T14:12:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c308b3b976a14adc9d0b16d8f22093fc663405b",
          "body": "Bumps the all-dependencies group with 4 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [cypress](https://github.com/cypress-io/cypress), [webpack](https://github.com/webpack/webpack) and [webpack-cli](https://github.com/webpack/webpack-cli).\n\n\nUpdate\n[…]\ndependency-version: 7.1.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: all-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the all-dependencies group with 4 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-03T11:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "858a1d704666de72751c848817e97964aa0df479",
          "body": "Bumps the all-dependencies group with 2 updates in the / directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [globals](https://github.com/sindresorhus/globals).\n\n\nUpdates `@types/node` from 25.9.3 to 26.0.0\n- [Release notes](https://github.com/Defini\n[…]\nependency-version: 17.7.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: all-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the all-dependencies group across 1 directory with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-26T14:11:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "214228703e9a0bc9113e3d31a9d653d7f48eda88",
          "body": "Bumps [form-data](https://github.com/form-data/form-data) from 4.0.5 to 4.0.6.\n- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/form-data/form-data/compare/v4.0.5...v4.0.6)\n\n---\nupdated-dependencies:\n- dependency-name: form-data\n  dependency-version: 4.0.6\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump form-data from 4.0.5 to 4.0.6",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-19T12:22:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dbe16447e6c5550cb37579dffd1e6ebab22f922",
          "body": "Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.1 to 4.2.0.\n- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/nodeca/js-yaml/commits)\n\n---\nupdated-dependencies:\n- dependency-name: js-yaml\n  dependency-version: 4.2.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump js-yaml from 4.1.1 to 4.2.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-19T12:22:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "398bbb1035e57a2de6b9e98719baa00dbab083ad",
          "body": "Bumps the all-dependencies group with 4 updates in the / directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [cypress](https://github.com/cypress-io/cypress), [npm-run-all2](https://github.com/bcomnes/npm-run-all2) and [webpack-dev-server](https://githu\n[…]\ndependency-version: 5.2.5\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: all-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the all-dependencies group across 1 directory with 4 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-19T11:57:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2536ba519e421b5079ed7a2b33f49cbfaea64b4a",
          "body": null,
          "is_bot": false,
          "headline": "Reduce cooldown in Dependabot to 3 days",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-14T19:30:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6ee3970a0950751b83d59366b10c1baaf9c9cb3",
          "body": "Chai 5 went ESM only, which the old Babel-to-CommonJS test pipeline\ncould not load, and that kept the project two major versions behind.\nThe native ESM test toolchain removes that blocker, so this jumps\ndirectly to the current major (the 5.x line is already dist-tagged\nas legacy). Chai 6 additionall\n[…]\nuire() of ES modules, verified on Node\n22.18 and 24. All suites pass (1218 unit, 3367 integration, 28262\nbuild), coverage thresholds hold, and mocha renders chai assertion\ndiffs identically to before.",
          "is_bot": false,
          "headline": "Upgrade chai from 4 to 6",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-13T10:52:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0acb4738776f948de92156b2d34041b3c017d493",
          "body": "The two IPTC error inputs asserted an empty result that a benign\nno-op parse also produces, a weakness introduced by the rewire\nconversion (the originals asserted specific thrown messages). They\nnow embed a parseable tag so a removed signature or block type check\nyields a non-empty result.\n\nThe ICC \n[…]\n stays\ngreen. This was the only bare to.throw in the suite.\n\nEach of these was verified by mutation or inversion, breaking the\nguard or flipping the assertion makes exactly the strengthened test\nfail.",
          "is_bot": false,
          "headline": "Strengthen tests that could not fail",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-13T10:52:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "913d584193b68d5806fc19b90427e3d096ce569a",
          "body": "The main job now tests on the active LTS lines, ubuntu 22.x and\n24.x and windows 24.x. The integration suite runs in CI for the\nfirst time, in the build-test job on Node 24.x, because the Babel\nremoval gave it a real Node version dependency that nothing\nverified.\n\nThe Node floors differ per suite. T\n[…]\n the published\npackage still supports them. AGENTS.md describes the new mocking\nguidance, swapProperties plus real fixtures instead of a\nmodule-mocking library, and the native ESM import requirements.",
          "is_bot": false,
          "headline": "Modernize CI and update the agent guide",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-13T10:52:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6b648a601017b96c63a0d3664aeba53d24317fa6",
          "body": "A new test/build/packaging.js asserts that the npm tarball contains\nsrc/package.json with exactly the module type marker and that\nrequire of the package root still resolves the UMD bundle in dist.\nIt runs as part of test:build and the pre-commit suite. The\nCHANGELOG documents the consumer-visible fi\n[…]\nt execFileSync can only run through\na shell, and the custom cache path travels as an environment\nvariable so it never passes through that shell. The temporary cache\ndirectory is removed after the run.",
          "is_bot": false,
          "headline": "Guard the shipped src ES module marker with packaging tests",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-13T10:52:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0bd32460176bb2540167d802d74e44a59b4c2754",
          "body": "The unit suite now runs directly on Node instead of being transpiled\nthrough @babel/register. Nested package.json files with a module type\nmarker make Node treat src/ and test/unit/ as ES modules, and all\nrelative imports in the specs carry explicit .js extensions as native\nESM requires. The integra\n[…]\nt\nmeasured 95.46/92.91/98.42/95.46). babel-plugin-rewire,\n@babel/register, and nyc leave the dev dependencies. Babel itself\nstays for the webpack build only.\n\nThe unit suite wall clock drops about 3x.",
          "is_bot": false,
          "headline": "Run unit and integration tests on native ESM without Babel",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-13T10:52:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f8903bc733c3717a6b0bad5ea11380de27284937",
          "body": "All 20 unit spec files that used rewire APIs now use one of three\nrunner-agnostic techniques instead. Shared default-export module\nobjects (Constants, TagNames, Tags, ImageHeader and friends) are\nmocked by swapping properties on the real instance with the new\nswapProperties helper in test-utils.js, \n[…]\no the real\nfunctions run.\n\nTest count is unchanged at 1218 and coverage stays above the\nenforced thresholds. This prepares for removing babel-plugin-rewire\nand @babel/register from the test toolchain.",
          "is_bot": false,
          "headline": "Replace babel-plugin-rewire usage with explicit test seams",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-13T10:52:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dbd6568bb633bfc9c0c3d605f763b0df70a90d65",
          "body": "Replace the seven .eslintrc.json files and .eslintignore with a single\neslint.config.mjs. The effective ruleset is preserved. The four rules\nthat ESLint 9 added to eslint:recommended are adopted with zero new\nfindings, and no-extra-semi and no-inner-declarations stay enforced by\nconfiguring them exp\n[…]\nlt-in globals\nautomatically. Rebuild the dist sourcemap to keep its embedded sources\nin sync with that comment change. Update the bower.json ignore list\nand AGENTS.md to reference the new config file.",
          "is_bot": false,
          "headline": "Migrate from ESLint 8 to ESLint 9 with flat config",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-12T13:25:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f776711a5f593d823678e7148191843c376f9a5e",
          "body": null,
          "is_bot": false,
          "headline": "Replace npm-run-all with maintained npm-run-all2",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-12T11:44:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ae9dce011b61e5094a24b0f4261c192ca03cc8c",
          "body": null,
          "is_bot": false,
          "headline": "Reference GHSA-g77h-45rf-hcx4 in the 4.40.1 changelog",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-08T10:14:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1874a9edb44fc0121bd894094c0aaa8569728f08",
          "body": null,
          "is_bot": false,
          "headline": "4.41.0",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-08T09:26:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ccdefb848121928a1e66dab5168d7c958357747",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.41.0",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-08T09:26:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b81280093b8b6b79859216b1175f7f3d7c46f4c9",
          "body": "Tree-shake the merge pipeline: loadview-pipeline.js was outside the\nwebpack string-replace regex, so every format's merge handler (PNG, JPEG\nXL, ICC, XMP) shipped in every custom build. Gate them with existing\nflags so a JPEG plus Exif build drops about 0.8 KiB gzipped. Also remove\ncommented-out Photoshop descriptor scaffolding (no bundle impact).",
          "is_bot": false,
          "headline": "Shrink custom builds, drop dead Photoshop comments",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-08T09:04:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26e42c43efc9cad68a370b40b9c0ec19a017140d",
          "body": "Replace the node_modules rename dance with a toolchain install into a\nunique os.tmpdir() directory, which webpack finds via\nresolveLoader.modules and NODE_PATH. The exifreader package's own\nnode_modules is never moved or left with the toolchain behind, and an\ninterrupted or concurrent build can no longer strand or corrupt it. The\ntemp dir is removed in a best-effort finally. The maintainer full build\nis unchanged.",
          "is_bot": false,
          "headline": "Isolate the custom-build toolchain in an OS temp dir",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-08T09:04:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db7a7347bf15a0c98a6e82006a91e1dc114d1b5a",
          "body": "Custom builds (tree-shaking out unused formats and tags) have only been\ntriggerable through an npm postinstall script. npm is moving away from\nautomatic install scripts, and postinstall is skipped under\n`npm ci --ignore-scripts`, so depending on it for the library's size\nfeature is increasingly frag\n[…]\new\ncommand and the migration.\n\nUnit tests cover the CLI and the config resolver, and the custom-build\nintegration suite gains a scenario that installs with --ignore-scripts and\nbuilds through the CLI.",
          "is_bot": false,
          "headline": "Add npx exifreader build for custom builds without a postinstall script",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-08T09:04:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7a37c8d6b1289d11bbd0d09863f6a28a69fad5ca",
          "body": "Bumps the all-dependencies group with 7 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) | `7.29.0` | `7.29.7` |\n| [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) | `7.29.5` | `\n[…]\ndependency-version: 7.0.3\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: all-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the all-dependencies group with 7 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-05T11:19:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4120c8323dba5991bacd50df72b4d73a88fc1668",
          "body": null,
          "is_bot": false,
          "headline": "4.40.5",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-03T18:48:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "422027f7e66e98c53ebdac5604328a905f98e06e",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.40.5",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-03T18:47:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "981ae21ce60007cf16b9179f0d9a1705cc77cc96",
          "body": "Bumps [launch-editor](https://github.com/vitejs/launch-editor) from 2.6.1 to 2.14.1.\n- [Commits](https://github.com/vitejs/launch-editor/compare/v2.6.1...v2.14.1)\n\n---\nupdated-dependencies:\n- dependency-name: launch-editor\n  dependency-version: 2.14.1\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump launch-editor from 2.6.1 to 2.14.1",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-03T18:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "577333586460a6bb1d17e3e54ef4c4ad475a0854",
          "body": "When parsing an ICC profile with a crafted mluc tag, an attacker can\ndeclare a record count that passes the existing recordsSize bounds check\n(by making the buffer large enough to hold the records) but is still\nlarge enough to make the parser allocate one object per record. For the\nlargest reachable\n[…]\ny fixed in 4.39.0, and the\nper-record text decode was bounded in 4.40.4. A regression test covers a\nrecord count over the cap with records that fit the buffer, plus a\nboundary case at exactly the cap.",
          "is_bot": false,
          "headline": "Cap mluc record count to prevent DoS from crafted ICC profiles",
          "author_name": "Maulana",
          "author_login": "ulsreall",
          "committed_at": "2026-06-03T18:36:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4c969bb9db54d5e58ee1dc9afe5d4475b4db6c95",
          "body": null,
          "is_bot": false,
          "headline": "4.40.4",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-03T14:12:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be45f03d473a31568c946792d8a3e7c111bb3869",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.40.4",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-03T14:11:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d26bf1644e78148358085cf632a3297c9dc6e6b1",
          "body": "The three \"incomplete/corrupt data\" guards in the ICC parser compared\nagainst `buffer.length`, but `buffer` is an ArrayBuffer whose `.length`\nis always `undefined`, so every comparison was false and the guards\nnever fired. A malformed profile (declared length too small for the\ntag table, or a tag of\n[…]\ne end) ran past its data,\nthrew a RangeError on a DataView read, and readIcc's try/catch\ndiscarded everything. Measure `dataView.byteLength` instead so the\nguards return the header tags parsed so far.",
          "is_bot": false,
          "headline": "Fix dead ICC bounds checks so malformed profiles return header tags",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-03T14:06:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "42a95d5b893e1f09528e26400510a728bc075b7f",
          "body": "A crafted ICC `mluc` tag could decode far more text than the profile\nholds via huge or overlapping per-record textLength/textOffset, causing\nexcessive memory use. Clamp each record's text to its tag and cap the\ntotal decoded across the profile at the profile size; real profiles,\nwhere records may legitimately share text within a tag, are unaffected.",
          "is_bot": false,
          "headline": "Bound ICC mluc decoded text to prevent a denial-of-service",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-06-03T10:37:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe4f19ff82e0acfe3415f39698d2e4914e73edcc",
          "body": null,
          "is_bot": false,
          "headline": "4.40.3",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-31T18:40:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb1bb43f38e26d4625607c746467bbd5172e9736",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.40.3",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-31T18:38:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da8c736f358c364b22732ac1b68bcc795dd80c41",
          "body": "fetchRange ignored response.status, so 4xx/5xx error bodies were parsed\nand surfaced as a misleading \"Invalid image format\". It now rejects with\n\"Could not fetch file: <status>\", matching the Node path; 416 still\npasses through for the length:\"auto\" fallback. Both loaders now reject\nwith an Error (Node previously rejected with a string).",
          "is_bot": false,
          "headline": "Reject 4xx/5xx HTTP responses in the browser fetch loader",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-31T18:35:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "597f9fa642aa992b2f1394775f41f07705ea7f78",
          "body": null,
          "is_bot": false,
          "headline": "4.40.2",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-30T20:43:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fe37d596e99708fa5dd2b35fe26efa9c2fb02f7",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.40.2",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-30T20:42:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4fcceb70b7e7d1eaccfa3979a5a6fd6ba519c6a",
          "body": null,
          "is_bot": false,
          "headline": "Upgrade @xmldom/xmldom to version 0.9.10",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-30T20:33:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ea9d58c48fb64b7aea744c4222671db18e2ea88",
          "body": null,
          "is_bot": false,
          "headline": "4.40.1",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-30T18:37:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d824bf6290792ebe880e3ce2ef1c42aaf0c5420",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.40.1",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-30T18:36:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c8728faa71de2bef930614d7b9248ce3ebf2538",
          "body": "Fix several crashes where crafted or truncated metadata threw an\nuncaught error out of load()/loadView() instead of degrading gracefully:\n- short WebP VP8X chunk (out-of-bounds read)\n- truncated PNG iCCP chunk in async mode\n- HEIC/AVIF Exif item whose TIFF header offset points outside the file\n- tru\n[…]\n- cap multi-extent assembly to the source size (memory amplification)\n- length:'auto' fallback buffer corruption on a Range-ignoring 200, and\n  Node (non-fetch) 416 now falls back instead of rejecting",
          "is_bot": false,
          "headline": "Harden metadata parsing against malformed and truncated input",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-30T18:25:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "00878ca9df0e26480dda7a931c888048c9f7be45",
          "body": "A HEIC/AVIF file with a valid `ftyp` box followed by a malformed or\ntruncated ISO-BMFF box could cause parsing to throw instead of returning\nthe detected file type and whatever metadata was readable.\n\nAdd bounds checks (`hasBytes`) before the box-header reads in `parseBox`\nand `getBoxLength`, and treat a box whose deeper fields run past the\nbuffer as unparseable so the box walk stops cleanly. `isHeicFile` /\n`isAvifFile` now return a strict boolean.",
          "is_bot": false,
          "headline": "Handle malformed and truncated ISO-BMFF boxes gracefully",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-30T10:34:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8cb0261a26b7d986955fe0a6780f076dcb7902e7",
          "body": null,
          "is_bot": false,
          "headline": "4.40.0",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-29T13:18:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b83b10ba8f45f430e7c2a2d8701a4e0c59f4eed",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog for 4.40.0",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-29T13:18:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c5e77a55272025227bfe1028c1c6dc02ef59e49",
          "body": null,
          "is_bot": false,
          "headline": "Add Claude skills dir to .gitignore",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-29T13:18:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b34dddd9424d75c36ea916d3f2430ccb2061f99c",
          "body": "Bumps the all-dependencies group with 3 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [mocha](https://github.com/mochajs/mocha) and [webpack](https://github.com/webpack/webpack).\n\n\nUpdates `@types/node` from 25.8.0 to 25.9.1\n- [Release notes](https:\n[…]\npendency-version: 5.107.1\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: all-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the all-dependencies group with 3 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-29T13:14:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f7125c098f6ed9069db69ab07fdcfead0601fd2",
          "body": "When paired with `expanded: true` and `includeOffsets: true`, ExifReader\nreads an initial 128 KiB prefix, parses it, and only issues a follow-up\nHTTP `Range` request (or filesystem read / `File.slice`) when the metadata\nextends past it. Most images converge in one read. HEIC/AVIF files with\n`iloc` p\n[…]\nrue}` so the loop does not chase the embedded\nsub-image preview past the actual metadata. On a 1.5 GiB corpus this is\nthe difference between a slight slowdown and a 6× speedup with 98% of\nbytes saved.",
          "is_bot": false,
          "headline": "Add length: 'auto' for adaptive minimal-fetch of metadata",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-29T12:09:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f36c46fdd535ac6dede2e98145e56a0a38663796",
          "body": "Items with `constructionMethod` 1 were read from the wrong file offset,\nproducing garbage or no tags. They are now resolved through the\nsurrounding meta box's idat sub-box. Items with `constructionMethod` 2\n(item_offset) are still not supported but are now skipped with a\n`console.warn` instead of re\n[…]\n\nMulti-extent Exif and XMP items are now parsed end-to-end via a\nsynthetic buffer (was: first extent only), threaded through MakerNote\nand Thumbnail extraction so downstream offsets resolve correctly.",
          "is_bot": false,
          "headline": "Fix HEIC/AVIF iloc constructionMethod 1 (idat) and multi-extent parsing",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-28T06:57:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "78b9888892de8413bac9c67708ad305917614a2f",
          "body": "When paired with `expanded: true`, this attaches a `metadataRange`\nobject to the result with `start`, `end`, `complete`, and a sorted\n`blocks` list describing where each metadata segment sits in the file.\nSupports JPEG, PNG, WebP, HEIC, AVIF, JPEG XL (container), GIF, and\nstandalone XMP. Useful for persisting only the metadata-bearing prefix\nof an image instead of the whole file. Fixes #121.",
          "is_bot": false,
          "headline": "Add includeOffsets option to locate metadata in the file",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-28T06:57:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d1195de7fa45208831dec042e9640b6c14a0f85",
          "body": "Standalone profiler that parses every image in a folder and reports\nper-format timing stats (count, total bytes, mean/p50/p95 ms,\nthroughput, errors) plus a top-N slowest-files view.",
          "is_bot": false,
          "headline": "Add bin/profile.js for benchmarking parse performance",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-28T06:57:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb0112d26a71c66f08309985588cf44217ceb2ca",
          "body": "Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.4 to 0.2.7.\n- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.4...v0.2.7)\n\n---\nupdated-dependencies:\n- dependency-name: tmp\n  dependency-version: 0.2.7\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump tmp from 0.2.4 to 0.2.7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-28T05:18:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "875bc54f776c16dfbca0154dccecdcc7f5482cb8",
          "body": "Bumps the all-dependencies group with 3 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [cypress](https://github.com/cypress-io/cypress) and [terser-webpack-plugin](https://github.com/webpack/minimizer-webpack-plugin).\n\n\nUpdates `@types/node` from 25.\n[…]\ndependency-version: 5.6.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: all-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the all-dependencies group with 3 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-22T20:48:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7b9dbc744d0e688cf2d24fe2bb17a5ef32928e99",
          "body": "Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 5.2.3 to 5.2.4.\n- [Release notes](https://github.com/webpack/webpack-dev-server/releases)\n- [Changelog](https://github.com/webpack/webpack-dev-server/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/webpack/webpack-\n[…]\n.3...v5.2.4)\n\n---\nupdated-dependencies:\n- dependency-name: webpack-dev-server\n  dependency-version: 5.2.4\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump webpack-dev-server from 5.2.3 to 5.2.4",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-20T12:24:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "493470c763cfb6ccab53870b786f89e8f8ce8174",
          "body": null,
          "is_bot": false,
          "headline": "4.39.1",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-19T11:01:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90e071b43112cc38e1986b6fceb0c8f8b01e13ea",
          "body": null,
          "is_bot": false,
          "headline": "Release 4.39.1",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-19T11:01:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11b9dfbbeee80ae5225b6fcc2adb9210605947ad",
          "body": "When the IPTC block declares no encoding and the bytes are not valid\nUTF-8, remap them through Windows-1252 (CP1252) instead of leaving\n0x80-0x9F as C1 control characters. Captions written by Photoshop or\nexiftool containing en/em dashes, ellipsis, or smart quotes now\nrender correctly. Fixes #635.",
          "is_bot": false,
          "headline": "Fall back to Windows-1252 for IPTC text without a Coded Character Set",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-19T10:58:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fe98fa6f59a4ef2cb789ab63296d4e048385cd9",
          "body": null,
          "is_bot": false,
          "headline": "Update forgotten fixtures for integration tests",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-19T10:58:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "194557e85c171544edfb5a179a154b1d1949353d",
          "body": null,
          "is_bot": false,
          "headline": "Update CHANGELOG with security fix mentions",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-18T13:29:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0db0346bec8cb68fad4533930afb60835aa41b8",
          "body": null,
          "is_bot": false,
          "headline": "Add security policy and reporting instructions",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-15T20:53:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa7815bc95a67771244fa00a068718a52c02ca2e",
          "body": null,
          "is_bot": false,
          "headline": "4.39.0",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-15T17:39:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8fc1c540d5a3f614c9741b742181f63c08b5f614",
          "body": null,
          "is_bot": false,
          "headline": "Release 4.39.0",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-15T17:39:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f116128adc19f674902f8bf582bfe7dd0a36375",
          "body": null,
          "is_bot": false,
          "headline": "Add maxDecompressedSize option to cap decompressed metadata blocks",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-15T17:30:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9d88b67e127b2dcc7b46e328df468257fb2dc30",
          "body": null,
          "is_bot": false,
          "headline": "Add bounds checks to ICC mluc tag parsing",
          "author_name": "Mattias Wallander",
          "author_login": "mattiasw",
          "committed_at": "2026-05-15T17:30:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b72a7c87e36a6c20ae30290de0cab23a3277f48",
          "body": "Bumps the all-dependencies group with 2 updates: [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) and [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).\n\n\nUpdates `@babel/preset-env` from 7.29.3 to 7.29.5\n- [Release notes](h\n[…]\nependency-version: 25.6.2\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: all-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the all-dependencies group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-15T11:37:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "92ced70298622fbc6a9088e69056a4f1202b26ea",
          "body": "Bumps [systeminformation](https://github.com/sebhildebrandt/systeminformation) from 5.31.1 to 5.31.6.\n- [Release notes](https://github.com/sebhildebrandt/systeminformation/releases)\n- [Changelog](https://github.com/sebhildebrandt/systeminformation/blob/master/CHANGELOG.md)\n- [Commits](https://github\n[…]\nare/v5.31.1...v5.31.6)\n\n---\nupdated-dependencies:\n- dependency-name: systeminformation\n  dependency-version: 5.31.6\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump systeminformation from 5.31.1 to 5.31.6",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-14T05:02:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 194,
      "latest_release_at": "2026-07-18T14:48:16Z",
      "latest_release_tag": "v4.41.3",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 49,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 5.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": true,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "exifreader",
          "exists": true,
          "license": "MPL-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/exifreader",
          "is_deprecated": false,
          "latest_version": "4.41.3",
          "repository_url": "https://github.com/mattiasw/ExifReader",
          "versions_count": 130,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 854905,
          "first_published_at": "2016-12-28T13:09:14.749000Z",
          "latest_published_at": "2026-07-18T14:47:26.471000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 106,
      "stars": 992,
      "watchers": 13,
      "fork_history": {
        "days": [
          {
            "date": "2013-04-22",
            "count": 1
          },
          {
            "date": "2013-07-04",
            "count": 1
          },
          {
            "date": "2013-10-02",
            "count": 1
          },
          {
            "date": "2013-11-12",
            "count": 1
          },
          {
            "date": "2013-11-20",
            "count": 1
          },
          {
            "date": "2014-02-04",
            "count": 1
          },
          {
            "date": "2014-06-30",
            "count": 1
          },
          {
            "date": "2014-11-16",
            "count": 1
          },
          {
            "date": "2015-02-17",
            "count": 1
          },
          {
            "date": "2015-04-23",
            "count": 1
          },
          {
            "date": "2015-05-18",
            "count": 1
          },
          {
            "date": "2015-06-29",
            "count": 1
          },
          {
            "date": "2016-02-03",
            "count": 1
          },
          {
            "date": "2016-02-09",
            "count": 1
          },
          {
            "date": "2016-03-31",
            "count": 1
          },
          {
            "date": "2016-04-28",
            "count": 1
          },
          {
            "date": "2016-08-26",
            "count": 1
          },
          {
            "date": "2016-09-22",
            "count": 1
          },
          {
            "date": "2016-09-23",
            "count": 1
          },
          {
            "date": "2017-05-03",
            "count": 1
          },
          {
            "date": "2017-07-26",
            "count": 1
          },
          {
            "date": "2017-08-31",
            "count": 1
          },
          {
            "date": "2017-09-20",
            "count": 1
          },
          {
            "date": "2017-11-11",
            "count": 1
          },
          {
            "date": "2018-01-26",
            "count": 1
          },
          {
            "date": "2018-02-05",
            "count": 1
          },
          {
            "date": "2018-05-02",
            "count": 1
          },
          {
            "date": "2018-05-03",
            "count": 1
          },
          {
            "date": "2018-06-12",
            "count": 1
          },
          {
            "date": "2018-12-21",
            "count": 1
          },
          {
            "date": "2019-03-19",
            "count": 1
          },
          {
            "date": "2019-03-20",
            "count": 1
          },
          {
            "date": "2019-06-04",
            "count": 1
          },
          {
            "date": "2019-10-04",
            "count": 1
          },
          {
            "date": "2019-10-25",
            "count": 1
          },
          {
            "date": "2019-10-29",
            "count": 2
          },
          {
            "date": "2019-11-16",
            "count": 1
          },
          {
            "date": "2019-12-16",
            "count": 1
          },
          {
            "date": "2020-02-10",
            "count": 1
          },
          {
            "date": "2020-02-13",
            "count": 1
          },
          {
            "date": "2020-05-09",
            "count": 1
          },
          {
            "date": "2020-05-13",
            "count": 1
          },
          {
            "date": "2020-06-01",
            "count": 1
          },
          {
            "date": "2020-06-11",
            "count": 1
          },
          {
            "date": "2020-08-08",
            "count": 1
          },
          {
            "date": "2020-12-20",
            "count": 1
          },
          {
            "date": "2020-12-21",
            "count": 1
          },
          {
            "date": "2021-01-06",
            "count": 1
          },
          {
            "date": "2021-01-31",
            "count": 1
          },
          {
            "date": "2021-02-08",
            "count": 1
          },
          {
            "date": "2021-03-13",
            "count": 1
          },
          {
            "date": "2021-07-13",
            "count": 1
          },
          {
            "date": "2021-09-02",
            "count": 1
          },
          {
            "date": "2021-10-15",
            "count": 1
          },
          {
            "date": "2021-12-28",
            "count": 1
          },
          {
            "date": "2022-02-04",
            "count": 1
          },
          {
            "date": "2022-04-11",
            "count": 1
          },
          {
            "date": "2022-04-25",
            "count": 1
          },
          {
            "date": "2022-06-02",
            "count": 1
          },
          {
            "date": "2022-07-04",
            "count": 1
          },
          {
            "date": "2022-07-05",
            "count": 1
          },
          {
            "date": "2022-07-11",
            "count": 1
          },
          {
            "date": "2022-09-07",
            "count": 1
          },
          {
            "date": "2022-09-22",
            "count": 1
          },
          {
            "date": "2022-09-28",
            "count": 1
          },
          {
            "date": "2022-10-19",
            "count": 1
          },
          {
            "date": "2022-10-25",
            "count": 1
          },
          {
            "date": "2022-12-12",
            "count": 1
          },
          {
            "date": "2022-12-23",
            "count": 1
          },
          {
            "date": "2023-03-21",
            "count": 1
          },
          {
            "date": "2023-06-06",
            "count": 1
          },
          {
            "date": "2023-07-06",
            "count": 1
          },
          {
            "date": "2023-07-24",
            "count": 1
          },
          {
            "date": "2023-08-20",
            "count": 1
          },
          {
            "date": "2023-11-10",
            "count": 1
          },
          {
            "date": "2023-12-02",
            "count": 1
          },
          {
            "date": "2024-04-24",
            "count": 1
          },
          {
            "date": "2024-05-02",
            "count": 1
          },
          {
            "date": "2024-05-11",
            "count": 1
          },
          {
            "date": "2024-05-13",
            "count": 1
          },
          {
            "date": "2024-07-31",
            "count": 1
          },
          {
            "date": "2024-08-30",
            "count": 1
          },
          {
            "date": "2024-09-29",
            "count": 1
          },
          {
            "date": "2025-01-22",
            "count": 1
          },
          {
            "date": "2025-02-04",
            "count": 1
          },
          {
            "date": "2025-04-08",
            "count": 1
          },
          {
            "date": "2025-05-18",
            "count": 1
          },
          {
            "date": "2025-06-02",
            "count": 1
          },
          {
            "date": "2025-06-09",
            "count": 1
          },
          {
            "date": "2025-07-15",
            "count": 1
          },
          {
            "date": "2025-09-13",
            "count": 1
          },
          {
            "date": "2025-09-18",
            "count": 1
          },
          {
            "date": "2025-11-12",
            "count": 1
          },
          {
            "date": "2025-12-03",
            "count": 1
          },
          {
            "date": "2026-01-20",
            "count": 1
          },
          {
            "date": "2026-02-11",
            "count": 1
          },
          {
            "date": "2026-02-14",
            "count": 1
          },
          {
            "date": "2026-02-19",
            "count": 1
          },
          {
            "date": "2026-04-09",
            "count": 1
          },
          {
            "date": "2026-04-20",
            "count": 1
          },
          {
            "date": "2026-06-02",
            "count": 1
          },
          {
            "date": "2026-06-04",
            "count": 1
          },
          {
            "date": "2026-07-17",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 104,
        "total_forks": 106
      },
      "star_history": null,
      "open_issues_and_prs": 4
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "test/types/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 84419,
      "source_files_sampled": 149,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 7089
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "src/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 1,
        "malicious_count": 0,
        "assessed_package": "npm:exifreader@4.41.3",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@aashutoshrathi/word-wrap",
            "direct": false,
            "version": "1.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/compat-data",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-annotate-as-pure",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-compilation-targets",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-create-class-features-plugin",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-create-regexp-features-plugin",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-define-polyfill-provider",
            "direct": false,
            "version": "0.6.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-globals",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-member-expression-to-functions",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-imports",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-transforms",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-optimise-call-expression",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-plugin-utils",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-remap-async-to-generator",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-replace-supers",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-skip-transparent-expression-wrappers",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-option",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-wrap-function",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helpers",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-bugfix-firefox-class-in-computed-class-key",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-bugfix-safari-class-field-initializer-scope",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-proposal-private-property-in-object",
            "direct": false,
            "version": "7.21.0-placeholder-for-preset-env.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-import-assertions",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-import-attributes",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-unicode-sets-regex",
            "direct": false,
            "version": "7.18.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-arrow-functions",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-async-generator-functions",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-async-to-generator",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-block-scoped-functions",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-block-scoping",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-class-properties",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-class-static-block",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-classes",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-computed-properties",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-destructuring",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-dotall-regex",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-duplicate-keys",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-duplicate-named-capturing-groups-regex",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-dynamic-import",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-explicit-resource-management",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-exponentiation-operator",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-export-namespace-from",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-for-of",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-function-name",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-json-strings",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-literals",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-logical-assignment-operators",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-member-expression-literals",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-modules-amd",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-modules-commonjs",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-modules-systemjs",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-modules-umd",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-named-capturing-groups-regex",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-new-target",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-nullish-coalescing-operator",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-numeric-separator",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-object-rest-spread",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-object-super",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-optional-catch-binding",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-optional-chaining",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-parameters",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-private-methods",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-private-property-in-object",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-property-literals",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-regenerator",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-regexp-modifiers",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-reserved-words",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-shorthand-properties",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-spread",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-sticky-regex",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-template-literals",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-typeof-symbol",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-unicode-escapes",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-unicode-property-regex",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-unicode-regex",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-unicode-sets-regex",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/preset-env",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/preset-modules",
            "direct": false,
            "version": "0.1.6-no-external-plugins",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/traverse",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@bcoe/v8-coverage",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@cypress/request",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@cypress/xvfb",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@discoveryjs/json-ext",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@epic-web/invariant",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/eslint-utils",
            "direct": false,
            "version": "4.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/regexpp",
            "direct": false,
            "version": "4.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/config-array",
            "direct": false,
            "version": "0.21.2",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/config-helpers",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/core",
            "direct": false,
            "version": "0.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/eslintrc",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "9.39.4",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "9.39.5",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/object-schema",
            "direct": false,
            "version": "2.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/plugin-kit",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@humanfs/core",
            "direct": false,
            "version": "0.19.2",
            "ecosystem": "npm"
          },
          {
            "name": "@humanfs/node",
            "direct": false,
            "version": "0.16.8",
            "ecosystem": "npm"
          },
          {
            "name": "@humanfs/types",
            "direct": false,
            "version": "0.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/module-importer",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/retry",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/cliui",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/schema",
            "direct": false,
            "version": "0.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.12",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/remapping",
            "direct": false,
            "version": "2.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/source-map",
            "direct": false,
            "version": "0.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.29",
            "ecosystem": "npm"
          },
          {
            "name": "@jsonjoy.com/base64",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jsonjoy.com/json-pack",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jsonjoy.com/util",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@leichtgewicht/ip-codec",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@noble/hashes",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-cms",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-csr",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-ecc",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-pfx",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-pkcs8",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-pkcs9",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-rsa",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-schema",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-x509",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/asn1-x509-attr",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@peculiar/x509",
            "direct": false,
            "version": "1.14.3",
            "ecosystem": "npm"
          },
          {
            "name": "@pkgjs/parseargs",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/body-parser",
            "direct": false,
            "version": "1.19.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/bonjour",
            "direct": false,
            "version": "3.5.13",
            "ecosystem": "npm"
          },
          {
            "name": "@types/connect",
            "direct": false,
            "version": "3.4.37",
            "ecosystem": "npm"
          },
          {
            "name": "@types/connect-history-api-fallback",
            "direct": false,
            "version": "1.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/express",
            "direct": false,
            "version": "4.17.25",
            "ecosystem": "npm"
          },
          {
            "name": "@types/express-serve-static-core",
            "direct": false,
            "version": "4.17.39",
            "ecosystem": "npm"
          },
          {
            "name": "@types/http-errors",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/http-proxy",
            "direct": false,
            "version": "1.17.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-coverage",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/mime",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "26.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/qs",
            "direct": false,
            "version": "6.9.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/range-parser",
            "direct": false,
            "version": "1.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/retry",
            "direct": false,
            "version": "0.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/send",
            "direct": false,
            "version": "0.17.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/serve-index",
            "direct": false,
            "version": "1.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/serve-static",
            "direct": false,
            "version": "1.15.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/sinonjs__fake-timers",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/sizzle",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/sockjs",
            "direct": false,
            "version": "0.3.36",
            "ecosystem": "npm"
          },
          {
            "name": "@types/tmp",
            "direct": false,
            "version": "0.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/ws",
            "direct": false,
            "version": "8.5.10",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-aix-ppc64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-darwin-arm64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-darwin-x64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-freebsd-arm64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-freebsd-x64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-linux-arm",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-linux-arm64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-linux-loong64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-linux-mips64el",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-linux-ppc64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-linux-riscv64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-linux-s390x",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-linux-x64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-netbsd-arm64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-netbsd-x64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-openbsd-arm64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-openbsd-x64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-sunos-x64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-win32-arm64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript-win32-x64",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/ast",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/floating-point-hex-parser",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-api-error",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-buffer",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-numbers",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-wasm-bytecode",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-wasm-section",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/ieee754",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/leb128",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/utf8",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-edit",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-gen",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-opt",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-parser",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wast-printer",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@xmldom/xmldom",
            "direct": false,
            "version": "0.9.10",
            "ecosystem": "npm"
          },
          {
            "name": "@xtuc/ieee754",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@xtuc/long",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "accepts",
            "direct": false,
            "version": "1.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-import-phases",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-jsx",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "8.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-formats",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-keywords",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-html-community",
            "direct": false,
            "version": "0.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "6.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "arch",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "array-flatten",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "asn1",
            "direct": false,
            "version": "0.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "asn1js",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "assert-plus",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "at-least-node",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "aws-sign2",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "aws4",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "babel-loader",
            "direct": false,
            "version": "10.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-polyfill-corejs2",
            "direct": false,
            "version": "0.4.15",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-polyfill-corejs3",
            "direct": false,
            "version": "0.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-polyfill-regenerator",
            "direct": false,
            "version": "0.6.6",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "baseline-browser-mapping",
            "direct": false,
            "version": "2.9.11",
            "ecosystem": "npm"
          },
          {
            "name": "batch",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "bcrypt-pbkdf",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "blob-util",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "bluebird",
            "direct": false,
            "version": "3.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "1.20.4",
            "ecosystem": "npm"
          },
          {
            "name": "bonjour-service",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "boolbase",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "browser-stdout",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "5.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-from",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "bundle-name",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "bytes",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "bytestreamjs",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "c8",
            "direct": false,
            "version": "11.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cachedir",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001761",
            "ecosystem": "npm"
          },
          {
            "name": "caseless",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "chrome-trace-event",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "ci-info",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-cursor",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-table3",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "cli-truncate",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "clone-deep",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "colorette",
            "direct": false,
            "version": "2.0.20",
            "ecosystem": "npm"
          },
          {
            "name": "colors",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "14.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "2.20.3",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "common-tags",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "compressible",
            "direct": false,
            "version": "2.0.18",
            "ecosystem": "npm"
          },
          {
            "name": "compression",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "connect-history-api-fallback",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "content-disposition",
            "direct": false,
            "version": "0.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "cookie-signature",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "core-js-compat",
            "direct": false,
            "version": "3.48.0",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "cross-env",
            "direct": false,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "css-select",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-what",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cssom",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "cypress",
            "direct": false,
            "version": "15.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "dashdash",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "dayjs",
            "direct": false,
            "version": "1.10.7",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "2.6.9",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "3.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "default-browser",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "default-browser-id",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "define-lazy-prop",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "depd",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "depd",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "destroy",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-node",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dns-packet",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "dom-serializer",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dom-serializer",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "domelementtype",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "domelementtype",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "domhandler",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "domhandler",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "domutils",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "domutils",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eastasianwidth",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ecc-jsbn",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ee-first",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.267",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "10.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "9.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "encodeurl",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "encodeurl",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "enhanced-resolve",
            "direct": false,
            "version": "5.24.1",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "envinfo",
            "direct": false,
            "version": "7.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "environment",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-html",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "9.39.4",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-cypress",
            "direct": false,
            "version": "6.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "8.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "10.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "etag",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter2",
            "direct": false,
            "version": "6.4.7",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter3",
            "direct": false,
            "version": "4.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter3",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "events",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "executable",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "express",
            "direct": false,
            "version": "4.22.1",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "extsprintf",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stable-stringify",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-levenshtein",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "faye-websocket",
            "direct": false,
            "version": "0.11.4",
            "ecosystem": "npm"
          },
          {
            "name": "file-entry-cache",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "finalhandler",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "follow-redirects",
            "direct": false,
            "version": "1.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "forever-agent",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "forwarded",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fresh",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "fs-extra",
            "direct": false,
            "version": "9.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gensync",
            "direct": false,
            "version": "1.0.0-beta.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-east-asian-width",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "getpass",
            "direct": false,
            "version": "0.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "10.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "13.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "global-dirs",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "14.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "17.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "handle-thing",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasha",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "he",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "hpack.js",
            "direct": false,
            "version": "2.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "htmlparser2",
            "direct": false,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "http-deceiver",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "1.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-parser-js",
            "direct": false,
            "version": "0.5.8",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy",
            "direct": false,
            "version": "1.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-middleware",
            "direct": false,
            "version": "2.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "http-signature",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "human-signals",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "husky",
            "direct": false,
            "version": "9.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "hyperdyperid",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.4.24",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "import-local",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "imurmurhash",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ipaddr.js",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "ipaddr.js",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.16.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-docker",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-inside-container",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-installed-globally",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-network-error",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-path-inside",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-typedarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-wsl",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "isstream",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-coverage",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-report",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-reports",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jackspeak",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "27.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsbn",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-buffer",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-stable-stringify-without-jsonify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-stringify-safe",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "jsonfile",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsprim",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "keyv",
            "direct": false,
            "version": "4.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "launch-editor",
            "direct": false,
            "version": "2.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "linkedom",
            "direct": false,
            "version": "0.18.13",
            "ecosystem": "npm"
          },
          {
            "name": "listr2",
            "direct": false,
            "version": "9.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "loader-runner",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.debounce",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.once",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "log-symbols",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "log-update",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "10.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "make-dir",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "media-typer",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "memfs",
            "direct": false,
            "version": "4.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "memorystream",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "merge-descriptors",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "methods",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mime",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "2.1.35",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-function",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimalistic-assert",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "9.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minimizer-webpack-plugin",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mocha",
            "direct": false,
            "version": "11.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "multicast-dns",
            "direct": false,
            "version": "7.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "0.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "neo-async",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.27",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-normalize-package-bin",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-all2",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "nth-check",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "obuf",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "on-finished",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "on-headers",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "open",
            "direct": false,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "ospath",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-retry",
            "direct": false,
            "version": "6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-json-from-dist",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parseurl",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-scurry",
            "direct": false,
            "version": "1.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-scurry",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "path-to-regexp",
            "direct": false,
            "version": "0.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "pend",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "performance-now",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "pidtree",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pify",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkijs",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-bytes",
            "direct": false,
            "version": "5.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "process",
            "direct": false,
            "version": "0.11.10",
            "ecosystem": "npm"
          },
          {
            "name": "process-nextick-args",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-addr",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-from-env",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pump",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pvtsutils",
            "direct": false,
            "version": "1.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "pvutils",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.14.2",
            "ecosystem": "npm"
          },
          {
            "name": "randombytes",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "range-parser",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "raw-body",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "read-package-json-fast",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "rechoir",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "reflect-metadata",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "regenerate",
            "direct": false,
            "version": "1.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "regenerate-unicode-properties",
            "direct": false,
            "version": "10.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "regexpu-core",
            "direct": false,
            "version": "6.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "regjsgen",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "regjsparser",
            "direct": false,
            "version": "0.13.0",
            "ecosystem": "npm"
          },
          {
            "name": "request-progress",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "requires-port",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.11",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-cwd",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "restore-cursor",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "rfdc",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "5.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "run-applescript",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "schema-utils",
            "direct": false,
            "version": "4.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "select-hose",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "selfsigned",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "send",
            "direct": false,
            "version": "0.19.0",
            "ecosystem": "npm"
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "serve-index",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "serve-static",
            "direct": false,
            "version": "1.16.2",
            "ecosystem": "npm"
          },
          {
            "name": "setprototypeof",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "setprototypeof",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "shallow-clone",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shell-quote",
            "direct": false,
            "version": "1.8.4",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-weakmap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "slice-ansi",
            "direct": false,
            "version": "7.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "slice-ansi",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "sockjs",
            "direct": false,
            "version": "0.3.24",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-support",
            "direct": false,
            "version": "0.5.20",
            "ecosystem": "npm"
          },
          {
            "name": "spdy",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "spdy-transport",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "sshpk",
            "direct": false,
            "version": "1.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-replace-loader",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "8.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-final-newline",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "systeminformation",
            "direct": false,
            "version": "5.31.17",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "terser",
            "direct": false,
            "version": "5.37.0",
            "ecosystem": "npm"
          },
          {
            "name": "terser-webpack-plugin",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "test-exclude",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "thingies",
            "direct": false,
            "version": "1.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "throttleit",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "thunky",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tldts",
            "direct": false,
            "version": "6.1.86",
            "ecosystem": "npm"
          },
          {
            "name": "tldts-core",
            "direct": false,
            "version": "6.1.86",
            "ecosystem": "npm"
          },
          {
            "name": "tmp",
            "direct": false,
            "version": "0.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "toidentifier",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tough-cookie",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "tree-dump",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "tree-kill",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "tsyringe",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "tunnel-agent",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "tweetnacl",
            "direct": false,
            "version": "0.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "type-is",
            "direct": false,
            "version": "1.6.18",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uhyphen",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "8.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "unicode-canonical-property-names-ecmascript",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "unicode-match-property-ecmascript",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unicode-match-property-value-ecmascript",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "unicode-property-aliases-ecmascript",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "universalify",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unpipe",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "untildify",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "utils-merge",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "8.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "v8-to-istanbul",
            "direct": false,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "vary",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "verror",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "watchpack",
            "direct": false,
            "version": "2.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "wbuf",
            "direct": false,
            "version": "1.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "webpack",
            "direct": false,
            "version": "5.108.4",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-cli",
            "direct": false,
            "version": "7.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-dev-middleware",
            "direct": false,
            "version": "7.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-dev-server",
            "direct": false,
            "version": "5.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-merge",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-sources",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "websocket-driver",
            "direct": false,
            "version": "0.7.5",
            "ecosystem": "npm"
          },
          {
            "name": "websocket-extensions",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wildcard",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "workerpool",
            "direct": false,
            "version": "9.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": false,
            "version": "8.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-unparser",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yauzl",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 730,
        "direct_count": 0,
        "indirect_count": 730
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 424,
        "open_issues": 4,
        "closed_ratio": 0.978,
        "closed_issues": 174,
        "closed_unmerged_prs": 70
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "mattiasw",
          "commits": 514,
          "avatar_url": "https://avatars.githubusercontent.com/u/564615?v=4"
        },
        {
          "type": "User",
          "login": "logistiker",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/527540?v=4"
        },
        {
          "type": "User",
          "login": "mattcg",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/282964?v=4"
        },
        {
          "type": "User",
          "login": "disarticulate",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/17464125?v=4"
        },
        {
          "type": "User",
          "login": "suke",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/38808706?v=4"
        },
        {
          "type": "User",
          "login": "alvinometric",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/107407814?v=4"
        },
        {
          "type": "User",
          "login": "BasemHamad",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/42210912?v=4"
        },
        {
          "type": "User",
          "login": "blakeembrey",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1088987?v=4"
        },
        {
          "type": "User",
          "login": "cybertino",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/12428252?v=4"
        },
        {
          "type": "User",
          "login": "eliaskounakas",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/109034985?v=4"
        }
      ],
      "contributors_sampled": 26,
      "top_contributor_share": 0.941
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "end-to-end.yml",
        "gh-pages.yml",
        "nodejs.yml",
        "publish.yml",
        "tag-filtering-integration.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "eslint.config.mjs"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/11 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 4,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "12 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "74910ccf10e7c037a9f520bceb3191bc48a5dde2",
        "ran_at": "2026-07-23T22:26:37Z",
        "aggregate_score": 5.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T14:03:25Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-22T14:02:51Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 243,
          "created_at": "2023-07-07T10:29:21Z",
          "last_comment_at": "2024-03-27T21:41:11Z",
          "last_comment_author": "mattiasw"
        },
        {
          "number": 365,
          "created_at": "2024-08-02T08:56:32Z",
          "last_comment_at": "2024-08-09T10:17:14Z",
          "last_comment_author": "mattiasw"
        },
        {
          "number": 442,
          "created_at": "2024-11-12T19:56:14Z",
          "last_comment_at": "2025-03-03T22:57:55Z",
          "last_comment_author": "boustanihani"
        },
        {
          "number": 532,
          "created_at": "2025-06-23T00:34:34Z",
          "last_comment_at": "2025-06-24T20:50:33Z",
          "last_comment_author": "mattiasw"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/mattiasw/ExifReader",
    "host": "github.com",
    "name": "ExifReader",
    "owner": "mattiasw"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 75,
      "inputs": {
        "security": 62,
        "vitality": 95,
        "community": 88,
        "governance": 60,
        "engineering": 70
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 95,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "commits_last_year": 194,
              "human_commit_share": 0.82,
              "days_since_last_push": 1,
              "active_weeks_last_year": 49
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "49/52 weeks with commits",
                "points": 33.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 49
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "194 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 194
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v4.41.3",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 5.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~5.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 5.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 1,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 1 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "excellent",
        "name": "Community & Adoption",
        "value": 88,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "forks": 106,
              "stars": 992,
              "watchers": 13,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "992 stars",
                "points": 48.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 992
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "106 forks",
                "points": 16.8,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 106
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "13 watchers",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": true,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MPL-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MPL-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 7.2,
                "status": "met",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 99,
            "inputs": {
              "packages": [
                "exifreader"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 854905
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "854,905 downloads/month across npm",
                "points": 79.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 854905,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 60,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 24,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 26,
              "top_contributor_share": 0.941
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 94% of commits",
                "points": 1.3,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 94
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "26 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 26
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "merged_prs": 424,
              "open_issues": 4,
              "closed_issues": 174,
              "issue_closed_ratio": 0.978,
              "closed_unmerged_prs": 70
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "98% of issues closed",
                "points": 45.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 98
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "424/494 decided PRs merged",
                "points": 32.8,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 424,
                      "decided": 494
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/11 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 52,
            "inputs": {
              "followers": 28,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "mattiasw",
              "public_repos": 17,
              "account_age_days": 5669
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "28 followers of mattiasw",
                "points": 10.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 28,
                      "login": "mattiasw"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "17 public repos, account ~15 yr old",
                "points": 21.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 17
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 15
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "exifreader"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "130 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 130
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 70,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 62,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 52,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.2
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/11 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "12 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:exifreader@4.41.3 runtime dependency closure — what installing the published package pulls in — 1 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:exifreader@4.41.3",
                  "assessed": 1
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 1,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 1,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 10
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 66,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.524,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 7089
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "43 of 82 human commits state their intent (structured subject or explanatory body)",
                "points": 28,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 43,
                      "sampled": 82
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "test/types/tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.18
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "test/types/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "test/types/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "18 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 18,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 84419,
              "source_files_sampled": 149,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript with type-check config (test/types/tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "test/types/tsconfig.json",
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/149 source files over 60KB",
                "points": 54.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 149,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T22:27:00.885390Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/mattiasw/ExifReader.svg",
  "full_name": "mattiasw/ExifReader",
  "license_state": "standard",
  "license_spdx": "MPL-2.0"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.