Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-26 01:03 UTC

TryGhost / bookshelf-relations

Bookshelf.js plugin that applies nested relation changes while saving models

JavaScriptMIT★ 22 stars⑂ 11 forkssince Nov 2017View on GitHub ↗

TryGhost/bookshelf-relations holds a health index of 62 out of 100, placing it in the Moderate band. It scores highest on Security (72/100) and lowest on Community & Adoption (51/100). It was last updated today. A single contributor accounts for most of its recent work.

62
overall / 100
Moderate

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.

62
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.

Ownership

GhostOrganization
1,734 followers153 public repossince Aug 2012

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
npmbookshelf-relations2.8.049,73338527 days agobookshelfrelationsrelationnestedrelationshiprelationshipsassociationsassociation

Metrics by category

Vitality

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

66Moderate · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
20.8/36Commit cadence — 30/52 weeks with commits
17.1/18Commit volume — 80 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year80
human_commit_share0.15
days_since_last_push0
active_weeks_last_year30
How it's scored
16.2/27Ships releases — 38 version tags (no GitHub releases)
7.2/36Release recency — latest release 527 days ago
12.6/27Release cadence — a release every ~194.6 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count38
latest_release_tagv2.8.0
releases_from_tagsyes
days_since_latest_release527
mean_days_between_releases194.6
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?

51Moderate · 18% of overall
How it's scored
21.4/60Stars — 22 stars
8.3/25Forks — 11 forks
6.2/15Watchers — 14 watchers
Inputs used
forks11
stars22
watchers14
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
0/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_conductno
has_pull_request_templateno
How it's scored
62.6/80Monthly downloads — 49,733 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesbookshelf-relations
dependents
ecosystemsnpm
total_downloads
monthly_downloads49,733
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
10.6/22.5Commit distribution — top contributor authored 53% of commits
13.5/13.5Contributor breadth — 13 contributors
10/10OpenSSF Scorecard: Contributors — project has 7 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled13
top_contributor_share0.527
How it's scored
31.2/46.8Issue resolution — 67% of issues closed
29/38.3PR acceptance — 179/236 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs179
open_issues4
closed_issues8
issue_closed_ratio0.667
closed_unmerged_prs57
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
23.3/25Owner reach — 1,734 followers of TryGhost
25/25Track record — 153 public repos, account ~13 yr old
Inputs used
followers1,734
owner_typeOrganization
is_verified
owner_loginTryGhost
public_repos153
account_age_days5,088
How it's scored
25/25Published & resolvable — 1 package(s) on npm
14/35Publish recency — latest publish 527 days ago
20/20Version history — 38 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesbookshelf-relations
ecosystemsnpm
any_deprecatedno
min_days_since_publish527

Engineering Quality

Are baseline engineering and documentation practices in place?

60Moderate · 20% of overall
How it's scored
24/24CI workflows — 2 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigyes
has_linter_configno
has_precommit_configno

Documentation

40At risk
How it's scored
30/30README
0/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
0/10Wiki
Inputs used
topics
has_wikino
homepage
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

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

72Good · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 7 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 — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
4/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
5/5SAST — SAST tool is run on all commits
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — no data
6.8/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 35 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate7
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
10/25Indirect dependencies free of known advisories — 1 affected: uuid 9.0.1 (high 7.5)
33.7/40No advisories left outstanding — 1 advisory-carrying package(s) unaddressed past 90 days; oldest published 94 days ago
Inputs used
sourceosv
advisories1
affected_packages1
assessed_packages174
unassessed_packages0
affected_by_severityhigh 1
direct_affected_packages0
Matched the npm:bookshelf-relations@2.8.0 runtime dependency closure — what installing the published package pulls in — 174 packages. 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.

59Moderate · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md, CLAUDE.md
0/15Machine-readable docs (llms.txt)
0/40Legible commit history — no data
Inputs used
has_llms_txtno
legible_history_share
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes2,117
Excluded from scoring (no data or not applicable): Legible commit history. Remaining weights renormalized.
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
0/11Static type checking
10/10Reproducible environment — lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
8/8Automated maintenance — 85 of the last 100 commits are automated dependency updates
8/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
Inputs used
has_nixno
has_testsyes
lockfilespnpm-lock.yaml
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0.85
How it's scored
0/45Type-checkable code — JavaScript without a type-check config
55/55Manageable file sizes — 0/35 source files over 60KB
Inputs used
primary_languageJavaScript
largest_source_bytes41,127
source_files_sampled35
oversized_source_files0

Key facts

22GitHub stars
13contributors
80commits, last 12 months
0days since last push
38releases
1bus factor
4open 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 ★ / 11 ⇿
0Stars
11Forks
34Releases

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.

0246810121112017-122021-122026-01
Major 2Minor 13Patch 19

Each point covers 8 days.

OpenSSF Scorecard 7.0 / 10
7.0aggregate

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-26 01:03 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 7 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
8Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 8
10SASTSAST tool is run on all commits
10Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
9Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities35 existing vulnerabilities detected
Direct dependencies 4
RegistryPackageVersion constraintManifest
npm@tryghost/debug0.1.40package.json
npm@tryghost/errors1.3.13package.json
npmbluebird3.7.2package.json
npmlodash4.18.1package.json
All dependencies 686

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

RegistryPackageVersionRelation
npm@tryghost/debug0.1.40direct
npm@tryghost/errors1.3.13direct
npmbluebird3.7.2direct
npmlodash4.18.1direct
npm@babel/code-frame7.29.7indirect
npm@babel/compat-data7.29.7indirect
npm@babel/core7.29.7indirect
npm@babel/generator7.29.7indirect
npm@babel/helper-compilation-targets7.29.7indirect
npm@babel/helper-globals7.29.7indirect
npm@babel/helper-module-imports7.29.7indirect
npm@babel/helper-module-transforms7.29.7indirect
npm@babel/helper-string-parser7.29.7indirect
npm@babel/helper-validator-identifier7.29.7indirect
npm@babel/helper-validator-option7.29.7indirect
npm@babel/helpers7.29.7indirect
npm@babel/parser7.29.7indirect
npm@babel/template7.29.7indirect
npm@babel/traverse7.29.7indirect
npm@babel/types7.29.7indirect
npm@elastic/elasticsearch8.13.1indirect
npm@elastic/transport8.4.1indirect
npm@fastify/busboy2.1.1indirect
npm@gar/promisify1.1.3indirect
npm@isaacs/cliui8.0.2indirect
npm@isaacs/fs-minipass4.0.1indirect
npm@istanbuljs/load-nyc-config1.1.0indirect
npm@istanbuljs/schema0.1.6indirect
npm@jridgewell/gen-mapping0.3.13indirect
npm@jridgewell/remapping2.3.5indirect
npm@jridgewell/resolve-uri3.1.2indirect
npm@jridgewell/sourcemap-codec1.5.5indirect
npm@jridgewell/trace-mapping0.3.31indirect
npm@keyv/serialize1.1.1indirect
npm@npmcli/fs1.1.1indirect
npm@npmcli/move-file1.1.2indirect
npm@oxfmt/binding-android-arm-eabi0.60.0indirect
npm@oxfmt/binding-android-arm640.60.0indirect
npm@oxfmt/binding-darwin-arm640.60.0indirect
npm@oxfmt/binding-darwin-x640.60.0indirect
npm@oxfmt/binding-freebsd-x640.60.0indirect
npm@oxfmt/binding-linux-arm-gnueabihf0.60.0indirect
npm@oxfmt/binding-linux-arm-musleabihf0.60.0indirect
npm@oxfmt/binding-linux-arm64-gnu0.60.0indirect
npm@oxfmt/binding-linux-arm64-musl0.60.0indirect
npm@oxfmt/binding-linux-ppc64-gnu0.60.0indirect
npm@oxfmt/binding-linux-riscv64-gnu0.60.0indirect
npm@oxfmt/binding-linux-riscv64-musl0.60.0indirect
npm@oxfmt/binding-linux-s390x-gnu0.60.0indirect
npm@oxfmt/binding-linux-x64-gnu0.60.0indirect
npm@oxfmt/binding-linux-x64-musl0.60.0indirect
npm@oxfmt/binding-openharmony-arm640.60.0indirect
npm@oxfmt/binding-win32-arm64-msvc0.60.0indirect
npm@oxfmt/binding-win32-ia32-msvc0.60.0indirect
npm@oxfmt/binding-win32-x64-msvc0.60.0indirect
npm@oxlint/binding-android-arm-eabi1.75.0indirect
npm@oxlint/binding-android-arm641.75.0indirect
npm@oxlint/binding-darwin-arm641.75.0indirect
npm@oxlint/binding-darwin-x641.75.0indirect
npm@oxlint/binding-freebsd-x641.75.0indirect
npm@oxlint/binding-linux-arm-gnueabihf1.75.0indirect
npm@oxlint/binding-linux-arm-musleabihf1.75.0indirect
npm@oxlint/binding-linux-arm64-gnu1.75.0indirect
npm@oxlint/binding-linux-arm64-musl1.75.0indirect
npm@oxlint/binding-linux-ppc64-gnu1.75.0indirect
npm@oxlint/binding-linux-riscv64-gnu1.75.0indirect
npm@oxlint/binding-linux-riscv64-musl1.75.0indirect
npm@oxlint/binding-linux-s390x-gnu1.75.0indirect
npm@oxlint/binding-linux-x64-gnu1.75.0indirect
npm@oxlint/binding-linux-x64-musl1.75.0indirect
npm@oxlint/binding-openharmony-arm641.75.0indirect
npm@oxlint/binding-win32-arm64-msvc1.75.0indirect
npm@oxlint/binding-win32-ia32-msvc1.75.0indirect
npm@oxlint/binding-win32-x64-msvc1.75.0indirect
npm@pkgjs/parseargs0.11.0indirect
npm@sec-ant/readable-stream0.4.1indirect
npm@sindresorhus/is7.2.0indirect
npm@sinonjs/commons3.0.1indirect
npm@sinonjs/fake-timers15.4.0indirect
npm@sinonjs/samsam10.0.2indirect
npm@stdlib/array-float320.2.3indirect
npm@stdlib/array-float640.2.3indirect
npm@stdlib/array-int160.2.3indirect
npm@stdlib/array-int320.2.3indirect
npm@stdlib/array-int80.2.3indirect
npm@stdlib/array-uint160.2.3indirect
npm@stdlib/array-uint320.2.3indirect
npm@stdlib/array-uint80.2.3indirect
npm@stdlib/array-uint8c0.2.3indirect
npm@stdlib/assert-has-float32array-support0.2.3indirect
npm@stdlib/assert-has-float64array-support0.2.3indirect
npm@stdlib/assert-has-int16array-support0.2.3indirect
npm@stdlib/assert-has-int32array-support0.2.3indirect
npm@stdlib/assert-has-int8array-support0.2.3indirect
npm@stdlib/assert-has-node-buffer-support0.2.3indirect
npm@stdlib/assert-has-own-property0.2.3indirect
npm@stdlib/assert-has-symbol-support0.2.3indirect
npm@stdlib/assert-has-to-primitive-symbol-support0.1.1indirect
npm@stdlib/assert-has-tostringtag-support0.2.3indirect
npm@stdlib/assert-has-uint16array-support0.2.3indirect
npm@stdlib/assert-has-uint32array-support0.2.3indirect
npm@stdlib/assert-has-uint8array-support0.2.3indirect
npm@stdlib/assert-has-uint8clampedarray-support0.2.3indirect
npm@stdlib/assert-is-arguments0.2.3indirect
npm@stdlib/assert-is-array0.2.3indirect
npm@stdlib/assert-is-big-endian0.2.3indirect
npm@stdlib/assert-is-boolean0.2.3indirect
npm@stdlib/assert-is-buffer0.2.3indirect
npm@stdlib/assert-is-collection0.2.3indirect
npm@stdlib/assert-is-enumerable-property0.2.3indirect
npm@stdlib/assert-is-error0.2.3indirect
npm@stdlib/assert-is-float32array0.2.3indirect
npm@stdlib/assert-is-float64array0.2.3indirect
npm@stdlib/assert-is-function0.2.3indirect
npm@stdlib/assert-is-int16array0.2.3indirect
npm@stdlib/assert-is-int32array0.2.3indirect
npm@stdlib/assert-is-int8array0.2.3indirect
npm@stdlib/assert-is-integer0.2.3indirect
npm@stdlib/assert-is-little-endian0.2.3indirect
npm@stdlib/assert-is-nan0.2.3indirect
npm@stdlib/assert-is-nonnegative-integer0.2.3indirect
npm@stdlib/assert-is-number0.2.3indirect
npm@stdlib/assert-is-object0.2.3indirect
npm@stdlib/assert-is-object-like0.2.3indirect
npm@stdlib/assert-is-plain-object0.2.3indirect
npm@stdlib/assert-is-regexp0.2.3indirect
npm@stdlib/assert-is-string0.2.3indirect
npm@stdlib/assert-is-uint16array0.2.3indirect
npm@stdlib/assert-is-uint32array0.2.3indirect
npm@stdlib/assert-is-uint8array0.2.3indirect
npm@stdlib/assert-is-uint8clampedarray0.2.3indirect
npm@stdlib/assert-napi-equal-types0.2.3indirect
npm@stdlib/assert-napi-is-type0.2.3indirect
npm@stdlib/assert-napi-status-ok0.2.3indirect
npm@stdlib/assert-tools-array-function0.2.3indirect
npm@stdlib/boolean-ctor0.2.3indirect
npm@stdlib/buffer-ctor0.2.3indirect
npm@stdlib/buffer-from-buffer0.2.3indirect
npm@stdlib/complex-float32-ctor0.1.1indirect
npm@stdlib/complex-float32-reim0.1.4indirect
npm@stdlib/complex-float64-ctor0.1.2indirect
npm@stdlib/complex-float64-reim0.1.4indirect
npm@stdlib/constants-array-max-typed-array-length0.2.3indirect
npm@stdlib/constants-float16-eps0.2.3indirect
npm@stdlib/constants-float16-exponent-bias0.3.1indirect
npm@stdlib/constants-float16-exponent-mask0.1.1indirect
npm@stdlib/constants-float16-max0.2.3indirect
npm@stdlib/constants-float16-num-significand-bits0.0.2indirect
npm@stdlib/constants-float16-sign-mask0.1.1indirect
npm@stdlib/constants-float16-significand-mask0.1.1indirect
npm@stdlib/constants-float16-smallest-normal0.2.3indirect
npm@stdlib/constants-float32-abs-mask0.2.3indirect
npm@stdlib/constants-float32-eps0.2.3indirect
npm@stdlib/constants-float32-exponent-bias0.2.3indirect
npm@stdlib/constants-float32-exponent-mask0.2.3indirect
npm@stdlib/constants-float32-ninf0.2.3indirect
npm@stdlib/constants-float32-num-significand-bits0.1.1indirect
npm@stdlib/constants-float32-pinf0.2.3indirect
npm@stdlib/constants-float32-sign-mask0.2.3indirect
npm@stdlib/constants-float32-significand-mask0.2.4indirect
npm@stdlib/constants-float64-eps0.2.3indirect
npm@stdlib/constants-float64-high-word-abs-mask0.2.3indirect
npm@stdlib/constants-float64-ninf0.2.3indirect
npm@stdlib/constants-float64-pinf0.2.3indirect
npm@stdlib/constants-int16-max0.2.3indirect
npm@stdlib/constants-int16-min0.2.3indirect
npm@stdlib/constants-int32-max0.3.1indirect
npm@stdlib/constants-int32-min0.2.3indirect
npm@stdlib/constants-int8-max0.2.3indirect
npm@stdlib/constants-int8-min0.2.3indirect
npm@stdlib/constants-uint16-max0.2.3indirect
npm@stdlib/constants-uint32-max0.2.3indirect
npm@stdlib/constants-uint8-max0.2.3indirect
npm@stdlib/error-tools-fmtprodmsg0.2.3indirect
npm@stdlib/fs-exists0.2.3indirect
npm@stdlib/fs-resolve-parent-path0.2.3indirect
npm@stdlib/math-base-assert-is-finite0.2.3indirect
npm@stdlib/math-base-assert-is-finitef0.2.3indirect
npm@stdlib/math-base-assert-is-integer0.2.7indirect
npm@stdlib/math-base-assert-is-nan0.2.3indirect
npm@stdlib/math-base-assert-is-nanf0.2.3indirect
npm@stdlib/math-base-napi-unary0.2.7indirect
npm@stdlib/math-base-special-abs0.2.3indirect
npm@stdlib/math-base-special-absf0.2.3indirect
npm@stdlib/math-base-special-floor0.2.4indirect
npm@stdlib/napi-argv0.2.3indirect
npm@stdlib/napi-argv-double0.2.2indirect
npm@stdlib/napi-argv-float0.2.3indirect
npm@stdlib/napi-argv-int320.2.3indirect
npm@stdlib/napi-create-int320.0.3indirect
npm@stdlib/napi-export0.3.1indirect
npm@stdlib/number-ctor0.2.3indirect
npm@stdlib/number-float16-base-to-float320.1.2indirect
npm@stdlib/number-float16-base-to-float640.1.2indirect
npm@stdlib/number-float16-ctor0.1.2indirect
npm@stdlib/number-float32-base-exponent0.2.4indirect
npm@stdlib/number-float32-base-to-float160.1.1indirect
npm@stdlib/number-float32-base-to-word0.2.3indirect
npm@stdlib/number-float64-base-to-float160.1.2indirect
npm@stdlib/number-float64-base-to-float320.2.3indirect
npm@stdlib/number-float64-base-to-words0.2.3indirect
npm@stdlib/object-ctor0.2.2indirect
npm@stdlib/os-byte-order0.2.3indirect
npm@stdlib/os-float-word-order0.2.3indirect
npm@stdlib/process-cwd0.2.3indirect
npm@stdlib/regexp-extended-length-path0.2.3indirect
npm@stdlib/regexp-function-name0.2.3indirect
npm@stdlib/regexp-regexp0.2.3indirect
npm@stdlib/string-base-format-interpolate0.2.4indirect
npm@stdlib/string-base-format-tokenize0.2.4indirect
npm@stdlib/string-base-lowercase0.4.1indirect
npm@stdlib/string-base-replace0.2.3indirect
npm@stdlib/string-format0.2.3indirect
npm@stdlib/string-replace0.2.3indirect
npm@stdlib/symbol-ctor0.2.3indirect
npm@stdlib/symbol-to-primitive0.1.2indirect
npm@stdlib/types0.4.3indirect
npm@stdlib/utils-constructor-name0.2.3indirect
npm@stdlib/utils-convert-path0.2.3indirect
npm@stdlib/utils-copy0.2.3indirect
npm@stdlib/utils-define-nonenumerable-read-only-property0.2.3indirect
npm@stdlib/utils-define-property0.2.5indirect
npm@stdlib/utils-define-read-only-property0.2.3indirect
npm@stdlib/utils-escape-regexp-string0.2.3indirect
npm@stdlib/utils-get-prototype-of0.2.3indirect
npm@stdlib/utils-global0.2.3indirect
npm@stdlib/utils-index-of0.2.3indirect
npm@stdlib/utils-keys0.2.3indirect
npm@stdlib/utils-library-manifest0.2.4indirect
npm@stdlib/utils-native-class0.2.3indirect
npm@stdlib/utils-noop0.2.3indirect
npm@stdlib/utils-property-descriptor0.2.3indirect
npm@stdlib/utils-property-names0.2.3indirect
npm@stdlib/utils-regexp-from-string0.2.3indirect
npm@stdlib/utils-type-of0.2.3indirect
npm@tootallnate/once1.1.2indirect
npm@tryghost/bunyan-rotating-filestream0.0.7indirect
npm@tryghost/database-info0.3.35indirect
npm@tryghost/elasticsearch3.0.29indirect
npm@tryghost/http-stream0.1.42indirect
npm@tryghost/logging2.5.5indirect
npm@tryghost/pretty-stream0.2.5indirect
npm@tryghost/pro-ship1.1.7indirect
npm@tryghost/promise0.3.20indirect
npm@tryghost/request1.0.17indirect
npm@tryghost/root-utils0.3.38indirect
npm@tryghost/root-utils2.3.2indirect
npm@tryghost/tpl0.1.40indirect
npm@tryghost/validator0.2.22indirect
npm@tryghost/version0.1.38indirect
npm@types/http-cache-semantics4.2.0indirect
npm@types/node26.1.1indirect
npmabbrev1.1.1indirect
npmabbrev4.0.0indirect
npmagent-base6.0.2indirect
npmagentkeepalive4.6.0indirect
npmaggregate-error3.1.0indirect
npmajv6.15.0indirect
npmansi-regex5.0.1indirect
npmansi-regex6.2.2indirect
npmansi-styles4.3.0indirect
npmansi-styles6.2.3indirect
npmappend-transform2.0.0indirect
npmaproba2.1.0indirect
npmarchy1.0.0indirect
npmare-we-there-yet3.0.1indirect
npmargparse1.0.10indirect
npmargparse2.0.1indirect
npmasn10.2.6indirect
npmassert-plus1.0.0indirect
npmasync3.2.6indirect
npmasynckit0.4.0indirect
npmaws-sign20.7.0indirect
npmaws-ssl-profiles1.1.2indirect
npmaws41.13.2indirect
npmbalanced-match1.0.2indirect
npmbalanced-match4.0.4indirect
npmbase64-js1.5.1indirect
npmbaseline-browser-mapping2.10.42indirect
npmbcrypt-pbkdf1.0.2indirect
npmbetter-sqlite312.11.1indirect
npmbindings1.5.0indirect
npmbl4.1.0indirect
npmbookshelf1.2.0indirect
npmbrace-expansion1.1.16indirect
npmbrace-expansion2.1.2indirect
npmbrace-expansion5.0.7indirect
npmbrowser-stdout1.3.1indirect
npmbrowserslist4.28.5indirect
npmbuffer5.7.1indirect
npmbunyan1.8.15indirect
npmbunyan-loggly2.0.1indirect
npmbyte-counter0.1.0indirect
npmcacache15.3.0indirect
npmcacheable-lookup7.0.0indirect
npmcacheable-request13.0.19indirect
npmcaching-transform4.0.0indirect
npmcaller1.1.0indirect
npmcamelcase5.3.1indirect
npmcamelcase6.3.0indirect
npmcaniuse-lite1.0.30001803indirect
npmcaseless0.12.0indirect
npmchalk4.1.2indirect
npmchokidar4.0.3indirect
npmchownr1.1.4indirect
npmchownr2.0.0indirect
npmchownr3.0.0indirect
npmclean-stack2.2.0indirect
npmcliui6.0.0indirect
npmcliui7.0.4indirect
npmcliui8.0.1indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.4indirect
npmcolor-support1.1.3indirect
npmcolorette2.0.19indirect
npmcolors1.4.0indirect
npmcombined-stream1.0.8indirect
npmcommander10.0.1indirect
npmcommander5.1.0indirect
npmcommondir1.0.1indirect
npmcompare-ver2.0.2indirect
npmconcat-map0.0.1indirect
npmconsole-control-strings1.1.0indirect
npmconvert-source-map1.9.0indirect
npmconvert-source-map2.0.0indirect
npmcore-util-is1.0.2indirect
npmcreate-error0.3.1indirect
npmcross-spawn7.0.6indirect
npmdashdash1.14.1indirect
npmdate-format4.0.14indirect
npmdebug2.6.9indirect
npmdebug4.3.4indirect
npmdebug4.4.3indirect
npmdecamelize1.2.0indirect
npmdecamelize4.0.0indirect
npmdecompress-response10.0.0indirect
npmdecompress-response6.0.0indirect
npmdeep-extend0.6.0indirect
npmdefault-require-extensions3.0.1indirect
npmdelayed-stream1.0.0indirect
npmdelegates1.0.0indirect
npmdenque2.1.0indirect
npmdetect-libc2.1.2indirect
npmdiff7.0.0indirect
npmdiff9.0.0indirect
npmdtrace-provider0.8.8indirect
npmeastasianwidth0.2.0indirect
npmecc-jsbn0.1.2indirect
npmelectron-to-chromium1.5.389indirect
npmemoji-regex8.0.0indirect
npmemoji-regex9.2.2indirect
npmencoding0.1.13indirect
npmend-of-stream1.4.5indirect
npmenv-paths2.2.1indirect
npmerr-code2.0.3indirect
npmes-errors1.3.0indirect
npmes6-error4.1.1indirect
npmescalade3.2.0indirect
npmescape-string-regexp4.0.0indirect
npmesm3.2.25indirect
npmesprima4.0.1indirect
npmexpand-template2.0.3indirect
npmexponential-backoff3.1.3indirect
npmextend3.0.2indirect
npmextsprintf1.3.0indirect
npmfast-deep-equal3.1.3indirect
npmfast-json-stable-stringify2.1.0indirect
npmfdir6.5.0indirect
npmfile-uri-to-path1.0.0indirect
npmfind-cache-dir3.3.2indirect
npmfind-root1.1.0indirect
npmfind-up4.1.0indirect
npmfind-up5.0.0indirect
npmflat5.0.2indirect
npmforeground-child2.0.0indirect
npmforeground-child3.3.1indirect
npmforever-agent0.6.1indirect
npmform-data2.3.3indirect
npmform-data-encoder4.1.0indirect
npmfromentries1.3.2indirect
npmfs-constants1.0.0indirect
npmfs-extra11.3.6indirect
npmfs-minipass2.1.0indirect
npmfs.realpath1.0.0indirect
npmfunction-bind1.1.2indirect
npmgauge4.0.4indirect
npmgelf-stream1.1.1indirect
npmgelfling0.3.1indirect
npmgenerate-function2.3.1indirect
npmgensync1.0.0-beta.2indirect
npmget-caller-file2.0.5indirect
npmget-package-type0.1.0indirect
npmget-stream9.0.1indirect
npmgetopts2.3.0indirect
npmgetpass0.1.7indirect
npmgithub-from-package0.0.0indirect
npmglob10.5.0indirect
npmglob13.0.6indirect
npmglob6.0.4indirect
npmglob7.2.3indirect
npmgot14.6.6indirect
npmgraceful-fs4.2.11indirect
npmhar-schema2.0.0indirect
npmhar-validator5.1.5indirect
npmhas-flag4.0.0indirect
npmhas-unicode2.0.1indirect
npmhasha5.2.2indirect
npmhasown2.0.4indirect
npmhe1.2.0indirect
npmhpagent1.2.0indirect
npmhtml-escaper2.0.2indirect
npmhttp-cache-semantics4.2.0indirect
npmhttp-proxy-agent4.0.1indirect
npmhttp-signature1.2.0indirect
npmhttp2-wrapper2.2.1indirect
npmhttps-proxy-agent5.0.1indirect
npmhumanize-ms1.2.1indirect
npmiconv-lite0.6.3indirect
npmiconv-lite0.7.3indirect
npmieee7541.2.1indirect
npmimurmurhash0.1.4indirect
npmindent-string4.0.0indirect
npminfer-owner1.0.4indirect
npminflection1.13.4indirect
npminflight1.0.6indirect
npminherits2.0.4indirect
npmini1.3.8indirect
npmini2.0.0indirect
npminterpret2.2.0indirect
npmip-address10.2.0indirect
npmis-core-module2.16.2indirect
npmis-fullwidth-code-point3.0.0indirect
npmis-lambda1.0.1indirect
npmis-path-inside3.0.3indirect
npmis-plain-obj2.1.0indirect
npmis-property1.0.2indirect
npmis-stream2.0.1indirect
npmis-stream4.0.1indirect
npmis-typedarray1.0.0indirect
npmis-unicode-supported0.1.0indirect
npmis-windows1.0.2indirect
npmisexe2.0.0indirect
npmisexe4.0.0indirect
npmisstream0.1.2indirect
npmistanbul-lib-coverage3.2.2indirect
npmistanbul-lib-hook3.0.0indirect
npmistanbul-lib-instrument6.0.3indirect
npmistanbul-lib-processinfo3.0.1indirect
npmistanbul-lib-report3.0.1indirect
npmistanbul-lib-source-maps4.0.1indirect
npmistanbul-reports3.2.0indirect
npmjackspeak3.4.3indirect
npmjs-tokens4.0.0indirect
npmjs-yaml3.15.0indirect
npmjs-yaml4.3.0indirect
npmjsbn0.1.1indirect
npmjsesc3.1.0indirect
npmjson-schema0.4.0indirect
npmjson-schema-traverse0.4.1indirect
npmjson-stringify-safe5.0.1indirect
npmjson52.2.3indirect
npmjsonfile6.2.1indirect
npmjsprim1.4.2indirect
npmkeyv5.6.0indirect
npmknex3.2.10indirect
npmknex3.3.0indirect
npmknex-migrator5.4.1indirect
npmlocate-path5.0.0indirect
npmlocate-path6.0.0indirect
npmlodash._reinterpolate3.0.0indirect
npmlodash.flattendeep4.4.0indirect
npmlodash.template4.18.1indirect
npmlodash.templatesettings4.2.0indirect
npmlog-symbols4.1.0indirect
npmlong5.3.2indirect
npmlong-timeout0.1.1indirect
npmlowercase-keys3.0.0indirect
npmlru-cache10.4.3indirect
npmlru-cache11.5.2indirect
npmlru-cache5.1.1indirect
npmlru-cache6.0.0indirect
npmlru.min1.1.4indirect
npmmake-dir3.1.0indirect
npmmake-dir4.0.0indirect
npmmake-fetch-happen9.1.0indirect
npmmime-db1.52.0indirect
npmmime-types2.1.35indirect
npmmimic-response3.1.0indirect
npmmimic-response4.0.0indirect
npmminimatch10.2.5indirect
npmminimatch3.1.5indirect
npmminimatch9.0.9indirect
npmminimist1.2.8indirect
npmminipass3.3.6indirect
npmminipass5.0.0indirect
npmminipass7.1.3indirect
npmminipass-collect1.0.2indirect
npmminipass-fetch1.4.1indirect
npmminipass-flush1.0.7indirect
npmminipass-pipeline1.2.4indirect
npmminipass-sized1.0.3indirect
npmminizlib2.1.2indirect
npmminizlib3.1.0indirect
npmmkdirp0.5.6indirect
npmmkdirp1.0.4indirect
npmmkdirp-classic0.5.3indirect
npmmocha11.7.6indirect
npmmoment2.30.1indirect
npmmoment-timezone0.5.48indirect
npmms2.0.0indirect
npmms2.1.2indirect
npmms2.1.3indirect
npmmv2.1.1indirect
npmmysql23.22.5indirect
npmmysql23.23.1indirect
npmnamed-placeholders1.1.6indirect
npmnan2.28.0indirect
npmnapi-build-utils2.0.0indirect
npmnconf0.13.0indirect
npmncp2.0.0indirect
npmnegotiator0.6.4indirect
npmnode-abi3.94.0indirect
npmnode-addon-api7.1.1indirect
npmnode-addon-api8.9.0indirect
npmnode-gyp12.4.0indirect
npmnode-gyp8.4.1indirect
npmnode-loggly-bulk3.0.1indirect
npmnode-preload0.2.1indirect
npmnode-releases2.0.50indirect
npmnopt5.0.0indirect
npmnopt9.0.0indirect
npmnormalize-url8.1.1indirect
npmnpmlog6.0.2indirect
npmnyc18.0.0indirect
npmoauth-sign0.9.0indirect
npmonce1.4.0indirect
npmoxfmt0.60.0indirect
npmoxlint1.75.0indirect
npmp-cancelable4.0.1indirect
npmp-limit2.3.0indirect
npmp-limit3.1.0indirect
npmp-locate4.1.0indirect
npmp-locate5.0.0indirect
npmp-map3.0.0indirect
npmp-map4.0.0indirect
npmp-try2.2.0indirect
npmpackage-hash4.0.0indirect
npmpackage-json-from-dist1.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
npmperformance-now2.1.0indirect
npmpg-connection-string2.6.2indirect
npmpicocolors1.1.1indirect
npmpicomatch4.0.5indirect
npmpkg-dir4.2.0indirect
npmprebuild-install7.1.3indirect
npmprettyjson1.2.5indirect
npmproc-log6.1.0indirect
npmprocess-on-spawn1.1.0indirect
npmpromise-inflight1.0.1indirect
npmpromise-retry2.0.1indirect
npmpsl1.15.0indirect
npmpump3.0.4indirect
npmpunycode2.3.1indirect
npmqs6.5.5indirect
npmquick-lru5.1.1indirect
npmrandombytes2.1.0indirect
npmrc1.2.8indirect
npmreadable-stream3.6.2indirect
npmreaddirp4.1.2indirect
npmrechoir0.8.0indirect
npmrelease-zalgo1.0.0indirect
npmrequest2.88.2indirect
npmrequire-directory2.1.1indirect
npmrequire-main-filename2.0.0indirect
npmresolve1.22.12indirect
npmresolve-alpn1.2.1indirect
npmresolve-from5.0.0indirect
npmresponselike4.0.2indirect
npmretry0.12.0indirect
npmrimraf2.4.5indirect
npmrimraf3.0.2indirect
npmrimraf6.1.3indirect
npmsafe-buffer5.2.1indirect
npmsafe-json-stringify1.2.0indirect
npmsafer-buffer2.1.2indirect
npmsecure-json-parse2.7.0indirect
npmsecure-keys1.0.0indirect
npmsemver6.3.1indirect
npmsemver7.8.5indirect
npmserialize-javascript6.0.2indirect
npmset-blocking2.0.0indirect
npmshebang-command2.0.0indirect
npmshebang-regex3.0.0indirect
npmshould13.2.3indirect
npmshould-equal2.0.0indirect
npmshould-format3.0.3indirect
npmshould-type1.4.0indirect
npmshould-type-adaptors1.1.0indirect
npmshould-util1.0.1indirect
npmsignal-exit3.0.7indirect
npmsignal-exit4.1.0indirect
npmsimple-concat1.0.1indirect
npmsimple-get4.0.1indirect
npmsinon22.1.0indirect
npmsmart-buffer4.2.0indirect
npmsocks2.8.9indirect
npmsocks-proxy-agent6.2.1indirect
npmsource-map0.6.1indirect
npmspawn-wrap3.0.0indirect
npmsplit24.2.0indirect
npmsprintf-js1.0.3indirect
npmsql-escaper1.5.1indirect
npmsqlite35.1.7indirect
npmsqlite36.0.1indirect
npmsshpk1.18.0indirect
npmssri8.0.1indirect
npmstring-width4.2.3indirect
npmstring-width5.1.2indirect
npmstring_decoder1.3.0indirect
npmstrip-ansi6.0.1indirect
npmstrip-ansi7.2.0indirect
npmstrip-bom4.0.0indirect
npmstrip-json-comments2.0.1indirect
npmstrip-json-comments3.1.1indirect
npmsupports-color7.2.0indirect
npmsupports-color8.1.1indirect
npmsupports-preserve-symlinks-flag1.0.0indirect
npmtar6.2.1indirect
npmtar7.5.19indirect
npmtar-fs2.1.5indirect
npmtar-stream2.2.0indirect
npmtarn3.1.0indirect
npmtest-exclude8.0.0indirect
npmtildify2.0.0indirect
npmtinyglobby0.2.17indirect
npmtinypool2.1.0indirect
npmtough-cookie2.5.0indirect
npmtslib2.8.1indirect
npmtunnel-agent0.6.0indirect
npmtweetnacl0.14.5indirect
npmtype-detect4.0.8indirect
npmtype-detect4.1.0indirect
npmtype-fest0.8.1indirect
npmtype-fest4.41.0indirect
npmtypedarray-to-buffer3.1.5indirect
npmundici5.29.0indirect
npmundici6.27.0indirect
npmundici-types8.3.0indirect
npmunique-filename1.1.1indirect
npmunique-slug2.0.2indirect
npmuniversalify2.0.1indirect
npmupdate-browserslist-db1.2.3indirect
npmuri-js4.4.1indirect
npmutil-deprecate1.0.2indirect
npmuuid3.4.0indirect
npmuuid9.0.1indirect
npmvalidator7.2.0indirect
npmverror1.10.0indirect
npmwhich2.0.2indirect
npmwhich6.0.1indirect
npmwhich-module2.0.1indirect
npmwide-align1.1.5indirect
npmworkerpool9.3.4indirect
npmwrap-ansi6.2.0indirect
npmwrap-ansi7.0.0indirect
npmwrap-ansi8.1.0indirect
npmwrappy1.0.2indirect
npmwrite-file-atomic3.0.3indirect
npmy18n4.0.3indirect
npmy18n5.0.8indirect
npmyallist3.1.1indirect
npmyallist4.0.0indirect
npmyallist5.0.0indirect
npmyargs15.4.1indirect
npmyargs16.2.2indirect
npmyargs17.7.3indirect
npmyargs-parser18.1.3indirect
npmyargs-parser20.2.9indirect
npmyargs-parser21.1.1indirect
npmyargs-unparser2.0.0indirect
npmyocto-queue0.1.0indirect
Dependency advisories 1

Installing npm:bookshelf-relations@2.8.0 pulls in 174 packages, direct and transitive: 1 carry known advisories, of which 0 are direct dependencies.

PackageVersionRelationSeverityAdvisoriesFixed in
uuid9.0.1indirecthigh113.0.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": [],
      "is_fork": false,
      "size_kb": 2186,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "JavaScript": 172965
      },
      "pushed_at": "2026-07-25T06:54:28Z",
      "created_at": "2017-11-15T11:26:23Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-25T06:54:32Z",
      "description": "Bookshelf.js plugin that applies nested relation changes while saving models",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "https://ghost.org",
      "name": "Ghost",
      "type": "Organization",
      "login": "TryGhost",
      "company": null,
      "location": null,
      "followers": 1734,
      "avatar_url": "https://avatars.githubusercontent.com/u/2178663?v=4",
      "created_at": "2012-08-19T13:28:58Z",
      "is_verified": null,
      "public_repos": 153,
      "account_age_days": 5088
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.8.0",
          "kind": "minor",
          "published_at": "2025-02-13T11:41:08Z"
        },
        {
          "tag": "v2.7.0",
          "kind": "minor",
          "published_at": "2024-03-19T10:30:50Z"
        },
        {
          "tag": "v2.6.0",
          "kind": "minor",
          "published_at": "2023-08-21T10:57:13Z"
        },
        {
          "tag": "v2.5.1",
          "kind": "patch",
          "published_at": "2023-01-03T14:16:59Z"
        },
        {
          "tag": "v2.5.0",
          "kind": "minor",
          "published_at": "2022-11-10T10:16:20Z"
        },
        {
          "tag": "v2.4.0",
          "kind": "minor",
          "published_at": "2022-03-07T10:13:37Z"
        },
        {
          "tag": "v2.3.0",
          "kind": "minor",
          "published_at": "2021-10-27T10:08:47Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2021-05-05T17:26:52Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2021-01-05T14:17:05Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2020-04-28T16:00:52Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2020-04-13T15:35:28Z"
        },
        {
          "tag": "v1.4.1",
          "kind": "patch",
          "published_at": "2021-01-05T15:18:32Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2021-01-05T14:01:05Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2020-04-08T06:59:02Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2020-02-20T16:17:12Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2019-08-28T17:43:02Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2019-08-28T16:40:39Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2019-08-28T05:55:20Z"
        },
        {
          "tag": "v1.1.2",
          "kind": "patch",
          "published_at": "2019-08-27T18:59:26Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2019-04-30T14:30:03Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2019-02-07T21:09:44Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2019-02-03T12:01:38Z"
        },
        {
          "tag": "0.2.1",
          "kind": "patch",
          "published_at": "2018-04-30T18:42:20Z"
        },
        {
          "tag": "0.2.0",
          "kind": "minor",
          "published_at": "2018-03-19T14:41:45Z"
        },
        {
          "tag": "0.1.13",
          "kind": "patch",
          "published_at": "2018-02-18T03:34:44Z"
        },
        {
          "tag": "0.1.12",
          "kind": "patch",
          "published_at": "2018-02-17T20:34:31Z"
        },
        {
          "tag": "0.1.11",
          "kind": "patch",
          "published_at": "2018-02-16T19:06:24Z"
        },
        {
          "tag": "0.1.10",
          "kind": "patch",
          "published_at": "2018-01-26T16:09:15Z"
        },
        {
          "tag": "0.1.9",
          "kind": "patch",
          "published_at": "2018-01-26T15:48:01Z"
        },
        {
          "tag": "0.1.8",
          "kind": "patch",
          "published_at": "2018-01-26T15:35:27Z"
        },
        {
          "tag": "0.1.7",
          "kind": "patch",
          "published_at": "2018-01-26T01:40:50Z"
        },
        {
          "tag": "0.1.6",
          "kind": "patch",
          "published_at": "2018-01-26T01:31:32Z"
        },
        {
          "tag": "0.1.5",
          "kind": "patch",
          "published_at": "2018-01-24T18:25:54Z"
        },
        {
          "tag": "0.1.4",
          "kind": "patch",
          "published_at": "2018-01-02T22:15:33Z"
        },
        {
          "tag": "0.1.3",
          "kind": "patch",
          "published_at": "2017-11-20T08:35:06Z"
        },
        {
          "tag": "0.1.2",
          "kind": "patch",
          "published_at": "2017-11-20T08:33:33Z"
        },
        {
          "tag": "0.1.1",
          "kind": "patch",
          "published_at": "2017-11-19T18:57:43Z"
        },
        {
          "tag": "0.1.0",
          "kind": "minor",
          "published_at": "2017-11-19T18:47:58Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "0302d7dbd0f67ad778f3657bd22bbff22f39662a",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency oxlint to v1.75.0 (#251)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-25T06:54:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "767548111b39613bc62348f049ef960e34b40de2",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency oxfmt to v0.60.0 (#250)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-25T03:13:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a55f1b9b6387c2c5a401f5cb79519c37d5bf84a",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency sinon to v22.1.0 (#249)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-24T00:14:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62d4f9e4abdfcf5e811cac7001d306caaf2f7294",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency mysql2 to v3.23.1 (#248)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-22T19:08:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8cf46faa2514c80dd73be6df9f5d1b65021926c",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update actions/checkout digest to 3d3c42e (#247)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-21T00:40:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4df6c8f672f8a9497c2f7a3bfb1a8cfc6784b6e8",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency mysql2 to v3.23.0 (#246)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-18T02:49:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9c68028ed54a4f1cdd79e2dbc103de659663dbe",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency oxlint to v1.74.0 (#245)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-17T19:35:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f91be5243d2f832386e5cae73a89c050562ab0cf",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency oxfmt to v0.59.0 (#244)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-17T12:44:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9b2c325b13611eea663db83a73ce629099f0afd",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency @tryghost/pro-ship to v1.1.7 (#243)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-16T11:46:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d4883172387ef33fb4bf085971d49d0bb9c4035",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update actions/setup-node action to v7 (#242)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-14T12:55:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "038b535c5e9e1416e07e7dc5ba0bc721be0dcecd",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update actions/setup-node digest to 2499707 (#241)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-14T07:36:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5aca158d19839ea1495e4799a5e2723284cbdd0",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update pnpm to v10.34.5 (#240)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-13T17:48:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5c11196676c387ae105100e5b8174417de5bfdc",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency mysql2 to v3.22.6 (#239)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-10T22:07:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ab4035cdfd63e30524b45f2c262a01c2145e767",
          "body": null,
          "is_bot": false,
          "headline": "Add agent working notes",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-08T15:47:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c75f1f26a06259fc2e44855d4506e27520f5feb0",
          "body": null,
          "is_bot": false,
          "headline": "Improve README overview and usage docs",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-08T15:37:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1578c979e77d74697e4411acfd93796cab77aff",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Pin dependencies (#236)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T13:21:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf23bf1cc64d3fa1fbc239624ff0155260f24024",
          "body": null,
          "is_bot": false,
          "headline": "Migrate linting to oxlint and oxfmt",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-08T13:20:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79bdfee9336415cedac42c8ab4b362fc961dcc3d",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency node to v22.23.1 (#234)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T12:40:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aae9b9f5c1ef40ba2dbddfe542b3e263067d217f",
          "body": null,
          "is_bot": false,
          "headline": "Add trusted npm publishing workflow",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-08T12:39:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5cef9d233b7737d269e604f1338029b3eb6f671",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Lock file maintenance (#207)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T12:09:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "134f1df4d5f1cb52986ecd78379a58e05f597981",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency sqlite3 to v6 (#211)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T12:09:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24883b8b2dc541c12da4cd05845c9f955ec1f217",
          "body": "# Conflicts:\n#\tpackage.json\n\n# Conflicts:\n#\tpnpm-lock.yaml\n\n# Conflicts:\n#\tpnpm-lock.yaml\n\n# Conflicts:\n#\tpnpm-lock.yaml",
          "is_bot": false,
          "headline": "Repair CI after Renovate updates",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-08T12:06:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97619d793f1a1d9cd62620b7a4e045ed3398a3f2",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency sinon to v22 (#213)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:49:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75fea91ba5b08613eab4f475368a6eb1f1ea90aa",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency nyc to v18 (#208)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:46:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbe26d58ba39158c3574c483b859addbc0dbad39",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency mocha to v11 (#188)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:44:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eec3dcc6b7746c5a09d3846f9b61e2967b23042e",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency knex to v3 (#168)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:40:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cfd2315005e5c9b6fd74ee45eaad3ae67819f94",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency eslint-plugin-ghost to v3 (#225)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:30:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a85fd0f202d5f9036ec0457016616ebc32c1d3f",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency eslint to v10 (#224)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:27:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2730b8ec9430e45efb007d3ed04b13bdd73331a",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update actions/setup-node action to v6 (#200)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:24:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93a1192f282a0bbcb2ca1dead35e7dbf6c37da53",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update actions/checkout action to v7 (#214)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:15:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06c1e549d57e57eabddcd537863ff570baa74430",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency sinon to v15.2.0 (#183)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:12:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0db1d85a5cc1fe62f2bfb225e83192c24ec083f1",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency nconf to v0.13.0 (#169)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:08:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d03aecf8165e274a168d6dd4d273b595d8aa8565",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency mysql2 to v3.22.5 (#192)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T11:05:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e725fb2f26730412ebba8f1ba508c357f88e01fa",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency mocha to v10.8.2 (#182)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T10:55:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa4d572801493ffadb88839fffe971d6a9821e52",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency knex-migrator to v5.4.1 (#196)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T10:48:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b306ae88e8a55d6e226f0d21b18f0434a33bd0fc",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency knex to v2.5.1 (#158)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T10:40:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31569270a435a723c1ac6053a672fb7b18055c0b",
          "body": null,
          "is_bot": false,
          "headline": "Restore lint after eslint-plugin update (#229)",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-08T10:38:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53b61f0ce6259a8db9110fdac3ab6c7f577906f1",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency eslint-plugin-ghost to v2.18.1 (#223)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T08:41:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd989ccb314f12f6336e2baeefc84e8b80c16e16",
          "body": null,
          "is_bot": false,
          "headline": "Migrate package management to pnpm",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-08T08:39:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3a0e7882d20303e0a15986a9efe96b93d5fa9a2",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency eslint to v8.57.1 (#222)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T08:35:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b276b7010ec661a0f8825b5a1c73f2bbbb2e6491",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency sqlite3 to v5.1.7 (#191)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T08:29:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab20a4c9dc04250aef6413659717deaa8df6ae5d",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update dependency @tryghost/debug to v0.1.40 (#228)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T08:23:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8db2c3bab87d77bfa10ce9b9d09c8a0cc5d623ca",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Pin dependencies (#221)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T08:14:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a6039c839955de86a9696c01cdaa68e70d2850b",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Pin dependencies (#220)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-07-08T08:06:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da75f7f32c573d011d47a2ae2c77288a0d86ce46",
          "body": null,
          "is_bot": false,
          "headline": "Use shared Renovate preset (#219)",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-08T08:05:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c3496e18f6c6cef1074ccac83a274c9da21cd65",
          "body": null,
          "is_bot": false,
          "headline": "Remove unused deep-diff dependency (#218)",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-07T15:37:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3526aff2688d6195a38a641dcc56d3cd919b44c9",
          "body": null,
          "is_bot": false,
          "headline": "Add stable required check (#217)",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-07T15:31:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f94d6674b86f9657f6cddc8c2f56e0e8071c223",
          "body": null,
          "is_bot": false,
          "headline": "Enforce coverage in CI (#216)",
          "author_name": "Sam Lord",
          "author_login": "sam-lord",
          "committed_at": "2026-07-07T15:19:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e2be537168953ebb6c6b9a7396cd4a8d4a7cec6",
          "body": null,
          "is_bot": true,
          "headline": "Update dependency lodash to v4.18.1",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-04-01T21:38:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0634def32f23323cbb50b6f1b317d94a7dc2472c",
          "body": null,
          "is_bot": true,
          "headline": "Update dependency @tryghost/errors to v1.3.13",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-02-21T02:36:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f60e5f41da16806290a51d937760b0aedcea9bc",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-02-16T02:56:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f998e6e4b68a0d36afe1725e4d670f284fbd9adc",
          "body": null,
          "is_bot": true,
          "headline": "Update dependency @tryghost/errors to v1.3.9",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-02-12T17:46:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1565de80f59a808041ca53af1f5dc5d1842b74d",
          "body": "no issue\n\nReplaced `mirromutth/mysql-action` with a native GitHub Actions service\ncontainer for MySQL. This removes the docker-in-docker approach and\nuses the built-in service container support with health checks instead.",
          "is_bot": false,
          "headline": "Switched to GitHub native MySQL service container (#203)",
          "author_name": "Kevin Ansfield",
          "author_login": "kevinansfield",
          "committed_at": "2026-02-12T17:45:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f31d9ac0f02991032763ab5cbbb097cfb5dcee55",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-02-09T02:48:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a5737ada6a010efeda4659293dd39a2e88b6b04",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-02-02T02:54:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "737a27ca408936f917dbe58fa06ad1ed8a2f5b59",
          "body": null,
          "is_bot": true,
          "headline": "Update dependency lodash to v4.17.23",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-01-21T18:44:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93de83c39d2b8a2a4ec26053ff1154077ede782a",
          "body": "Co-authored-by: Hannah Wolfe <github.erisds@gmail.com>",
          "is_bot": false,
          "headline": "2026",
          "author_name": "John O'Nolan",
          "author_login": "JohnONolan",
          "committed_at": "2026-01-21T13:18:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b153fc33d85c16cad118e38070d9fe29f18251a5",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-01-19T03:57:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42ecbe6ed22a776bf16ee9115039cd8d28b3a7c3",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-01-12T02:27:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8a6c8d1267694a62c3fd457e4bd84a0ddc5f06e",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2026-01-05T03:15:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13d9ae2945ca72bc8d871c6b991e43395ce98e04",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-12-29T02:56:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47fa4d748e128ffe6df621be359a2a86ae480ae3",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-12-22T03:33:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea45b792d0ffbb3c30224c4893e98651b09e0d31",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-12-15T03:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05f8fee2d941036c867bf28937489e76c37dd60a",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-12-08T02:48:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9338fadfbc5e3ca4ca3088b2b45774aaa1a2a2d",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-12-01T02:51:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a3220034655833575575b462f6c49bff5013425",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-11-24T02:53:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5f57c081d251705a8a531b3ec26a69564cffb50",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-11-17T03:12:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03209d0cab7f42aaf1970aa106940fa24e11c4b4",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-11-10T03:52:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6338b29c67114557ec6d11f9ac8ccfe916af378",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-11-03T03:31:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e90c943ea33ec5261a1b0906e0822c9695684e7",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-10-27T03:14:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e02c0848a3d70606472b64437f2c2e9c9b4a040",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-10-20T03:11:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2964d89ce110640ae376c969a334a92a60276aa9",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-10-13T02:44:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fbda6de35148ee8708c75f17ddce65a73e00006",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-10-06T02:34:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "829b7c8fb1f4bde73cc0bf31fdaf1a114958f926",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-09-29T03:15:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4519d93efdfd6ae718ceec8afc5f5fec4b8c7bfb",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-09-22T02:38:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b08c67fcb0c6044f6f1b7fbc7171c344f254066",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-09-15T03:01:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "debb75bcce32a54aeb07ff1d7ab82f598598a000",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-09-08T02:58:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3749020b7c6aa550ffc4512357dc8372d21a4fae",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-08-25T03:09:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b10443b347311200c9e848ab2dcf85de7172f60",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-08-18T03:22:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f956fc157d85ddd79c8a27b1dfe959fefe06aa6",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-08-11T03:02:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d33647f4a34fcbafa776f5155a8332cb98572c5",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-07-21T03:38:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc22e6bb189a6e39d3e12f4aad8fbddbc9ca5d84",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-06-23T03:57:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c25db20a6e60fee3c5d269b7c5072fe736040aea",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-06-02T02:43:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "244aebc2e4a715eec19457cfb3dabeac894f6898",
          "body": "Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Lock file maintenance (#194)",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-05-26T11:02:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecc133f937e9f21d83d965ec4e88085f7c2325cf",
          "body": null,
          "is_bot": true,
          "headline": "Update dependency @tryghost/errors to v1.3.8",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-05-26T00:21:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bf573662eab4f56e59bbcc659ccb5b14c478728",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-03-24T01:12:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7b1b18797fe1fbbe00cc995f43776e6ebef349e",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-03-17T00:44:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59ac189ecf52e23735a3979f4bf110ba58ca0415",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-03-10T01:11:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b6cb49bb281ec1ebc45bec3deb58e8301a9f090",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-03-03T01:03:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adca089dee82662b92ff39d4ff406e77fcfd803f",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-02-24T00:47:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34f9248c4777ff1bfa8e322f98dcd7835a42c007",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-02-17T00:46:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5e106261c4ac7d893940dffb86c15d101938523",
          "body": null,
          "is_bot": false,
          "headline": "v2.8.0",
          "author_name": "Daniel Lockyer",
          "author_login": "daniellockyer",
          "committed_at": "2025-02-13T11:41:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4844c5b441615cb216524b4b1b413bd164c636ad",
          "body": "ref https://linear.app/ghost/issue/ENG-2010/add-node-22-support-to-bookshelf-relations\n\n- this commit adds support for Node 22 by adding it to the list of\n  supported versions and CI\n- we should support this because it's an LTS version\n- no further changes required",
          "is_bot": false,
          "headline": "✨ Added support for Node 22",
          "author_name": "Daniel Lockyer",
          "author_login": "daniellockyer",
          "committed_at": "2025-02-13T11:38:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "709f1c2485e7a1cf88dc8bf80a117bc97c6dbef3",
          "body": null,
          "is_bot": true,
          "headline": "Update actions/setup-node action to v4",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-02-13T11:38:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e42d9afd4228fd201898c4bb2cf14803adf70712",
          "body": null,
          "is_bot": true,
          "headline": "Update actions/checkout action to v4",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-02-13T11:34:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98315a7d490741cad74d40c9cc86978ec4f86f16",
          "body": null,
          "is_bot": true,
          "headline": "Update dependency knex-migrator to v5.3.0",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-02-13T11:33:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65724983ee81e37a6254542623ea721c4ecc0fd5",
          "body": null,
          "is_bot": true,
          "headline": "Update dependency sqlite3 to v5.1.5 [SECURITY]",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-02-13T11:31:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f394f9861b0eb0eea6dd0ff6145939a6e1f868b",
          "body": null,
          "is_bot": true,
          "headline": "Update dependency mysql2 to v3.9.8 [SECURITY]",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-02-13T11:30:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6f9a38ebdb55f185bbc3eeb124e94189afbcd8c",
          "body": null,
          "is_bot": true,
          "headline": "Update dependency @tryghost/errors to v1.3.7",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-02-12T17:53:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6409f205323a99351c06ddfd7851dc8ea5120703",
          "body": null,
          "is_bot": true,
          "headline": "Lock file maintenance",
          "author_name": "renovate[bot]",
          "author_login": "renovate[bot]",
          "committed_at": "2025-02-10T02:39:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 38,
      "commits_last_year": 80,
      "latest_release_at": "2025-02-13T11:41:08Z",
      "latest_release_tag": "v2.8.0",
      "releases_from_tags": true,
      "days_since_last_push": 0,
      "active_weeks_last_year": 30,
      "days_since_latest_release": 527,
      "mean_days_between_releases": 194.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "bookshelf-relations",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "bookshelf",
            "relations",
            "relation",
            "nested",
            "relationship",
            "relationships",
            "associations",
            "association"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/bookshelf-relations",
          "is_deprecated": false,
          "latest_version": "2.8.0",
          "repository_url": "https://github.com/TryGhost/bookshelf-relations",
          "versions_count": 38,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 36,
          "monthly_downloads": 49733,
          "first_published_at": "2017-11-19T18:48:12.425000Z",
          "latest_published_at": "2025-02-13T11:41:07.495000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 527
        }
      ]
    },
    "popularity": {
      "forks": 11,
      "stars": 22,
      "watchers": 14,
      "fork_history": {
        "days": [
          {
            "date": "2017-12-04",
            "count": 1
          },
          {
            "date": "2018-08-07",
            "count": 1
          },
          {
            "date": "2018-12-13",
            "count": 1
          },
          {
            "date": "2019-07-12",
            "count": 1
          },
          {
            "date": "2020-06-20",
            "count": 1
          },
          {
            "date": "2020-07-28",
            "count": 1
          },
          {
            "date": "2021-01-04",
            "count": 1
          },
          {
            "date": "2021-07-05",
            "count": 1
          },
          {
            "date": "2022-03-03",
            "count": 1
          },
          {
            "date": "2025-10-23",
            "count": 1
          },
          {
            "date": "2026-01-18",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 11,
        "total_forks": 11
      },
      "star_history": null,
      "open_issues_and_prs": 7
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 41127,
      "source_files_sampled": 35,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 2117
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "uuid",
            "direct": false,
            "version": "9.0.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 94
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 1
        },
        "advisory_count": 1,
        "affected_count": 1,
        "assessed_count": 174,
        "malicious_count": 0,
        "assessed_package": "npm:bookshelf-relations@2.8.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@tryghost/debug",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.1.40"
        },
        {
          "name": "@tryghost/errors",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "1.3.13"
        },
        {
          "name": "bluebird",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "3.7.2"
        },
        {
          "name": "lodash",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "4.18.1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@tryghost/debug",
            "direct": true,
            "version": "0.1.40",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/errors",
            "direct": true,
            "version": "1.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "bluebird",
            "direct": true,
            "version": "3.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": true,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/compat-data",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-compilation-targets",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-globals",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-imports",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-transforms",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-option",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helpers",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/traverse",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@elastic/elasticsearch",
            "direct": false,
            "version": "8.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "@elastic/transport",
            "direct": false,
            "version": "8.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/busboy",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@gar/promisify",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/cliui",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/fs-minipass",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/load-nyc-config",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/schema",
            "direct": false,
            "version": "0.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/remapping",
            "direct": false,
            "version": "2.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.31",
            "ecosystem": "npm"
          },
          {
            "name": "@keyv/serialize",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/fs",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/move-file",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-android-arm-eabi",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-android-arm64",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-darwin-arm64",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-darwin-x64",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-freebsd-x64",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-arm-gnueabihf",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-arm-musleabihf",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-arm64-gnu",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-arm64-musl",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-ppc64-gnu",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-riscv64-gnu",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-riscv64-musl",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-s390x-gnu",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-x64-gnu",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-linux-x64-musl",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-openharmony-arm64",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-win32-arm64-msvc",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-win32-ia32-msvc",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxfmt/binding-win32-x64-msvc",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-android-arm-eabi",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-android-arm64",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-darwin-arm64",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-darwin-x64",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-freebsd-x64",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-arm-musleabihf",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-arm64-gnu",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-arm64-musl",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-ppc64-gnu",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-riscv64-gnu",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-riscv64-musl",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-s390x-gnu",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-x64-gnu",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-x64-musl",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-openharmony-arm64",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-win32-arm64-msvc",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-win32-ia32-msvc",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-win32-x64-msvc",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pkgjs/parseargs",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sec-ant/readable-stream",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sindresorhus/is",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sinonjs/commons",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sinonjs/fake-timers",
            "direct": false,
            "version": "15.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sinonjs/samsam",
            "direct": false,
            "version": "10.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/array-float32",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/array-float64",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/array-int16",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/array-int32",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/array-int8",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/array-uint16",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/array-uint32",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/array-uint8",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/array-uint8c",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-float32array-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-float64array-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-int16array-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-int32array-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-int8array-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-node-buffer-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-own-property",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-symbol-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-to-primitive-symbol-support",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-tostringtag-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-uint16array-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-uint32array-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-uint8array-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-has-uint8clampedarray-support",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-arguments",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-array",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-big-endian",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-boolean",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-buffer",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-collection",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-enumerable-property",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-error",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-float32array",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-float64array",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-function",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-int16array",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-int32array",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-int8array",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-integer",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-little-endian",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-nan",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-nonnegative-integer",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-number",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-object",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-object-like",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-plain-object",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-regexp",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-string",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-uint16array",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-uint32array",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-uint8array",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-is-uint8clampedarray",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-napi-equal-types",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-napi-is-type",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-napi-status-ok",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/assert-tools-array-function",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/boolean-ctor",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/buffer-ctor",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/buffer-from-buffer",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/complex-float32-ctor",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/complex-float32-reim",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/complex-float64-ctor",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/complex-float64-reim",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-array-max-typed-array-length",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float16-eps",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float16-exponent-bias",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float16-exponent-mask",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float16-max",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float16-num-significand-bits",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float16-sign-mask",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float16-significand-mask",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float16-smallest-normal",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float32-abs-mask",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float32-eps",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float32-exponent-bias",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float32-exponent-mask",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float32-ninf",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float32-num-significand-bits",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float32-pinf",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float32-sign-mask",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float32-significand-mask",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float64-eps",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float64-high-word-abs-mask",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float64-ninf",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-float64-pinf",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-int16-max",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-int16-min",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-int32-max",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-int32-min",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-int8-max",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-int8-min",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-uint16-max",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-uint32-max",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/constants-uint8-max",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/error-tools-fmtprodmsg",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/fs-exists",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/fs-resolve-parent-path",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/math-base-assert-is-finite",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/math-base-assert-is-finitef",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/math-base-assert-is-integer",
            "direct": false,
            "version": "0.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/math-base-assert-is-nan",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/math-base-assert-is-nanf",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/math-base-napi-unary",
            "direct": false,
            "version": "0.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/math-base-special-abs",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/math-base-special-absf",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/math-base-special-floor",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/napi-argv",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/napi-argv-double",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/napi-argv-float",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/napi-argv-int32",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/napi-create-int32",
            "direct": false,
            "version": "0.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/napi-export",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-ctor",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-float16-base-to-float32",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-float16-base-to-float64",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-float16-ctor",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-float32-base-exponent",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-float32-base-to-float16",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-float32-base-to-word",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-float64-base-to-float16",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-float64-base-to-float32",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/number-float64-base-to-words",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/object-ctor",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/os-byte-order",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/os-float-word-order",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/process-cwd",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/regexp-extended-length-path",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/regexp-function-name",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/regexp-regexp",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/string-base-format-interpolate",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/string-base-format-tokenize",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/string-base-lowercase",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/string-base-replace",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/string-format",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/string-replace",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/symbol-ctor",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/symbol-to-primitive",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/types",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-constructor-name",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-convert-path",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-copy",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-define-nonenumerable-read-only-property",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-define-property",
            "direct": false,
            "version": "0.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-define-read-only-property",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-escape-regexp-string",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-get-prototype-of",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-global",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-index-of",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-keys",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-library-manifest",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-native-class",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-noop",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-property-descriptor",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-property-names",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-regexp-from-string",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@stdlib/utils-type-of",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@tootallnate/once",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/bunyan-rotating-filestream",
            "direct": false,
            "version": "0.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/database-info",
            "direct": false,
            "version": "0.3.35",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/elasticsearch",
            "direct": false,
            "version": "3.0.29",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/http-stream",
            "direct": false,
            "version": "0.1.42",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/logging",
            "direct": false,
            "version": "2.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/pretty-stream",
            "direct": false,
            "version": "0.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/pro-ship",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/promise",
            "direct": false,
            "version": "0.3.20",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/request",
            "direct": false,
            "version": "1.0.17",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/root-utils",
            "direct": false,
            "version": "0.3.38",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/root-utils",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/tpl",
            "direct": false,
            "version": "0.1.40",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/validator",
            "direct": false,
            "version": "0.2.22",
            "ecosystem": "npm"
          },
          {
            "name": "@tryghost/version",
            "direct": false,
            "version": "0.1.38",
            "ecosystem": "npm"
          },
          {
            "name": "@types/http-cache-semantics",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "26.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "abbrev",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "abbrev",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "agentkeepalive",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "aggregate-error",
            "direct": false,
            "version": "3.1.0",
            "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": "append-transform",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "aproba",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "archy",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "are-we-there-yet",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "asn1",
            "direct": false,
            "version": "0.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "assert-plus",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "aws-sign2",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "aws-ssl-profiles",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "aws4",
            "direct": false,
            "version": "1.13.2",
            "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": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "baseline-browser-mapping",
            "direct": false,
            "version": "2.10.42",
            "ecosystem": "npm"
          },
          {
            "name": "bcrypt-pbkdf",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "better-sqlite3",
            "direct": false,
            "version": "12.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "bindings",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "bl",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "bookshelf",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.16",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "browser-stdout",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "5.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "bunyan",
            "direct": false,
            "version": "1.8.15",
            "ecosystem": "npm"
          },
          {
            "name": "bunyan-loggly",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "byte-counter",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cacache",
            "direct": false,
            "version": "15.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "cacheable-lookup",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cacheable-request",
            "direct": false,
            "version": "13.0.19",
            "ecosystem": "npm"
          },
          {
            "name": "caching-transform",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "caller",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001803",
            "ecosystem": "npm"
          },
          {
            "name": "caseless",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "chownr",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "chownr",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "chownr",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "clean-stack",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "7.0.4",
            "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": "color-support",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "colorette",
            "direct": false,
            "version": "2.0.19",
            "ecosystem": "npm"
          },
          {
            "name": "colors",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "10.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "commondir",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "compare-ver",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "console-control-strings",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "create-error",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "dashdash",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "date-format",
            "direct": false,
            "version": "4.0.14",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "2.6.9",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "decompress-response",
            "direct": false,
            "version": "10.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "decompress-response",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-extend",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "default-require-extensions",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "delegates",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "denque",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dtrace-provider",
            "direct": false,
            "version": "0.8.8",
            "ecosystem": "npm"
          },
          {
            "name": "eastasianwidth",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ecc-jsbn",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.389",
            "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": "encoding",
            "direct": false,
            "version": "0.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "env-paths",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "err-code",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es6-error",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "esm",
            "direct": false,
            "version": "3.2.25",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "expand-template",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "exponential-backoff",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "extsprintf",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stable-stringify",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-uri-to-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-cache-dir",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "find-root",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "forever-agent",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "form-data-encoder",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fromentries",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "fs-constants",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs-extra",
            "direct": false,
            "version": "11.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "fs-minipass",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gauge",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "gelf-stream",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "gelfling",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "generate-function",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "gensync",
            "direct": false,
            "version": "1.0.0-beta.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-package-type",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "getopts",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "getpass",
            "direct": false,
            "version": "0.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "github-from-package",
            "direct": false,
            "version": "0.0.0",
            "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": "6.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "got",
            "direct": false,
            "version": "14.6.6",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "har-schema",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "har-validator",
            "direct": false,
            "version": "5.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-unicode",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "hasha",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "he",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "hpagent",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "http-cache-semantics",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-signature",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "http2-wrapper",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "humanize-ms",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "imurmurhash",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "indent-string",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "infer-owner",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "inflection",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "1.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ip-address",
            "direct": false,
            "version": "10.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.16.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-lambda",
            "direct": false,
            "version": "1.0.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-property",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-typedarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-windows",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isstream",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-coverage",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-hook",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-instrument",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-processinfo",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-report",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-source-maps",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-reports",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jackspeak",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsbn",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-stringify-safe",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "jsonfile",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsprim",
            "direct": false,
            "version": "1.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "keyv",
            "direct": false,
            "version": "5.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "knex",
            "direct": false,
            "version": "3.2.10",
            "ecosystem": "npm"
          },
          {
            "name": "knex",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "knex-migrator",
            "direct": false,
            "version": "5.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._reinterpolate",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.flattendeep",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.template",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.templatesettings",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "log-symbols",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "long",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "long-timeout",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lowercase-keys",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "10.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru.min",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "make-dir",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-dir",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-fetch-happen",
            "direct": false,
            "version": "9.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "2.1.35",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-response",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-response",
            "direct": false,
            "version": "4.0.0",
            "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": "3.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-collect",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-fetch",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-flush",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-pipeline",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-sized",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "minizlib",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "minizlib",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "0.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp-classic",
            "direct": false,
            "version": "0.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "mocha",
            "direct": false,
            "version": "11.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "moment",
            "direct": false,
            "version": "2.30.1",
            "ecosystem": "npm"
          },
          {
            "name": "moment-timezone",
            "direct": false,
            "version": "0.5.48",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mv",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "mysql2",
            "direct": false,
            "version": "3.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "mysql2",
            "direct": false,
            "version": "3.23.1",
            "ecosystem": "npm"
          },
          {
            "name": "named-placeholders",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "nan",
            "direct": false,
            "version": "2.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "napi-build-utils",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "nconf",
            "direct": false,
            "version": "0.13.0",
            "ecosystem": "npm"
          },
          {
            "name": "ncp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "0.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "node-abi",
            "direct": false,
            "version": "3.94.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-addon-api",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "node-addon-api",
            "direct": false,
            "version": "8.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-gyp",
            "direct": false,
            "version": "12.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-gyp",
            "direct": false,
            "version": "8.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "node-loggly-bulk",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "node-preload",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.50",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-url",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "npmlog",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "nyc",
            "direct": false,
            "version": "18.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "oauth-sign",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "oxfmt",
            "direct": false,
            "version": "0.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "oxlint",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-cancelable",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-map",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-map",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-hash",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-json-from-dist",
            "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": "performance-now",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "pg-connection-string",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "prebuild-install",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "prettyjson",
            "direct": false,
            "version": "1.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "proc-log",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "process-on-spawn",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "promise-inflight",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "promise-retry",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "psl",
            "direct": false,
            "version": "1.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "pump",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "quick-lru",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "randombytes",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "rc",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "rechoir",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "release-zalgo",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "request",
            "direct": false,
            "version": "2.88.2",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-main-filename",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.12",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-alpn",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "responselike",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "2.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "6.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-json-stringify",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "secure-json-parse",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "secure-keys",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "set-blocking",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "should",
            "direct": false,
            "version": "13.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "should-equal",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "should-format",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "should-type",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "should-type-adaptors",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "should-util",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "simple-concat",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "simple-get",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "sinon",
            "direct": false,
            "version": "22.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "smart-buffer",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "socks-proxy-agent",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "spawn-wrap",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "split2",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "sql-escaper",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "sqlite3",
            "direct": false,
            "version": "5.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "sqlite3",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "sshpk",
            "direct": false,
            "version": "1.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "ssri",
            "direct": false,
            "version": "8.0.1",
            "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_decoder",
            "direct": false,
            "version": "1.3.0",
            "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": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tar",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "tar",
            "direct": false,
            "version": "7.5.19",
            "ecosystem": "npm"
          },
          {
            "name": "tar-fs",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "tar-stream",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tarn",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "test-exclude",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tildify",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.17",
            "ecosystem": "npm"
          },
          {
            "name": "tinypool",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tough-cookie",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "tunnel-agent",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "tweetnacl",
            "direct": false,
            "version": "0.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "type-detect",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "type-detect",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "4.41.0",
            "ecosystem": "npm"
          },
          {
            "name": "typedarray-to-buffer",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": false,
            "version": "5.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": false,
            "version": "6.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "8.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "unique-filename",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "unique-slug",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "universalify",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "validator",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "verror",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "which-module",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "wide-align",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "workerpool",
            "direct": false,
            "version": "9.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "6.2.0",
            "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": "write-file-atomic",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "15.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "16.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "18.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "20.2.9",
            "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": 686,
        "direct_count": 4,
        "indirect_count": 682
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 3,
        "merged_prs": 179,
        "open_issues": 4,
        "closed_ratio": 0.667,
        "closed_issues": 8,
        "closed_unmerged_prs": 57
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "renovate-bot",
          "commits": 215,
          "avatar_url": "https://avatars.githubusercontent.com/u/25180681?v=4"
        },
        {
          "type": "User",
          "login": "kirrg001",
          "commits": 89,
          "avatar_url": "https://avatars.githubusercontent.com/u/1160712?v=4"
        },
        {
          "type": "User",
          "login": "daniellockyer",
          "commits": 33,
          "avatar_url": "https://avatars.githubusercontent.com/u/964245?v=4"
        },
        {
          "type": "User",
          "login": "naz",
          "commits": 25,
          "avatar_url": "https://avatars.githubusercontent.com/u/675397?v=4"
        },
        {
          "type": "User",
          "login": "ErisDS",
          "commits": 17,
          "avatar_url": "https://avatars.githubusercontent.com/u/101513?v=4"
        },
        {
          "type": "User",
          "login": "sam-lord",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/34093537?v=4"
        },
        {
          "type": "User",
          "login": "JohnONolan",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/120485?v=4"
        },
        {
          "type": "User",
          "login": "kevinansfield",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/415?v=4"
        },
        {
          "type": "User",
          "login": "JoeeGrigg",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/8267620?v=4"
        },
        {
          "type": "User",
          "login": "allouis",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/3218915?v=4"
        }
      ],
      "contributors_sampled": 13,
      "top_contributor_share": 0.527
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "publish.yml",
        "test.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "pnpm-lock.yaml"
      ],
      "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": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 7 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 8,
            "reason": "dependency not pinned by hash detected -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 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": 0,
            "reason": "35 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "0302d7dbd0f67ad778f3657bd22bbff22f39662a",
        "ran_at": "2026-07-26T01:03:02Z",
        "aggregate_score": 7,
        "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-25T14:45:57Z",
      "oldest_open_prs": [
        {
          "number": 201,
          "created_at": "2025-10-29T00:56:06Z",
          "last_comment_at": "2026-07-07T15:43:51Z",
          "last_comment_author": "cursor"
        },
        {
          "number": 215,
          "created_at": "2026-07-02T00:44:20Z",
          "last_comment_at": "2026-07-07T15:42:38Z",
          "last_comment_author": "cursor"
        },
        {
          "number": 226,
          "created_at": "2026-07-08T08:11:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-25T06:54:28Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 39,
          "created_at": "2019-08-28T17:39:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 104,
          "created_at": "2021-02-18T17:05:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 105,
          "created_at": "2021-02-24T09:22:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 118,
          "created_at": "2021-08-30T08:26:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/TryGhost/bookshelf-relations",
    "host": "github.com",
    "name": "bookshelf-relations",
    "owner": "TryGhost"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 62,
      "inputs": {
        "security": 72,
        "vitality": 66,
        "community": 51,
        "governance": 63,
        "engineering": 60
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 66,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "commits_last_year": 80,
              "human_commit_share": 0.15,
              "days_since_last_push": 0,
              "active_weeks_last_year": 30
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "30/52 weeks with commits",
                "points": 20.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 30
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "80 commits in the last year",
                "points": 17.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 80
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "at_risk",
            "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": 40,
            "inputs": {
              "releases_count": 38,
              "latest_release_tag": "v2.8.0",
              "releases_from_tags": true,
              "days_since_latest_release": 527,
              "mean_days_between_releases": 194.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "38 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 38
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 527 days ago",
                "points": 7.2,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 527
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~194.6 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 194.6
                    }
                  }
                ],
                "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": 17,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 17 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 17
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 51,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "forks": 11,
              "stars": 22,
              "watchers": 14,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "22 stars",
                "points": 21.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 22
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "11 forks",
                "points": 8.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "14 watchers",
                "points": 6.2,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 14
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "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": 0,
                "status": "missed",
                "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": "good",
            "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": 78,
            "inputs": {
              "packages": [
                "bookshelf-relations"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 49733
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "49,733 downloads/month across npm",
                "points": 62.6,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 49733,
                      "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": 43,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 13,
              "top_contributor_share": 0.527
            },
            "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 53% of commits",
                "points": 10.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 53
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "13 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "merged_prs": 179,
              "open_issues": 4,
              "closed_issues": 8,
              "issue_closed_ratio": 0.667,
              "closed_unmerged_prs": 57
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "67% of issues closed",
                "points": 31.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 67
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "179/236 decided PRs merged",
                "points": 29,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 179,
                      "decided": 236
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "followers": 1734,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "TryGhost",
              "public_repos": 153,
              "account_age_days": 5088
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1,734 followers of TryGhost",
                "points": 23.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1734,
                      "login": "TryGhost"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "153 public repos, account ~13 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 153
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "good",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "packages": [
                "bookshelf-relations"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 527
            },
            "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 527 days ago",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 527
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "38 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 38
                    }
                  }
                ],
                "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": "moderate",
        "name": "Engineering Quality",
        "value": 60,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 72,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "good",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 70,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 7
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 8",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "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": "35 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "good",
            "name": "Dependency advisories",
            "note": "Matched the npm:bookshelf-relations@2.8.0 runtime dependency closure — what installing the published package pulls in — 174 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:bookshelf-relations@2.8.0",
                  "assessed": 174
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "source": "osv",
              "advisories": 1,
              "affected_packages": 1,
              "assessed_packages": 174,
              "unassessed_packages": 0,
              "affected_by_severity": "high 1",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "1 affected: uuid 9.0.1 (high 7.5)",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "uuid 9.0.1 (high 7.5)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 94 days ago",
                "points": 33.7,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 94
                    }
                  }
                ],
                "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": 174,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 8
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 59,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": "Excluded from scoring (no data or not applicable): Legible commit history. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "legible_commit_history"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 75,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": null,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 2117
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.85
            },
            "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "85 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 85,
                      "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 8",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 41127,
              "source_files_sampled": 35,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/35 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 35,
                      "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-26T01:03:25.442823Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/TryGhost/bookshelf-relations.svg",
  "full_name": "TryGhost/bookshelf-relations",
  "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.