Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 14:26 UTC

wikimedia / node-cssjanus

↔️ Convert CSS between left-to-right and right-to-left. Mirror of https://gerrit.wikimedia.org/g/mediawiki/libs/node-cssjanus/. Contribute via https://www.mediawiki.org/wiki/Developer_account.

JavaScriptApache-2.0★ 206 Sterne⑂ 50 Forksseit Juni 2012Auf GitHub ansehen ↗

wikimedia/node-cssjanus erreicht einen Gesundheitsindex von 62 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (68/100) ab, am schwächsten bei AI Readiness (46/100). Zuletzt vor 1 Tag aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

62
gesamt / 100
Mittel

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.

62
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

WikimediaOrganisation
2.181 Follower1.963 öffentliche Reposseit Feb. 2009

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npmcssjanusverweist auf ein anderes Repo — nicht bewertet2.3.12.398.66918vor 25 Tageni18nbidirtlltr

Metriken nach Kategorie

Vitalität

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

68Mittel · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 1 Tagen
12.5/36Commit-Rhythmus — 18/52 Wochen mit Commits
11.9/18Commit-Volumen — 20 Commits im letzten Jahr
5/10OpenSSF Scorecard: Maintained — 6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
Verwendete Eingangsdaten
commits_last_year20
human_commit_share1
days_since_last_push1
active_weeks_last_year18
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 18 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 25 Tagen
12.6/27Release-Rhythmus — ein Release etwa alle 339,8 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count18
latest_release_tagv2.3.1
releases_from_tagsja
days_since_latest_release25
mean_days_between_releases339,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

61Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
37.5/60Stars — 206 Stars
14.1/25Forks — 50 Forks
5/15Watcher — 9 Watcher
Verwendete Eingangsdaten
forks50
stars206
watchers9
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
0/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductja
has_pull_request_templatenein

Nachhaltigkeit & Governance

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

61Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
7.6/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 66 % der Commits
13.5/13.5Breite der Beitragenden — 19 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 7 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled19
top_contributor_share0,662
Wie die Bewertung erfolgt
45.7/46.8Issue-Lösungsquote — 98 % der Issues geschlossen
22.5/38.3PR-Annahme — 27/46 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs27
open_issues1
closed_issues45
issue_closed_ratio0,978
closed_unmerged_prs19
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
24/25Reichweite des Inhabers — 2.181 Follower von wikimedia
25/25Kontohistorie — 1.963 öffentliche Repos, Kontoalter ca. 17 Jahre
Verwendete Eingangsdaten
followers2.181
owner_typeOrganization
is_verified
owner_loginwikimedia
public_repos1.963
account_age_days6.360

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

66Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
24/24Tests vorhanden
16/16Linter-Konfiguration — .eslintrc.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cinein
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://cssjanus.github.io
10/10Repository-Beschreibung
10/10Topics — 5 Topics
0/10Wiki
Verwendete Eingangsdaten
topicscssjanus, stylesheets, javascript, swap, css
has_wikinein
homepagehttps://cssjanus.github.io
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

53Mittel · 16 % des Gesamtindex

Sicherheitslage

41Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — keine Daten
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 7 contributing companies or organizations
0/10Dangerous-Workflow — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
3.8/7.5Maintained — 6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
0/5Packaging — keine Daten
0/5Pinned-Dependencies — keine Daten
0/5SAST — no SAST tool detected
4.5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate4,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. 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
0/25Indirekte Abhängigkeiten ohne bekannte Advisories — transitive Menge in diesem Bereich nicht von Entwicklungs- und Test-Abhängigkeiten trennbar
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories1
affected_packages1
assessed_packages335
unassessed_packages0
affected_by_severityhigh 1
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Indirekte Abhängigkeiten ohne bekannte Advisories, Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. 335 aufgelöste Abhängigkeiten wurden mit OSV abgeglichen. Dieses Repository veröffentlicht kein Paket, das der Index auflöst; bewertet wurde daher der Abhängigkeitsgraph des Repositorys. Dieser Graph vermischt Entwicklungs- und Test-Pins mit ausgelieferten Abhängigkeiten, daher werden nur die deklarierten Laufzeit-Abhängigkeiten bewertet; transitive Befunde werden als Kontext ausgewiesen und fließen nicht in die Bewertung ein. 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.

46Gefährdet · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 80 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,8
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .eslintrc.json
0/11Statische Typprüfung
10/10Reproduzierbare Umgebung — lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — keine Daten
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Pinned-Dependencies. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — JavaScript ohne Typprüfungs-Konfiguration
55/55Handhabbare Dateigrößen — 0/4 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJavaScript
largest_source_bytes17.589
source_files_sampled4
oversized_source_files0

Eckdaten

206GitHub-Sterne
19Mitwirkende
20Commits, letzte 12 Monate
1Tage seit letztem Push
18Releases
1Bus-Faktor
1offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • npm package 'cssjanus' points at a different repository (https://gerrit.wikimedia.org/g/mediawiki/libs/node-cssjanus); excluded from ecosystem scoring

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 50 ⇿
0Sterne
50Forks
16Releases

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.

010203040504822013-082019-052025-02
Major 1Minor 6Patch 9

Jeder Punkt umfasst 11 Tage.

OpenSSF Scorecard 4.1 / 10
4.1Gesamtwert

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 14:26 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 7 contributing companies or organizations
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
5Maintained6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
9Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
9Vulnerabilities1 existing vulnerabilities detected
Alle Abhängigkeiten 335

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 0 direkte und 335 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-compilation-targets7.29.7indirekt
npm@babel/helper-globals7.29.7indirekt
npm@babel/helper-module-imports7.29.7indirekt
npm@babel/helper-module-transforms7.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/helpers7.29.7indirekt
npm@babel/parser7.29.7indirekt
npm@babel/template7.29.7indirekt
npm@babel/traverse7.29.7indirekt
npm@babel/types7.29.7indirekt
npm@es-joy/jsdoccomment0.86.0indirekt
npm@es-joy/resolve.exports1.2.0indirekt
npm@eslint-community/eslint-utils4.9.1indirekt
npm@eslint-community/regexpp4.12.2indirekt
npm@eslint/eslintrc2.1.4indirekt
npm@eslint/js8.57.0indirekt
npm@humanwhocodes/config-array0.11.14indirekt
npm@humanwhocodes/module-importer1.0.1indirekt
npm@humanwhocodes/object-schema2.0.3indirekt
npm@istanbuljs/load-nyc-config1.1.0indirekt
npm@istanbuljs/schema0.1.3indirekt
npm@jridgewell/gen-mapping0.3.13indirekt
npm@jridgewell/remapping2.3.5indirekt
npm@jridgewell/resolve-uri3.1.2indirekt
npm@jridgewell/sourcemap-codec1.5.5indirekt
npm@jridgewell/trace-mapping0.3.31indirekt
npm@mdn/browser-compat-data5.7.6indirekt
npm@mdn/browser-compat-data6.1.5indirekt
npm@nodelib/fs.scandir2.1.5indirekt
npm@nodelib/fs.stat2.0.5indirekt
npm@nodelib/fs.walk1.2.8indirekt
npm@sindresorhus/base621.0.0indirekt
npm@stylistic/eslint-plugin3.1.0indirekt
npm@types/estree1.0.8indirekt
npm@types/normalize-package-data2.4.4indirekt
npm@typescript-eslint/eslint-plugin8.54.0indirekt
npm@typescript-eslint/parser8.54.0indirekt
npm@typescript-eslint/project-service8.54.0indirekt
npm@typescript-eslint/scope-manager8.54.0indirekt
npm@typescript-eslint/tsconfig-utils8.54.0indirekt
npm@typescript-eslint/type-utils8.54.0indirekt
npm@typescript-eslint/types8.54.0indirekt
npm@typescript-eslint/types8.59.2indirekt
npm@typescript-eslint/typescript-estree8.54.0indirekt
npm@typescript-eslint/utils8.54.0indirekt
npm@typescript-eslint/visitor-keys8.54.0indirekt
npm@ungap/structured-clone1.2.0indirekt
npmacorn8.16.0indirekt
npmacorn-jsx5.3.2indirekt
npmaggregate-error3.1.0indirekt
npmajv6.14.0indirekt
npmansi-regex5.0.1indirekt
npmansi-styles4.3.0indirekt
npmappend-transform2.0.0indirekt
npmarchy1.0.0indirekt
npmare-docs-informative0.0.2indirekt
npmargparse1.0.10indirekt
npmargparse2.0.1indirekt
npmast-metadata-inferer0.8.1indirekt
npmbalanced-match1.0.2indirekt
npmbaseline-browser-mapping2.8.28indirekt
npmboolbase1.0.0indirekt
npmbrace-expansion1.1.16indirekt
npmbrace-expansion2.1.2indirekt
npmbrowserslist4.28.0indirekt
npmbrowserslist-config-wikimedia0.7.0indirekt
npmbuiltin-modules3.3.0indirekt
npmcaching-transform4.0.0indirekt
npmcallsites3.1.0indirekt
npmcamelcase5.3.1indirekt
npmcaniuse-lite1.0.30001754indirekt
npmchalk4.1.2indirekt
npmci-info4.3.1indirekt
npmclean-regexp1.0.0indirekt
npmclean-stack2.2.0indirekt
npmcliui6.0.0indirekt
npmcolor-convert2.0.1indirekt
npmcolor-name1.1.4indirekt
npmcommander7.2.0indirekt
npmcomment-parser1.4.6indirekt
npmcommondir1.0.1indirekt
npmconcat-map0.0.1indirekt
npmconvert-source-map1.9.0indirekt
npmconvert-source-map2.0.0indirekt
npmcore-js-compat3.46.0indirekt
npmcross-spawn7.0.6indirekt
npmcssesc3.0.0indirekt
npmdebug4.4.3indirekt
npmdecamelize1.2.0indirekt
npmdeep-is0.1.4indirekt
npmdefault-require-extensions3.0.1indirekt
npmdiff-sequences27.5.1indirekt
npmdoctrine3.0.0indirekt
npmelectron-to-chromium1.5.253indirekt
npmemoji-regex8.0.0indirekt
npmenhanced-resolve5.21.0indirekt
npmerror-ex1.3.4indirekt
npmes6-error4.1.1indirekt
npmescalade3.2.0indirekt
npmescape-string-regexp1.0.5indirekt
npmescape-string-regexp4.0.0indirekt
npmeslint8.57.0indirekt
npmeslint-compat-utils0.5.1indirekt
npmeslint-compat-utils0.6.5indirekt
npmeslint-config-wikimedia0.32.4indirekt
npmeslint-plugin-compat6.2.1indirekt
npmeslint-plugin-es-x7.8.0indirekt
npmeslint-plugin-es-x8.7.0indirekt
npmeslint-plugin-jest29.15.0indirekt
npmeslint-plugin-jsdoc62.9.0indirekt
npmeslint-plugin-json-es1.6.0indirekt
npmeslint-plugin-mediawiki0.8.3indirekt
npmeslint-plugin-mocha10.5.0indirekt
npmeslint-plugin-n17.24.0indirekt
npmeslint-plugin-no-jquery4.0.0indirekt
npmeslint-plugin-qunit8.2.6indirekt
npmeslint-plugin-security4.0.0indirekt
npmeslint-plugin-unicorn56.0.1indirekt
npmeslint-plugin-vue9.33.0indirekt
npmeslint-plugin-wdio9.23.0indirekt
npmeslint-plugin-yml1.19.0indirekt
npmeslint-scope7.2.2indirekt
npmeslint-utils3.0.0indirekt
npmeslint-visitor-keys2.1.0indirekt
npmeslint-visitor-keys3.4.3indirekt
npmeslint-visitor-keys4.2.1indirekt
npmeslint-visitor-keys5.0.1indirekt
npmespree10.4.0indirekt
npmespree11.2.0indirekt
npmespree9.6.1indirekt
npmesprima4.0.1indirekt
npmesquery1.7.0indirekt
npmesrecurse4.3.0indirekt
npmestraverse5.3.0indirekt
npmesutils2.0.3indirekt
npmfast-deep-equal3.1.3indirekt
npmfast-json-stable-stringify2.1.0indirekt
npmfast-levenshtein2.0.6indirekt
npmfastq1.15.0indirekt
npmfdir6.5.0indirekt
npmfile-entry-cache6.0.1indirekt
npmfind-cache-dir3.3.2indirekt
npmfind-up4.1.0indirekt
npmfind-up5.0.0indirekt
npmflat-cache3.2.0indirekt
npmflatted3.4.2indirekt
npmforeground-child2.0.0indirekt
npmfromentries1.3.2indirekt
npmfs.realpath1.0.0indirekt
npmfunction-bind1.1.2indirekt
npmgensync1.0.0-beta.2indirekt
npmget-caller-file2.0.5indirekt
npmget-package-type0.1.0indirekt
npmget-tsconfig4.14.0indirekt
npmglob7.2.3indirekt
npmglob-parent6.0.2indirekt
npmglobals13.24.0indirekt
npmglobals15.15.0indirekt
npmglobalyzer0.1.0indirekt
npmglobrex0.1.2indirekt
npmgraceful-fs4.2.11indirekt
npmgraphemer1.4.0indirekt
npmhas-flag4.0.0indirekt
npmhasha5.2.2indirekt
npmhasown2.0.2indirekt
npmhosted-git-info2.8.9indirekt
npmhtml-entities2.6.0indirekt
npmhtml-escaper2.0.2indirekt
npmignore5.3.2indirekt
npmignore7.0.5indirekt
npmimport-fresh3.3.0indirekt
npmimurmurhash0.1.4indirekt
npmindent-string4.0.0indirekt
npminflight1.0.6indirekt
npminherits2.0.4indirekt
npmis-arrayish0.2.1indirekt
npmis-builtin-module3.2.1indirekt
npmis-core-module2.16.1indirekt
npmis-extglob2.1.1indirekt
npmis-fullwidth-code-point3.0.0indirekt
npmis-glob4.0.3indirekt
npmis-path-inside3.0.3indirekt
npmis-stream2.0.1indirekt
npmis-typedarray1.0.0indirekt
npmis-windows1.0.2indirekt
npmisexe2.0.0indirekt
npmistanbul-lib-coverage3.2.0indirekt
npmistanbul-lib-hook3.0.0indirekt
npmistanbul-lib-instrument4.0.3indirekt
npmistanbul-lib-processinfo2.0.3indirekt
npmistanbul-lib-report3.0.0indirekt
npmistanbul-lib-source-maps4.0.1indirekt
npmistanbul-reports3.1.5indirekt
npmjs-tokens4.0.0indirekt
npmjs-yaml3.15.0indirekt
npmjs-yaml4.3.0indirekt
npmjsdoc-type-pratt-parser7.2.0indirekt
npmjsesc0.5.0indirekt
npmjsesc3.1.0indirekt
npmjson-buffer3.0.1indirekt
npmjson-parse-even-better-errors2.3.1indirekt
npmjson-schema-traverse0.4.1indirekt
npmjson-stable-stringify-without-jsonify1.0.1indirekt
npmjson52.2.3indirekt
npmkeyv4.5.4indirekt
npmlevn0.4.1indirekt
npmlines-and-columns1.2.4indirekt
npmlocate-path5.0.0indirekt
npmlocate-path6.0.0indirekt
npmlodash4.18.1indirekt
npmlodash.flattendeep4.4.0indirekt
npmlodash.memoize4.1.2indirekt
npmlodash.merge4.6.2indirekt
npmlru-cache5.1.1indirekt
npmmake-dir3.1.0indirekt
npmmin-indent1.0.1indirekt
npmminimatch3.1.5indirekt
npmminimatch9.0.9indirekt
npmms2.1.3indirekt
npmnatural-compare1.4.0indirekt
npmnode-preload0.2.1indirekt
npmnode-releases2.0.27indirekt
npmnode-watch0.7.3indirekt
npmnormalize-package-data2.5.0indirekt
npmnth-check2.1.1indirekt
npmnyc15.1.0indirekt
npmobject-deep-merge2.0.0indirekt
npmonce1.4.0indirekt
npmoptionator0.9.3indirekt
npmp-limit2.3.0indirekt
npmp-limit3.1.0indirekt
npmp-locate4.1.0indirekt
npmp-locate5.0.0indirekt
npmp-map3.0.0indirekt
npmp-try2.2.0indirekt
npmpackage-hash4.0.0indirekt
npmparent-module1.0.1indirekt
npmparse-imports-exports0.2.4indirekt
npmparse-json5.2.0indirekt
npmparse-statements1.0.11indirekt
npmpath-exists4.0.0indirekt
npmpath-is-absolute1.0.1indirekt
npmpath-key3.1.1indirekt
npmpath-parse1.0.7indirekt
npmpicocolors1.1.1indirekt
npmpicomatch4.0.4indirekt
npmpkg-dir4.2.0indirekt
npmpluralize8.0.0indirekt
npmpostcss-selector-parser6.1.2indirekt
npmprelude-ls1.2.1indirekt
npmprocess-on-spawn1.0.0indirekt
npmpunycode2.3.1indirekt
npmqueue-microtask1.2.3indirekt
npmqunit2.24.1indirekt
npmrambda7.5.0indirekt
npmread-pkg5.2.0indirekt
npmread-pkg-up7.0.1indirekt
npmregexp-tree0.1.27indirekt
npmregjsparser0.10.0indirekt
npmrelease-zalgo1.0.0indirekt
npmrequire-directory2.1.1indirekt
npmrequire-main-filename2.0.0indirekt
npmrequireindex1.2.0indirekt
npmreserved-identifiers1.2.0indirekt
npmresolve1.22.11indirekt
npmresolve-from4.0.0indirekt
npmresolve-from5.0.0indirekt
npmresolve-pkg-maps1.0.0indirekt
npmreusify1.0.4indirekt
npmrimraf3.0.2indirekt
npmrun-parallel1.2.0indirekt
npmsafe-regex2.1.1indirekt
npmsemver5.7.2indirekt
npmsemver6.3.1indirekt
npmsemver7.7.4indirekt
npmset-blocking2.0.0indirekt
npmshebang-command2.0.0indirekt
npmshebang-regex3.0.0indirekt
npmsignal-exit3.0.7indirekt
npmsource-map0.6.1indirekt
npmspawn-wrap2.0.0indirekt
npmspdx-correct3.2.0indirekt
npmspdx-exceptions2.5.0indirekt
npmspdx-expression-parse3.0.1indirekt
npmspdx-expression-parse4.0.0indirekt
npmspdx-license-ids3.0.22indirekt
npmsprintf-js1.0.3indirekt
npmstring-width4.2.3indirekt
npmstrip-ansi6.0.1indirekt
npmstrip-bom4.0.0indirekt
npmstrip-indent3.0.0indirekt
npmstrip-json-comments3.1.1indirekt
npmsupports-color7.2.0indirekt
npmsupports-preserve-symlinks-flag1.0.0indirekt
npmtapable2.3.3indirekt
npmtest-exclude6.0.0indirekt
npmtext-table0.2.0indirekt
npmtiny-glob0.2.9indirekt
npmtinyglobby0.2.16indirekt
npmto-valid-identifier1.0.0indirekt
npmts-api-utils2.5.0indirekt
npmts-declaration-location1.0.7indirekt
npmtype-check0.4.0indirekt
npmtype-fest0.20.2indirekt
npmtype-fest0.6.0indirekt
npmtype-fest0.8.1indirekt
npmtypedarray-to-buffer3.1.5indirekt
npmtypescript5.4.5indirekt
npmupath2.0.1indirekt
npmupdate-browserslist-db1.1.4indirekt
npmuri-js4.4.1indirekt
npmutil-deprecate1.0.2indirekt
npmuuid8.3.2indirekt
npmvalidate-npm-package-license3.0.4indirekt
npmvue-eslint-parser9.4.3indirekt
npmwhich2.0.2indirekt
npmwhich-module2.0.0indirekt
npmwrap-ansi6.2.0indirekt
npmwrappy1.0.2indirekt
npmwrite-file-atomic3.0.3indirekt
npmxml-name-validator4.0.0indirekt
npmy18n4.0.3indirekt
npmyallist3.1.1indirekt
npmyaml2.8.3indirekt
npmyaml-eslint-parser1.3.0indirekt
npmyargs15.4.1indirekt
npmyargs-parser18.1.3indirekt
npmyocto-queue0.1.0indirekt
Abhängigkeits-Advisories 1

Dieses Repository veröffentlicht kein vom Index auflösbares Paket, daher wurde sein eigener Abhängigkeitsgraph bewertet – 335 Pakete, darunter auch Entwicklungs- und Test-Pins, die nie ausgeliefert werden: 1 tragen bekannte Advisories, davon 0 direkte.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
uuid8.3.2indirekthoch113.0.1

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": [
        "cssjanus",
        "stylesheets",
        "javascript",
        "swap",
        "css"
      ],
      "is_fork": false,
      "size_kb": 1174,
      "has_wiki": false,
      "homepage": "https://cssjanus.github.io",
      "languages": {
        "JavaScript": 21953
      },
      "pushed_at": "2026-07-21T21:33:39Z",
      "created_at": "2012-06-28T17:15:35Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T21:33:46Z",
      "description": "↔️ Convert CSS between left-to-right and right-to-left. Mirror of https://gerrit.wikimedia.org/g/mediawiki/libs/node-cssjanus/. Contribute via https://www.mediawiki.org/wiki/Developer_account.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "https://www.wikimedia.org",
      "name": "Wikimedia",
      "type": "Organization",
      "login": "wikimedia",
      "company": null,
      "location": "United States of America",
      "followers": 2181,
      "avatar_url": "https://avatars.githubusercontent.com/u/56668?v=4",
      "created_at": "2009-02-21T20:22:30Z",
      "is_verified": null,
      "public_repos": 1963,
      "account_age_days": 6360
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.3.1",
          "kind": "patch",
          "published_at": "2026-06-28T12:44:12Z"
        },
        {
          "tag": "v2.3.0",
          "kind": "minor",
          "published_at": "2024-08-06T15:23:07Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2024-07-23T20:27:11Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2021-05-02T17:57:47Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2020-08-24T03:03:38Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2020-08-23T19:32:48Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2019-05-10T22:54:49Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2018-10-15T16:18:34Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2018-07-03T19:26:58Z"
        },
        {
          "tag": "v1.2.2",
          "kind": "patch",
          "published_at": "2018-02-12T17:29:42Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2017-10-23T19:21:38Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2017-03-14T19:55:55Z"
        },
        {
          "tag": "v1.1.3",
          "kind": "patch",
          "published_at": "2016-12-24T06:46:13Z"
        },
        {
          "tag": "v1.1.2",
          "kind": "patch",
          "published_at": "2015-02-04T02:34:14Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2014-11-19T18:41:00Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2014-09-23T22:37:41Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2013-08-08T08:38:14Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2012-06-28T18:46:12Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "5d253f86dc1734379d541e6297f7e54858eb2145",
          "body": "* brace-expansion: 1.1.13, 2.1.0 → 1.1.16, 2.1.2\n  * https://github.com/advisories/GHSA-3jxr-9vmj-r5cp\n* js-yaml: 3.15.0, 4.2.0 → 3.15.0, 4.3.0\n  * https://github.com/advisories/GHSA-52cp-r559-cp3m\n\nChange-Id: I7946340928adc08d750f1653ddc0bda8b0e30a9b",
          "is_bot": false,
          "headline": "build: Updating npm dependencies",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-07-21T21:31:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92bc04fee10189842f93869a55470242c23d4dfa",
          "body": "* https://github.com/advisories/GHSA-h67p-54hq-rp68\n\nChange-Id: I35beda5cad5319b29db108f93c9adbe96b3d34a1",
          "is_bot": false,
          "headline": "build: Updating js-yaml to 3.15.0, 4.2.0",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-07-03T10:52:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05cc64b593e893d2c6f9a651834a48968ffd896d",
          "body": "Change-Id: I6ef1afb578011639971c3b68a69ef8f7e614f6e0",
          "is_bot": false,
          "headline": "Tag v2.3.1",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2026-06-28T12:44:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a073f85e965b6684dfb32a78bc2564c7c821bf73",
          "body": "…rthand\n\nCSSJanus treats the first percentage in a `background` or\n`background-position` value as a horizontal position and mirrors it\n(100 - x). When that percentage is inside a function call, this is\nwrong:\n\n  background: radial-gradient(ellipse 150% 100% at 50% 30%, ...)\n      -> ellipse -50% 100\n[…]\nage if it sits inside a function call,\ndetected by an unmatched \"(\" before it, since such a percentage is\nalways a function argument.\n\nBug: T333273\nChange-Id: I6a2cfd4d4f2054f5ef1c833e62817bcc8d6afaee",
          "is_bot": false,
          "headline": "Fix unexpected flipping of percentages in functions in background sho…",
          "author_name": "Aidan O'Brien",
          "author_login": "aidanobrien5599",
          "committed_at": "2026-06-27T20:58:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d73f507a624c682139fb5c612a59953df1f0bbb9",
          "body": "* https://github.com/advisories/GHSA-4x5r-pxfx-6jf8\n\nChange-Id: Ifa6ed28b88fe1cd467349962ac9956a6dd5bf33d",
          "is_bot": false,
          "headline": "build: Updating @babel/core to 7.29.7",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-06-16T11:24:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2fbe974b1d531c875334fbfddebba27e849dd29",
          "body": "Change-Id: Ia3fe4c0f9131689be15b4a02e214e68be9b4f860",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.32.4",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-05-05T06:37:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcf1d52b46e74300f325e417330ff6657b5979e9",
          "body": "* https://github.com/advisories/GHSA-f23m-r3pf-42rh\n* https://github.com/advisories/GHSA-r5fr-rjxr-66jc\n\nChange-Id: Ieed0d44ff40b16ec89a310ae2ca85bc52ec97529",
          "is_bot": false,
          "headline": "build: Updating lodash to 4.18.1",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-04-04T09:40:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ca1a8eb690a04c1e332466a88735d711aa83260",
          "body": "* brace-expansion: 1.1.12, 2.0.2 → 1.1.13, 2.0.3\n  * https://github.com/advisories/GHSA-f886-m6hf-6m8v\n* picomatch: 2.3.1, 4.0.3 → 2.3.2, 4.0.4\n  * https://github.com/advisories/GHSA-3v7f-55p6-f55p\n  * https://github.com/advisories/GHSA-c2c7-rcm5-vvqj\n* yaml: 2.8.1 → 2.8.3\n  * https://github.com/advisories/GHSA-48c2-rrv3-qjmp\n\nChange-Id: Ic731b2e6a6325c54b84f8b2dbc50aeafed2c02b0",
          "is_bot": false,
          "headline": "build: Updating npm dependencies",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-03-30T05:46:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a87d551e675efb75f9f2dcc8735f0d2016be9e6f",
          "body": "* https://github.com/advisories/GHSA-rf6f-7fwh-wjgh\n\nChange-Id: Ia53bf23433b1e0633cbedeec5e50883354cc348d",
          "is_bot": false,
          "headline": "build: Updating flatted to 3.4.2",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-03-22T18:06:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f072f0963927b3ed30a8f16d9ead4570d43cbb18",
          "body": "* https://github.com/advisories/GHSA-25h7-pfq9-p65f\n\nChange-Id: Ib800869dcfc6b404349e64e26e2835f44bbdcbc6",
          "is_bot": false,
          "headline": "build: Updating flatted to 3.4.1",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-03-15T07:27:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1967584aa127f1b04dd6f41bbd3d1b6cf74fb66e",
          "body": "* https://github.com/advisories/GHSA-23c5-xmqv-rm74\n* https://github.com/advisories/GHSA-3ppc-4f35-3m26\n* https://github.com/advisories/GHSA-7r86-cg39-jmmj\n\nChange-Id: Ib3c1c31a93f01850f724afdc6b0eede9e4ba3369",
          "is_bot": false,
          "headline": "build: Updating minimatch to 3.1.5, 9.0.9",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-03-01T13:33:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3889525a05b49d211b9c7c3ca88e7d47741dbf68",
          "body": "* https://github.com/advisories/GHSA-2g4f-4pwh-qvx6\n\nChange-Id: I8dd1bb6559d84f303e37a39e2961e0cb0cad472f",
          "is_bot": false,
          "headline": "build: Updating ajv to 6.14.0",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-02-22T21:46:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b398c47efea96be9a13d9161b4196a345aad8183",
          "body": "* https://github.com/advisories/GHSA-xxjr-mmjv-4gpg\n\nChange-Id: Id81b4c23742d336ac04f455b50a9b1d80dfa694f",
          "is_bot": false,
          "headline": "build: Updating lodash to 4.17.23",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2026-01-26T08:26:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edc0fa0f04ddf2179e94a56a74c1a46202039e67",
          "body": "Change-Id: I639c0e99b6574947b94520684b93cacbec333ebb",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.32.3",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2025-12-06T20:49:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f32051a16d52a85d9accaa790f6461b3eff5a323",
          "body": "Change-Id: I1b4409104faa11c4a9f327356839b6315c2e145e",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.32.2",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2025-11-26T20:19:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72b433d16b9142752664f0e46fe0e435c75152b9",
          "body": "Change-Id: Ic9bab0a166741b51dea7c5b0217c8a92c886d2a3",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.32.1",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2025-11-16T16:18:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9504eaafb955a66edda9f81f8ea17f53c34dc40a",
          "body": "Change-Id: I65a982ddc524987f1534199144a822bc2869ead2",
          "is_bot": false,
          "headline": "docs: Add example usage to README",
          "author_name": "shadabgdg",
          "author_login": null,
          "committed_at": "2025-08-27T16:34:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "baac87eb5b560aab279cbb25cb37768284e8e960",
          "body": "Follows-up I237a346272f in php-cssjanus where I made the same changes.\nThere were only two GitHub Issues mentioned in the changelog, so I\nmanually imported them.\n\nWhile at it, also update the demo link to follow its redirect\nto doc.wikimedia.org.\n\nChange-Id: I535d420d7bf643431bef8c753dfc4939f89ed529",
          "is_bot": false,
          "headline": "docs: Change issue references to Phabricator",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2025-08-21T18:12:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e1f401f38576d0eeb526e95fbcdaddf63ddd963",
          "body": "Same one as in php-cssjanus already.\n\nChange-Id: Ibafeab9309b9b7dcdd402842874ed93d8cda6ac9",
          "is_bot": false,
          "headline": "docs: Add SECURITY.md",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2025-07-29T11:55:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39a49b77a0fbefb91fe4a124221a42e7947ea093",
          "body": "Change-Id: I437b3c6e8137d674b0b03e3033e7a02bb18e5ab4",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.31.0",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2025-07-28T03:25:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20072a055aba6f737d279d7e6580435a4cbdee76",
          "body": "* https://github.com/advisories/GHSA-v6h2-p8h4-qcjw\n\nChange-Id: Ia2e85bf168f1d3e5863e7e275fbe28eb81134330",
          "is_bot": false,
          "headline": "build: Updating brace-expansion to 1.1.12, 2.0.2",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2025-06-19T22:40:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3019516671b2109a766b61d18671f74f2ecf1c09",
          "body": "Change-Id: I75f2b1b9aa7043a31986d924489980a77cdefce5",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.30.0",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2025-05-26T14:08:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e572c0c4c850f83d9a1f86cde88d9801f56c8166",
          "body": "Change-Id: Ie041f6bd471cc8af90adc9022aed43565f99bca1",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.29.1",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2025-03-29T05:22:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b7eefcceeb385ae29f6a85aeec0675561bbc052",
          "body": "Change-Id: Ia77588cd3edaffbb38522f24eda1f17f3d44b716",
          "is_bot": false,
          "headline": "build: Updating qunit to 2.24.1",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2025-03-28T04:45:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3dd617d0ee51c80373534e566c3a8287c340c119",
          "body": "* https://github.com/advisories/GHSA-968p-4wvh-cqc8\n\nChange-Id: Ifdd4edf5c378d9d2026d848a4459dee2754657bf",
          "is_bot": false,
          "headline": "build: Updating @babel/helpers to 7.26.10",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2025-03-14T05:38:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cf47ac57a3802f8c4e7f2728dc1e10f5e99a56f",
          "body": "* https://github.com/advisories/GHSA-3xgq-45jj-v275\n\nChange-Id: Id3c2816da787212a33c95b580d6c0c557d9e4e45",
          "is_bot": false,
          "headline": "build: Updating cross-spawn to 7.0.6",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2024-11-20T07:27:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "345ae1fdfb6df0e1304e7e56364b23329790726c",
          "body": "* https://github.com/advisories/GHSA-952p-6rrq-rcjv\n\nChange-Id: I26eef651b0bedb98cf6bef441c2f1bced64cb3ae",
          "is_bot": false,
          "headline": "build: Updating micromatch to 4.0.8",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2024-08-24T11:44:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31299ccf37910e0c890efd7773d107bde3d559ae",
          "body": "Change-Id: I827f90b451cecbb82a777d52f90ba3a9c44b65d9",
          "is_bot": false,
          "headline": "docs: Add a note about CSS Logical 1",
          "author_name": "Ebrahim Byagowi",
          "author_login": "ebraminio",
          "committed_at": "2024-08-19T15:35:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8ed317724df25f1ea66c9a8718644ab069d2b1e",
          "body": "Change-Id: Id8bb57c4fd93812c0a92501c4c79b685fce4d12a",
          "is_bot": false,
          "headline": "Tag v2.3.0",
          "author_name": "Bartosz Dziewoński",
          "author_login": "MatmaRex",
          "committed_at": "2024-08-06T15:23:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1351e62d60e4afd1547e4f97b6949f0618210eb",
          "body": "CSSJanus is taking :dir(ltr) as an URL, this fixes it by first turning\nthem into two temporarily tokens, then proceeding with URL change\nlogic, then putting back the original values, a similar pattern done\nto swap ltr and rtl in the same place.\n\nBug: T371466\nChange-Id: Ifb38c598c3147689d084ec2535849a8224b794a6",
          "is_bot": false,
          "headline": "Don't change dir pseudo-selector target",
          "author_name": "Ebrahim Byagowi",
          "author_login": "ebraminio",
          "committed_at": "2024-07-31T15:13:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e4afb8f96ae000bc7dd76ab64c502ad36b1fb42",
          "body": "Bug: T369553\nChange-Id: I8511ab0cade29a358716ed39ca6cd3b982039087",
          "is_bot": false,
          "headline": "Tag v2.2.0",
          "author_name": "Bartosz Dziewoński",
          "author_login": "MatmaRex",
          "committed_at": "2024-07-23T20:27:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0683b8ce2ce0070f515e9919e299056c5e21758d",
          "body": "We have uses like this\nhttps://github.com/wikimedia/mediawiki/blob/30c622c09149eda2e37b5c9c76de492bafda09f4/resources/lib/codex/mixins/css-icon.less#L200-L201\nand maybe we can use dir pseudo-class selector in the future so I\nwant to make sure there is a guarantee on current behavior of\nthese cases to not break in the future.\n\nChange-Id: I19c6ba056484386072b8e98b1e971724469b3d9d",
          "is_bot": false,
          "headline": "test: Keep dir attribute selector and dir pseudo-class intact",
          "author_name": "Ebrahim Byagowi",
          "author_login": "ebraminio",
          "committed_at": "2024-07-11T14:27:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98b09efa7633e5dfb204e16d1eb25f9438e57db6",
          "body": "Just as a guarantee that CSS Janus doesn't touch CSS Logical properties\nhttps://drafts.csswg.org/css-logical/\n\nCSS Logical will be flipped automatically thus are written in a way\nthat do not need CSS Janus inherently.\n\nTests are brought from these changes,\n* https://gerrit.wikimedia.org/r/c/mediawik\n[…]\n/core/+/1052443\n* https://gerrit.wikimedia.org/r/c/css-sanitizer/+/1050707\n* https://gerrit.wikimedia.org/r/c/css-sanitizer/+/1050724\n\nBug: T369475\nChange-Id: I3f2439cc333a7f5f299226c46c43aa4124b184b2",
          "is_bot": false,
          "headline": "test: Make sure CSS Logical won't be touched",
          "author_name": "Ebrahim Byagowi",
          "author_login": "ebraminio",
          "committed_at": "2024-07-08T17:09:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f1d307ad152c0f9cdb2e583bdf734f4f8dcb92a",
          "body": "Change-Id: I700af7bda4baaeafbb3deef2d3eedf7d68c34f20",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.28.2",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2024-06-19T09:33:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abab9497744d061ae0cff08a3988d3e2acd75a50",
          "body": "Change-Id: I8dc5e270771abab9a6f8cfb5e7d939e71f105b9d",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.28.0",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2024-06-08T16:29:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1381eeee48f366532f736e9b14528e601abc0e31",
          "body": "* eslint: 8.31.0 → 8.57.0\n* eslint-config-wikimedia: 0.25.0 → 0.27.0\n  The following rules are failing and were disabled:\n  * test:\n    * n/no-process-exit\n\nChange-Id: If992dfe1ec0d6791bfc1647d334dcd901cefd446",
          "is_bot": false,
          "headline": "build: Updating npm dependencies",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2024-04-20T14:40:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4de1f87fb0abb0c611b81fdb458a6210d745a592",
          "body": "* @babel/traverse: 7.21.3 → 7.23.9\n  * https://github.com/advisories/GHSA-67hx-6x53-jw92\n* eslint-plugin-compat: 4.1.2 → 4.2.0\n  * https://github.com/advisories/GHSA-c2qf-rxjj-qqgw\n  * https://github.com/advisories/GHSA-c2qf-rxjj-qqgw\n  * https://github.com/advisories/GHSA-c2qf-rxjj-qqgw\n* semver: 7\n[…]\nf-rxjj-qqgw\n  * https://github.com/advisories/GHSA-c2qf-rxjj-qqgw\n* word-wrap: 1.2.3 → 1.2.5\n  * https://github.com/advisories/GHSA-j8xg-fqg3-53r7\n\nChange-Id: Icfe85a412f03487937bc467728e3e993b1eab5df",
          "is_bot": false,
          "headline": "build: Updating npm dependencies",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2024-02-04T17:47:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c97220768acf29dba95a3227b6ccedf022a320b",
          "body": "This patch replaces the WikimediaUI Base library with the new\nCodex design tokens library.\nThe new library is mostly a drop-in replacement for the old one.\nBut there are deprecated variable names (token keys) that need to be\nadapted to the new ones.\nSee https://gerrit.wikimedia.org/r/plugins/gitiles\n[…]\n variable were greatly desired.\nLastly adding a small margin in label elements to make the checkboxes\neasier targetable.\n\nBug: T331403\nBug: T334934\nChange-Id: I102a641725a89a92a50f5f72c5033c8200aa4e45",
          "is_bot": false,
          "headline": "Replace WikimediaUI Base with Codex design tokens",
          "author_name": "Volker E",
          "author_login": "Volker-E",
          "committed_at": "2023-12-18T13:43:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b80322f61bfae06e777635571c6f416883cf3e6b",
          "body": "Change-Id: Ie1c94f23e0c51675c7f1b05a002165a2137955a1",
          "is_bot": false,
          "headline": "build: Update QUnit from 2.19.4 to 2.20.0",
          "author_name": "James D. Forrester",
          "author_login": "jdforrester",
          "committed_at": "2023-10-24T22:37:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b098d1c48dd231912073c9a29a7726cbee0797c3",
          "body": "Change-Id: I4a8ff3647b8c6b6f61787a5844b264d299f9f5fd",
          "is_bot": false,
          "headline": "build: Updating eslint-config-wikimedia to 0.25.0",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2023-05-04T17:26:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8920ea4cd6582a5fce763031ba90f490053433b9",
          "body": "```\n+ npm run-script doc\n> cssjanus@2.1.0 doc\n> cp src/cssjanus.js docs/lib/cssjanus.js\n\ncp: 'src/cssjanus.js' and 'docs/lib/cssjanus.js' are the same file\n\nBuild step 'Execute shell' marked build as failure\n```\nChange-Id: I9ddcd70ccfab14671a190b36d2f8dda5c0e08ef3\n\nChange-Id: I78a2260bdf3c8096f77ba231bd6043ba0d2d306d",
          "is_bot": false,
          "headline": "build: fix `npm run doc` failure",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2023-04-13T00:04:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79495166093763dd6a5e9ea1510be647be9a3562",
          "body": "Also add link to composer package while at it.\n\nChange-Id: I0e5cfa68bf50de5f605fd26f549f09f295741a49",
          "is_bot": false,
          "headline": "docs: Use semantic <nav> and <ul> for footer links",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2023-04-12T17:44:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8899f7ce7521c6bcd661bfcaead1bf87c102aba8",
          "body": "* Remove outdated python2 reference from README.md.\n\n* Remove Bootstrap from third-party origin, use local WMUI.\n\n* Remove needless use of jQuery, also from third-party origin.\n  Anno 2023 this code is simpler and shorter in vanilla DOM.\n\n* Remove \"Fork on GitHub\" button, also from yet another third\n[…]\ntting\n  the input when clicked for native focus.\n\n* Fix inaccessible header on \"demo\" header by using position sticky\n  instead of position fixed.\n\nChange-Id: I66899f81edc42f6bf9ed23a2dc2a99765ae4b524",
          "is_bot": false,
          "headline": "docs: Convert to WMUI and remove references to third-party CDNs",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2023-04-12T10:16:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "de38fd3659336099d0e9f49fa8035103c5da1c3b",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"test: Increase benchmark from 1,000 to 10,000 ops\"",
          "author_name": "jenkins-bot",
          "author_login": null,
          "committed_at": "2023-03-31T23:59:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7df70315dd4bc898298510238812891d10488fc",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"test: Simplify code by using async-await\"",
          "author_name": "jenkins-bot",
          "author_login": null,
          "committed_at": "2023-03-31T23:59:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44b851d4e8ab0874c55f453cad1fff9f79b0d73f",
          "body": "Per https://wikitech.wikimedia.org/wiki/Performance/Guides/Backend_performance_practices#Percentiles\nbut also more generally because it's just running far too quickly.\nIt's only running for ~0.1s on modern equipment, which leaves too much\nroom for variance.\n\nChange-Id: I25e0d0187be3ab22e0299219f7f9860d6b41a6d8",
          "is_bot": false,
          "headline": "test: Increase benchmark from 1,000 to 10,000 ops",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2023-03-31T23:58:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f17e2aa06ebb669b9dd2ab65f453ee667275316",
          "body": "Change-Id: I6b9f28f21e23d396f6c0e92ec3fee874230a4ae7",
          "is_bot": false,
          "headline": "test: Simplify code by using async-await",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2023-03-31T23:58:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e8e173e3b280a7450c6a73c2d3c28aa1d52a9ce",
          "body": null,
          "is_bot": false,
          "headline": "Merge \"build: Add /coverage to .eslintignore\"",
          "author_name": "jenkins-bot",
          "author_login": null,
          "committed_at": "2023-03-30T07:44:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b574bbf175a03b836401d602efaa7a7de9a6a72b",
          "body": "* eslint: ^7.24.0 → 8.31.0\n* eslint-config-wikimedia: 0.20.0 → 0.24.0\n* qunit: 2.15.0 → 2.19.4\n\nAdditional changes:\n* And updating CoC link to use Special:MyLanguage (T202047).\n\nChange-Id: I9c88d26fdd7ef3d19c349ff967d3da643c349ef1",
          "is_bot": false,
          "headline": "build: Updating npm dependencies",
          "author_name": "libraryupgrader",
          "author_login": null,
          "committed_at": "2023-03-29T22:01:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1fe25165d804aa43e567f954b98862ec17b68b4",
          "body": "If you've run `npm run coverage` more than once, or ran it in the past\nand then run `npm test`, it fails due to upstream Istanbul.js code\nmatching from /coverage.\n\nChange-Id: Id5d64c5c42a23ceccc279c0297c6e4d3da1e63a0",
          "is_bot": false,
          "headline": "build: Add /coverage to .eslintignore",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2023-03-29T03:34:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "776b7bf0c8b321e7b4055e7c842df199fd5d84f8",
          "body": "Bug: T333276\nChange-Id: I46dab696def51928effe7c093b863e6726c39f49",
          "is_bot": false,
          "headline": "Flip `calc()` in four value notation",
          "author_name": "Moh'd Khier Abualruz",
          "author_login": "moabualruz",
          "committed_at": "2023-03-29T03:21:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ad1267bee7df924ed6ddda5e78352b5beba31a4",
          "body": "The next commit will turn this into a standalone demo that will\nbe published on <https://doc.wikimedia.org>.\n\nChange-Id: I8956313c5006d46697021f87f02677a23633fbb1",
          "is_bot": false,
          "headline": "docs: Import from <https://github.com/cssjanus/cssjanus.github.io>",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2023-03-29T02:55:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c17b0b9106defba4db1240925121ed8271657b05",
          "body": "Change `npm run cover` to match the standardised entrypoint in WMF CI\nthat runs `npm run coverage`, and expects to publish an HTML directory\nat `/coverage`. It also optionally supports a clover.xml file being\nplaced there, so enable that as well.\n\nRef https://gerrit.wikimedia.org/r/c/integration/config/+/903539/\n\nChange-Id: I8e786201f0541c6d1065dbfa30a42c8f49960a2b",
          "is_bot": false,
          "headline": "build: Remove references to Travis/GitHub",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2023-03-29T00:52:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32349a78b3a5f4904c608e43a0037e01fea4039f",
          "body": "There are not many cases where this is actually reachable, which is\nwhy the existing code worked fine. For example, if we change one of\nthe URLs to be a 404 error, it gets handled in the `handleResponse`\ncallback by the status code condition.\n\nChange this to an `error` handler instead, as per the No\n[…]\nn for DNS/TCP errors, or internal HTTP response parsing.\n\nThanks @emarteca!\n\n[1] https://nodejs.org/api/http.html#httprequesturl-options-callback\n\nFixes https://github.com/cssjanus/cssjanus/issues/80.",
          "is_bot": false,
          "headline": "test: Fix invalid `end` event handler on https.get() return",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2023-03-28T03:25:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "441b12564731c28f70d43619744678bb9d8020ec",
          "body": null,
          "is_bot": false,
          "headline": "Tag v2.1.0",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2021-05-02T17:57:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f84afa895b53566d248badd0a2b32387e605b7b7",
          "body": "Fixes https://github.com/cssjanus/cssjanus/issues/85.\r\nCloses https://github.com/cssjanus/cssjanus/pull/86.",
          "is_bot": false,
          "headline": "Fix unexpected flipping in selectors with the general sibling combinator",
          "author_name": "Klaas Skelte van der Werf",
          "author_login": "mainframe98",
          "committed_at": "2021-04-15T00:16:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "480e59475f499d63a97f67c993859d74e093aa62",
          "body": null,
          "is_bot": false,
          "headline": "build: Update dev deps (eslint, qunit)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2021-04-13T19:40:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98bcea6fcb14a7c32ad5ad70b3c5cbe9adae64fd",
          "body": null,
          "is_bot": false,
          "headline": "build: Rename head branch",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-12-28T00:56:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e153112076b4983d0e0a4beb3a8c04e95d2fc93",
          "body": "Sync the copyright statements between:\n* the initial php-cssjanus commit (which predates the port to Node.js\n  and php-cssjanus flipping from upstream to downstream)\n* the LICENSE.txt file.\n* the cssjanus.js file.\n\nCopy it to the NOTICE.txt file, as expected by the terms of the\nApache 2.0 license.\n\nMove list of principal authors to AUTHORS.txt.",
          "is_bot": false,
          "headline": "build: Update and formalise copyright notice",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-12-28T00:55:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c264634905a32faede13a41b27e035d0ad6ed4f",
          "body": null,
          "is_bot": false,
          "headline": "docs: Add badge",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-12-13T21:39:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b56444be65c081d8b708133cd272725c74c6d1e",
          "body": null,
          "is_bot": false,
          "headline": "docs: Add Integrations section to README",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-09-18T22:00:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bf6b133d2a8b490359951ae8fa2ee125a940f3b",
          "body": "No-op release to publish new package metadata to npm for\nthe README and keywords.",
          "is_bot": false,
          "headline": "Tag v2.0.1",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-08-24T03:03:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b637b30adc744b7a080e353b79ed438741f7531a",
          "body": null,
          "is_bot": false,
          "headline": "test: Use Instanbul for coverage and integrate with Coveralls",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-08-24T02:59:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3074631b21ddb0ecc89f8e8d52eb874ee47348b",
          "body": null,
          "is_bot": false,
          "headline": "Add link to Wikimedia Code of Conduct",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-08-23T20:10:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "addf1277e6454375df9d698d916b6692bb8d38f0",
          "body": null,
          "is_bot": false,
          "headline": "Tag v2.0.0",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-08-23T19:32:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bf2b98f7586108fef2c8583b0dbaa006ddbd79c",
          "body": null,
          "is_bot": false,
          "headline": "build: Promote demo homepage via package.json",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-08-23T17:20:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9aac27fe70bbd2005fa989b88e48f3b2326471f",
          "body": "…tors\n\nChange `lookAheadNotOpenBracePattern` to allow selectors to match \"\" quote\npatterns (e.g. `[class=\"span\"]`) and selectors with comments interspersed.\n\nThis fixes issue #35, where text before either comments or attribute selectors\nusing double quotes were not being considered part of the selec\n[…]\ne\" to work when selector includes either\ncomments or attribute selectors with double quotes.\n\nFixes https://github.com/cssjanus/cssjanus/issues/35.\nCloses https://github.com/cssjanus/cssjanus/pull/53.",
          "is_bot": false,
          "headline": "Fix unexpected flipping when double quotes or comments exist in selec…",
          "author_name": "YairRand",
          "author_login": "YairRand",
          "committed_at": "2020-08-23T17:11:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "75710d65f3b142acc99ff50403640bc3e186a083",
          "body": "Use the QUnit CLI and is TAP console reporter.",
          "is_bot": false,
          "headline": "build: Update eslint, qunit",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-08-23T16:51:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "528e39560b8530877ba95ffac69c4819dbb69d04",
          "body": null,
          "is_bot": false,
          "headline": "build: Add package-lock.json",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-07-14T23:59:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23faaa8ded9d6e9b81d4065eacc846044e62c6ec",
          "body": "Also remove a bunch of outdated stuff from .npmignore.\n\nESLint warnings fixed:\n\n> src/cssjanus.js:\n> - line 132: prefer-regex-literals\n>   Use a regular expression literal instead of the 'RegExp' constructor\n> - line 313:\n>   Definition for rule '(for closure compiler)' was not found\n> - line 400: jsdoc/check-alignment\n>   Expected JSDoc block to be aligned\n\n> test/unit.js\n> - line 1:\n>   Unused eslint-disable directive (no problems were reported from 'no-console')",
          "is_bot": false,
          "headline": "build: Update ESLint, simplify 'npm test' command",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-07-14T23:59:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98c947604e82d7d3ad10935e4f3d5e7d2fcbbb75",
          "body": "The next commit updates ESLint, which fails to install on Node 8.\nIt's about time to drop this anyway, given it was EOL Dec 2019.\n\n<https://github.com/nodejs/Release#end-of-life-releases>",
          "is_bot": false,
          "headline": "build: Drop Node 8 (EOL), add Node 14",
          "author_name": "James Forrester",
          "author_login": "jdforrester",
          "committed_at": "2020-07-14T23:59:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e7970b1f31e07ebe04666041db17159e2b37a26",
          "body": "This essentially reverts 4fb8ed8. I don't understand what I was thinking.\nHaving two copies of this and having to sync them and maintain a script\nfor the subtle differences between the two doesn't seem to be useful.",
          "is_bot": false,
          "headline": "site: remove site/ directory",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2020-07-14T23:31:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b05caf9167ff14e626a737bd9869e6f07fae45e7",
          "body": "* build: Update dev dependencies\r\n\r\neslint-config-wikimedia   0.3.0  →   0.5.0\r\ngrunt                     1.0.2  →   1.0.4\r\ngrunt-contrib-watch       1.0.0  →   1.1.0\r\ngrunt-eslint             18.0.0  →  21.0.0\r\ngrunt-jsonlint            1.0.8  →   1.1.0\r\n\r\ngrunt-eslint has a newer version (21.0) that requires Node 6,\r\ngiven we still support Node 4, staying on the latest before it.\r\n\r\n* test: Add benchmarks\r\n\r\nUses the same fixtures as the benchmarks for php-cssjanus.",
          "is_bot": false,
          "headline": "Add benchmark (#63)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2019-05-10T23:18:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c6782ae52eb5f43c38b39ad5f9062dc65d9caa3",
          "body": null,
          "is_bot": false,
          "headline": "Travis: Stop node testing on 6 (EOL); start on 12 (#75)",
          "author_name": "James Forrester",
          "author_login": "jdforrester",
          "committed_at": "2019-05-10T23:03:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a53e520e4fe1c0d5e1df6af3d3726814294a7020",
          "body": null,
          "is_bot": false,
          "headline": "Tag v1.3.2",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2019-05-10T22:54:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a791adc4099a279e2a4b3b236f309f89ae5c505c",
          "body": "Ref https://github.com/cssjanus/php-cssjanus/issues/14.\r\nRef https://github.com/cssjanus/php-cssjanus/pull/19.\r\nClose #74.",
          "is_bot": false,
          "headline": "Document known backtracking issue",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2019-05-10T22:51:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a5a1c7c63a0d93e95773b618564ba2cc89540fe",
          "body": "Close #72.",
          "is_bot": false,
          "headline": "tests: Add a long content test suite",
          "author_name": "James Forrester",
          "author_login": "jdforrester",
          "committed_at": "2019-05-10T21:11:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ffc4051601bafdd410f65448ec445f21148581c",
          "body": null,
          "is_bot": false,
          "headline": "Tag v1.3.1",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2018-10-15T16:18:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5b34a130bfa4c4a5abb844a9c95ae88f0c3d262",
          "body": "Fixes #69.\r\nCloses #70.",
          "is_bot": false,
          "headline": "Fix bug where transform() didn't flip on semicolon-less property",
          "author_name": "YairRand",
          "author_login": "YairRand",
          "committed_at": "2018-10-11T19:05:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "569d68a008c44976dfafa9d5eb121470f78c61f3",
          "body": "As of v1.3.0, the distribution supports being included in a\r\nbrowser environment, in which case it will export the interface\r\nto the 'cssjanus' variable.",
          "is_bot": false,
          "headline": "site: Remove now-redundant fake require() in index.html (#67)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2018-07-05T15:18:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99f0d7c831b5feb5da0aaca2da2105c587eb80c9",
          "body": "Previously one had to install grunt-cli globally in the local\r\nshell (or use npx). Instead, add a preset command that uses\r\nthe locally installed copy of grunt, same as for `npm test`.\r\n\r\nAlso, update the destination directory option to be based\r\non an environment variable because passing options fr\n[…]\n-- --foo bar`), and more\r\nimportantly, Grunt specifically does not support this call\r\npattern and instead tries to look for a task called \"--foo\".\r\n\r\nAvoid that issue by using an env variable instead.",
          "is_bot": false,
          "headline": "build: Add npm-run command for 'grunt site' (#66)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2018-07-03T20:38:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4badcc21481984998eb0adfbc4e42e27a5cb7ba4",
          "body": null,
          "is_bot": false,
          "headline": "Tag v1.3.0",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2018-07-03T19:26:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7adad00e79aaef5aeac384a5fe1cc849847c896f",
          "body": "* build: Require Node 6 (drop Node 4 support)\r\n\r\nNode 4 is EOL. Also, add Node 10 to the build matrix.\r\n\r\n* build: Bump devDependencies\r\n\r\n> grunt                     1.0.2  →   1.0.3\r\n> grunt-contrib-watch       1.0.0  →   1.1.0\r\n> grunt-eslint             18.0.0  →  21.0.0\r\n> grunt-jsonlint            1.0.8  →   1.1.0\r\n\r\nESLint has a newer version, but not adopting yet as it also\r\ndrops support for Node 4.",
          "is_bot": false,
          "headline": "Require Node 6 & build dev dependencies (#64)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2018-07-03T18:29:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2b39ec67a854b08b1e7f279d470d43b4e334493",
          "body": "Closes cssjanus/cssjanus#61.",
          "is_bot": false,
          "headline": "Make cssjanus.js compatible with closure compiler",
          "author_name": "Chris Scribner",
          "author_login": "scriby",
          "committed_at": "2018-06-25T14:20:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0d6a1ce0c65b1760236e5e91d932097293ffa2b",
          "body": "This was caused by a bug in the `unicodePattern` regex.\r\n\r\nCloses #57.",
          "is_bot": false,
          "headline": "Fix bug where classes could flip if the selector contains a backslash",
          "author_name": "YairRand",
          "author_login": "YairRand",
          "committed_at": "2018-06-14T17:36:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf1b8bc31af27d2cc9ed77ce5f820c02545e1b12",
          "body": "This repo's Travis integration has been converted from using the deprecated\r\n\"Services\" hooks (on dot-org), to using the \"Apps\" integration (on dot-com).",
          "is_bot": false,
          "headline": "readme: Update Travis badge to dot-com (#59)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2018-05-18T12:04:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cd5f573561a057ce3175b141d30b5fd138218bd",
          "body": "* grunt 1.0.1 → 1.0.2\r\n  - Removes grunt's dependency on the deprecated 'coffee-script' package,\r\n    by using 'coffeescript' instead.\r\n    This fixes a warning shown during 'npm install' when developing cssjanus\r\n    locally.",
          "is_bot": false,
          "headline": "build: Bump devDependencies (grunt) (#55)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2018-02-12T19:08:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e04c4b8fa7451335022b8e88ba0c454735be29e2",
          "body": null,
          "is_bot": false,
          "headline": "Tag v1.2.2 (#54)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2018-02-12T17:29:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edcfd1abd70f03504bbe54e69b9ac58bea7a3e1d",
          "body": "Distribute packages through npm without any extraneous files.",
          "is_bot": false,
          "headline": "build: Add 'files' array to package.json (#52)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2018-02-11T02:17:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d49be9cd1bd6361f8bede10c3037470db64a484",
          "body": null,
          "is_bot": false,
          "headline": "Tag v1.2.1 (#50)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2017-10-23T19:21:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9131d63493e23d314b5f604b6ef668503bce3e57",
          "body": "Should help increase the code coverage and overall stability.\r\nThis wasn't previously done because the test runner insisted\r\non roundtripping all test cases, which isn't possible in this case.\r\n\r\n> input: 1px 2px 3px      -> output: 2px 1px 2px 3px\r\n> // Same as:\r\n> input: 1px 2px 3px 2px  -> output\n[…]\nare given in CSS, the fourth value is implied to be the same\r\nas the second value:\r\n> (top, [right=top], [bottom=top], [left=right])\r\n\r\nAdd a \"roundtrip\" setting to disable roundtripping where needed.",
          "is_bot": false,
          "headline": "test: Add test for 3-values border-radius (#49)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2017-10-23T17:56:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4457e786c392858466d396dd132f3b0ed4383eba",
          "body": null,
          "is_bot": false,
          "headline": "build: Add Node 8 and remove 0.10/0.12 from matrix (#48)",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2017-10-23T15:34:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ff96e42929353b726dac2dc2080884c075ea026",
          "body": null,
          "is_bot": false,
          "headline": "Tag v1.2.0",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2017-03-14T19:55:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a40f001b1ba35567112d8b8e1d9d95eda4234c3",
          "body": "Closes #45.",
          "is_bot": false,
          "headline": "Flip translate(x[,y,z]) and translateX(x)",
          "author_name": "Ed S",
          "author_login": "edg2s",
          "committed_at": "2017-02-25T22:49:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46de0d8ef570e680515dd2fe92dea920d4a39c4a",
          "body": "…ed) (#46)",
          "is_bot": false,
          "headline": "api: Implement 'options' object parameter (boolean args still support…",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2017-02-21T02:46:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fb8ed8273d597c0320904a888a15afcec14de93",
          "body": "This makes it easier to update the cssjanus.github.io repository,\nas well as making it easier to test new changes by always having a\nmaster-based demo page ready for use.\n\nTo use the demo locally, just open the 'site/' directory in a browser.\nTo update the cssjanus.github.io repository, run:\n\n $ grunt site --dest ../cssjanus.github.io/\n\n(Where --dest points to where your checkout of the site repo is)",
          "is_bot": false,
          "headline": "build: Add site to main repository",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2017-02-21T01:59:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53584dac29fbf2dcac3cacb88f45e710cf9d5117",
          "body": "Closes #42.",
          "is_bot": false,
          "headline": "build: Switch to eslint",
          "author_name": "Ed S",
          "author_login": "edg2s",
          "committed_at": "2017-01-03T06:07:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c5c5646e09d6bd530481146342c800582c12901",
          "body": null,
          "is_bot": false,
          "headline": "build: Add Node 4 and 6 to Travis CI matrix",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2016-12-24T06:55:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "885e08641404592e25c5f0716a39f513195cac64",
          "body": null,
          "is_bot": false,
          "headline": "Tag v1.1.3",
          "author_name": "Timo Tijhof",
          "author_login": "Krinkle",
          "committed_at": "2016-12-24T06:46:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e94a5e4260e84fd29a355b1554c6a64d09572234",
          "body": "Fixes #41\r\nCloses #44",
          "is_bot": false,
          "headline": "Handle signedQuant+color pattern for text-shadow",
          "author_name": "Ed S",
          "author_login": "edg2s",
          "committed_at": "2016-12-24T06:35:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 18,
      "commits_last_year": 20,
      "latest_release_at": "2026-06-28T12:44:12Z",
      "latest_release_tag": "v2.3.1",
      "releases_from_tags": true,
      "days_since_last_push": 1,
      "active_weeks_last_year": 18,
      "days_since_latest_release": 25,
      "mean_days_between_releases": 339.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "cssjanus",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "i18n",
            "bidi",
            "rtl",
            "ltr"
          ],
          "ecosystem": "npm",
          "matches_repo": false,
          "registry_url": "https://www.npmjs.com/package/cssjanus",
          "is_deprecated": false,
          "latest_version": "2.3.1",
          "repository_url": "https://gerrit.wikimedia.org/g/mediawiki/libs/node-cssjanus",
          "versions_count": 18,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 4,
          "monthly_downloads": 2398669,
          "first_published_at": "2012-06-28T18:19:47.751000Z",
          "latest_published_at": "2026-06-28T12:48:27.467000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 25
        }
      ]
    },
    "popularity": {
      "forks": 50,
      "stars": 206,
      "watchers": 9,
      "fork_history": {
        "days": [
          {
            "date": "2013-08-07",
            "count": 1
          },
          {
            "date": "2013-12-04",
            "count": 1
          },
          {
            "date": "2014-01-01",
            "count": 1
          },
          {
            "date": "2014-01-16",
            "count": 1
          },
          {
            "date": "2014-03-07",
            "count": 1
          },
          {
            "date": "2014-07-16",
            "count": 1
          },
          {
            "date": "2014-07-27",
            "count": 1
          },
          {
            "date": "2014-08-08",
            "count": 1
          },
          {
            "date": "2014-08-16",
            "count": 1
          },
          {
            "date": "2014-10-09",
            "count": 1
          },
          {
            "date": "2015-07-15",
            "count": 1
          },
          {
            "date": "2015-08-25",
            "count": 1
          },
          {
            "date": "2015-09-10",
            "count": 1
          },
          {
            "date": "2015-09-21",
            "count": 1
          },
          {
            "date": "2015-11-24",
            "count": 1
          },
          {
            "date": "2015-12-07",
            "count": 1
          },
          {
            "date": "2015-12-13",
            "count": 1
          },
          {
            "date": "2015-12-15",
            "count": 1
          },
          {
            "date": "2016-01-01",
            "count": 1
          },
          {
            "date": "2016-01-14",
            "count": 1
          },
          {
            "date": "2016-02-18",
            "count": 1
          },
          {
            "date": "2016-07-07",
            "count": 2
          },
          {
            "date": "2016-07-16",
            "count": 1
          },
          {
            "date": "2016-10-20",
            "count": 1
          },
          {
            "date": "2016-10-26",
            "count": 1
          },
          {
            "date": "2016-12-23",
            "count": 1
          },
          {
            "date": "2017-02-02",
            "count": 1
          },
          {
            "date": "2017-03-14",
            "count": 1
          },
          {
            "date": "2017-05-11",
            "count": 1
          },
          {
            "date": "2017-07-24",
            "count": 1
          },
          {
            "date": "2018-06-12",
            "count": 1
          },
          {
            "date": "2018-10-31",
            "count": 1
          },
          {
            "date": "2018-11-21",
            "count": 1
          },
          {
            "date": "2019-05-10",
            "count": 1
          },
          {
            "date": "2019-09-03",
            "count": 1
          },
          {
            "date": "2019-09-26",
            "count": 2
          },
          {
            "date": "2019-12-02",
            "count": 1
          },
          {
            "date": "2020-05-05",
            "count": 1
          },
          {
            "date": "2020-09-26",
            "count": 1
          },
          {
            "date": "2021-10-21",
            "count": 1
          },
          {
            "date": "2022-08-23",
            "count": 1
          },
          {
            "date": "2022-09-04",
            "count": 1
          },
          {
            "date": "2023-03-21",
            "count": 1
          },
          {
            "date": "2024-09-14",
            "count": 1
          },
          {
            "date": "2025-01-17",
            "count": 1
          },
          {
            "date": "2025-02-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 48,
        "total_forks": 50
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 17589,
      "source_files_sampled": 4,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "uuid",
            "direct": false,
            "version": "8.3.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 91
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 1
        },
        "advisory_count": 1,
        "affected_count": 1,
        "assessed_count": 335,
        "malicious_count": 0,
        "assessed_package": null,
        "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-compilation-targets",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-globals",
            "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-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/helpers",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.29.7",
            "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": "@es-joy/jsdoccomment",
            "direct": false,
            "version": "0.86.0",
            "ecosystem": "npm"
          },
          {
            "name": "@es-joy/resolve.exports",
            "direct": false,
            "version": "1.2.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/eslintrc",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "8.57.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/config-array",
            "direct": false,
            "version": "0.11.14",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/module-importer",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/object-schema",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/load-nyc-config",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/schema",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/remapping",
            "direct": false,
            "version": "2.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.31",
            "ecosystem": "npm"
          },
          {
            "name": "@mdn/browser-compat-data",
            "direct": false,
            "version": "5.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "@mdn/browser-compat-data",
            "direct": false,
            "version": "6.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.scandir",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.stat",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.walk",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "@sindresorhus/base62",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@stylistic/eslint-plugin",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/normalize-package-data",
            "direct": false,
            "version": "2.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/project-service",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/tsconfig-utils",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "8.59.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "8.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "@ungap/structured-clone",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-jsx",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "aggregate-error",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "append-transform",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "archy",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "are-docs-informative",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ast-metadata-inferer",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "baseline-browser-mapping",
            "direct": false,
            "version": "2.8.28",
            "ecosystem": "npm"
          },
          {
            "name": "boolbase",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.16",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist-config-wikimedia",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "builtin-modules",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "caching-transform",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001754",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ci-info",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "clean-regexp",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "clean-stack",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "6.0.0",
            "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": "commander",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "comment-parser",
            "direct": false,
            "version": "1.4.6",
            "ecosystem": "npm"
          },
          {
            "name": "commondir",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "core-js-compat",
            "direct": false,
            "version": "3.46.0",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "cssesc",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "default-require-extensions",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "diff-sequences",
            "direct": false,
            "version": "27.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.253",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "enhanced-resolve",
            "direct": false,
            "version": "5.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "es6-error",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "8.57.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-compat-utils",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-compat-utils",
            "direct": false,
            "version": "0.6.5",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-config-wikimedia",
            "direct": false,
            "version": "0.32.4",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-compat",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-es-x",
            "direct": false,
            "version": "7.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-es-x",
            "direct": false,
            "version": "8.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-jest",
            "direct": false,
            "version": "29.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-jsdoc",
            "direct": false,
            "version": "62.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-json-es",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-mediawiki",
            "direct": false,
            "version": "0.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-mocha",
            "direct": false,
            "version": "10.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-n",
            "direct": false,
            "version": "17.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-no-jquery",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-qunit",
            "direct": false,
            "version": "8.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-security",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-unicorn",
            "direct": false,
            "version": "56.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-vue",
            "direct": false,
            "version": "9.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-wdio",
            "direct": false,
            "version": "9.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-yml",
            "direct": false,
            "version": "1.19.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "7.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-utils",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "2.1.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": "eslint-visitor-keys",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "10.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "11.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "9.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "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": "fastq",
            "direct": false,
            "version": "1.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-entry-cache",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-cache-dir",
            "direct": false,
            "version": "3.3.2",
            "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-cache",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fromentries",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "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-package-type",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-tsconfig",
            "direct": false,
            "version": "4.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "13.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "15.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "globalyzer",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "globrex",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "graphemer",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hasha",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "html-entities",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "imurmurhash",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "indent-string",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-builtin-module",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.16.1",
            "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-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-path-inside",
            "direct": false,
            "version": "3.0.3",
            "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-windows",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-coverage",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-hook",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-instrument",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-processinfo",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-report",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-source-maps",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-reports",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsdoc-type-pratt-parser",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "0.5.0",
            "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": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-stable-stringify-without-jsonify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "keyv",
            "direct": false,
            "version": "4.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "lines-and-columns",
            "direct": false,
            "version": "1.2.4",
            "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.flattendeep",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.memoize",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "make-dir",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "min-indent",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "9.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-preload",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.27",
            "ecosystem": "npm"
          },
          {
            "name": "node-watch",
            "direct": false,
            "version": "0.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "nth-check",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "nyc",
            "direct": false,
            "version": "15.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "object-deep-merge",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.3",
            "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-map",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-hash",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-imports-exports",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-statements",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "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": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pluralize",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-selector-parser",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "process-on-spawn",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "qunit",
            "direct": false,
            "version": "2.24.1",
            "ecosystem": "npm"
          },
          {
            "name": "rambda",
            "direct": false,
            "version": "7.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg-up",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "regexp-tree",
            "direct": false,
            "version": "0.1.27",
            "ecosystem": "npm"
          },
          {
            "name": "regjsparser",
            "direct": false,
            "version": "0.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "release-zalgo",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-main-filename",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "requireindex",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "reserved-identifiers",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.11",
            "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": "resolve-pkg-maps",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "run-parallel",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "5.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "set-blocking",
            "direct": false,
            "version": "2.0.0",
            "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": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "spawn-wrap",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-correct",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-exceptions",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-license-ids",
            "direct": false,
            "version": "3.0.22",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-indent",
            "direct": false,
            "version": "3.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-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "test-exclude",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "text-table",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tiny-glob",
            "direct": false,
            "version": "0.2.9",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.16",
            "ecosystem": "npm"
          },
          {
            "name": "to-valid-identifier",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-api-utils",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-declaration-location",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "typedarray-to-buffer",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "upath",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.1.4",
            "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": "uuid",
            "direct": false,
            "version": "8.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-license",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "vue-eslint-parser",
            "direct": false,
            "version": "9.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which-module",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "write-file-atomic",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "xml-name-validator",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "2.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "yaml-eslint-parser",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "15.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "18.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 335,
        "direct_count": 0,
        "indirect_count": 335
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 27,
        "open_issues": 1,
        "closed_ratio": 0.978,
        "closed_issues": 45,
        "closed_unmerged_prs": 19
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "Krinkle",
          "commits": 86,
          "avatar_url": "https://avatars.githubusercontent.com/u/156867?v=4"
        },
        {
          "type": "User",
          "login": "trevorparscal",
          "commits": 10,
          "avatar_url": "https://avatars.githubusercontent.com/u/108389?v=4"
        },
        {
          "type": "User",
          "login": "edg2s",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/180672?v=4"
        },
        {
          "type": "User",
          "login": "ebraminio",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/833473?v=4"
        },
        {
          "type": "User",
          "login": "jdforrester",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/881572?v=4"
        },
        {
          "type": "User",
          "login": "YairRand",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/4535558?v=4"
        },
        {
          "type": "User",
          "login": "yoavf",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/844866?v=4"
        },
        {
          "type": "User",
          "login": "MatmaRex",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/160413?v=4"
        },
        {
          "type": "User",
          "login": "dd32",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/767313?v=4"
        },
        {
          "type": "User",
          "login": "catrope",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/260792?v=4"
        }
      ],
      "contributors_sampled": 19,
      "top_contributor_share": 0.662
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.json"
      ],
      "has_editorconfig": false,
      "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": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "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/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 7 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no 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": 5,
            "reason": "6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 9,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "5d253f86dc1734379d541e6297f7e54858eb2145",
        "ran_at": "2026-07-23T14:26:05Z",
        "aggregate_score": 4.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": "2021-04-15T00:16:32Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 92,
          "created_at": "2023-09-13T06:10:53Z",
          "last_comment_at": "2024-12-11T06:33:39Z",
          "last_comment_author": "headquarter8302"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/wikimedia/node-cssjanus",
    "host": "github.com",
    "name": "node-cssjanus",
    "owner": "wikimedia"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 62,
      "inputs": {
        "security": 53,
        "vitality": 68,
        "community": 61,
        "governance": 61,
        "engineering": 66
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 68,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "commits_last_year": 20,
              "human_commit_share": 1,
              "days_since_last_push": 1,
              "active_weeks_last_year": 18
            },
            "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": "18/52 weeks with commits",
                "points": 12.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "20 commits in the last year",
                "points": 11.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
                "points": 5,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "releases_count": 18,
              "latest_release_tag": "v2.3.1",
              "releases_from_tags": true,
              "days_since_latest_release": 25,
              "mean_days_between_releases": 339.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "18 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 25 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 25
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~339.8 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 339.8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "moderate",
        "name": "Community & Adoption",
        "value": 61,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "forks": 50,
              "stars": 206,
              "watchers": 9,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "206 stars",
                "points": 37.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 206
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "50 forks",
                "points": 14.1,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "9 watchers",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 61,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 19,
              "top_contributor_share": 0.662
            },
            "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 66% of commits",
                "points": 7.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 66
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "19 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "merged_prs": 27,
              "open_issues": 1,
              "closed_issues": 45,
              "issue_closed_ratio": 0.978,
              "closed_unmerged_prs": 19
            },
            "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": "27/46 decided PRs merged",
                "points": 22.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 27,
                      "decided": 46
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "followers": 2181,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "wikimedia",
              "public_repos": 1963,
              "account_age_days": 6360
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "2,181 followers of wikimedia",
                "points": 24,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2181,
                      "login": "wikimedia"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1963 public repos, account ~17 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1963
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 17
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 66,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": ".eslintrc.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.json"
                    }
                  }
                ],
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "cssjanus",
                "stylesheets",
                "javascript",
                "swap",
                "css"
              ],
              "has_wiki": false,
              "homepage": "https://cssjanus.github.io",
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://cssjanus.github.io",
                "points": 15,
                "status": "met",
                "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": "5 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "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": 53,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 41,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 4.1
            },
            "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": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "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": "6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 335 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 335
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 1,
              "affected_packages": 1,
              "assessed_packages": 335,
              "unassessed_packages": 0,
              "affected_by_severity": "high 1",
              "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": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "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": 335,
              "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": 15
            },
            "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": "at_risk",
        "name": "AI Readiness",
        "value": 46,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.8,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "80 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 80,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 48,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "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": ".eslintrc.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 17589,
              "source_files_sampled": 4,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/4 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 4,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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",
    "npm package 'cssjanus' points at a different repository (https://gerrit.wikimedia.org/g/mediawiki/libs/node-cssjanus); excluded from ecosystem scoring"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T14:26:18.334083Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/wikimedia/node-cssjanus.svg",
  "full_name": "wikimedia/node-cssjanus",
  "license_state": "standard",
  "license_spdx": "Apache-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.