Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-22 22:23 UTC

beaugunderson / ip-address

💻 a library for parsing and manipulating IPv4 and IPv6 addresses in JavaScript

TypeScriptMIT★ 612 stars⑂ 80 forkssince Mar 2011View on GitHub ↗

beaugunderson/ip-address holds a health index of 33 out of 100, placing it in the At risk band. It scores highest on Engineering Quality (79/100) and lowest on Security (43/100). It was last updated 24 days ago. A single contributor accounts for most of its recent work.

33
overall / 100
At risk

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

33
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

High-Risk Jurisdiction Policy applies a 50% multiplier to weighted overall health and gives it an At risk ceiling of 49.

Ownership

Beau GundersonPersonal account
444 followers356 public repossince Mar 2009@canvas-medical

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
npmip-address10.2.0367,966,3795482 days agoipipv4ipv6addresscidrsubnetnetmaskvalidatevalidationparsearpabigintbrowser

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

66Moderate · 22% of overall
How it's scored
28.8/36Push recency — last push 24 days ago
3.5/36Commit cadence — 5/52 weeks with commits
13.5/18Commit volume — 31 commits in the last year
10/10OpenSSF Scorecard: Maintained — 25 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year31
human_commit_share0.98
days_since_last_push24
active_weeks_last_year5
How it's scored
16.2/27Ships releases — 54 version tags (no GitHub releases)
36/36Release recency — latest release 82 days ago
19.8/27Release cadence — a release every ~105.4 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count54
latest_release_tagv10.2.0
releases_from_tagsyes
days_since_latest_release82
mean_days_between_releases105.4
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

75Good · 18% of overall
How it's scored
45.2/60Stars — 612 stars
15.8/25Forks — 80 forks
5.8/15Watchers — 12 watchers
Inputs used
forks80
stars612
watchers12
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
0/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateno
How it's scored
80/80Monthly downloads — 367,966,379 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesip-address
dependents
ecosystemsnpm
total_downloads
monthly_downloads367,966,379
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

63Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
1.6/22.5Commit distribution — top contributor authored 93% of commits
13.5/13.5Contributor breadth — 18 contributors
10/10OpenSSF Scorecard: Contributors — project has 16 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled18
top_contributor_share0.931
How it's scored
44.4/46.8Issue resolution — 95% of issues closed
20.4/38.3PR acceptance — 55/103 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 1/30 approved changesets -- score normalized to 0
Inputs used
merged_prs55
open_issues5
closed_issues96
issue_closed_ratio0.95
closed_unmerged_prs48
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
19/25Owner reach — 444 followers of beaugunderson
25/25Track record — 356 public repos, account ~17 yr old
Inputs used
followers444
owner_typeUser
is_verified
owner_loginbeaugunderson
public_repos356
account_age_days6,343
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 82 days ago
20/20Version history — 54 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesip-address
ecosystemsnpm
any_deprecatedno
min_days_since_publish82

Engineering Quality

Are baseline engineering and documentation practices in place?

79Good · 20% of overall
How it's scored
24/24CI workflows — 1 workflow(s)
24/24Tests present
16/16Linter config — .eslintrc, .eslintrc.js
0/9.6Pre-commit hooks
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 14 out of 15 merged PRs checked by a CI test -- score normalized to 9
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno
How it's scored
30/30README
0/25Documentation directory
15/15Documentation / homepage site — https://www.npmjs.com/package/ip-address
10/10Repository description
10/10Topics — 15 topics
10/10Wiki
Inputs used
topicsipv4, ipv6, javascript, address, arpa, bigint, browser, cidr, ip, netmask, parse, subnet, typescript, validate, validation
has_wikiyes
homepagehttps://www.npmjs.com/package/ip-address
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

43At risk · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — no data
2.2/2.5CI-Tests — 14 out of 15 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 16 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 25 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — no data
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
6.8/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
1.5/7.5Vulnerabilities — 8 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate5.8
high_risk_jurisdiction_cap49
high_risk_jurisdiction_multiplier50
security_posture_after_multiplier29
security_posture_before_jurisdiction58
Excluded from scoring (no data or not applicable): branch_protection, packaging, signed_releases. Remaining weights renormalized. High-Risk Jurisdiction Policy applies a 50% multiplier and gives Security posture an At risk ceiling of 49.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
0/25Indirect dependencies free of known advisories — transitive set not separable from development and test dependencies in this scope
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories10
affected_packages7
assessed_packages425
unassessed_packages0
affected_by_severityhigh 5, moderate 1, low 1
direct_affected_packages0
Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 425 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.

AI Readiness

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.

54Moderate · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
15.2/40Legible commit history — 28 of 98 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.286
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
22/22Automated tests
11/11Lint / format config — .eslintrc, .eslintrc.js
11/11Static type checking — tsconfig.json
10/10Reproducible environment — lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
8/8Automated maintenance — 2 of the last 100 commits are automated dependency updates
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configyes
typecheck_configstsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0.02
How it's scored
45/45Type-checkable code — TypeScript (statically typed)
55/55Manageable file sizes — 0/15 source files over 60KB
Inputs used
primary_languageTypeScript
largest_source_bytes43,711
source_files_sampled15
oversized_source_files0

Key facts

612GitHub stars
18contributors
31commits, last 12 months
24days since last push
54releases
1bus factor
5open issues
npmpackage ecosystems

Data collection warnings

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

More detail

Star and fork history 0 ★ / 80 ⇿
0Stars
80Forks
54Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

0204060807642011-042018-112026-06
Major 7Minor 18Patch 26

Each point covers 14 days.

OpenSSF Scorecard 5.8 / 10
5.8aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-22 22:22 UTC

10Binary-Artifactsno binaries found in the repo
n/aBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
9CI-Tests14 out of 15 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/30 approved changesets -- score normalized to 0
10Contributorsproject has 16 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained25 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
9Token-Permissionsdetected GitHub workflow tokens with excessive permissions
2Vulnerabilities8 existing vulnerabilities detected
All dependencies 425

Full resolved dependency set from the GitHub dependency graph: 0 direct and 425 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
npm@aashutoshrathi/word-wrap1.2.6indirect
npm@bcoe/v8-coverage1.0.2indirect
npm@esbuild/aix-ppc640.27.7indirect
npm@esbuild/android-arm0.27.7indirect
npm@esbuild/android-arm640.27.7indirect
npm@esbuild/android-x640.27.7indirect
npm@esbuild/darwin-arm640.27.7indirect
npm@esbuild/darwin-x640.27.7indirect
npm@esbuild/freebsd-arm640.27.7indirect
npm@esbuild/freebsd-x640.27.7indirect
npm@esbuild/linux-arm0.27.7indirect
npm@esbuild/linux-arm640.27.7indirect
npm@esbuild/linux-ia320.27.7indirect
npm@esbuild/linux-loong640.27.7indirect
npm@esbuild/linux-mips64el0.27.7indirect
npm@esbuild/linux-ppc640.27.7indirect
npm@esbuild/linux-riscv640.27.7indirect
npm@esbuild/linux-s390x0.27.7indirect
npm@esbuild/linux-x640.27.7indirect
npm@esbuild/netbsd-arm640.27.7indirect
npm@esbuild/netbsd-x640.27.7indirect
npm@esbuild/openbsd-arm640.27.7indirect
npm@esbuild/openbsd-x640.27.7indirect
npm@esbuild/openharmony-arm640.27.7indirect
npm@esbuild/sunos-x640.27.7indirect
npm@esbuild/win32-arm640.27.7indirect
npm@esbuild/win32-ia320.27.7indirect
npm@esbuild/win32-x640.27.7indirect
npm@eslint-community/eslint-utils4.9.1indirect
npm@eslint-community/regexpp4.12.2indirect
npm@eslint/config-array0.18.0indirect
npm@eslint/core0.6.0indirect
npm@eslint/core1.2.1indirect
npm@eslint/eslintrc2.1.4indirect
npm@eslint/eslintrc3.1.0indirect
npm@eslint/js8.57.1indirect
npm@eslint/js9.11.1indirect
npm@eslint/object-schema2.1.4indirect
npm@eslint/plugin-kit0.7.1indirect
npm@gerrit0/mini-shiki3.23.0indirect
npm@humanwhocodes/config-array0.13.0indirect
npm@humanwhocodes/module-importer1.0.1indirect
npm@humanwhocodes/object-schema2.0.3indirect
npm@humanwhocodes/retry0.3.0indirect
npm@isaacs/cliui8.0.2indirect
npm@istanbuljs/schema0.1.3indirect
npm@jridgewell/resolve-uri3.1.1indirect
npm@jridgewell/sourcemap-codec1.4.15indirect
npm@jridgewell/trace-mapping0.3.25indirect
npm@nodelib/fs.scandir2.1.5indirect
npm@nodelib/fs.stat2.0.5indirect
npm@nodelib/fs.walk1.2.8indirect
npm@pkgjs/parseargs0.11.0indirect
npm@pkgr/core0.2.9indirect
npm@rtsao/scc1.1.0indirect
npm@shikijs/engine-oniguruma3.23.0indirect
npm@shikijs/langs3.23.0indirect
npm@shikijs/themes3.23.0indirect
npm@shikijs/types3.23.0indirect
npm@shikijs/vscode-textmate10.0.2indirect
npm@types/chai5.2.3indirect
npm@types/deep-eql4.0.2indirect
npm@types/estree1.0.6indirect
npm@types/hast3.0.4indirect
npm@types/istanbul-lib-coverage2.0.6indirect
npm@types/json-schema7.0.15indirect
npm@types/json50.0.29indirect
npm@types/mocha10.0.10indirect
npm@types/unist2.0.8indirect
npm@typescript-eslint/eslint-plugin8.59.1indirect
npm@typescript-eslint/parser8.59.1indirect
npm@typescript-eslint/project-service8.59.1indirect
npm@typescript-eslint/scope-manager8.59.1indirect
npm@typescript-eslint/tsconfig-utils8.59.1indirect
npm@typescript-eslint/type-utils8.59.1indirect
npm@typescript-eslint/types8.59.1indirect
npm@typescript-eslint/typescript-estree8.59.1indirect
npm@typescript-eslint/utils8.59.1indirect
npm@typescript-eslint/visitor-keys8.59.1indirect
npm@ungap/structured-clone1.2.0indirect
npmacorn8.16.0indirect
npmacorn-jsx5.3.2indirect
npmacorn-loose8.5.2indirect
npmacorn-walk8.3.5indirect
npmajv6.15.0indirect
npmansi-regex5.0.1indirect
npmansi-regex6.2.2indirect
npmansi-styles4.3.0indirect
npmansi-styles6.2.3indirect
npmargparse2.0.1indirect
npmaria-query5.3.2indirect
npmarray-buffer-byte-length1.0.2indirect
npmarray-includes3.1.9indirect
npmarray.prototype.findlastindex1.2.6indirect
npmarray.prototype.flat1.3.3indirect
npmarray.prototype.flatmap1.3.3indirect
npmarray.prototype.tosorted1.1.2indirect
npmarraybuffer.prototype.slice1.0.4indirect
npmassertion-error2.0.1indirect
npmast-types-flow0.0.8indirect
npmasync-function1.0.0indirect
npmavailable-typed-arrays1.0.7indirect
npmaxe-core4.10.0indirect
npmaxobject-query4.1.0indirect
npmbalanced-match1.0.2indirect
npmbalanced-match4.0.4indirect
npmbrace-expansion1.1.14indirect
npmbrace-expansion2.1.0indirect
npmbrace-expansion5.0.5indirect
npmbrowser-stdout1.3.1indirect
npmbuffer-from1.1.2indirect
npmc811.0.0indirect
npmcall-bind1.0.9indirect
npmcall-bind-apply-helpers1.0.2indirect
npmcall-bound1.0.4indirect
npmcallsites3.1.0indirect
npmcamelcase6.3.0indirect
npmchai6.2.2indirect
npmchalk4.1.2indirect
npmchokidar4.0.3indirect
npmcliui8.0.1indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.4indirect
npmcommander14.0.3indirect
npmconcat-map0.0.1indirect
npmconfusing-browser-globals1.0.11indirect
npmconsole-grid2.2.4indirect
npmconvert-source-map2.0.0indirect
npmcross-spawn7.0.6indirect
npmdamerau-levenshtein1.0.8indirect
npmdata-view-buffer1.0.2indirect
npmdata-view-byte-length1.0.2indirect
npmdata-view-byte-offset1.0.1indirect
npmdebug3.2.7indirect
npmdebug4.4.3indirect
npmdecamelize4.0.0indirect
npmdeep-is0.1.4indirect
npmdefine-data-property1.1.4indirect
npmdefine-properties1.2.1indirect
npmdiff8.0.4indirect
npmdoctrine2.1.0indirect
npmdoctrine3.0.0indirect
npmdunder-proto1.0.1indirect
npmeastasianwidth0.2.0indirect
npmeight-colors1.3.3indirect
npmemoji-regex8.0.0indirect
npmemoji-regex9.2.2indirect
npmentities4.5.0indirect
npmes-abstract1.24.2indirect
npmes-define-property1.0.1indirect
npmes-errors1.3.0indirect
npmes-iterator-helpers1.0.19indirect
npmes-object-atoms1.1.1indirect
npmes-set-tostringtag2.1.0indirect
npmes-shim-unscopables1.1.0indirect
npmes-to-primitive1.3.0indirect
npmesbuild0.27.7indirect
npmescalade3.2.0indirect
npmescape-string-regexp4.0.0indirect
npmeslint8.57.1indirect
npmeslint9.11.1indirect
npmeslint-config-airbnb19.0.4indirect
npmeslint-config-airbnb-base15.0.0indirect
npmeslint-config-prettier10.1.8indirect
npmeslint-import-resolver-node0.3.9indirect
npmeslint-module-utils2.12.1indirect
npmeslint-plugin-filenames1.3.2indirect
npmeslint-plugin-import2.32.0indirect
npmeslint-plugin-jsx-a11y6.10.2indirect
npmeslint-plugin-prettier5.5.5indirect
npmeslint-plugin-react7.33.2indirect
npmeslint-plugin-react-hooks4.6.0indirect
npmeslint-plugin-sort-imports-es6-autofix0.6.0indirect
npmeslint-scope7.2.2indirect
npmeslint-scope8.1.0indirect
npmeslint-visitor-keys3.4.3indirect
npmeslint-visitor-keys4.1.0indirect
npmeslint-visitor-keys5.0.1indirect
npmeslint_d14.0.4indirect
npmespree10.2.0indirect
npmespree9.6.1indirect
npmesquery1.5.0indirect
npmesrecurse4.3.0indirect
npmestraverse5.3.0indirect
npmesutils2.0.3indirect
npmfast-deep-equal3.1.3indirect
npmfast-diff1.3.0indirect
npmfast-json-stable-stringify2.1.0indirect
npmfast-levenshtein2.0.6indirect
npmfastq1.15.0indirect
npmfdir6.5.0indirect
npmfile-entry-cache6.0.1indirect
npmfile-entry-cache8.0.0indirect
npmfind-up5.0.0indirect
npmflat5.0.2indirect
npmflat-cache3.1.0indirect
npmflat-cache4.0.1indirect
npmflatted3.4.2indirect
npmfor-each0.3.5indirect
npmforeground-child3.3.1indirect
npmforeground-child4.0.3indirect
npmfs.realpath1.0.0indirect
npmfsevents2.3.3indirect
npmfunction-bind1.1.2indirect
npmfunction.prototype.name1.1.8indirect
npmfunctions-have-names1.2.3indirect
npmgenerator-function2.0.1indirect
npmget-caller-file2.0.5indirect
npmget-intrinsic1.3.0indirect
npmget-proto1.0.1indirect
npmget-symbol-description1.1.0indirect
npmget-tsconfig4.8.1indirect
npmglob10.5.0indirect
npmglob13.0.6indirect
npmglob7.2.3indirect
npmglob-parent6.0.2indirect
npmglobals13.22.0indirect
npmglobals13.24.0indirect
npmglobals14.0.0indirect
npmglobalthis1.0.4indirect
npmgopd1.2.0indirect
npmgraphemer1.4.0indirect
npmhas-bigints1.0.2indirect
npmhas-flag4.0.0indirect
npmhas-property-descriptors1.0.2indirect
npmhas-proto1.2.0indirect
npmhas-symbols1.1.0indirect
npmhas-tostringtag1.0.2indirect
npmhasown2.0.2indirect
npmhe1.2.0indirect
npmhtml-escaper2.0.2indirect
npmignore5.3.2indirect
npmignore7.0.5indirect
npmimport-fresh3.3.0indirect
npmimurmurhash0.1.4indirect
npminflight1.0.6indirect
npminherits2.0.4indirect
npminternal-slot1.1.0indirect
npmis-array-buffer3.0.5indirect
npmis-async-function2.1.1indirect
npmis-bigint1.1.0indirect
npmis-boolean-object1.2.2indirect
npmis-callable1.2.7indirect
npmis-core-module2.16.1indirect
npmis-data-view1.0.2indirect
npmis-date-object1.1.0indirect
npmis-extglob2.1.1indirect
npmis-finalizationregistry1.1.1indirect
npmis-fullwidth-code-point3.0.0indirect
npmis-generator-function1.1.2indirect
npmis-glob4.0.3indirect
npmis-map2.0.3indirect
npmis-negative-zero2.0.3indirect
npmis-number-object1.1.1indirect
npmis-path-inside3.0.3indirect
npmis-plain-obj2.1.0indirect
npmis-regex1.2.1indirect
npmis-set2.0.3indirect
npmis-shared-array-buffer1.0.4indirect
npmis-string1.1.1indirect
npmis-symbol1.1.1indirect
npmis-typed-array1.1.15indirect
npmis-unicode-supported0.1.0indirect
npmis-weakmap2.0.2indirect
npmis-weakref1.1.1indirect
npmis-weakset2.0.4indirect
npmisarray2.0.5indirect
npmisexe2.0.0indirect
npmistanbul-lib-coverage3.2.2indirect
npmistanbul-lib-report3.0.1indirect
npmistanbul-reports3.2.0indirect
npmiterator.prototype1.1.2indirect
npmjackspeak3.4.3indirect
npmjs-tokens4.0.0indirect
npmjs-yaml4.1.1indirect
npmjson-buffer3.0.1indirect
npmjson-schema-traverse0.4.1indirect
npmjson-stable-stringify-without-jsonify1.0.1indirect
npmjson51.0.2indirect
npmjsx-ast-utils3.3.5indirect
npmkeyv4.5.4indirect
npmlanguage-subtag-registry0.3.23indirect
npmlanguage-tags1.0.9indirect
npmlevn0.4.1indirect
npmlinkify-it5.0.0indirect
npmlocate-path6.0.0indirect
npmlodash.camelcase4.3.0indirect
npmlodash.kebabcase4.1.1indirect
npmlodash.merge4.6.2indirect
npmlodash.snakecase4.1.1indirect
npmlodash.upperfirst4.3.1indirect
npmlog-symbols4.1.0indirect
npmloose-envify1.4.0indirect
npmlru-cache10.4.3indirect
npmlru-cache11.2.6indirect
npmlunr2.3.9indirect
npmlz-utils2.1.1indirect
npmmake-dir4.0.0indirect
npmmarkdown-it14.1.1indirect
npmmath-intrinsics1.1.0indirect
npmmdurl2.0.0indirect
npmminimatch10.2.4indirect
npmminimatch10.2.5indirect
npmminimatch3.1.5indirect
npmminimatch9.0.9indirect
npmminimist1.2.8indirect
npmminipass7.1.3indirect
npmmocha11.7.5indirect
npmmonocart-coverage-reports2.12.11indirect
npmmonocart-locator1.0.3indirect
npmms2.1.3indirect
npmnatural-compare1.4.0indirect
npmobject-assign4.1.1indirect
npmobject-inspect1.13.4indirect
npmobject-keys1.1.1indirect
npmobject.assign4.1.7indirect
npmobject.entries1.1.7indirect
npmobject.fromentries2.0.8indirect
npmobject.groupby1.0.3indirect
npmobject.hasown1.1.3indirect
npmobject.values1.2.1indirect
npmonce1.4.0indirect
npmoptionator0.9.3indirect
npmown-keys1.0.1indirect
npmp-limit3.1.0indirect
npmp-locate5.0.0indirect
npmpackage-json-from-dist1.0.1indirect
npmparent-module1.0.1indirect
npmpath-exists4.0.0indirect
npmpath-is-absolute1.0.1indirect
npmpath-key3.1.1indirect
npmpath-parse1.0.7indirect
npmpath-scurry1.11.1indirect
npmpath-scurry2.0.2indirect
npmpicocolors1.1.1indirect
npmpicomatch4.0.4indirect
npmpossible-typed-array-names1.0.0indirect
npmprelude-ls1.2.1indirect
npmprettier3.8.3indirect
npmprettier-linter-helpers1.0.1indirect
npmprop-types15.8.1indirect
npmpunycode2.3.1indirect
npmpunycode.js2.3.1indirect
npmqueue-microtask1.2.3indirect
npmreact-is16.13.1indirect
npmreaddirp4.1.2indirect
npmreflect.getprototypeof1.0.10indirect
npmregexp.prototype.flags1.5.4indirect
npmrequire-directory2.1.1indirect
npmresolve1.22.6indirect
npmresolve2.0.0-next.4indirect
npmresolve-from4.0.0indirect
npmresolve-pkg-maps1.0.0indirect
npmreusify1.0.4indirect
npmrimraf3.0.2indirect
npmrun-parallel1.2.0indirect
npmsafe-array-concat1.1.4indirect
npmsafe-push-apply1.0.0indirect
npmsafe-regex-test1.1.0indirect
npmsemver6.3.1indirect
npmsemver7.6.2indirect
npmsemver7.7.4indirect
npmserialize-javascript7.0.5indirect
npmset-function-length1.2.2indirect
npmset-function-name2.0.2indirect
npmset-proto1.0.0indirect
npmshebang-command2.0.0indirect
npmshebang-regex3.0.0indirect
npmside-channel1.1.0indirect
npmside-channel-list1.0.1indirect
npmside-channel-map1.0.1indirect
npmside-channel-weakmap1.0.2indirect
npmsignal-exit4.1.0indirect
npmsource-map0.6.1indirect
npmsource-map-support0.5.21indirect
npmstop-iteration-iterator1.1.0indirect
npmstring-width4.2.3indirect
npmstring-width5.1.2indirect
npmstring.prototype.includes2.0.1indirect
npmstring.prototype.matchall4.0.10indirect
npmstring.prototype.trim1.2.10indirect
npmstring.prototype.trimend1.0.9indirect
npmstring.prototype.trimstart1.0.8indirect
npmstrip-ansi6.0.1indirect
npmstrip-ansi7.2.0indirect
npmstrip-bom3.0.0indirect
npmstrip-json-comments3.1.1indirect
npmsupports-color7.2.0indirect
npmsupports-color8.1.1indirect
npmsupports-color9.4.0indirect
npmsupports-preserve-symlinks-flag1.0.0indirect
npmsynckit0.11.12indirect
npmtest-exclude8.0.0indirect
npmtext-table0.2.0indirect
npmtinyglobby0.2.16indirect
npmts-api-utils2.5.0indirect
npmtsconfig-paths3.15.0indirect
npmtsx4.21.0indirect
npmtype-check0.4.0indirect
npmtype-fest0.20.2indirect
npmtyped-array-buffer1.0.3indirect
npmtyped-array-byte-length1.0.3indirect
npmtyped-array-byte-offset1.0.4indirect
npmtyped-array-length1.0.7indirect
npmtypedoc0.28.19indirect
npmtypescript5.5.4indirect
npmuc.micro2.1.0indirect
npmunbox-primitive1.1.0indirect
npmuri-js4.4.1indirect
npmv8-to-istanbul9.3.0indirect
npmwhich2.0.2indirect
npmwhich-boxed-primitive1.1.1indirect
npmwhich-builtin-type1.2.1indirect
npmwhich-collection1.0.2indirect
npmwhich-typed-array1.1.20indirect
npmworkerpool9.3.4indirect
npmwrap-ansi7.0.0indirect
npmwrap-ansi8.1.0indirect
npmwrappy1.0.2indirect
npmy18n5.0.8indirect
npmyaml2.8.3indirect
npmyargs17.7.2indirect
npmyargs-parser21.1.1indirect
npmyargs-unparser2.0.0indirect
npmyocto-queue0.1.0indirect
Dependency advisories 7

This repository publishes no package the index resolves, so its own dependency graph was assessed — 425 packages, which also include development and test pins that never ship: 7 carry known advisories, of which 0 are direct.

PackageVersionRelationSeverityAdvisoriesFixed in
brace-expansion1.1.14indirecthigh15.0.7
brace-expansion2.1.0indirecthigh15.0.7
brace-expansion5.0.5indirecthigh25.0.7
js-yaml4.1.1indirecthigh24.3.0
linkify-it5.0.0indirecthigh25.0.2
markdown-it14.1.1indirectmoderate114.2.0
esbuild0.27.7indirectlow10.28.1

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "ipv4",
        "ipv6",
        "javascript",
        "address",
        "arpa",
        "bigint",
        "browser",
        "cidr",
        "ip",
        "netmask",
        "parse",
        "subnet",
        "typescript",
        "validate",
        "validation"
      ],
      "is_fork": false,
      "size_kb": 2910,
      "has_wiki": true,
      "homepage": "https://www.npmjs.com/package/ip-address",
      "languages": {
        "Shell": 62,
        "JavaScript": 2614,
        "TypeScript": 146176
      },
      "pushed_at": "2026-06-28T18:49:17Z",
      "created_at": "2011-03-18T06:49:04Z",
      "owner_type": "User",
      "updated_at": "2026-06-16T09:04:27Z",
      "description": "💻 a library for parsing and manipulating IPv4 and IPv6 addresses in JavaScript",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://beaugunderson.com/",
      "name": "Beau Gunderson",
      "type": "User",
      "login": "beaugunderson",
      "company": "@canvas-medical",
      "location": "Earth",
      "followers": 444,
      "avatar_url": "https://avatars.githubusercontent.com/u/61791?v=4",
      "created_at": "2009-03-09T23:50:49Z",
      "is_verified": null,
      "public_repos": 356,
      "account_age_days": 6343
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v10.2.0",
          "kind": "minor",
          "published_at": "2026-05-01T06:32:55Z"
        },
        {
          "tag": "v10.1.1",
          "kind": "patch",
          "published_at": "2026-04-27T21:49:32Z"
        },
        {
          "tag": "v10.1.0",
          "kind": "minor",
          "published_at": "2025-11-08T19:48:24Z"
        },
        {
          "tag": "v10.0.1",
          "kind": "patch",
          "published_at": "2024-10-10T20:34:22Z"
        },
        {
          "tag": "v10.0.0",
          "kind": "major",
          "published_at": "2024-10-04T02:13:37Z"
        },
        {
          "tag": "v9.1.0-0",
          "kind": "prerelease",
          "published_at": "2024-10-01T19:10:10Z"
        },
        {
          "tag": "v9.0.5",
          "kind": "patch",
          "published_at": "2023-09-25T17:53:15Z"
        },
        {
          "tag": "v9.0.4",
          "kind": "patch",
          "published_at": "2023-09-25T17:40:32Z"
        },
        {
          "tag": "v9.0.3",
          "kind": "patch",
          "published_at": "2023-09-25T17:39:40Z"
        },
        {
          "tag": "v9.0.2",
          "kind": "patch",
          "published_at": "2023-09-25T17:38:17Z"
        },
        {
          "tag": "v9.0.1",
          "kind": "patch",
          "published_at": "2023-09-25T17:30:32Z"
        },
        {
          "tag": "v9.0.0",
          "kind": "major",
          "published_at": "2023-09-25T08:17:11Z"
        },
        {
          "tag": "v8.1.0",
          "kind": "minor",
          "published_at": "2021-07-19T19:17:59Z"
        },
        {
          "tag": "v8.0.0",
          "kind": "major",
          "published_at": "2021-06-20T02:48:48Z"
        },
        {
          "tag": "v7.1.0",
          "kind": "minor",
          "published_at": "2020-10-26T19:18:23Z"
        },
        {
          "tag": "v7.0.1",
          "kind": "patch",
          "published_at": "2020-10-03T13:52:06Z"
        },
        {
          "tag": "v7.0.0",
          "kind": "major",
          "published_at": "2020-10-02T18:38:34Z"
        },
        {
          "tag": "v7.0.0-beta.1",
          "kind": "prerelease",
          "published_at": "2020-09-24T18:06:43Z"
        },
        {
          "tag": "v7.0.0-beta.0",
          "kind": "prerelease",
          "published_at": "2020-09-24T16:53:43Z"
        },
        {
          "tag": "v6.4.0",
          "kind": "minor",
          "published_at": "2020-09-13T20:53:39Z"
        },
        {
          "tag": "v6.3.0",
          "kind": "minor",
          "published_at": "2020-04-01T19:51:35Z"
        },
        {
          "tag": "v6.2.0",
          "kind": "minor",
          "published_at": "2019-12-30T01:22:20Z"
        },
        {
          "tag": "v6.1.0",
          "kind": "minor",
          "published_at": "2019-07-29T21:01:12Z"
        },
        {
          "tag": "v6.0.0",
          "kind": "major",
          "published_at": "2019-07-29T20:44:52Z"
        },
        {
          "tag": "v5.9.4",
          "kind": "patch",
          "published_at": "2019-07-26T18:53:43Z"
        },
        {
          "tag": "v5.9.3",
          "kind": "patch",
          "published_at": "2019-07-26T18:45:58Z"
        },
        {
          "tag": "v5.9.2",
          "kind": "patch",
          "published_at": "2019-06-05T18:34:16Z"
        },
        {
          "tag": "v5.9.1",
          "kind": "patch",
          "published_at": "2019-06-05T18:30:43Z"
        },
        {
          "tag": "v5.9.0",
          "kind": "minor",
          "published_at": "2019-03-27T22:05:59Z"
        },
        {
          "tag": "v5.8.9",
          "kind": "patch",
          "published_at": "2017-12-06T18:51:25Z"
        },
        {
          "tag": "v5.8.8",
          "kind": "patch",
          "published_at": "2017-04-10T00:26:01Z"
        },
        {
          "tag": "v5.8.7",
          "kind": "patch",
          "published_at": "2017-04-09T23:45:46Z"
        },
        {
          "tag": "v5.8.6",
          "kind": "patch",
          "published_at": "2016-12-13T21:31:44Z"
        },
        {
          "tag": "v5.8.5",
          "kind": "patch",
          "published_at": "2016-12-13T21:30:10Z"
        },
        {
          "tag": "v5.8.4",
          "kind": "patch",
          "published_at": "2016-12-09T03:05:05Z"
        },
        {
          "tag": "v5.8.3",
          "kind": "patch",
          "published_at": "2016-12-08T23:46:38Z"
        },
        {
          "tag": "v5.8.2",
          "kind": "patch",
          "published_at": "2016-07-25T23:06:03Z"
        },
        {
          "tag": "v5.8.1",
          "kind": "patch",
          "published_at": "2016-07-25T23:05:36Z"
        },
        {
          "tag": "v5.8.0",
          "kind": "minor",
          "published_at": "2016-02-02T23:12:41Z"
        },
        {
          "tag": "v5.7.0",
          "kind": "minor",
          "published_at": "2016-01-22T20:11:06Z"
        },
        {
          "tag": "v5.6.0",
          "kind": "minor",
          "published_at": "2016-01-22T19:33:43Z"
        },
        {
          "tag": "v5.5.0",
          "kind": "minor",
          "published_at": "2016-01-21T21:48:01Z"
        },
        {
          "tag": "v5.4.1",
          "kind": "patch",
          "published_at": "2016-01-21T21:42:40Z"
        },
        {
          "tag": "v5.4.0",
          "kind": "minor",
          "published_at": "2016-01-21T21:40:23Z"
        },
        {
          "tag": "v5.3.0",
          "kind": "minor",
          "published_at": "2016-01-21T21:28:49Z"
        },
        {
          "tag": "v5.2.0",
          "kind": "minor",
          "published_at": "2016-01-20T20:10:53Z"
        },
        {
          "tag": "v3.1.1",
          "kind": "patch",
          "published_at": "2013-12-21T21:28:57Z"
        },
        {
          "tag": "v3.1.0",
          "kind": "minor",
          "published_at": "2013-12-21T21:23:45Z"
        },
        {
          "tag": "v2.0.2",
          "kind": "patch",
          "published_at": "2012-04-12T00:52:43Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2012-04-06T21:44:26Z"
        },
        {
          "tag": "2.0.0",
          "kind": "major",
          "published_at": "2012-04-06T18:42:05Z"
        },
        {
          "tag": "1.1.0",
          "kind": "minor",
          "published_at": "2012-02-29T19:33:39Z"
        },
        {
          "tag": "1.0.0",
          "kind": "major",
          "published_at": "2011-08-15T08:43:23Z"
        },
        {
          "tag": "0.0.1",
          "kind": "patch",
          "published_at": "2011-04-27T21:39:13Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e82a6812ac9d16f1300d3c2051fe2cc88c5d9161",
          "body": "Drops NPM_TOKEN — auth now comes from the GitHub Actions OIDC token. Upgrades npm in CI to >=11.5.1 (required for trusted publishing); Node 22 ships npm 10.x. Configure the trusted publisher in the package's npmjs.com settings before the next tag push.",
          "is_bot": false,
          "headline": "Switch release workflow to npm trusted publishing (OIDC)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-23T03:50:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2dce80f10b1492c787155d3d0cbd4a22e2ad6c00",
          "body": "Adds a Release workflow that triggers on v* tag pushes: runs tests, npm publishes with provenance, and creates a GitHub release. Requires NPM_TOKEN repo secret.",
          "is_bot": false,
          "headline": "Publish + tag automation on v* tag push (closes #205)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-23T02:04:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80fccaae984618f35dc941efab55cf2440ab37e8",
          "body": null,
          "is_bot": false,
          "headline": "10.2.0",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T06:32:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abaeb4d817cab16d3a1a78abd249d1f116bd302e",
          "body": "It is always assigned in the constructor, so the optional `?` was\nforcing callers into needless nil-checks (and untestable branches).\nMatches the existing IPv6 typing.",
          "is_bot": false,
          "headline": "Type Address4.addressMinusSuffix as non-nilable (closes #143)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T06:31:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2878c294e1216f9a0b69ad1d3c57a3790a7d5e8e",
          "body": "to4() built the result via Address4.fromHex(), which has no subnet, so\nthe v4 prefix that was embedded in a v4-mapped v6 address (e.g. /120 on\n::ffff:192.168.0.1) was silently dropped to /32.\n\nDerive the v4 prefix from the v6 mask: subnetMask - 96 when the mask\ncovers the trailing 32 bits, /32 otherwise. parse4in6 seeds the\nembedded address4 the same way. to4in6() and groupForV6() switched to\ncorrectForm() so the rendered string/HTML doesn't carry the new /n\nsuffix.",
          "is_bot": false,
          "headline": "Preserve subnet prefix through Address6.to4() (closes #123) (#203)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T06:28:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "586666ee9e666464071761d7a453715f98b6caee",
          "body": "The URL regex was unanchored at the end, so fromURL would silently\ntruncate trailing non-hex characters and return a partial address —\ne.g. `http://[1234:5678::abcdxyz]` parsed as `1234:5678::abcd`.\n\nAnchor both URL regexes, pair the brackets so `[hex]` and bare `hex`\nare exclusive alternatives, and accept `.` for v4-in-v6 addresses.\nStrip the protocol prefix up front and route every non-port URL\nthrough a single regex branch.",
          "is_bot": false,
          "headline": "Reject trailing junk in Address6.fromURL (closes #158) (#202)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T06:19:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80bc76eddf63df38db60defd5004bea919adf7ac",
          "body": "Address4.fromBigInt, Address6.fromBigInt, Address4.fromHex, and\nAddress4.fromInteger previously masked invalid input: out-of-range\nBigInts truncated, short hex strings zero-filled, and NaN/non-integer\nnumbers slipped through to produce surprising addresses. They now\nthrow AddressError with their own messages.\n\nThe two internal Address4.fromHex callers in ipv6.ts (to4() and\ninspectTeredo()) pad their hex strings explicitly since fromHex no\nlonger zero-fills short input.\n\nCloses #69.",
          "is_bot": false,
          "headline": "Validate static factories instead of silently overflowing (#201)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T06:17:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98927be9ef0c09f8ffcaf30b297405c9eff0a520",
          "body": "Document that isValid() returns true for host-with-subnet strings like\n192.168.1.5/24 (unlike Python's strict ipaddress.ip_network), and show\nthe strict network-address check pattern in the README examples.",
          "is_bot": false,
          "headline": "Clarify isValid() accepts CIDRs with host bits set (#81)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T06:03:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0eb0732d6ac3088daa1106f4933eade41fd364a",
          "body": "* Fix getScope() and add ULA/6to4/Documentation/NAT64 to getType() (closes #122)\n\nThe 4-bit scope nibble (RFC 4291 §2.7) only applies to multicast\naddresses, but getScope() read it for every address. As a result\nfe80::… returned 'Reserved' (nibble 0) and 2002:: returned 'Link\nlocal' (nibble 2). Now \n[…]\nt scope 1) is only defined for\nloopback transmission of multicast. RFC 4291 §2.5.3 explicitly\nstates that the unicast loopback address ::1 is \"treated as having\nLink-Local scope\".\n\n* Regenerate README",
          "is_bot": false,
          "headline": "Fix getScope() and broaden getType() classification (closes #122) (#200)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T05:52:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ec52105c87179129b9f091e97581e87b007824c7",
          "body": "Returns the network address with the CIDR suffix preserved as a string,\ne.g. `205.65.224.110/29` → `205.65.224.104/29`. Closes the gap raised\nin #39: previously callers had to assemble the result by hand\n(`${addr.startAddress().correctForm()}/${addr.subnetMask}`). Available\non both Address4 and Address6.",
          "is_bot": false,
          "headline": "Add networkForm() for CIDR network-address strings (#199)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T05:42:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9443a72215b21a1e692be75cd3e18e8aa2262cb",
          "body": "… (#198)\n\nCloses #62. The existing `is4()` / `v4` flag is set during parse only when\nthe input is written in v4-in-v6 dotted-quad notation, so `::ffff:127.0.0.1`\nreturns true while the equivalent `::ffff:7f00:1` returns false. That's a\nnotation-level flag, not a property of the underlying address.\n\n\n[…]\nching\nthe shape of the existing `isTeredo()` / `is6to4()` / `isULA()` helpers, and\nclarify the JSDoc on `is4()` to describe it as a notation flag and point at\n`isMapped4()` for the bit-level question.",
          "is_bot": false,
          "headline": "Add isMapped4() predicate for IPv4-mapped IPv6 addresses (closes #62)…",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T05:33:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f01d74267ed39f84521157e5f199edade9809f1e",
          "body": "…etc.) (#197)\n\nAdds isPrivate / isLoopback / isLinkLocal / isUnspecified / isBroadcast\n/ isCGNAT to Address4, and isULA / isUnspecified / isDocumentation to\nAddress6. Closes #53 (which asked for isPrivate and ULA detection).\n\nThe README previously advertised ULA support but no isULA() existed —\nthis fixes the discrepancy.",
          "is_bot": false,
          "headline": "Add address-property predicates (private, ULA, loopback, link-local, …",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T05:22:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f19e31b325966850559b669b39fbe18317aff6cc",
          "body": "Adds three new APIs to both Address4 and Address6:\n\n- `wildcardMask()` returns the Cisco-style inverse of the subnet mask\n  (e.g. `0.0.0.255` for a `/24`, `::ffff:ffff:ffff:ffff` for a `/64`).\n- `fromAddressAndWildcardMask(address, mask)` constructs an address from\n  an address and a wildcard mask, \n[…]\nups before evaluating wildcards, so\n  `2001:db8::*` yields `/112`.\n\nThe constructor is unchanged: `new Address4('192.168.0.*')` still throws,\npreserving v7's strict validation.\n\nCloses #78, #117, #119",
          "is_bot": false,
          "headline": "add wildcard mask and trailing-wildcard pattern support (#196)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T05:12:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6b6460cc2bc4e27924d5db9d6d021956ce68f4f8",
          "body": "Adds Address6.fromAddress4Nat64() and Address6#toAddress4Nat64() supporting\nall six RFC 6052 prefix lengths (/32, /40, /48, /56, /64, /96), with the\nwell-known prefix 64:ff9b::/96 as the default.\n\nCloses #72.",
          "is_bot": false,
          "headline": "add NAT64 IPv4/IPv6 conversion (RFC 6052) (#195)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T04:58:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99a95c8ab5d3fa89387aba95b0443f979979fa94",
          "body": null,
          "is_bot": false,
          "headline": "expand npm keywords for searchability",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T04:44:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96bc21dc20e6bf43b92814b5cb97b3d252e811e3",
          "body": "Closes #25.",
          "is_bot": false,
          "headline": "document Buffer interop for byte array methods",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T04:33:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbe3579d4cc5ec20940d3cbe2736bbcc17c6d2bd",
          "body": "…) (#194)\n\nMirrors `Address4.subnetMaskAddress()` on `Address6` (e.g. `/64` →\n`ffff:ffff:ffff:ffff::`) for parity, and adds a static factory on each\nclass that builds an instance from an address and mask given as\nseparate strings — directly matching the shape Node returns from\n`os.networkInterfaces()`. Non-contiguous masks (`255.0.255.0`,\n`ffff::ffff`) throw `AddressError`. Constructors and `isValid()` are\nunchanged. Closes #35.",
          "is_bot": false,
          "headline": "add Address6.subnetMaskAddress() and Address{4,6}.fromAddressAndMask(…",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T04:29:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7555f04a1264e9f24cf2a5f6c416184d1b7d1d18",
          "body": null,
          "is_bot": false,
          "headline": "Thousands of test cases",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T04:17:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e07113149d341fd4cbc540e43fc8dbb07d44472",
          "body": "Imports 482 unique test cases from richb-intermapper/IPv6-Regex\n(Dartware, ~2010), wired into the existing addressIs harness so each\ncase exercises Address6.isValid() and the regularExpression() round-\ntrips. Three cases reclassified per ip-address's actual behavior:\nleading/trailing whitespace is rejected (intermapper's regex pre-trims\nvia `\\s*…\\s*`), and `2001:db8::%1` is accepted because we support\nzone IDs. Total tests jump from 2029 to 3391, coverage stays 100%.\n\nCloses #112.",
          "is_bot": false,
          "headline": "add Intermapper IPv6 regex test corpus (#192)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T04:17:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "accda196475c398107c944ae3456927d9335725b",
          "body": "Returns the dotted-decimal form of the subnet mask as an `Address4`\n(e.g. `127.0.0.2/20` → `255.255.240.0`). Pairs naturally with the\nexisting `subnetMask: number` prefix-length property and follows the\nsame style as `startAddress`/`endAddress`. Inspired by #95.",
          "is_bot": false,
          "headline": "Add Address4.subnetMaskAddress() (#191)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T03:57:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccba311a81beb42beebef2e336cd1941eb4f3bd2",
          "body": "Bumps the versions Dependabot flagged (release-it removed entirely\nsince there's no config and no workflow consumes it) along with the\nrest of the dev tree. Adds overrides for `diff`, `serialize-javascript`,\nand `@eslint/plugin-kit` to clear the remaining transitive ReDoS /\nprototype-pollution advisories that mocha 11 and eslint_d 14 still pull.\n`npm audit` now reports 0 vulnerabilities.",
          "is_bot": false,
          "headline": "Update dev dependencies and clear audit warnings (#190)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T03:53:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb6ed7c7dbbc2d8beff992c45bec4de907d258b5",
          "body": "* generate README from TypeDoc, retire docs site\n\nReplace the unmaintained `documentation` package + standalone HTML site at\nip-address.js.org with a single self-updating README. A new\n`scripts/build-readme.ts` walks the TypeScript source via TypeDoc and splices a\ncompact API reference into a hand-w\n[…]\nalready conveys.\n\n* move Terminology section after Features\n\n* polish Used by phrasing\n\n* note that parse() is called by the constructor\n\n* switch mocha to tsx via --import to silence Node ESM warning",
          "is_bot": false,
          "headline": "Generate README from TypeDoc, retire docs site (#189)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T03:42:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5a07b4434db71bd50d5b0dfce1014e6fcc6535f3",
          "body": "Package shape:\n- drop src/ from publish (was duplicate of dist/*.d.ts); enable inlineSources\n  so .js.map files stay self-contained\n- disable declarationMap (drops .d.ts.map); add sideEffects: false\n- bump tsconfig target es2016 -> es2020 (matches lib; existing BigInt usage\n  already required it)\n- \n[…]\ng it\n- cache isCorrect closure at module scope instead of allocating per\n  construction\n- short-circuit parse4in6 when address contains no '.'\n\nInstall footprint ~307KB -> ~177KB. All 2024 tests pass.",
          "is_bot": false,
          "headline": "shrink install footprint, speed up hot paths",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-05-01T02:15:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c3fcb1fd1b093ffca343280e134a73ab413ad068",
          "body": "The snyk.io/test/github badge endpoint returns 410 Gone and there is no\npublic no-auth replacement.",
          "is_bot": false,
          "headline": "remove broken snyk badge",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-04-27T21:49:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d98f88cfa68abef0e57ec2b48df0049032e50c85",
          "body": null,
          "is_bot": false,
          "headline": "Merge commit from fork",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-04-27T17:28:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dba2fc0c24c15cb91bd2854a91d8eb3a5e46f302",
          "body": null,
          "is_bot": false,
          "headline": "improve coverage",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-02-28T00:05:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecc3b537f6c4f99a2f0cbd33d7d1696e8b7839ec",
          "body": null,
          "is_bot": false,
          "headline": "improve test coverage",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2026-02-27T23:52:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c49446ebe28718676dfe04495347ecafb0c494a",
          "body": null,
          "is_bot": false,
          "headline": "10.1.0",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2025-11-08T19:48:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f8291dc716d636519319f585d950d2f6d9ff20a",
          "body": "…(#180)\n\n* feat: Add Address4.fromByteArray() for API consistency with Address6\n\n* Fix security issue by validating byte ranges in Address4.fromByteArray()",
          "is_bot": false,
          "headline": "feat: Add Address4.fromByteArray() for API consistency with Address6 …",
          "author_name": "Obodugo Rapheal",
          "author_login": "Kofacts",
          "committed_at": "2025-11-08T19:46:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a57d8b76f2b1b46ac8543066ee11480cc7a3568b",
          "body": null,
          "is_bot": false,
          "headline": "trigger CI",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2025-11-08T18:56:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bb5c5891ef07eb38d5e1c65afa6fd4ce49da13d",
          "body": null,
          "is_bot": false,
          "headline": "update circl CI config to trigger a build",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2025-11-08T18:54:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d71112336c3b38faad691500ee384af1661bc9b",
          "body": null,
          "is_bot": false,
          "headline": "Release 10.0.1",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-10T20:34:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "644933202687c656d0c42c609a46af47e9cc4c8b",
          "body": null,
          "is_bot": false,
          "headline": "Fix Address4.bigInt return type (#175)",
          "author_name": "Timothy Cole",
          "author_login": "timcole",
          "committed_at": "2024-10-04T22:52:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "109948689c47ffac2f1b23444723d37d6c040ae4",
          "body": null,
          "is_bot": false,
          "headline": "Release 10.0.0",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-04T02:13:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23cac6af8e4bae5c97e30bdd4ae25ba0a01540bf",
          "body": null,
          "is_bot": false,
          "headline": "formatting",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-04T02:11:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42fe59acfbf8aa4c3044552f495e4dfa66ce492e",
          "body": null,
          "is_bot": false,
          "headline": "BigInteger to BigInt",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-04T02:11:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe12e9188548966b74d3d902862cc17f491624fd",
          "body": "* ipv6: Cover inspectTeredo() method with more tests\r\n\r\n* Bump tsconfig target to es2016 and lib to es2020 to be able to use BigInt and ** operator\r\n\r\n* Convert IPv4 API to work with bigint\r\n\r\n* Convert IPv6 API to work with bigint\r\n\r\n* Remove jsbn from dependencies",
          "is_bot": false,
          "headline": "Replace `jsbn` with native BigInt (#174)",
          "author_name": "Michal Kočárek",
          "author_login": "michal-kocarek",
          "committed_at": "2024-10-04T01:32:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "175a575050fc812a58aeaa61b3e8a55cfdfaa3b0",
          "body": null,
          "is_bot": false,
          "headline": "remove very old upgrade instructions",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-01T19:12:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5a19cbe2d415223151a569a1f1d7349e949b76f",
          "body": null,
          "is_bot": false,
          "headline": "Release 9.1.0-0",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-01T19:10:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e9a4f8a14bd1ae08389a39163c034c281583447",
          "body": null,
          "is_bot": false,
          "headline": "update references to chai, formatting",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-01T19:01:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0cc929058d8db89c556ddc7f8c6d4893413ddfba",
          "body": null,
          "is_bot": false,
          "headline": "update dependencies",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-01T19:00:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88da54b3feec26e1eee6374ccbef6cc4d3d8ad0a",
          "body": null,
          "is_bot": false,
          "headline": "run npm audit fix",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-01T18:48:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60f2c64a81708c6488d886b99a58992a5c2e5689",
          "body": null,
          "is_bot": false,
          "headline": "move @types/jsbn to a dependency",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-10-01T18:47:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "302687452ce5c3fa5045259d04d99f0f370c92c8",
          "body": null,
          "is_bot": false,
          "headline": "group to make clearer",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2024-04-20T21:42:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c9986646522d8c1076291267d00f783bdad414f",
          "body": "…ies (#171)",
          "is_bot": false,
          "headline": "Update Dependency Versions in Lock File to Address Known Vulnerabilit…",
          "author_name": "Will Hurley",
          "author_login": "wjhurley",
          "committed_at": "2024-02-26T23:02:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62c5fcb0350213ed971a0767b523a83a2895699c",
          "body": "Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump @babel/traverse from 7.23.0 to 7.23.2 (#168)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2023-10-16T19:34:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6cd5460751e6a476ba994c7b9c20dc166d3dd76",
          "body": "Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump postcss from 8.4.30 to 8.4.31 (#167)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2023-10-16T19:29:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7b03dc86cdadf5305365d70a6290c895da59c5b",
          "body": null,
          "is_bot": false,
          "headline": "more formatting, remove unused packages",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-26T00:01:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "234c1c6eaa74e0ee3aace46c3b32d64d82cae620",
          "body": null,
          "is_bot": false,
          "headline": "remove useless wrapper",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T23:55:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07dfb286b0a666e98bacf299d889ad9610c68d07",
          "body": null,
          "is_bot": false,
          "headline": "add prettierrc for editor integration, eslint_d, reformat",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T23:44:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38723d6fe6858b7119c44c7b829498518bfc05b9",
          "body": null,
          "is_bot": false,
          "headline": "remove dependency on sprintf-js",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T23:39:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba6b2d239df3d9c9b74c60404e4f7798e54c0283",
          "body": null,
          "is_bot": false,
          "headline": "improve test coverage by removing useless check",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T23:04:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eaa0ada666683b8c2f82a96948e167896bf6c0a1",
          "body": null,
          "is_bot": false,
          "headline": "ts-node → tsx",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T22:30:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa03723e7e0ff79b7fb39f828ba309cbecf4bc2f",
          "body": null,
          "is_bot": false,
          "headline": "use re-export syntax",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T19:23:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "320eef02ad3cc25ae22ca85ba0f7ab9719daa94c",
          "body": null,
          "is_bot": false,
          "headline": "update token",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T19:10:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "188dbcccf6853473ee20ab5de283c821da80be9e",
          "body": null,
          "is_bot": false,
          "headline": "use different circleci badge",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T19:08:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06c75f2a5e8ae9ae287d5b13c2344350231d0ef4",
          "body": null,
          "is_bot": false,
          "headline": "Release 9.0.5",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T17:53:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a1a7c401ed754a978f7a0fe8dd352eb413798b9",
          "body": null,
          "is_bot": false,
          "headline": "fix for release-it",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T17:52:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2749bd21f5bcd4b0910b108954733107dfacecc5",
          "body": null,
          "is_bot": false,
          "headline": "fixes for packaging",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T17:51:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65c8a2ee0e52b8fc709f6df13d43a9fcc9d69d5c",
          "body": null,
          "is_bot": false,
          "headline": "Release 9.0.3",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T17:39:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f76cf55d754b90547fea293cc4f25adf986c868",
          "body": null,
          "is_bot": false,
          "headline": "Release 9.0.2",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T17:38:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33b883fa2ba6e7a7bbc3380efaf1f38dfad3cc86",
          "body": null,
          "is_bot": false,
          "headline": "back to npm",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T17:37:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b01afd5239d9b00b19ac6934ed2fbd2c8e156ec",
          "body": null,
          "is_bot": false,
          "headline": "Release 9.0.1",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T17:30:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42ca8a6f0043a5335af7f2e68f771170d7d3128b",
          "body": null,
          "is_bot": false,
          "headline": "more yarn changes",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T17:29:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08722859f5bb45a98ffbbf6cbe7ab7ab0196c887",
          "body": null,
          "is_bot": false,
          "headline": "yarn doesn't support prepublishOnly",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T17:20:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25ada4d232c7c8046aa3d8e645a1d8c925c1f7b1",
          "body": null,
          "is_bot": false,
          "headline": "Release 9.0.0",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T08:17:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55bb77a0def30f321da31fd896590ad20d29ac68",
          "body": null,
          "is_bot": false,
          "headline": "circleci tweaks",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T08:15:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc63cca4fe77ca68ad190ef21b5898b8b908d26b",
          "body": null,
          "is_bot": false,
          "headline": "circleci tweaks",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T08:14:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "858886877239114511cae06ea82a0d3ac77dcff0",
          "body": null,
          "is_bot": false,
          "headline": "circleci tweaks",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T08:13:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8e0432f9d3522fb396e0f6d597c3c42f71e1b01",
          "body": null,
          "is_bot": false,
          "headline": "circleci tweaks",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T08:12:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a97a05de6dcd47e79aeaf35af08760f712a08bea",
          "body": null,
          "is_bot": false,
          "headline": "add executor",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T08:05:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fb1e905aa34931a794198e814426854b5cc15fa",
          "body": null,
          "is_bot": false,
          "headline": "update badge",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T08:04:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "423dc704994e93576715f64418d29197e585cc48",
          "body": null,
          "is_bot": false,
          "headline": "migrate to Circle",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T08:00:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ff0cb56e277c0c6395d13ea43f4f72bf2d01f09",
          "body": null,
          "is_bot": false,
          "headline": "add release-it config",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T07:43:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edd8259b47c8c3b3e6a75b6b374512aebc419cc7",
          "body": null,
          "is_bot": false,
          "headline": "remove unused file",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T07:31:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79dd6dd216da9e93881241906537446933f1bdaa",
          "body": null,
          "is_bot": false,
          "headline": "update dependencies",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T07:29:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8685da7d82c99530910c1d865396971e4397b477",
          "body": null,
          "is_bot": false,
          "headline": "refactor towards broader compatibility",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T07:28:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "171061d121d8c2590798e4a9f6387ca4804c4f19",
          "body": null,
          "is_bot": false,
          "headline": "lib → src",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2023-09-25T07:14:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1df15f99355bd4132b579a0db69238b563e9c39",
          "body": null,
          "is_bot": false,
          "headline": "8.1.0",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-07-19T19:17:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42027ec6a111628b9b25a41389459143ae0df38e",
          "body": null,
          "is_bot": false,
          "headline": "update test and fix formatting",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-07-19T19:17:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "047b4a05758ac2d9cb755c2c041c1f1b189f1306",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #140 from leftshift/master",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-07-19T19:12:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15215b8c89414aaa2de1d97c5ea91f42ffc145b4",
          "body": null,
          "is_bot": false,
          "headline": "fix missing 'in-addr' in comment",
          "author_name": "Adrian Schneider",
          "author_login": "leftshift",
          "committed_at": "2021-07-19T15:23:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55f52e97ffd6930555aa097391e51faa7c24dbb8",
          "body": null,
          "is_bot": false,
          "headline": "add conversion to reverse format and back for ipv4",
          "author_name": "Adrian Schneider",
          "author_login": "leftshift",
          "committed_at": "2021-07-19T15:17:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94b367ca765d2eff564fb94ded045fc2fb6e072c",
          "body": null,
          "is_bot": false,
          "headline": "8.0.0",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-20T02:48:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10f2e32654c8d9a91ff4d7bde252a9201640d765",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #138 from beaugunderson/bg-simple-modules",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-20T02:47:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d6ddc40b89884a3b39f2373f3f50dc519b9ca21",
          "body": null,
          "is_bot": false,
          "headline": "save some time",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-19T18:16:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c299958e9d5591a9752e4e933e44506ec9f933df",
          "body": null,
          "is_bot": false,
          "headline": "exclude → allow_failures",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-19T18:15:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a4a91433bf217155c9d828fc9f1f821ed11f650",
          "body": null,
          "is_bot": false,
          "headline": "exclude ppc64le/node 16 for now",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-19T18:13:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75a5cbd7d5f970af204eec4bfac13c51770b972a",
          "body": null,
          "is_bot": false,
          "headline": "update dependencies",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-19T17:48:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51db9af36884e0c4fa9838e8cf18763bfc46e512",
          "body": null,
          "is_bot": false,
          "headline": "migrate from greenkeeper to snyk",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-19T17:44:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83bd5043227e94ac341091afc0bfe3faa2086bee",
          "body": null,
          "is_bot": false,
          "headline": "use travis-ci.com",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-19T17:33:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d5e27a4ae22d9a08ccbf14da5c521f9ac5629b6",
          "body": null,
          "is_bot": false,
          "headline": "simplify travis configuration",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-19T17:32:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cbd5bb2feb366cb1093c136ee04614eead1a722",
          "body": null,
          "is_bot": false,
          "headline": "use es2015 instead of esnext (means we won't support dynamic import yet",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-19T17:25:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "043c096737d9550e49bc6ed26eb3c151813c626b",
          "body": null,
          "is_bot": false,
          "headline": "upgrade all dependencies",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-17T15:49:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "323367d813550da32c1d25e05924bcf9e32f0a8c",
          "body": null,
          "is_bot": false,
          "headline": "support as far back as current LTS (v12)",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-16T20:22:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66a37cf7165263bf9bc248337e0565f9d6e63c0d",
          "body": null,
          "is_bot": false,
          "headline": "update README",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-16T20:20:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bde8f8c900ba90820466140b149ca15bd3d03b9f",
          "body": "…sted-git-info-2.8.9\n\nBump hosted-git-info from 2.8.8 to 2.8.9",
          "is_bot": false,
          "headline": "Merge pull request #135 from beaugunderson/dependabot/npm_and_yarn/ho…",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-16T20:14:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adbfe6e5bd4ded99866e5f0607aedae26df47932",
          "body": "…liptic-6.5.4\n\nBump elliptic from 6.5.3 to 6.5.4",
          "is_bot": false,
          "headline": "Merge pull request #127 from beaugunderson/dependabot/npm_and_yarn/el…",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-16T20:14:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be2549f117b69490b6ce0c0e04650ffca3005286",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #129 from ovcharik/master",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-16T20:12:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e499f7bf9a5c0680cffdaf065e22810cb154be5",
          "body": null,
          "is_bot": false,
          "headline": "add hybrid esm support",
          "author_name": "Beau Gunderson",
          "author_login": "beaugunderson",
          "committed_at": "2021-06-16T20:09:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 54,
      "commits_last_year": 31,
      "latest_release_at": "2026-05-01T06:32:55Z",
      "latest_release_tag": "v10.2.0",
      "releases_from_tags": true,
      "days_since_last_push": 24,
      "active_weeks_last_year": 5,
      "days_since_latest_release": 82,
      "mean_days_between_releases": 105.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "ip-address",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ip",
            "ipv4",
            "ipv6",
            "address",
            "cidr",
            "subnet",
            "netmask",
            "validate",
            "validation",
            "parse",
            "arpa",
            "bigint",
            "browser"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/ip-address",
          "is_deprecated": false,
          "latest_version": "10.2.0",
          "repository_url": "https://github.com/beaugunderson/ip-address",
          "versions_count": 54,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 367966379,
          "first_published_at": "2015-05-05T00:32:26.395000Z",
          "latest_published_at": "2026-05-01T06:34:05.804000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 82
        }
      ]
    },
    "popularity": {
      "forks": 80,
      "stars": 612,
      "watchers": 12,
      "fork_history": {
        "days": [
          {
            "date": "2011-04-21",
            "count": 1
          },
          {
            "date": "2012-04-06",
            "count": 1
          },
          {
            "date": "2012-04-27",
            "count": 1
          },
          {
            "date": "2012-09-20",
            "count": 1
          },
          {
            "date": "2013-03-15",
            "count": 1
          },
          {
            "date": "2013-06-18",
            "count": 1
          },
          {
            "date": "2013-11-06",
            "count": 1
          },
          {
            "date": "2013-11-11",
            "count": 1
          },
          {
            "date": "2013-12-06",
            "count": 1
          },
          {
            "date": "2013-12-21",
            "count": 1
          },
          {
            "date": "2014-07-02",
            "count": 1
          },
          {
            "date": "2014-11-27",
            "count": 1
          },
          {
            "date": "2014-12-19",
            "count": 1
          },
          {
            "date": "2015-02-24",
            "count": 1
          },
          {
            "date": "2015-07-15",
            "count": 1
          },
          {
            "date": "2015-08-02",
            "count": 1
          },
          {
            "date": "2015-11-22",
            "count": 1
          },
          {
            "date": "2016-05-11",
            "count": 1
          },
          {
            "date": "2016-07-20",
            "count": 1
          },
          {
            "date": "2016-07-25",
            "count": 1
          },
          {
            "date": "2016-12-09",
            "count": 1
          },
          {
            "date": "2016-12-13",
            "count": 1
          },
          {
            "date": "2017-02-08",
            "count": 1
          },
          {
            "date": "2017-02-21",
            "count": 1
          },
          {
            "date": "2017-04-03",
            "count": 1
          },
          {
            "date": "2017-04-13",
            "count": 1
          },
          {
            "date": "2017-06-07",
            "count": 1
          },
          {
            "date": "2017-06-09",
            "count": 1
          },
          {
            "date": "2017-09-11",
            "count": 1
          },
          {
            "date": "2017-11-09",
            "count": 1
          },
          {
            "date": "2017-12-10",
            "count": 1
          },
          {
            "date": "2017-12-20",
            "count": 1
          },
          {
            "date": "2018-01-17",
            "count": 1
          },
          {
            "date": "2018-02-17",
            "count": 1
          },
          {
            "date": "2018-03-07",
            "count": 1
          },
          {
            "date": "2018-03-23",
            "count": 1
          },
          {
            "date": "2018-05-09",
            "count": 1
          },
          {
            "date": "2018-06-12",
            "count": 1
          },
          {
            "date": "2018-10-09",
            "count": 1
          },
          {
            "date": "2019-05-17",
            "count": 1
          },
          {
            "date": "2019-08-31",
            "count": 1
          },
          {
            "date": "2019-09-08",
            "count": 1
          },
          {
            "date": "2020-02-04",
            "count": 2
          },
          {
            "date": "2020-05-14",
            "count": 1
          },
          {
            "date": "2020-06-04",
            "count": 1
          },
          {
            "date": "2020-08-13",
            "count": 1
          },
          {
            "date": "2020-09-10",
            "count": 1
          },
          {
            "date": "2020-09-12",
            "count": 1
          },
          {
            "date": "2020-09-20",
            "count": 1
          },
          {
            "date": "2020-09-23",
            "count": 1
          },
          {
            "date": "2020-12-07",
            "count": 1
          },
          {
            "date": "2021-01-15",
            "count": 1
          },
          {
            "date": "2021-03-30",
            "count": 1
          },
          {
            "date": "2021-05-26",
            "count": 1
          },
          {
            "date": "2021-06-08",
            "count": 1
          },
          {
            "date": "2021-06-26",
            "count": 1
          },
          {
            "date": "2021-07-19",
            "count": 1
          },
          {
            "date": "2022-07-04",
            "count": 1
          },
          {
            "date": "2022-09-13",
            "count": 1
          },
          {
            "date": "2022-12-14",
            "count": 1
          },
          {
            "date": "2022-12-19",
            "count": 1
          },
          {
            "date": "2022-12-30",
            "count": 1
          },
          {
            "date": "2023-01-10",
            "count": 1
          },
          {
            "date": "2023-01-15",
            "count": 1
          },
          {
            "date": "2024-02-23",
            "count": 1
          },
          {
            "date": "2024-09-27",
            "count": 1
          },
          {
            "date": "2025-04-29",
            "count": 1
          },
          {
            "date": "2025-09-10",
            "count": 1
          },
          {
            "date": "2025-10-03",
            "count": 1
          },
          {
            "date": "2025-11-08",
            "count": 1
          },
          {
            "date": "2026-02-21",
            "count": 1
          },
          {
            "date": "2026-05-07",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          },
          {
            "date": "2026-06-23",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 76,
        "total_forks": 80
      },
      "star_history": null,
      "open_issues_and_prs": 11
    },
    "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": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 43711,
      "source_files_sampled": 15,
      "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": "brace-expansion",
            "direct": false,
            "version": "1.1.14",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 1,
            "oldest_advisory_days": 2
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 1,
            "oldest_advisory_days": 2
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.5",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-jxxr-4gwj-5jf2"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 2,
            "oldest_advisory_days": 65
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 2,
            "oldest_advisory_days": 37
          },
          {
            "name": "linkify-it",
            "direct": false,
            "version": "5.0.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-22p9-wv53-3rq4",
              "GHSA-v245-v573-v5vm"
            ],
            "fixed_version": "5.0.2",
            "advisory_count": 2,
            "oldest_advisory_days": 26
          },
          {
            "name": "markdown-it",
            "direct": false,
            "version": "14.1.1",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-6v5v-wf23-fmfq"
            ],
            "fixed_version": "14.2.0",
            "advisory_count": 1,
            "oldest_advisory_days": 37
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.27.7",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": 2.5,
            "advisory_ids": [
              "GHSA-g7r4-m6w7-qqqr"
            ],
            "fixed_version": "0.28.1",
            "advisory_count": 1,
            "oldest_advisory_days": 40
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 1,
          "high": 5,
          "moderate": 1
        },
        "advisory_count": 10,
        "affected_count": 7,
        "assessed_count": 425,
        "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": "@bcoe/v8-coverage",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/eslint-utils",
            "direct": false,
            "version": "4.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/regexpp",
            "direct": false,
            "version": "4.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/config-array",
            "direct": false,
            "version": "0.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/core",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/core",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/eslintrc",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/eslintrc",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "8.57.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "9.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/object-schema",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/plugin-kit",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "@gerrit0/mini-shiki",
            "direct": false,
            "version": "3.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/config-array",
            "direct": false,
            "version": "0.13.0",
            "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": "@humanwhocodes/retry",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/cliui",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/schema",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.4.15",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.25",
            "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": "@pkgjs/parseargs",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pkgr/core",
            "direct": false,
            "version": "0.2.9",
            "ecosystem": "npm"
          },
          {
            "name": "@rtsao/scc",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@shikijs/engine-oniguruma",
            "direct": false,
            "version": "3.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@shikijs/langs",
            "direct": false,
            "version": "3.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@shikijs/themes",
            "direct": false,
            "version": "3.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@shikijs/types",
            "direct": false,
            "version": "3.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@shikijs/vscode-textmate",
            "direct": false,
            "version": "10.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/chai",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/deep-eql",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/hast",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-coverage",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json5",
            "direct": false,
            "version": "0.0.29",
            "ecosystem": "npm"
          },
          {
            "name": "@types/mocha",
            "direct": false,
            "version": "10.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "@types/unist",
            "direct": false,
            "version": "2.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/project-service",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/tsconfig-utils",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "8.59.1",
            "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": "acorn-loose",
            "direct": false,
            "version": "8.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-walk",
            "direct": false,
            "version": "8.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "6.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "aria-query",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "array-buffer-byte-length",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "array-includes",
            "direct": false,
            "version": "3.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "array.prototype.findlastindex",
            "direct": false,
            "version": "1.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "array.prototype.flat",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "array.prototype.flatmap",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "array.prototype.tosorted",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "arraybuffer.prototype.slice",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "assertion-error",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ast-types-flow",
            "direct": false,
            "version": "0.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "async-function",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "available-typed-arrays",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "axe-core",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "axobject-query",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.14",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "browser-stdout",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-from",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "c8",
            "direct": false,
            "version": "11.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "14.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "confusing-browser-globals",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "console-grid",
            "direct": false,
            "version": "2.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "damerau-levenshtein",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "data-view-buffer",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "data-view-byte-length",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "data-view-byte-offset",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "3.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "define-data-property",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "define-properties",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eastasianwidth",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "eight-colors",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "9.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-abstract",
            "direct": false,
            "version": "1.24.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-iterator-helpers",
            "direct": false,
            "version": "1.0.19",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-shim-unscopables",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-to-primitive",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "8.57.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "9.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-config-airbnb",
            "direct": false,
            "version": "19.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-config-airbnb-base",
            "direct": false,
            "version": "15.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-config-prettier",
            "direct": false,
            "version": "10.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-import-resolver-node",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-module-utils",
            "direct": false,
            "version": "2.12.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-filenames",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-import",
            "direct": false,
            "version": "2.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-jsx-a11y",
            "direct": false,
            "version": "6.10.2",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-prettier",
            "direct": false,
            "version": "5.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-react",
            "direct": false,
            "version": "7.33.2",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-react-hooks",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-sort-imports-es6-autofix",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "7.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint_d",
            "direct": false,
            "version": "14.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "10.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "9.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "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-diff",
            "direct": false,
            "version": "1.3.0",
            "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": "file-entry-cache",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "for-each",
            "direct": false,
            "version": "0.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "function.prototype.name",
            "direct": false,
            "version": "1.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "functions-have-names",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "generator-function",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-symbol-description",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-tsconfig",
            "direct": false,
            "version": "4.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "10.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "13.0.6",
            "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.22.0",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "13.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "14.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "globalthis",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graphemer",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-bigints",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-property-descriptors",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "has-proto",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "he",
            "direct": false,
            "version": "1.2.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": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "internal-slot",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-array-buffer",
            "direct": false,
            "version": "3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "is-async-function",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-bigint",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-boolean-object",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-callable",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.16.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-data-view",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-date-object",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-finalizationregistry",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-generator-function",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-map",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-negative-zero",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-number-object",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-path-inside",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-regex",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-set",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-shared-array-buffer",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-string",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-symbol",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-typed-array",
            "direct": false,
            "version": "1.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-weakmap",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-weakref",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-weakset",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-coverage",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-report",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-reports",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "iterator.prototype",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "jackspeak",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-buffer",
            "direct": false,
            "version": "3.0.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": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "jsx-ast-utils",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "keyv",
            "direct": false,
            "version": "4.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "language-subtag-registry",
            "direct": false,
            "version": "0.3.23",
            "ecosystem": "npm"
          },
          {
            "name": "language-tags",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "linkify-it",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.camelcase",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.kebabcase",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.snakecase",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.upperfirst",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "log-symbols",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "loose-envify",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "10.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "lunr",
            "direct": false,
            "version": "2.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "lz-utils",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "make-dir",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "markdown-it",
            "direct": false,
            "version": "14.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdurl",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "9.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mocha",
            "direct": false,
            "version": "11.7.5",
            "ecosystem": "npm"
          },
          {
            "name": "monocart-coverage-reports",
            "direct": false,
            "version": "2.12.11",
            "ecosystem": "npm"
          },
          {
            "name": "monocart-locator",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "object-keys",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object.assign",
            "direct": false,
            "version": "4.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "object.entries",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "object.fromentries",
            "direct": false,
            "version": "2.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "object.groupby",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "object.hasown",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "object.values",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "own-keys",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-json-from-dist",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "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": "path-scurry",
            "direct": false,
            "version": "1.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-scurry",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "possible-typed-array-names",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": false,
            "version": "3.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "prettier-linter-helpers",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "prop-types",
            "direct": false,
            "version": "15.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "punycode.js",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "16.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "reflect.getprototypeof",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "regexp.prototype.flags",
            "direct": false,
            "version": "1.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.6",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "2.0.0-next.4",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.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-array-concat",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "safe-push-apply",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex-test",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "set-function-length",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "set-function-name",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "set-proto",
            "direct": false,
            "version": "1.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": "side-channel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-weakmap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-support",
            "direct": false,
            "version": "0.5.21",
            "ecosystem": "npm"
          },
          {
            "name": "stop-iteration-iterator",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.includes",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.matchall",
            "direct": false,
            "version": "4.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.trim",
            "direct": false,
            "version": "1.2.10",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.trimend",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.trimstart",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "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-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "9.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "synckit",
            "direct": false,
            "version": "0.11.12",
            "ecosystem": "npm"
          },
          {
            "name": "test-exclude",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "text-table",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.16",
            "ecosystem": "npm"
          },
          {
            "name": "ts-api-utils",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsconfig-paths",
            "direct": false,
            "version": "3.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "4.21.0",
            "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": "typed-array-buffer",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-byte-length",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-byte-offset",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-length",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "typedoc",
            "direct": false,
            "version": "0.28.19",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "uc.micro",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "unbox-primitive",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "v8-to-istanbul",
            "direct": false,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which-boxed-primitive",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "which-builtin-type",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "which-collection",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which-typed-array",
            "direct": false,
            "version": "1.1.20",
            "ecosystem": "npm"
          },
          {
            "name": "workerpool",
            "direct": false,
            "version": "9.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "2.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-unparser",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 425,
        "direct_count": 0,
        "indirect_count": 425
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 6,
        "merged_prs": 55,
        "open_issues": 5,
        "closed_ratio": 0.95,
        "closed_issues": 96,
        "closed_unmerged_prs": 48
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "beaugunderson",
          "commits": 421,
          "avatar_url": "https://avatars.githubusercontent.com/u/61791?v=4"
        },
        {
          "type": "User",
          "login": "dcolebatch",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/161612?v=4"
        },
        {
          "type": "User",
          "login": "oskar456",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/816717?v=4"
        },
        {
          "type": "User",
          "login": "leftshift",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/1733162?v=4"
        },
        {
          "type": "User",
          "login": "albertorestifo",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/1037048?v=4"
        },
        {
          "type": "User",
          "login": "apaprocki",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/767372?v=4"
        },
        {
          "type": "User",
          "login": "nullivex",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/2321375?v=4"
        },
        {
          "type": "User",
          "login": "jessepeterson",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/694298?v=4"
        },
        {
          "type": "User",
          "login": "sanjaymsh",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/66668807?v=4"
        },
        {
          "type": "User",
          "login": "ovcharik",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/4432904?v=4"
        }
      ],
      "contributors_sampled": 18,
      "top_contributor_share": 0.931
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        ".eslintrc",
        ".eslintrc.js"
      ],
      "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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 9,
            "reason": "14 out of 15 merged PRs checked by a CI test -- score normalized to 9",
            "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 1/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 16 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "25 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not 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": 9,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 2,
            "reason": "8 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e82a6812ac9d16f1300d3c2051fe2cc88c5d9161",
        "ran_at": "2026-07-22T22:22:45Z",
        "aggregate_score": 5.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T01:49:31Z",
      "oldest_open_prs": [
        {
          "number": 206,
          "created_at": "2026-06-12T23:06:25Z",
          "last_comment_at": "2026-06-12T23:07:23Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 207,
          "created_at": "2026-06-17T21:03:00Z",
          "last_comment_at": "2026-06-17T21:03:59Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 208,
          "created_at": "2026-06-22T08:36:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 209,
          "created_at": "2026-06-23T17:04:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 210,
          "created_at": "2026-06-28T18:49:17Z",
          "last_comment_at": "2026-06-28T18:49:59Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 211,
          "created_at": "2026-07-03T01:54:23Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-05-01T06:28:55Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 118,
          "created_at": "2020-10-25T06:03:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 132,
          "created_at": "2021-04-16T04:02:17Z",
          "last_comment_at": "2021-07-20T20:05:45Z",
          "last_comment_author": "StoneLabs"
        },
        {
          "number": 141,
          "created_at": "2021-07-20T10:42:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 142,
          "created_at": "2021-07-20T20:02:32Z",
          "last_comment_at": "2021-07-20T20:07:44Z",
          "last_comment_author": "beaugunderson"
        },
        {
          "number": 172,
          "created_at": "2024-08-25T17:45:53Z",
          "last_comment_at": "2024-11-19T13:56:21Z",
          "last_comment_author": "wzrdtales"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/beaugunderson/ip-address",
    "host": "github.com",
    "name": "ip-address",
    "owner": "beaugunderson"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": "High-Risk Jurisdiction Policy applies a 50% multiplier to weighted overall health and gives it an At risk ceiling of 49.",
      "notes": [
        {
          "code": "jurisdiction_overall_adjustment",
          "params": {
            "cap": 49,
            "pct": 50
          }
        }
      ],
      "value": 33,
      "inputs": {
        "security": 43,
        "vitality": 66,
        "community": 75,
        "governance": 63,
        "engineering": 79,
        "high_risk_jurisdiction_cap": 49,
        "high_risk_jurisdiction_multiplier": 50,
        "weighted_overall_before_jurisdiction": 66,
        "overall_after_jurisdiction_multiplier": 33
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 66,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 31,
              "human_commit_share": 0.98,
              "days_since_last_push": 24,
              "active_weeks_last_year": 5
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 24 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 24
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "5/52 weeks with commits",
                "points": 3.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "31 commits in the last year",
                "points": 13.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 31
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "25 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "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": 80,
            "inputs": {
              "releases_count": 54,
              "latest_release_tag": "v10.2.0",
              "releases_from_tags": true,
              "days_since_latest_release": 82,
              "mean_days_between_releases": 105.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "54 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 54
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 82 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 82
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~105.4 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 105.4
                    }
                  }
                ],
                "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": 60,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 60 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 60
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 75,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 67,
            "inputs": {
              "forks": 80,
              "stars": 612,
              "watchers": 12,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "612 stars",
                "points": 45.2,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 612
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "80 forks",
                "points": 15.8,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 80
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "12 watchers",
                "points": 5.8,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "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 (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "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
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "packages": [
                "ip-address"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 367966379
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "367,966,379 downloads/month across npm",
                "points": 80,
                "status": "met",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 367966379,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 63,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 34,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 18,
              "top_contributor_share": 0.931
            },
            "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 93% of commits",
                "points": 1.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 93
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "18 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 16 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "merged_prs": 55,
              "open_issues": 5,
              "closed_issues": 96,
              "issue_closed_ratio": 0.95,
              "closed_unmerged_prs": 48
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "95% of issues closed",
                "points": 44.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 95
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "55/103 decided PRs merged",
                "points": 20.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 55,
                      "decided": 103
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 68,
            "inputs": {
              "followers": 444,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "beaugunderson",
              "public_repos": 356,
              "account_age_days": 6343
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "444 followers of beaugunderson",
                "points": 19,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 444,
                      "login": "beaugunderson"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "356 public repos, account ~17 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 356
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 17
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "ip-address"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 82
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 82 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 82
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "54 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 54
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 79,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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, .eslintrc.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc, .eslintrc.js"
                    }
                  }
                ],
                "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": "14 out of 15 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "ipv4",
                "ipv6",
                "javascript",
                "address",
                "arpa",
                "bigint",
                "browser",
                "cidr",
                "ip",
                "netmask",
                "parse",
                "subnet",
                "typescript",
                "validate",
                "validation"
              ],
              "has_wiki": true,
              "homepage": "https://www.npmjs.com/package/ip-address",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://www.npmjs.com/package/ip-address",
                "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": "15 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 43,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized. High-Risk Jurisdiction Policy applies a 50% multiplier to Security posture and gives it an At risk ceiling of 49.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "jurisdiction_posture_adjustment",
                "params": {
                  "cap": 49,
                  "pct": 50
                }
              }
            ],
            "value": 29,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 5.8,
              "high_risk_jurisdiction_cap": 49,
              "high_risk_jurisdiction_multiplier": 50,
              "security_posture_after_multiplier": 29,
              "security_posture_before_jurisdiction": 58
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "14 out of 15 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 16 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "25 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "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": "detected GitHub workflow tokens with excessive permissions",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "8 existing vulnerabilities detected",
                "points": 1.5,
                "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 425 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": 425
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 10,
              "affected_packages": 7,
              "assessed_packages": 425,
              "unassessed_packages": 0,
              "affected_by_severity": "high 5, moderate 1, low 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": 425,
              "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": "moderate",
            "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": 50,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": true,
              "exposures": [
                {
                  "role": "top_contributor",
                  "count": 1,
                  "country": "Russia"
                }
              ],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 23
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "Russia: top_contributor (1)",
                "points": 50,
                "status": "partial",
                "details": [
                  {
                    "code": "jurisdiction_exposure",
                    "params": {
                      "role": "top_contributor",
                      "count": 1,
                      "country": "Russia"
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 54,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.286,
              "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": "28 of 98 human commits state their intent (structured subject or explanatory body)",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 28,
                      "sampled": 98
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.02
            },
            "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, .eslintrc.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc, .eslintrc.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "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": "2 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 2,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 43711,
              "source_files_sampled": 15,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/15 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 15,
                      "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"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T22:23:04.116636Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/beaugunderson/ip-address.svg",
  "full_name": "beaugunderson/ip-address",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.