Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-26 14:33 UTC

odata2ts / odata2ts

Flexible generator to produce various TypeScript artefacts (from simple model interfaces to complete odata clients) from OData metadata files

TypeScriptMIT★ 133 stars⑂ 20 forkssince Jun 2021View on GitHub ↗

odata2ts/odata2ts holds a health index of 67 out of 100, placing it in the Moderate band. It scores highest on Vitality (80/100) and lowest on Security (49/100). It was last updated today. A single contributor accounts for most of its recent work.

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

67
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

odata2tsOrganization
8 followers7 public repossince Jun 2021

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

Package ecosystems

Metrics by category

Vitality

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

80Good · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
4.8/36Commit cadence — 7/52 weeks with commits
16/18Commit volume — 59 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_year59
human_commit_share0.93
days_since_last_push0
active_weeks_last_year7

Release discipline

100Excellent
How it's scored
27/27Ships releases — 100 releases published
36/36Release recency — latest release 6 days ago
27/27Release cadence — a release every ~28.7 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count100
latest_release_tag@odata2ts/odata-service-v0.24.0
releases_from_tagsno
days_since_latest_release6
mean_days_between_releases28.7
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?

72Good · 18% of overall
How it's scored
34.4/60Stars — 133 stars
10.7/25Forks — 20 forks
0/15Watchers — 2 watchers
Inputs used
forks20
stars133
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

Community health

85Excellent
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateno
How it's scored
77.6/80Monthly downloads — 658,907 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packages@odata2ts/odata2ts, @odata2ts/odata-core, @odata2ts/odata-service, @odata2ts/odata-query-builder, @odata2ts/odata-query-objects
dependents
ecosystemsnpm
total_downloads
monthly_downloads658,907
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?

58Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.2/22.5Commit distribution — top contributor authored 99% of commits
8.1/13.5Contributor breadth — 6 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled6
top_contributor_share0.989
How it's scored
42.3/46.8Issue resolution — 90% of issues closed
35.4/38.3PR acceptance — 238/257 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/15 approved changesets -- score normalized to 0
Inputs used
merged_prs238
open_issues13
closed_issues124
issue_closed_ratio0.905
closed_unmerged_prs19
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
6.9/25Owner reach — 8 followers of odata2ts
16.8/25Track record — 7 public repos, account ~5 yr old
Inputs used
followers8
owner_typeOrganization
is_verified
owner_loginodata2ts
public_repos7
account_age_days1,865
How it's scored
25/25Published & resolvable — 5 package(s) on npm
35/35Publish recency — latest publish 6 days ago
20/20Version history — 52 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packages@odata2ts/odata2ts, @odata2ts/odata-core, @odata2ts/odata-service, @odata2ts/odata-query-builder, @odata2ts/odata-query-objects
ecosystemsnpm
any_deprecatedno
min_days_since_publish6

Engineering Quality

Are baseline engineering and documentation practices in place?

72Good · 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
16/20OpenSSF Scorecard: CI-Tests — 16 out of 18 merged PRs checked by a CI test -- score normalized to 8
Inputs used
has_ciyes
has_testsyes
has_editorconfigyes
has_linter_configno
has_precommit_configno
How it's scored
30/30README
0/25Documentation directory
15/15Documentation / homepage site — https://odata2ts.github.io/
10/10Repository description
10/10Topics — 5 topics
10/10Wiki
Inputs used
topicsgenerator, odata, query-builder, type-safe, typescript
has_wikiyes
homepagehttps://odata2ts.github.io/
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

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

49At risk · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2/2.5CI-Tests — 16 out of 18 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/15 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.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
0/5Packaging — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 25 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4
Excluded from scoring (no data or not applicable): packaging, 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: brace-expansion 2.1.2 (high 7.5)
40/40No advisories left outstanding — no advisory has been public longer than 90 days
Inputs used
sourceosv
advisories1
affected_packages1
assessed_packages138
unassessed_packages0
affected_by_severityhigh 1
direct_affected_packages0
Matched the npm:@odata2ts/odata2ts@0.41.0 runtime dependency closure — what installing the published package pulls in — 138 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.

51Moderate · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 93 of 93 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
11/11Static type checking — examples/cli-test/tsconfig.json, examples/main/tsconfig.json, examples/test-converters/tsconfig.json, examples/ts-floor-check/tsconfig.json, packages/odata-core/tsconfig.json, packages/odata-query-builder/tsconfig.json, packages/odata-query-objects/tsconfig.json, packages/odata-service/tsconfig.json, packages/odata2ts/tsconfig.json, tsconfig.json
10/10Reproducible environment — lockfile
2/10Demonstrated agent practice — 1 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json, yarn.lock
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configsexamples/cli-test/tsconfig.json, examples/main/tsconfig.json, examples/test-converters/tsconfig.json, examples/ts-floor-check/tsconfig.json, packages/odata-core/tsconfig.json, packages/odata-query-builder/tsconfig.json, packages/odata-query-objects/tsconfig.json, packages/odata-service/tsconfig.json, packages/odata2ts/tsconfig.json, tsconfig.json
agent_commit_share0.01
toolchain_manifests
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — TypeScript (statically typed)
54.9/55Manageable file sizes — 1/525 source files over 60KB
Inputs used
primary_languageTypeScript
largest_source_bytes2,764,946
source_files_sampled525
oversized_source_files1
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

133GitHub stars
6contributors
59commits, last 12 months
0days since last push
100releases
1bus factor
13open 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 ★ / 20 ⇿
0Stars
20Forks
92Releases

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.

0481216202022021-122024-022026-03
Major 0Minor 0Patch 0

Each point covers 4 days.

OpenSSF Scorecard 4.0 / 10
4.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 14:33 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
8CI-Tests16 out of 18 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/15 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities25 existing vulnerabilities detected
Direct dependencies 31
RegistryPackageVersion constraintManifest
npmtslib^2.8.1packages/odata-core/package.json
npm@odata2ts/odata-query-objects^0.29.0packages/odata-query-builder/package.json
npmtslib^2.8.1packages/odata-query-builder/package.json
npm@odata2ts/converter-api^0.2.6packages/odata-query-objects/package.json
npm@odata2ts/http-client-api^0.6.4packages/odata-query-objects/package.json
npm@odata2ts/odata-core^0.6.1packages/odata-query-objects/package.json
npmtslib^2.8.1packages/odata-query-objects/package.json
npm@odata2ts/http-client-api^0.6.5packages/odata-service/package.json
npm@odata2ts/odata-query-builder^0.19.0packages/odata-service/package.json
npm@odata2ts/odata-query-objects^0.29.0packages/odata-service/package.json
npmtslib^2.8.1packages/odata-service/package.json
npm@odata2ts/converter-api^0.2.5packages/odata2ts/package.json
npm@odata2ts/converter-runtime^0.5.5packages/odata2ts/package.json
npm@odata2ts/http-client-api^0.6.5packages/odata2ts/package.json
npm@odata2ts/odata-core^0.6.1packages/odata2ts/package.json
npm@prettier/plugin-xml^3.4.2packages/odata2ts/package.json
npm@types/xml2js^0.4.14packages/odata2ts/package.json
npmaxios^1.18.1packages/odata2ts/package.json
npmchange-case^5.4.4packages/odata2ts/package.json
npmcommander^15.0.0packages/odata2ts/package.json
npmcosmiconfig^9.0.2packages/odata2ts/package.json
npmcosmiconfig-typescript-loader^6.3.0packages/odata2ts/package.json
npmdeepmerge^4.3.1packages/odata2ts/package.json
npmmkdirp^3.0.1packages/odata2ts/package.json
npmprettier^3.9.6packages/odata2ts/package.json
npmrimraf^6.1.3packages/odata2ts/package.json
npmts-morph^28.0.0packages/odata2ts/package.json
npmtsconfig-loader^1.1.0packages/odata2ts/package.json
npmtype-fest^5.8.0packages/odata2ts/package.json
npmupper-case-first^2.0.2packages/odata2ts/package.json
npmxml2js^0.6.2packages/odata2ts/package.json
All dependencies 487

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

RegistryPackageVersionRelation
npm@odata2ts/converter-api0.2.1direct
npm@odata2ts/converter-api0.2.5direct
npm@odata2ts/converter-api0.2.6direct
npm@odata2ts/converter-api^0.2.5direct
npm@odata2ts/converter-api^0.2.6direct
npm@odata2ts/converter-runtime0.5.5direct
npm@odata2ts/converter-runtime^0.5.5direct
npm@odata2ts/http-client-api0.6.4direct
npm@odata2ts/http-client-api0.6.5direct
npm@odata2ts/http-client-api^0.6.4direct
npm@odata2ts/http-client-api^0.6.5direct
npm@odata2ts/odata-core0.1.0direct
npm@odata2ts/odata-core^0.6.0direct
npm@odata2ts/odata-core^0.6.1direct
npm@odata2ts/odata-query-builder^0.19.0direct
npm@odata2ts/odata-query-objects^0.29.0direct
npm@prettier/plugin-xml3.4.2direct
npm@prettier/plugin-xml^3.4.2direct
npm@types/xml2js0.4.14direct
npm@types/xml2js^0.4.14direct
npmaxios1.18.1direct
npmaxios^1.18.1direct
npmchange-case5.4.4direct
npmchange-case^5.4.4direct
npmcommander12.1.0direct
npmcommander13.1.0direct
npmcommander15.0.0direct
npmcommander7.2.0direct
npmcommander^15.0.0direct
npmcosmiconfig9.0.2direct
npmcosmiconfig^9.0.2direct
npmcosmiconfig-typescript-loader6.3.0direct
npmcosmiconfig-typescript-loader^6.3.0direct
npmdeepmerge4.3.1direct
npmdeepmerge^4.3.1direct
npmmkdirp1.0.4direct
npmmkdirp3.0.1direct
npmmkdirp^3.0.1direct
npmprettier3.9.6direct
npmprettier^3.9.6direct
npmrimraf6.1.3direct
npmrimraf^6.1.3direct
npmts-morph28.0.0direct
npmts-morph^28.0.0direct
npmtsconfig-loader1.1.0direct
npmtsconfig-loader^1.1.0direct
npmtslib2.8.1direct
npmtslib^2.8.1direct
npmtype-fest5.8.0direct
npmtype-fest^5.8.0direct
npmupper-case-first2.0.2direct
npmupper-case-first^2.0.2direct
npmxml2js0.6.2direct
npmxml2js^0.6.2direct
npm@babel/code-frame7.24.7indirect
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.24.7indirect
npm@babel/helper-validator-identifier7.29.7indirect
npm@babel/helper-validator-option7.29.7indirect
npm@babel/helpers7.29.7indirect
npm@babel/highlight7.24.7indirect
npm@babel/parser7.29.7indirect
npm@babel/template7.29.7indirect
npm@babel/traverse7.29.7indirect
npm@babel/types7.29.7indirect
npm@commander-js/extra-typings13.1.0indirect
npm@dependents/detective-less5.0.3indirect
npm@discoveryjs/json-ext1.1.0indirect
npm@emnapi/core1.11.1indirect
npm@emnapi/runtime1.11.1indirect
npm@emnapi/wasi-threads1.2.2indirect
npm@ianvs/prettier-plugin-sort-imports4.7.1indirect
npm@isaacs/cliui8.0.2indirect
npm@istanbuljs/schema0.1.3indirect
npm@jridgewell/gen-mapping0.3.13indirect
npm@jridgewell/gen-mapping0.3.5indirect
npm@jridgewell/remapping2.3.5indirect
npm@jridgewell/resolve-uri3.1.2indirect
npm@jridgewell/set-array1.2.1indirect
npm@jridgewell/sourcemap-codec1.5.0indirect
npm@jridgewell/sourcemap-codec1.5.5indirect
npm@jridgewell/trace-mapping0.3.25indirect
npm@jridgewell/trace-mapping0.3.31indirect
npm@napi-rs/wasm-runtime1.1.6indirect
npm@npmcli/agent2.2.2indirect
npm@npmcli/fs3.1.1indirect
npm@odata2ts/converter-big-number0.2.8indirect
npm@odata2ts/converter-big-number^0.2.8indirect
npm@odata2ts/converter-common0.3.7indirect
npm@odata2ts/converter-common^0.3.7indirect
npm@odata2ts/converter-luxon0.2.7indirect
npm@odata2ts/converter-luxon^0.2.7indirect
npm@odata2ts/converter-v2-to-v40.5.2indirect
npm@odata2ts/converter-v2-to-v40.5.7indirect
npm@odata2ts/converter-v2-to-v4^0.5.1indirect
npm@odata2ts/converter-v2-to-v4^0.5.7indirect
npm@odata2ts/http-client-axios0.12.2indirect
npm@odata2ts/http-client-axios^0.12.2indirect
npm@odata2ts/http-client-base0.5.6indirect
npm@odata2ts/http-client-fetch0.9.2indirect
npm@odata2ts/http-client-fetch^0.9.2indirect
npm@odata2ts/odata-service^0.24.0indirect
npm@odata2ts/test-converters^0.5.0indirect
npm@oxc-project/types0.139.0indirect
npm@pkgjs/parseargs0.11.0indirect
npm@rolldown/binding-android-arm641.1.5indirect
npm@rolldown/binding-darwin-arm641.1.5indirect
npm@rolldown/binding-darwin-x641.1.5indirect
npm@rolldown/binding-freebsd-x641.1.5indirect
npm@rolldown/binding-linux-arm-gnueabihf1.1.5indirect
npm@rolldown/binding-linux-arm64-gnu1.1.5indirect
npm@rolldown/binding-linux-arm64-musl1.1.5indirect
npm@rolldown/binding-linux-ppc64-gnu1.1.5indirect
npm@rolldown/binding-linux-s390x-gnu1.1.5indirect
npm@rolldown/binding-linux-x64-gnu1.1.5indirect
npm@rolldown/binding-linux-x64-musl1.1.5indirect
npm@rolldown/binding-openharmony-arm641.1.5indirect
npm@rolldown/binding-wasm32-wasi1.1.5indirect
npm@rolldown/binding-win32-arm64-msvc1.1.5indirect
npm@rolldown/binding-win32-x64-msvc1.1.5indirect
npm@rolldown/pluginutils1.0.1indirect
npm@standard-schema/spec1.1.0indirect
npm@ts-graphviz/adapter2.0.6indirect
npm@ts-graphviz/ast2.0.7indirect
npm@ts-graphviz/common2.1.5indirect
npm@ts-graphviz/core2.0.7indirect
npm@ts-morph/common0.29.0indirect
npm@tybys/wasm-util0.10.3indirect
npm@types/chai5.2.3indirect
npm@types/deep-eql4.0.2indirect
npm@types/estree1.0.5indirect
npm@types/luxon3.7.2indirect
npm@types/luxon^3.7.2indirect
npm@types/node22.5.0indirect
npm@types/node24.13.3indirect
npm@types/node^24indirect
npm@typescript-eslint/project-service8.65.0indirect
npm@typescript-eslint/tsconfig-utils8.65.0indirect
npm@typescript-eslint/types8.65.0indirect
npm@typescript-eslint/typescript-estree8.65.0indirect
npm@typescript-eslint/visitor-keys8.65.0indirect
npm@vitest/coverage-istanbul4.1.10indirect
npm@vitest/expect4.1.10indirect
npm@vitest/mocker4.1.10indirect
npm@vitest/pretty-format4.1.10indirect
npm@vitest/runner4.1.10indirect
npm@vitest/snapshot4.1.10indirect
npm@vitest/spy4.1.10indirect
npm@vitest/utils4.1.10indirect
npm@vue/compiler-core3.5.40indirect
npm@vue/compiler-dom3.5.40indirect
npm@vue/compiler-sfc3.5.40indirect
npm@vue/compiler-ssr3.5.40indirect
npm@vue/shared3.5.40indirect
npm@xml-tools/parser1.0.11indirect
npmabbrev2.0.0indirect
npmagent-base6.0.2indirect
npmagent-base7.1.1indirect
npmaggregate-error3.1.0indirect
npmansi-regex5.0.1indirect
npmansi-regex6.0.1indirect
npmansi-styles3.2.1indirect
npmansi-styles4.3.0indirect
npmansi-styles6.2.1indirect
npmany-promise1.3.0indirect
npmapp-module-path2.2.0indirect
npmargparse2.0.1indirect
npmassertion-error2.0.1indirect
npmast-module-types6.0.2indirect
npmasync-function1.0.0indirect
npmasync-generator-function1.0.0indirect
npmasynckit0.4.0indirect
npmbalanced-match1.0.2indirect
npmbalanced-match4.0.4indirect
npmbase64-js1.5.1indirect
npmbaseline-browser-mapping2.11.1indirect
npmbignumber.js11.1.5indirect
npmbignumber.js9.3.1indirect
npmbignumber.js^9.1.2indirect
npmbl4.1.0indirect
npmbrace-expansion2.0.1indirect
npmbrace-expansion5.0.8indirect
npmbrowserslist4.28.7indirect
npmbuffer5.7.1indirect
npmcacache18.0.4indirect
npmcall-bind-apply-helpers1.0.2indirect
npmcallsites3.1.0indirect
npmcaniuse-lite1.0.30001806indirect
npmchai6.2.2indirect
npmchalk2.4.2indirect
npmchalk4.1.2indirect
npmchevrotain7.1.1indirect
npmchownr2.0.0indirect
npmclean-stack2.2.0indirect
npmcli-cursor3.1.0indirect
npmcli-spinners2.9.2indirect
npmclone1.0.4indirect
npmcode-block-writer13.0.3indirect
npmcolor-convert1.9.3indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.3indirect
npmcolor-name1.1.4indirect
npmcombined-stream1.0.8indirect
npmcommondir1.0.1indirect
npmconvert-source-map2.0.0indirect
npmcross-spawn7.0.3indirect
npmcross-spawn7.0.6indirect
npmdebug4.3.6indirect
npmdebug4.4.3indirect
npmdeep-extend0.6.0indirect
npmdefaults1.0.4indirect
npmdelayed-stream1.0.0indirect
npmdependency-tree11.5.0indirect
npmdetect-indent7.0.2indirect
npmdetect-libc2.1.2indirect
npmdetect-newline4.0.1indirect
npmdetective-amd6.1.0indirect
npmdetective-cjs6.1.1indirect
npmdetective-es65.0.2indirect
npmdetective-postcss8.0.4indirect
npmdetective-sass6.0.2indirect
npmdetective-scss5.0.2indirect
npmdetective-stylus5.0.1indirect
npmdetective-typescript14.1.2indirect
npmdetective-vue22.3.0indirect
npmdunder-proto1.0.1indirect
npmeastasianwidth0.2.0indirect
npmelectron-to-chromium1.5.395indirect
npmemoji-regex8.0.0indirect
npmemoji-regex9.2.2indirect
npmencoding0.1.13indirect
npmenhanced-resolve5.24.3indirect
npmentities7.0.1indirect
npmenv-cmd11.0.0indirect
npmenv-paths2.2.1indirect
npmerr-code2.0.3indirect
npmerror-ex1.3.2indirect
npmes-define-property1.0.1indirect
npmes-errors1.3.0indirect
npmes-module-lexer2.3.1indirect
npmes-object-atoms1.1.1indirect
npmes-set-tostringtag2.1.0indirect
npmescalade3.2.0indirect
npmescape-string-regexp1.0.5indirect
npmescodegen2.1.0indirect
npmeslint-visitor-keys5.0.1indirect
npmesprima4.0.1indirect
npmestraverse5.3.0indirect
npmestree-walker2.0.2indirect
npmestree-walker3.0.3indirect
npmesutils2.0.3indirect
npmexpect-type1.4.0indirect
npmexponential-backoff3.1.1indirect
npmfdir6.5.0indirect
npmfiling-cabinet5.5.1indirect
npmfollow-redirects1.16.0indirect
npmforeground-child3.3.0indirect
npmform-data4.0.6indirect
npmfs-minipass2.1.0indirect
npmfs-minipass3.0.3indirect
npmfsevents2.3.3indirect
npmfunction-bind1.1.2indirect
npmgenerator-function2.0.1indirect
npmgensync1.0.0-beta.2indirect
npmget-amd-module-type6.0.2indirect
npmget-intrinsic1.3.1indirect
npmget-own-enumerable-property-symbols3.0.2indirect
npmget-proto1.0.1indirect
npmgit-hooks-list4.2.1indirect
npmglob10.4.5indirect
npmglob13.0.6indirect
npmgonzales-pe4.3.0indirect
npmgopd1.2.0indirect
npmgraceful-fs4.2.11indirect
npmhas-flag3.0.0indirect
npmhas-flag4.0.0indirect
npmhas-symbols1.0.3indirect
npmhas-symbols1.1.0indirect
npmhas-tostringtag1.0.2indirect
npmhasown2.0.2indirect
npmhasown2.0.4indirect
npmhtml-escaper2.0.2indirect
npmhttp-cache-semantics4.1.1indirect
npmhttp-proxy-agent7.0.2indirect
npmhttps-proxy-agent5.0.1indirect
npmhttps-proxy-agent7.0.5indirect
npmiconv-lite0.6.3indirect
npmieee7541.2.1indirect
npmimport-fresh3.3.0indirect
npmimurmurhash0.1.4indirect
npmindent-string4.0.0indirect
npminherits2.0.4indirect
npmini1.3.8indirect
npmip-address9.0.5indirect
npmis-arrayish0.2.1indirect
npmis-core-module2.15.1indirect
npmis-core-module2.16.2indirect
npmis-fullwidth-code-point3.0.0indirect
npmis-interactive1.0.0indirect
npmis-lambda1.0.1indirect
npmis-obj1.0.1indirect
npmis-plain-obj4.1.0indirect
npmis-regexp1.0.0indirect
npmis-unicode-supported0.1.0indirect
npmis-url-superb4.0.0indirect
npmisexe2.0.0indirect
npmisexe3.1.1indirect
npmistanbul-lib-coverage3.2.2indirect
npmistanbul-lib-report3.0.1indirect
npmistanbul-reports3.2.0indirect
npmjackspeak3.4.3indirect
npmjiti2.6.1indirect
npmjs-tokens4.0.0indirect
npmjs-yaml4.1.0indirect
npmjsbn1.1.0indirect
npmjsesc3.1.0indirect
npmjson-parse-even-better-errors2.3.1indirect
npmjson52.2.3indirect
npmlightningcss1.33.0indirect
npmlightningcss-android-arm641.33.0indirect
npmlightningcss-darwin-arm641.33.0indirect
npmlightningcss-darwin-x641.33.0indirect
npmlightningcss-freebsd-x641.33.0indirect
npmlightningcss-linux-arm-gnueabihf1.33.0indirect
npmlightningcss-linux-arm64-gnu1.33.0indirect
npmlightningcss-linux-arm64-musl1.33.0indirect
npmlightningcss-linux-x64-gnu1.33.0indirect
npmlightningcss-linux-x64-musl1.33.0indirect
npmlightningcss-win32-arm64-msvc1.33.0indirect
npmlightningcss-win32-x64-msvc1.33.0indirect
npmlines-and-columns1.2.4indirect
npmlog-symbols4.1.0indirect
npmlru-cache10.4.3indirect
npmlru-cache11.5.2indirect
npmlru-cache5.1.1indirect
npmluxon3.7.2indirect
npmluxon^3.7.2indirect
npmmadge8.0.0indirect
npmmagic-string0.30.21indirect
npmmagicast0.5.3indirect
npmmake-dir4.0.0indirect
npmmake-fetch-happen13.0.1indirect
npmmath-intrinsics1.1.0indirect
npmmime-db1.52.0indirect
npmmime-types2.1.35indirect
npmmimic-fn2.1.0indirect
npmminimatch10.2.5indirect
npmminimatch9.0.5indirect
npmminimist1.2.8indirect
npmminipass3.3.6indirect
npmminipass5.0.0indirect
npmminipass7.1.2indirect
npmminipass7.1.3indirect
npmminipass-collect2.0.1indirect
npmminipass-fetch3.0.5indirect
npmminipass-flush1.0.5indirect
npmminipass-pipeline1.2.4indirect
npmminipass-sized1.0.3indirect
npmminizlib2.1.2indirect
npmmodule-definition6.0.2indirect
npmmodule-lookup-amd9.1.3indirect
npmms2.1.2indirect
npmms2.1.3indirect
npmnanoid3.3.16indirect
npmnegotiator0.6.3indirect
npmnode-gyp10.2.0indirect
npmnode-releases2.0.51indirect
npmnode-source-walk7.0.2indirect
npmnopt7.2.1indirect
npmobug2.1.4indirect
npmonetime5.1.2indirect
npmora5.4.1indirect
npmp-map4.0.0indirect
npmpackage-json-from-dist1.0.0indirect
npmpackage-json-from-dist1.0.1indirect
npmparent-module1.0.1indirect
npmparse-json5.2.0indirect
npmparse-ms2.1.0indirect
npmpath-browserify1.0.1indirect
npmpath-key3.1.1indirect
npmpath-parse1.0.7indirect
npmpath-scurry1.11.1indirect
npmpath-scurry2.0.2indirect
npmpathe2.0.3indirect
npmpicocolors1.0.1indirect
npmpicocolors1.1.1indirect
npmpicomatch4.0.5indirect
npmpluralize8.0.0indirect
npmpostcss8.5.22indirect
npmpostcss-values-parser6.0.2indirect
npmprecinct12.3.2indirect
npmprettier-plugin-packagejson3.0.2indirect
npmpretty-ms7.0.1indirect
npmproc-log4.2.0indirect
npmpromise-retry2.0.1indirect
npmproxy-from-env2.1.0indirect
npmquote-unquote1.0.0indirect
npmrc1.2.8indirect
npmreadable-stream3.6.2indirect
npmregexp-to-ast0.5.0indirect
npmrequirejs2.3.8indirect
npmrequirejs-config-file4.0.0indirect
npmresolve1.22.12indirect
npmresolve1.22.8indirect
npmresolve-dependency-path4.0.1indirect
npmresolve-from4.0.0indirect
npmrestore-cursor3.1.0indirect
npmretry0.12.0indirect
npmrolldown1.1.5indirect
npmsafe-buffer5.2.1indirect
npmsafer-buffer2.1.2indirect
npmsass-lookup6.1.2indirect
npmsax1.4.1indirect
npmsemver6.3.1indirect
npmsemver7.6.3indirect
npmsemver7.8.5indirect
npmshebang-command2.0.0indirect
npmshebang-regex3.0.0indirect
npmsiginfo2.0.0indirect
npmsignal-exit3.0.7indirect
npmsignal-exit4.1.0indirect
npmsmart-buffer4.2.0indirect
npmsocks2.8.3indirect
npmsocks-proxy-agent8.0.4indirect
npmsort-object-keys2.1.0indirect
npmsort-package-json3.7.1indirect
npmsource-map0.6.1indirect
npmsource-map-js1.2.1indirect
npmsprintf-js1.1.3indirect
npmssri10.0.6indirect
npmstackback0.0.2indirect
npmstd-env4.2.0indirect
npmstream-to-array2.3.0indirect
npmstring-width5.1.2indirect
npmstring-width-cjs4.2.3indirect
npmstring_decoder1.3.0indirect
npmstringify-object3.3.0indirect
npmstrip-ansi7.1.0indirect
npmstrip-ansi-cjs6.0.1indirect
npmstrip-bom3.0.0indirect
npmstrip-bom4.0.0indirect
npmstrip-json-comments2.0.1indirect
npmstylus-lookup6.1.2indirect
npmsupports-color5.5.0indirect
npmsupports-color7.2.0indirect
npmsupports-preserve-symlinks-flag1.0.0indirect
npmtagged-tag1.0.0indirect
npmtapable2.3.3indirect
npmtar6.2.1indirect
npmtinybench2.9.0indirect
npmtinyexec1.2.4indirect
npmtinyglobby0.2.17indirect
npmtinyrainbow3.1.0indirect
npmts-api-utils2.5.0indirect
npmts-expect1.3.0indirect
npmts-expect^1.3.0indirect
npmts-graphviz2.1.6indirect
npmtsconfig-paths4.2.0indirect
npmtypescript4.7.4indirect
npmtypescript5.9.3indirect
npmtypescript6.0.3indirect
npmundici-types6.19.8indirect
npmundici-types7.18.2indirect
npmunique-filename3.0.0indirect
npmunique-slug4.0.0indirect
npmupdate-browserslist-db1.2.3indirect
npmutil-deprecate1.0.2indirect
npmvite8.1.5indirect
npmvitest4.1.10indirect
npmwalkdir0.4.1indirect
npmwcwidth1.0.1indirect
npmwhich2.0.2indirect
npmwhich4.0.0indirect
npmwhy-is-node-running2.3.0indirect
npmwrap-ansi8.1.0indirect
npmwrap-ansi-cjs7.0.0indirect
npmxmlbuilder11.0.1indirect
npmyallist3.1.1indirect
npmyallist4.0.0indirect
Dependency advisories 1

Installing npm:@odata2ts/odata2ts@0.41.0 pulls in 138 packages, direct and transitive: 1 carry known advisories, of which 0 are direct dependencies.

PackageVersionRelationSeverityAdvisoriesFixed in
brace-expansion2.1.2indirecthigh15.0.8

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": [
        "generator",
        "odata",
        "query-builder",
        "type-safe",
        "typescript"
      ],
      "is_fork": false,
      "size_kb": 7179,
      "has_wiki": true,
      "homepage": "https://odata2ts.github.io/",
      "languages": {
        "JavaScript": 586,
        "TypeScript": 1327103
      },
      "pushed_at": "2026-07-25T23:51:17Z",
      "created_at": "2021-06-16T15:43:27Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-25T23:50:44Z",
      "description": "Flexible generator to produce various TypeScript artefacts (from simple model interfaces to complete odata clients) from OData metadata files",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "odata2ts",
      "company": null,
      "location": null,
      "followers": 8,
      "avatar_url": "https://avatars.githubusercontent.com/u/86011229?v=4",
      "created_at": "2021-06-16T15:38:48Z",
      "is_verified": null,
      "public_repos": 7,
      "account_age_days": 1865
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "@odata2ts/odata-service-v0.24.0",
          "kind": "other",
          "published_at": "2026-07-20T10:19:14Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects-v0.29.0",
          "kind": "other",
          "published_at": "2026-07-20T10:19:12Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder-v0.19.0",
          "kind": "other",
          "published_at": "2026-07-20T10:19:11Z"
        },
        {
          "tag": "@odata2ts/odata2ts-v0.41.0",
          "kind": "other",
          "published_at": "2026-07-20T10:19:09Z"
        },
        {
          "tag": "@odata2ts/odata-service-v0.23.2",
          "kind": "other",
          "published_at": "2026-07-03T16:15:57Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects-v0.28.2",
          "kind": "other",
          "published_at": "2026-07-03T16:15:55Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder-v0.18.6",
          "kind": "other",
          "published_at": "2026-07-03T16:15:54Z"
        },
        {
          "tag": "@odata2ts/odata2ts-v0.40.2",
          "kind": "other",
          "published_at": "2026-07-03T16:15:53Z"
        },
        {
          "tag": "@odata2ts/odata-service-v0.23.1",
          "kind": "other",
          "published_at": "2025-11-04T02:51:42Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects-v0.28.1",
          "kind": "other",
          "published_at": "2025-11-04T02:51:41Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder-v0.18.5",
          "kind": "other",
          "published_at": "2025-11-04T02:51:40Z"
        },
        {
          "tag": "@odata2ts/odata2ts-v0.40.1",
          "kind": "other",
          "published_at": "2025-11-04T02:51:38Z"
        },
        {
          "tag": "@odata2ts/odata-service-v0.23.0",
          "kind": "other",
          "published_at": "2025-11-01T20:25:46Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects-v0.28.0",
          "kind": "other",
          "published_at": "2025-11-01T20:25:45Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder-v0.18.4",
          "kind": "other",
          "published_at": "2025-11-01T20:25:43Z"
        },
        {
          "tag": "@odata2ts/odata2ts-v0.40.0",
          "kind": "other",
          "published_at": "2025-11-01T20:25:42Z"
        },
        {
          "tag": "@odata2ts/odata-service-v0.22.2",
          "kind": "other",
          "published_at": "2025-10-16T15:38:28Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects-v0.27.1",
          "kind": "other",
          "published_at": "2025-10-16T15:38:26Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder-v0.18.3",
          "kind": "other",
          "published_at": "2025-10-16T15:38:25Z"
        },
        {
          "tag": "@odata2ts/odata-core-v0.6.1",
          "kind": "other",
          "published_at": "2025-10-16T15:38:23Z"
        },
        {
          "tag": "@odata2ts/odata2ts-v0.39.2",
          "kind": "other",
          "published_at": "2025-10-16T15:38:21Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.18.2",
          "kind": "other",
          "published_at": "2024-12-18T11:35:56Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.39.1",
          "kind": "other",
          "published_at": "2024-12-18T11:35:56Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.27.0",
          "kind": "other",
          "published_at": "2024-12-18T11:35:56Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.22.1",
          "kind": "other",
          "published_at": "2024-12-18T11:35:56Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.39.0",
          "kind": "other",
          "published_at": "2024-10-28T16:00:32Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.22.0",
          "kind": "other",
          "published_at": "2024-10-28T16:00:32Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.26.0",
          "kind": "other",
          "published_at": "2024-10-28T16:00:32Z"
        },
        {
          "tag": "@odata2ts/example-main@0.11.0",
          "kind": "other",
          "published_at": "2024-10-28T16:00:32Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.18.1",
          "kind": "other",
          "published_at": "2024-10-28T16:00:32Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.38.1",
          "kind": "other",
          "published_at": "2024-09-19T07:14:46Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.38.0",
          "kind": "other",
          "published_at": "2024-09-11T10:20:03Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.18.0",
          "kind": "other",
          "published_at": "2024-09-11T10:20:03Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.21.0",
          "kind": "other",
          "published_at": "2024-09-11T10:20:03Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.25.0",
          "kind": "other",
          "published_at": "2024-09-11T10:20:03Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.20.0",
          "kind": "other",
          "published_at": "2024-08-25T09:21:44Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.37.0",
          "kind": "other",
          "published_at": "2024-08-25T09:21:44Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.17.0",
          "kind": "other",
          "published_at": "2024-08-25T09:21:44Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.24.0",
          "kind": "other",
          "published_at": "2024-08-25T09:21:44Z"
        },
        {
          "tag": "@odata2ts/odata-core@0.6.0",
          "kind": "other",
          "published_at": "2024-08-25T09:21:44Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.36.3",
          "kind": "other",
          "published_at": "2024-08-12T06:48:37Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.19.3",
          "kind": "other",
          "published_at": "2024-08-01T19:47:37Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.23.1",
          "kind": "other",
          "published_at": "2024-08-01T19:47:37Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.36.2",
          "kind": "other",
          "published_at": "2024-08-01T19:47:37Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.16.10",
          "kind": "other",
          "published_at": "2024-08-01T19:47:37Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.36.1",
          "kind": "other",
          "published_at": "2024-07-31T21:09:58Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.19.2",
          "kind": "other",
          "published_at": "2024-07-31T21:09:58Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.16.9",
          "kind": "other",
          "published_at": "2024-07-31T21:09:58Z"
        },
        {
          "tag": "@odata2ts/example-odata-v2@0.5.12",
          "kind": "other",
          "published_at": "2024-07-31T21:09:58Z"
        },
        {
          "tag": "@odata2ts/example-trippin@0.8.12",
          "kind": "other",
          "published_at": "2024-07-31T21:09:58Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.23.0",
          "kind": "other",
          "published_at": "2024-07-31T21:09:58Z"
        },
        {
          "tag": "@odata2ts/example-renaming@0.2.13",
          "kind": "other",
          "published_at": "2024-07-31T21:09:58Z"
        },
        {
          "tag": "@odata2ts/example-hand-made@0.8.1",
          "kind": "other",
          "published_at": "2024-07-31T21:09:58Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.22.0",
          "kind": "other",
          "published_at": "2024-07-31T07:30:49Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.36.0",
          "kind": "other",
          "published_at": "2024-07-31T07:30:49Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.19.1",
          "kind": "other",
          "published_at": "2024-07-31T07:30:49Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.16.8",
          "kind": "other",
          "published_at": "2024-07-31T07:30:49Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.19.0",
          "kind": "other",
          "published_at": "2024-05-16T21:53:16Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.35.0",
          "kind": "other",
          "published_at": "2024-05-16T21:53:16Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.34.0",
          "kind": "other",
          "published_at": "2024-05-03T16:37:47Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.21.0",
          "kind": "other",
          "published_at": "2024-05-03T16:37:47Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.18.1",
          "kind": "other",
          "published_at": "2024-05-03T16:37:47Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.16.7",
          "kind": "other",
          "published_at": "2024-05-03T16:37:47Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.33.2",
          "kind": "other",
          "published_at": "2024-04-22T10:23:29Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.18.0",
          "kind": "other",
          "published_at": "2024-04-22T10:23:29Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.20.2",
          "kind": "other",
          "published_at": "2024-04-22T10:23:29Z"
        },
        {
          "tag": "@odata2ts/odata-core@0.5.0",
          "kind": "other",
          "published_at": "2024-04-22T10:23:29Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.16.6",
          "kind": "other",
          "published_at": "2024-04-22T10:23:29Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.33.1",
          "kind": "other",
          "published_at": "2024-03-23T16:19:42Z"
        },
        {
          "tag": "@odata2ts/example-odata-v2@0.5.7",
          "kind": "other",
          "published_at": "2024-03-23T16:19:42Z"
        },
        {
          "tag": "@odata2ts/example-trippin@0.8.7",
          "kind": "other",
          "published_at": "2024-03-23T16:19:42Z"
        },
        {
          "tag": "@odata2ts/example-bookshop@0.7.7",
          "kind": "other",
          "published_at": "2024-03-23T16:19:42Z"
        },
        {
          "tag": "@odata2ts/example-renaming@0.2.8",
          "kind": "other",
          "published_at": "2024-03-23T16:19:42Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.20.1",
          "kind": "other",
          "published_at": "2024-03-23T16:19:42Z"
        },
        {
          "tag": "@odata2ts/example-hand-made@0.7.1",
          "kind": "other",
          "published_at": "2024-03-23T16:19:42Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.17.2",
          "kind": "other",
          "published_at": "2024-03-23T16:19:42Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.16.5",
          "kind": "other",
          "published_at": "2024-03-23T16:19:42Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.33.0",
          "kind": "other",
          "published_at": "2024-03-17T15:19:37Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.32.0",
          "kind": "other",
          "published_at": "2024-03-10T17:48:16Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.31.1",
          "kind": "other",
          "published_at": "2023-11-15T02:37:34Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.31.0",
          "kind": "other",
          "published_at": "2023-10-29T12:24:20Z"
        },
        {
          "tag": "@odata2ts/example-hand-made@0.5.0",
          "kind": "other",
          "published_at": "2023-10-29T12:24:20Z"
        },
        {
          "tag": "@odata2ts/example-renaming@0.2.4",
          "kind": "other",
          "published_at": "2023-10-29T12:24:20Z"
        },
        {
          "tag": "@odata2ts/example-bookshop@0.7.3",
          "kind": "other",
          "published_at": "2023-10-29T12:24:20Z"
        },
        {
          "tag": "@odata2ts/example-odata-v2@0.5.3",
          "kind": "other",
          "published_at": "2023-10-29T12:24:20Z"
        },
        {
          "tag": "@odata2ts/example-trippin@0.8.2",
          "kind": "other",
          "published_at": "2023-10-05T08:27:56Z"
        },
        {
          "tag": "@odata2ts/example-renaming@0.2.3",
          "kind": "other",
          "published_at": "2023-10-05T08:27:56Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.30.0",
          "kind": "other",
          "published_at": "2023-10-05T08:27:55Z"
        },
        {
          "tag": "@odata2ts/example-hand-made@0.4.8",
          "kind": "other",
          "published_at": "2023-10-05T08:27:56Z"
        },
        {
          "tag": "@odata2ts/example-bookshop@0.7.2",
          "kind": "other",
          "published_at": "2023-10-05T08:27:55Z"
        },
        {
          "tag": "@odata2ts/example-odata-v2@0.5.2",
          "kind": "other",
          "published_at": "2023-10-05T08:27:55Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.29.1",
          "kind": "other",
          "published_at": "2023-09-13T16:19:02Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.17.1",
          "kind": "other",
          "published_at": "2023-09-13T16:19:02Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.17.0",
          "kind": "other",
          "published_at": "2023-08-08T00:47:00Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.29.0",
          "kind": "other",
          "published_at": "2023-08-08T00:47:00Z"
        },
        {
          "tag": "@odata2ts/odata-core@0.4.0",
          "kind": "other",
          "published_at": "2023-08-08T00:47:00Z"
        },
        {
          "tag": "@odata2ts/odata-query-builder@0.16.4",
          "kind": "other",
          "published_at": "2023-08-08T00:47:00Z"
        },
        {
          "tag": "@odata2ts/odata-query-objects@0.20.0",
          "kind": "other",
          "published_at": "2023-08-08T00:47:00Z"
        },
        {
          "tag": "@odata2ts/odata-service@0.16.0",
          "kind": "other",
          "published_at": "2023-07-31T13:34:10Z"
        },
        {
          "tag": "@odata2ts/odata2ts@0.28.0",
          "kind": "other",
          "published_at": "2023-07-31T13:34:10Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "b658f9934681699d23288b1a85fa76de4275f5b1",
          "body": "odata2ts targets OData 4.0 for V4 services - the more widely deployed and\nmore compatible version - but never declared it. The OData-Version header\ngoverns how a service interprets the request payload and is what makes the\nnotations we generate valid, e.g. @odata.bind, which clients must not use\nwhe\n[…]\nT, DELETE and V2 stay untouched.\n\nAdditionally accept the type control information without the \"odata.\"\nprefix, since payloads of 4.01 or greater omit it and the response version\nis up to the service.",
          "is_bot": false,
          "headline": "fix: declare OData version 4.0 on V4 requests carrying a body (#414)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-25T23:50:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "148ba9b06ce973358f9421e374545d5294b4716b",
          "body": "Add renovate.json to automate routine dependency updates in this repo,\non top of config:recommended:\n\n- devDependency patch/minor updates (including @types/*) automerge once\n  CI is green; major updates always require manual review\n- prettier-related packages and vitest + its coverage plugin are eac\n[…]\n must be\n  evaluated and bumped together rather than independently\n\nValidated via `renovate-config-validator`. Onboarding (installing the Mend\nRenovate GitHub App on the repo) happens outside this PR.",
          "is_bot": false,
          "headline": "build: add Renovate config (#413)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-24T14:10:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e58d95f4bcfa673753c6fdd5495040222c710edb",
          "body": "TypeScript 6.0 deprecates moduleResolution \"node\" (classic/node10) and\nerrors on it by default. Rather than silence the deprecation, migrate the\nshared base config to \"nodenext\" (paired with module: \"NodeNext\", which TS\nrequires to match) — a real Node.js-resolution-fidelity choice, not just a\nwarni\n[…]\npe-\nprecision improvement (RequestConverterChain's declared type, previously\nwidened to `any`, is now correctly `RequestTargetType`) — no behavioral\nregressions. odata-core's output is byte-identical.",
          "is_bot": false,
          "headline": "fix: migrate to nodenext module resolution for TypeScript 6.0",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-24T03:40:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c0f1076287d802dd51d74effe304f6a11b5fefad",
          "body": "Bump typescript 5.1.3 -> 6.0.3 and ts-morph ^18.0.0 -> ^28.0.0. The wider\nTS 7.0 native-rewrite jump is deliberately not part of this: ts-morph's own\nlatest release only bundles TypeScript 6.0.2 internally (verified via\n`ts.version` on an isolated install), so it hasn't caught up to TS 7 yet —\nbumpi\n[…]\nast that would be incoherent.\n\nThis lands the pure version bump; the follow-up commit adapts the codebase\nto what TypeScript 6.0 requires (a real migration, not just a version-only\ndependency change).",
          "is_bot": false,
          "headline": "chore(deps): update typescript to 6.0.3 and ts-morph to 28.0.0",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-24T03:40:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fdfc95366c31bebbe1674a401a5b364c6ee6a2b8",
          "body": "…n (#406)\n\n* build: add CI check verifying the minimum supported TypeScript version\n\nAdd a `TypeScript Floor Check` job (coverage.yml) that generates the full\nclient against the\nTrippin servic and type-checks it with an isolated\ninstall of the exact minimum TypeScript version odata2ts declares as it\n[…]\nng-directory) succeed end-to-end locally; the test skips cleanly\n(exit 0) when floor-ts/node_modules is absent; the full unfiltered root\nworkspace sweep and `yarn coverage` both stay green either way.",
          "is_bot": false,
          "headline": "build: add CI check verifying the minimum supported TypeScript versio…",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-24T01:10:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "51e7eb9c843d7b89671f4c3dc3824e1503e1a35e",
          "body": "Bump commander ^10.0.1 -> ^15.0.0 and cosmiconfig ^8.2.0 -> ^9.0.2 (with\ncosmiconfig-typescript-loader ^5.0.0 -> ^6.3.0, required by cosmiconfig 9).\n\ncommander@15 validates option-flag syntax strictly and rejects\n`-name, --service-name <serviceName>`: `-name` is a multi-character string\nin short-fla\n[…]\nulti-character short flags\nare invalid; only the long form was ever reliably parsed) and only appeared\nto work due to commander's previous lenient validation. Use\n--service-name <serviceName> instead.",
          "is_bot": false,
          "headline": "fix(odata2ts)!: commander 15 + cosmiconfig 9",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T23:53:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "145396051eab35fa319d41ff2b73f5e74c88edea",
          "body": "The int-test used paths relative to `process.cwd()` (\"./int-test/...\"). That\nonly worked by accident when running vitest from within the package\ndirectory. A root-level `vitest run` across the whole workspace (exactly\nwhat `yarn coverage` does in CI) does not chdir into each project — cwd\nstays at t\n[…]\n-level run while passing in isolation.\n\nResolve both paths from `import.meta.dirname` instead, matching how the\nCLI binary itself is already resolved via module resolution rather than a\nrelative path.",
          "is_bot": false,
          "headline": "fix(examples/cli-test): resolve fixture/output paths independent of cwd",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T23:53:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94753ba68bfb4f0742c734c378d46797d737c904",
          "body": "Un-skip the Run-Cli integration test, disabled since Jan 2023 (describe.skip)\nbecause it spawned `yarn ts-node ...`, and ts-node has not been a dependency\nof this repo for a long time (the tsx-based `generate` script replaced it,\nbut this int-test was never updated). One sub-test was additionally\nte\n[…]\nd.xml) that duplicate resources under examples/main and were\n  never referenced by this test.\n\npackages/odata2ts's own `int-test` script is removed since nothing remains\nunder its int-test/ directory.",
          "is_bot": false,
          "headline": "fix(odata2ts): move CLI smoke test to its own examples package",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T23:53:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4193ffca76ac8407e1a58be5ff7fd9a4cbd2ca82",
          "body": "Bump safe and major dependency versions across the workspace (commander and\ncosmiconfig excluded — tracked separately):\n\n- axios ^1.4/^1.13 -> ^1.18.1\n- prettier ^3.3.3 -> ^3.9.6, @ianvs/prettier-plugin-sort-imports ^4.3.1 ->\n  ^4.7.1, @prettier/plugin-xml ^3.4.1 -> ^3.4.2, prettier-plugin-packagejs\n[…]\n not a version-range issue, and it touches a sibling\n  repo's package. Needs its own evaluation.\n- `typescript` and `ts-morph` are untouched on purpose (separate topic, the\n  generator's core engine).",
          "is_bot": false,
          "headline": "chore(deps): update dependencies",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T23:53:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "26ec4e411b47a4f0c18c4bce931616ce3057e7a2",
          "body": "Drop unused local variables in tests (found via `tsc --noUnusedLocals`),\nplus the imports orphaned by their removal. For the console spies that were\nnever asserted, keep the `vi.spyOn(...)` call (it suppresses console output\nto keep test output clean) but drop the unused variable binding. Production\nlocals and fixture members are left untouched.",
          "is_bot": false,
          "headline": "chore: remove unused test locals",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T22:14:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d150045cdf4d6b8393b4a58587d6d7f4d8ccd7b",
          "body": "The discriminator fields distinguish the otherwise structurally identical\nQComplexPath/QEntityPath and QComplexCollectionPath/QEntityCollectionPath.\nAs `private` they only branded the classes nominally for tsc, which some\nIDEs (e.g. IntelliJ) don't honor, so those tools couldn't tell the types\napart\n[…]\nmaking\nthe distinction structural and visible to any type checker (and drops the\n\"unused private member\" noise). Runtime is unchanged — the field was always\nassigned; only its visibility/type changed.",
          "is_bot": false,
          "headline": "fix(odata-query-objects): make Q*Path discriminator public readonly",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T22:14:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "876c57586f5ef01eca9c86d0e73f655cbca5277f",
          "body": "Raise the pinned Node version from 20 to 24 across both workflows: the\ncoverage/build matrix and the release-please + npm-publish jobs.",
          "is_bot": false,
          "headline": "build: bump Node to 24 (current LTS) in CI workflows",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T22:14:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73d98e87e8933404051c1fbc3f6d5bde1554fae1",
          "body": "Drop imports without any usage across src and test files, found via a\none-off `tsc --noUnusedLocals` pass (there is no ESLint and noUnusedLocals\nis off, so nothing catches these automatically). Imports only — unused local\nvariables and private fields are left untouched.",
          "is_bot": false,
          "headline": "chore: remove unused imports",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T22:14:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e53fb934df0db827b712a6a96c82863e3b981e27",
          "body": "- add tsconfig.paths.json mapping the local @odata2ts/* packages to their\n  src/index.ts; extend it from each package's tsconfig.compile.json so tsc\n  type-checks against source without a topological pre-build\n- add vitest-resolve.shared.ts and wire its alias into every package's\n  vite.config.ts so\n[…]\nublished output\n  still uses bare specifiers\n- document in examples/main that it still requires a prior build (it invokes\n  the compiled generator bin and generated code resolves runtime deps via lib)",
          "is_bot": false,
          "headline": "chore: resolve internal packages to src for type-check and tests",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T22:14:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6045d50239a86a7f5f012086f1ca599b7643098c",
          "body": "Typing the private prop mapping with `keyof this` made subclasses fail the\n`QueryObject` generic constraint when type-checked against source, because\n`Map`'s value type is invariant. Declaration emit elides private member types,\nso the mismatch was invisible against the built `.d.ts` and only surfac\n[…]\nen field and accessor to `Map<string, string>` (the\nvalue `getMapping` already produces) and cast the single index access to\n`keyof this`. Emitted types are unchanged (private member) — no API impact.",
          "is_bot": false,
          "headline": "fix(odata-query-objects): type __propMapping as Map<string, string>",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T22:14:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "acbf79167a8452c6315c64d199bac4fbffa4e4e7",
          "body": "- import FlexibleConversionModel from the @odata2ts/odata-query-objects\n  package root instead of reaching into its /src/QueryObjectModel path\n  (the type is re-exported from the index; the /src path is not part of\n  the published contract)\n- stop pulling the Features enum from odata-query-builder's test fixtures;\n  use the local Feature enum already used by QPersonV2 and the V4 fixtures,\n  which also fixes the V2 service fixture using a different enum than its\n  own QPersonV2",
          "is_bot": false,
          "headline": "fix(odata-service): drop cross-package deep imports",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-23T22:14:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "880eb8a4b454ae8c961896d1f08f8e4ee3b12767",
          "body": "- odata2ts: assert function return-type digestion for single complex, entity and enum returns\n- odata-query-objects: add CollectionResponseConverter tests for Collection(primitive) with a value converter and for enum collections (also fix stale describe title)\n- odata-service: add a value-returning \n[…]\nnverted model and value responses of operations end-to-end\n- examples/main: add setValueResponse to the mock client and assert converted model and value operation results against real generator output",
          "is_bot": false,
          "headline": "chore: cover operation return-value handling across the stack",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-22T00:58:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a058521a759dd804df78a6763d3c27dd2e11ba79",
          "body": null,
          "is_bot": false,
          "headline": "test: add int tests for composable functions",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-22T00:58:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc13bccbcc484e053b7207086159864aeef31d31",
          "body": "…ction)\n\n- odata2ts: add digestion tests for collection-bound function & action, asserting they route to getEntitySetOperations (not getEntityTypeOperations)\n- odata-service: add runtime test for a collection-bound operation on EntitySetService (URL sits on the collection path, no key predicate)\n- e\n[…]\n contrasting an entity-bound (Warehouse/AssignUser) with a collection-bound operation (UserParam/GetParam), incl. type-level check that the collection-bound op is absent from the single-entity service",
          "is_bot": false,
          "headline": "chore: cover binding cardinality of bound operations (entity vs colle…",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-22T00:58:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7800efe7a3fcdd58bfacf6521b6913c29c08d4e3",
          "body": "Will become a separate project, so that the dependencies and extras of the server implementation don't get in the way.",
          "is_bot": false,
          "headline": "refactor(example): remove bookshop example (#401)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-21T12:42:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6b15977e77a3b4adf881f2496f231ba55dcc60f",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(release): publish branch main (#399)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-20T10:18:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf7a15f6ea3f12e3901d67babd169909bebaa3a9",
          "body": "This reverts commit 0c12a314be69f0d010682dfddc9091bfa41bbcf0.",
          "is_bot": false,
          "headline": "Revert \"chore(release): publish branch main (#397)\" (#400)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-20T10:14:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c12a314be69f0d010682dfddc9091bfa41bbcf0",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(release): publish branch main (#397)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-20T09:39:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4fd1c84c0c906f0e75a1d869f43e3a72f79b45b",
          "body": "* fix: pin internal odata2ts dependencies in examples/* to workspace protocol\n\n- examples/main and examples/bookshop declared @odata2ts/odata-service and @odata2ts/odata2ts with plain semver ranges (e.g. ^0.23.2); release-please only manages packages/* and never bumps these ranges, so they silently \n[…]\nesult\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\n\n* chore(odata-query-builder): clean up typing for builder operations\n\n---------\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: pin internal odata2ts deps in examples to workspace protocol (#398)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-20T09:38:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9a1e94c1df32f1691fc01cac82625f025297d85e",
          "body": "This reverts commit 130f029c4d0fb172c66e3db39a734ca402453a3d.",
          "is_bot": false,
          "headline": "Revert \"chore(release): publish branch main (#385)\" (#396)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-20T09:10:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "130f029c4d0fb172c66e3db39a734ca402453a3d",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(release): publish branch main (#385)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-20T08:27:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fffeaa1f9347f36862195d5d8a0724ab2d48f2a0",
          "body": "- odata-service: fix false-negative import in FakedComplexServiceV2.ts fixture (ComplexTypeServiceV2.ts was never actually instrumented); add tests for previously untested getPath/delete/query, guard branches, and RequestCmd default options\n- odata-query-builder: add tests for addSelects/addExpands \n[…]\nr than forcing artificial tests\n- lines/functions/branches now exceed 95% both per package and in aggregate across all four packages; no coverage thresholds were added, per explicit scope of this task",
          "is_bot": false,
          "headline": "chore: raise test coverage to >=95% across all packages (#395)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-20T08:15:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4c07cdf4e2bbdf7f125069ce39576ac700787cd8",
          "body": "Each package with tests (odata-query-objects, odata-query-builder,\nodata-service, odata2ts) now has its own coverage script, runnable\nindependently in its own directory, not just via the root workspace-wide\nrun. Provider (istanbul) and reporter (lcov, html-spa) choices are\ncentralized in a new vites\n[…]\n\nvs. src/** per package). The root coverage script and its Coveralls CI\nstep are unaffected - the root vite.config.ts change is value-identical,\njust sourced from the shared module instead of inlined.",
          "is_bot": false,
          "headline": "build: add per-package coverage report scripts (#394)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-20T07:03:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6fac2a20585f2f938cd05084ace2e744db303247",
          "body": "… (#393)\n\nUrlBuilderRequestCmdV4/V2 now optionally carry an HTTP method and a data payload\ncreate/update/patch/add on EntityType/EntitySet/Collection/ComplexType\nservices accept an optional queryFn to shape the write response, and\nreturn a builder-backed Cmd that supports addToQuery() afterward too -\nconsistent with .query().",
          "is_bot": false,
          "headline": "feat(odata-service): support select/expand on create/update/patch/add…",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-20T05:51:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd63dac3794027640a8698b4bc7e7e494791655a",
          "body": "Adds the OData $select=* wildcard (all structural properties) as a\nfirst-class select() target, combinable with other select items in the same\nor chained calls (e.g. select(*, bestFriend)), for both V2 and V4 and their\nnested expanding() builders. The wildcard flows through the engine as a\nliteral path segment rather than being looked up as an entity property.",
          "is_bot": false,
          "headline": "feat(query-builder): explicitly support wildcard in select (#392)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-20T05:12:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91b71ac62cb2a0fbec6e88787346bbc2c1405e53",
          "body": "via expanding complex types can be deeply selected: results in deep select path, e.g. `Address/Street`. Complex collections can also be filtered, skipped, etc., which results in complex select paths, e.g `$select=Adresses($filter=startswith(Street,'H');$top=1)`.\nAdditionally, complex types can also \n[…]\ned to the proper expand clause.\n\nAlso fixes a spec gap where $search was missing from\nExpandingCollectionQueryBuilderV4, and widens V2's expand()/expanding() to\naccept complex properties (regression).",
          "is_bot": false,
          "headline": "feat(query-builder): Deep Select for Complex Types (#391)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-20T03:59:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fceb004cb732233e15f7cfe91f84c35fee39ccf4",
          "body": "BREAKING CHANGE: ODataQueryBuilderV2, ODataQueryBuilderV4 and\nExpandingODataQueryBuilderV4 no longer exist as exported types. Use\nCollectionQueryBuilderV2/V4 (same member set as before) instead, or\nModelQueryBuilderV2/V4 for single-model builders.\n\nIntroduces ModelQueryBuilderV4/V2 (select/expand/ex\n[…]\nODataQueryBuilderModel.ts. No runtime behavior changes - the\nshared ODataQueryBuilder engine and all facade classes still implement\nevery method; only the exported public types narrow per cardinality.",
          "is_bot": false,
          "headline": "refactor(query-builder): query builder cardinality split (#390)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-19T22:28:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "912cc5f6f5bf173e9f5d52d44fc9697bd64bd9d5",
          "body": null,
          "is_bot": false,
          "headline": "fix(@odata2ts/odata-service): added some missing documentation",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-18T01:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc1ac7421e1f8a5de55263049ce9a4a5793f9c4b",
          "body": null,
          "is_bot": false,
          "headline": "fix(example): fix bookshop typing & add some typing tests for trippin",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-18T01:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c2c12fa74ad5a183c75eb42b0e5e88f5cbfc506",
          "body": "BREAKING CHANGE: responses for update and patch are expected to be 204 by default (no response data); OData V4 supports the Prefer header to indicate that the server should respond with data, if implemented at all. Via a boolean switch users can get typings for those cases, e.g. `patch<true>(...)`",
          "is_bot": false,
          "headline": "fix(@odata2ts/odata-service)!: improved response types",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-18T01:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "372ebb1712e4bdbf62a96a4798ad7cb09bdd8d92",
          "body": "…out stuff for the test",
          "is_bot": false,
          "headline": "refactor(@odata2ts/odata-query-objects): remove type clutter & boy sc…",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-18T01:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea2ff0f031ddf65e210b1bda6c78db4537d4fa0e",
          "body": "… add response structure which breaks with the spec",
          "is_bot": false,
          "headline": "fix(@odata2ts/odata-query-objects)!: ValueResponseConverterV4 doesn't…",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2026-07-18T01:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbdce8f5e90cdfd4e59330861e258584dc804158",
          "body": "support passing query options in the request body (url conventions: 4.17);\nuse special UrlGetRequestCmd in V4 GET queries to enable method `asPostRequest()`",
          "is_bot": false,
          "headline": "feat: allow GET request to be POSTed (#388)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-15T21:42:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c71361834a17801a527420f3dc1a72b98fb75fb7",
          "body": null,
          "is_bot": false,
          "headline": "fix: integration test with unstable state manipulation (#387)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-15T16:51:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2eac7c1b8049e8cf7d6ee6be2e465f8e9ef0464d",
          "body": "access the service to the returned EntityType, ComplexType or collections thereof via compose() thereby getting access to all CRUD and bound operations\n\nfeat(service): introduce ComposableUrlRequestCmd\n\nfeat(odata2ts): recognize IsComposable attribute & generate composable request commands\n\ntest(example): add integration test for TrippinRw service",
          "is_bot": false,
          "headline": "feat: composable functions (#386)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-15T16:37:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "113fdf41041e69c922023cc91ce0d374ebb1073d",
          "body": "BREAKING CHANGE: use command pattern to allow users to retrieve request info (URL, method, data, headers) and add request and response converters before performing the request via the new `execute()` method\n\nrefactor(qobject)!: removing OperationReturnType, ResponseHelper and ResponseTypes\n\nrefactor\n[…]\ntroduce RequestCmd as intermediary command object including converters\n\nrefactor(service)!: adapt operations to UrlRequestCmd\n\nfix(example): use new execute method\n\nchore(example): update dependencies",
          "is_bot": false,
          "headline": "feat: Intermediary RequestCmd (#384)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-07-14T14:23:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "de08e2c250cb7dd9f37a43392a56ca47721a546e",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(release): publish branch main (#377)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-03T16:15:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7ddbf0f87c9ed20f8c52611988a3f133bce5b2f",
          "body": "must be enabled via config parameter: `enableNativeInOperator: true`",
          "is_bot": false,
          "headline": "feat(odata2ts): allow for native in-operator (V4 only)",
          "author_name": "Karim Ayachi",
          "author_login": "karimayachi",
          "committed_at": "2026-07-03T16:10:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aeb648b6d9a4a281e8a07de794840d68719a7c5b",
          "body": "adapt mock odata clients to http-client-api changes",
          "is_bot": false,
          "headline": "chore: update of http-client dependencies (#381)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-06-10T19:12:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b1f8176e070f1c1b464ff221b6f5773dba20a4d",
          "body": null,
          "is_bot": false,
          "headline": "feat(query-builder): clone method for main builders (#380)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-06-10T18:21:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8624b2d80e6f91f5ce0dcedf53a2e22a20713de3",
          "body": "* feat(qobjects): discriminate between complex and entity path objects\n\nintroduces QComplexPath and QComplexCollectionPath to enable discrimination between these props within the query builder\n\n* fix(query-builder): don't allow enum or primitive collections for expands\n\n* test(query-builder): improv\n[…]\n type determination logic into the DataDigester; model.qPath is now filled with the correct path object, when prop is collection\n\n* feat(example): poor man's typing tests to prove strictness of expand",
          "is_bot": false,
          "headline": "fix: restrict-expand (#379)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-06-08T23:09:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "537db369e04b972ab473b0ef2cf4c8d8d858120a",
          "body": null,
          "is_bot": false,
          "headline": "fix(odata2ts): fix subclass import for unbundled generation (#378)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-06-08T18:09:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e09fc8aace4f3dc599d1eabdebb52142c1bc779",
          "body": null,
          "is_bot": false,
          "headline": "fix(odata2ts): properly check for bundled file generation (#376)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2026-06-08T13:04:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "724c41009373ee86e6bc1bed6739a7bc76225d6e",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(release): publish branch main (#370)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2025-11-04T02:51:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3442b63712590f921c596059012275b405358a66",
          "body": null,
          "is_bot": false,
          "headline": "feat(query-builder): allow for counting v4 collections",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2025-11-03T20:57:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b407d418b7efa8069ff88f2186723a2002b136c4",
          "body": null,
          "is_bot": false,
          "headline": "feat(qobjects): allow to order collections by count",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2025-11-03T20:57:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5725abc5f2648b50ce907d40729be7a426af5097",
          "body": null,
          "is_bot": false,
          "headline": "fix(build): wrong deps for example projects (#369)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-11-03T13:00:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad99a9fe638b71109361d0e5b1b2b108d93f5cce",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(release): publish branch main (#364)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2025-11-01T20:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d26ac79207eb6008c2bafe2cee1d6ca110742d6",
          "body": "* feat(qobjects): introduce QSelectExpression\n\n* feat(query-builder): allow for QSelectExpression in select and expand operations",
          "is_bot": false,
          "headline": "feat: allow custom select and expand via QSelectExpression  (#368)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-11-01T20:24:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22a551671d660fbf915fb4542b62551cf070a260",
          "body": "BREAKING CHANGE: config option `numericEnum` has been refactored to `enumType`; use `enumType: \"numeric\"` if you previously used `numericEnum: true`.",
          "is_bot": false,
          "headline": "feat(odata2ts): generate enums as string union type (#367)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-11-01T18:12:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d917edefd05ccb77019ae0103fcc1dd52ac8b0e",
          "body": "BREAKING CHANGE: Previously parentheses were set automatically for or-expressions and erroneously for not-expressions; now users have to set parenthesis explicitly via `.group()`",
          "is_bot": false,
          "headline": "refactor(qobjects): parentheses only via `group` (#366)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-11-01T16:53:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "610c9052bc3d6557cf5bcc4876a0ce9ffdf34ae4",
          "body": null,
          "is_bot": false,
          "headline": "feat(qobjects): allow arrays for in-filter (#363)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-10-28T12:24:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8d11fa96d3f0fab0f6a46c4e4fef6d278f73cd3",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(release): publish branch main (#349)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2025-10-16T15:38:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2072ed6583f704074b255992374458a96c1954a2",
          "body": "* fix: unpack queries for complex types in V2\n\n* fix: unpack complex type responses in V2 for functions\n\n* build: fix sap/cds-dk to version 8.9.4",
          "is_bot": false,
          "headline": "fix: unpack & convert returned complex types in V2 (#362)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-10-16T15:32:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d2f2d7daa59921134d588fa939995dc67f05e78",
          "body": null,
          "is_bot": false,
          "headline": "build: always build all packages when releasing (#351)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-02-09T03:13:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40e53c90d2d77d276f3047f29b5105435a3c8933",
          "body": "generate to src-generated instead of build (no code assistance otherwise); use the newly introduced noUrlEncoding flag to simplify tests; tests for v2 data types in raw and converted form",
          "is_bot": false,
          "headline": "test: improve main tests (#350)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-02-08T23:54:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20af67762099e944bdb2cdfb3a83f7c6aa166c00",
          "body": "…348)",
          "is_bot": false,
          "headline": "fix: DateTime with v2-to-v4-converter shouldn't convert URL values (#…",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-02-08T21:58:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c95adcaf71b9afe8b12198408fc8851412d252fa",
          "body": "* build: use release-please & update to yarn 4.6\r\n\r\n* fix: typing issue with new converter signature",
          "is_bot": false,
          "headline": "build: use release-please & update to yarn 4.6 (#347)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2025-02-08T19:58:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49e2baafde845055e04903c7b0fcd42787d9441e",
          "body": " - @odata2ts/example-bookshop@0.9.3\n - @odata2ts/example-main@0.11.1\n - @odata2ts/odata-query-builder@0.18.2\n - @odata2ts/odata-query-objects@0.27.0\n - @odata2ts/odata-service@0.22.1\n - @odata2ts/odata2ts@0.39.1",
          "is_bot": false,
          "headline": "chore(release): publish",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-12-18T11:34:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34c91ed40dadbd7e5a95e1581757e9140b2774e6",
          "body": null,
          "is_bot": false,
          "headline": "feat(q-objects): emulated in-statement without extra parentheses (#341)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-12-18T11:32:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcdd9975ee9f34bf0474c22372db39fcb80e9bae",
          "body": null,
          "is_bot": false,
          "headline": "fix(odata2ts): add Accept header for metadata downloads (#340)",
          "author_name": "Dmitriy",
          "author_login": "solokhind",
          "committed_at": "2024-12-18T10:24:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3342bd281d559cb3489821d445bdc716aae8a946",
          "body": " - @odata2ts/example-bookshop@0.9.2\n - @odata2ts/example-main@0.11.0\n - @odata2ts/odata-query-builder@0.18.1\n - @odata2ts/odata-query-objects@0.26.0\n - @odata2ts/odata-service@0.22.0\n - @odata2ts/odata2ts@0.39.0",
          "is_bot": false,
          "headline": "chore(release): publish",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-10-28T15:59:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "691873557d21418561f017189fe896d544ffcba5",
          "body": "For queries the cast path segment is added (as before), but for modifying actions (create, put, patch) the odata.type control info is added; can be configured though.",
          "is_bot": false,
          "headline": "feat(service): subtype services (#332)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-10-28T15:56:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8a8a50c5a619cfe7e32bf6fa399e2f5b1f55ffa",
          "body": "Any q-object representing a base type, will handle subtype conversion properly when supplied with the correct control information, i.e. \"@odata.type\".",
          "is_bot": false,
          "headline": "feat(generator): conversion of subtype by control info (#331)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-10-27T18:35:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88eb9bdedf02fa4d74ebfc638f89aca583f1852d",
          "body": "Add naming options for qobject base types, add qBaseName to DataModel for base classes, q-objects with baseType & q-objects with subtype props",
          "is_bot": false,
          "headline": "feat(generator): qobjects with casted subtype props (#328)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-10-23T13:05:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df522846e275c160266c02d5c5b49c8be995b3fb",
          "body": "Allows base type services to cast to subtype services.",
          "is_bot": false,
          "headline": "feat(generator): add cast operations to base type services (#327)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-10-21T16:45:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "304bc627199766f7a930bffe28e39bb24eea39b1",
          "body": "BREAKING CHANGE: dedicated options parameter for all services",
          "is_bot": false,
          "headline": "feat(service): support no url encoding (#326)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-10-19T13:52:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "747caf85fccba54ee0e3582c72a08b895ccef526",
          "body": "… memory",
          "is_bot": false,
          "headline": "build(generator): introducing test-compile-large allowing for 14GB of…",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-09-24T20:34:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "723f426690bd27294519b8cc590a2295a94ada22",
          "body": " - @odata2ts/example-bookshop@0.9.1\n - @odata2ts/example-main@0.10.1\n - @odata2ts/odata2ts@0.38.1",
          "is_bot": false,
          "headline": "chore(release): publish",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-09-19T07:18:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5877161317d09c5ded9b44ce4a7ecd0f65e65235",
          "body": null,
          "is_bot": false,
          "headline": "fix(generator): api usage analysis must respect alias (#317)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-09-14T15:10:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "949d8749828dda06a2072d4153556c53d0adb3cf",
          "body": "required because of variance annotation (in out) which is applied to generated service classes as well as those service classes from the odata-service package",
          "is_bot": false,
          "headline": "fix(generator): set peer dependency of TS to >= 4.7",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-09-11T18:39:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ce242e75c634a63d75e30a8c3948d9f89c72769",
          "body": " - @odata2ts/example-bookshop@0.9.0\n - @odata2ts/example-main@0.10.0\n - @odata2ts/test-converters@0.5.0\n - @odata2ts/odata-query-builder@0.18.0\n - @odata2ts/odata-query-objects@0.25.0\n - @odata2ts/odata-service@0.21.0\n - @odata2ts/odata2ts@0.38.0",
          "is_bot": false,
          "headline": "chore(release): publish",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-09-11T10:23:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15e7fbe03772134a4858f4f92467463e54dcd024",
          "body": null,
          "is_bot": false,
          "headline": "fix(generator): add rimraf as dependency",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-09-11T10:19:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f08ccd5fc68b1de381ea1cb711c6e667ca5be98",
          "body": null,
          "is_bot": false,
          "headline": "fix(generator): add rimraf as dependency",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-09-11T10:19:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "baf784f76f119c2394ba4f1c3cd93359dc31171e",
          "body": null,
          "is_bot": false,
          "headline": "fix(generator): use typeof when using enums as types",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-09-11T10:13:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12607f04a4ec1142d750318cab5964f3d9a513c4",
          "body": null,
          "is_bot": false,
          "headline": "feat: compile src & test folders as sanity check",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-09-11T10:13:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3366843dc227f9c8edd5b4660d63c564cc82f121",
          "body": null,
          "is_bot": false,
          "headline": "fix: auto name clash resolution for v4 actions (#315)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-09-11T09:53:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5c36e6433bb5d793d5f970b12d6ebb8a4c5270d",
          "body": "* refactor(qobjects): introduce BaseFunctions for composition\r\n\r\n* feat(qobjects): improved enum support including numeric enums\r\n\r\n* feat(qobjects): improved enum handling, including native numeric enums\r\n\r\n* refactor(qobjects): improved conversion handling & primitive collections\r\n\r\n* feat(query-builder): adapt to qobject changes\r\n\r\n* refactor(odata-service): adapt to q-object changes\r\n\r\n* feat(generator): introduce option `numericEnums` & adapt to q-object & odata-service changes",
          "is_bot": false,
          "headline": "feat(generator): allow for numeric enums (#308)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-09-10T20:59:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "520f6fee95b7c5616ce163dd11851b5de15a8d04",
          "body": null,
          "is_bot": false,
          "headline": "chore: use tsx instead of ts-node (#307)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-08-25T17:41:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d68f9e9394abc81028c901be51fedfe55cb786c",
          "body": " - @odata2ts/example-bookshop@0.8.0\n - @odata2ts/example-main@0.9.0\n - @odata2ts/test-converters@0.4.0\n - @odata2ts/odata-core@0.6.0\n - @odata2ts/odata-query-builder@0.17.0\n - @odata2ts/odata-query-objects@0.24.0\n - @odata2ts/odata-service@0.20.0\n - @odata2ts/odata2ts@0.37.0",
          "is_bot": false,
          "headline": "chore(release): publish",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-08-25T09:24:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e49c67ade42fdd51af920644f6480549096048e",
          "body": null,
          "is_bot": false,
          "headline": "chore: update converters (#304)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-08-25T09:16:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f26e1f2e49fbe32a61a43ba2dd29be85a3561c3",
          "body": "BREAKING CHANGE: as there is no generated index file all file paths must be fixed.",
          "is_bot": false,
          "headline": "feat: use kebap-case for folder names (unbundledFileGeneration)",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-08-24T15:39:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a797d00b055143c820860a143cb634b83e98512",
          "body": "Previously all libs have been installed individually \"pascal-case\", \"snake-case\", etc. Now all libs are provided in one package called change-case. Also adds support for \"kebap-case\".",
          "is_bot": false,
          "headline": "chore: upgrade to change-case (#302)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-08-24T15:32:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0bcdb5c39cf6fd426524282772d3812670d68769",
          "body": "* refactor: use commonjs for all libraries for max compat\r\n\r\n* chore: use updated converter & http-client packages\r\n\r\n* build(ci): check for circular deps without yarn install\r\n\r\n* test: fix big number tests",
          "is_bot": false,
          "headline": "refactor: use commonjs for all libraries for max compat (#301)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-08-24T13:17:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bc88884317b6fc269729cf4eb08602571b69a2d",
          "body": "BREAKING CHANGE: ESM tends to break stuff",
          "is_bot": false,
          "headline": "refactor: vitest instead of jest & switch to ESM (#300)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-08-21T10:19:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a0ef94131c114b44edcddc0bc0af4fc5ab800fd",
          "body": " - @odata2ts/example-bookshop@0.7.14\n - @odata2ts/example-main@0.8.14\n - @odata2ts/odata2ts@0.36.3",
          "is_bot": false,
          "headline": "chore(release): publish",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-08-12T06:52:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1715d4b0759e1969b376ea371fd13344add29b28",
          "body": null,
          "is_bot": false,
          "headline": "refactor(example): all examples under one roof (#297)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-08-04T12:41:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c0ec7ca74c21a05e67d72709c926a6479b23101",
          "body": null,
          "is_bot": false,
          "headline": "feat(example): int type tests for data types & converters (#296)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-08-03T20:48:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b639699217ba234cf9e5508f24a64c4d6f3d3dd",
          "body": "…n are not recognized (#295)",
          "is_bot": false,
          "headline": "fix(generator): v4 types like Edm.Date, Edm.TimeOfDay and Emd.Duratio…",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-08-03T18:21:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "21e4f5b96d5deab022661ce7d15bbd4384d7a2fb",
          "body": " - @odata2ts/example-bookshop@0.7.13\n - @odata2ts/example-hand-made@0.8.2\n - @odata2ts/example-odata-v2@0.5.13\n - @odata2ts/example-renaming@0.2.14\n - @odata2ts/example-trippin@0.8.13\n - @odata2ts/odata-query-builder@0.16.10\n - @odata2ts/odata-query-objects@0.23.1\n - @odata2ts/odata-service@0.19.3\n - @odata2ts/odata2ts@0.36.2",
          "is_bot": false,
          "headline": "chore(release): publish",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-08-01T19:50:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a439d0a16dabc772287aa5f50ee7cd1b722df724",
          "body": "… (#294)",
          "is_bot": false,
          "headline": "fix(generator): apply type-only imports for q-objects in bundled mode…",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-08-01T19:36:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dbd36189b40d9ff709d9317384269c29989336e",
          "body": "uri-encoded values were checked instead of raw value",
          "is_bot": false,
          "headline": "fix: only check unencoded value for complex param (#293)",
          "author_name": "Andreas Schmidt",
          "author_login": "aschmidt93",
          "committed_at": "2024-08-01T17:59:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f2d47579740e677d334ecd7cbaa3f612ec260a6",
          "body": " - @odata2ts/example-bookshop@0.7.12\n - @odata2ts/example-hand-made@0.8.1\n - @odata2ts/example-odata-v2@0.5.12\n - @odata2ts/example-renaming@0.2.13\n - @odata2ts/example-trippin@0.8.12\n - @odata2ts/odata-query-builder@0.16.9\n - @odata2ts/odata-query-objects@0.23.0\n - @odata2ts/odata-service@0.19.2\n - @odata2ts/odata2ts@0.36.1",
          "is_bot": false,
          "headline": "chore(release): publish",
          "author_name": "texttechne",
          "author_login": "texttechne",
          "committed_at": "2024-07-31T21:12:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0b06f9bf86cb9060612a36f122ee0f41dccdcdb",
          "body": null,
          "is_bot": false,
          "headline": "fix(generator): more type-only imports depending on usage (#292)",
          "author_name": "Hubert Drecker",
          "author_login": "texttechne",
          "committed_at": "2024-07-31T20:52:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4383c68bf28bcd70c3505d3cdd76e07124057db",
          "body": null,
          "is_bot": false,
          "headline": "feat: use path alias for complex function params (#291)",
          "author_name": "Andreas Schmidt",
          "author_login": "aschmidt93",
          "committed_at": "2024-07-31T15:57:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 59,
      "latest_release_at": "2026-07-20T10:19:14Z",
      "latest_release_tag": "@odata2ts/odata-service-v0.24.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 7,
      "days_since_latest_release": 6,
      "mean_days_between_releases": 28.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@odata2ts/odata2ts",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "odata2ts",
            "generator",
            "cli",
            "odata",
            "ts",
            "model",
            "odata client",
            "typescript",
            "v2",
            "v4"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@odata2ts/odata2ts",
          "is_deprecated": false,
          "latest_version": "0.41.0",
          "repository_url": "https://github.com/odata2ts/odata2ts",
          "versions_count": 47,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 123959,
          "first_published_at": "2023-01-07T08:56:15.213000Z",
          "latest_published_at": "2026-07-20T10:20:29.924000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        },
        {
          "name": "@odata2ts/odata-core",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "odata",
            "types",
            "enum",
            "v2",
            "v4",
            "typescript",
            "ts",
            "odatats"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@odata2ts/odata-core",
          "is_deprecated": false,
          "latest_version": "0.6.1",
          "repository_url": "https://github.com/odata2ts/odata2ts",
          "versions_count": 13,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 121927,
          "first_published_at": "2022-12-18T19:47:13.384000Z",
          "latest_published_at": "2025-10-16T15:39:36.990000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 282
        },
        {
          "name": "@odata2ts/odata-service",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "odata client",
            "odata",
            "ts",
            "type-safe",
            "odata2ts",
            "v2",
            "v4",
            "typescript"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@odata2ts/odata-service",
          "is_deprecated": false,
          "latest_version": "0.24.0",
          "repository_url": "https://github.com/odata2ts/odata2ts",
          "versions_count": 52,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 132833,
          "first_published_at": "2021-08-16T08:50:48.726000Z",
          "latest_published_at": "2026-07-20T10:20:28.182000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        },
        {
          "name": "@odata2ts/odata-query-builder",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "query builder",
            "odata",
            "ts",
            "odata client",
            "query",
            "odata2ts",
            "type-safe"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@odata2ts/odata-query-builder",
          "is_deprecated": false,
          "latest_version": "0.19.0",
          "repository_url": "https://github.com/odata2ts/odata2ts",
          "versions_count": 28,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 127603,
          "first_published_at": "2023-01-07T08:56:17.649000Z",
          "latest_published_at": "2026-07-20T10:20:25.929000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        },
        {
          "name": "@odata2ts/odata-query-objects",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "query object",
            "ts",
            "odata",
            "odata2ts",
            "typescript",
            "type-safe"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@odata2ts/odata-query-objects",
          "is_deprecated": false,
          "latest_version": "0.29.0",
          "repository_url": "https://github.com/odata2ts/odata2ts",
          "versions_count": 48,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 152585,
          "first_published_at": "2021-07-01T17:23:28.401000Z",
          "latest_published_at": "2026-07-20T10:20:24.088000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 20,
      "stars": 133,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2021-12-17",
            "count": 1
          },
          {
            "date": "2022-02-04",
            "count": 1
          },
          {
            "date": "2023-03-06",
            "count": 2
          },
          {
            "date": "2023-04-13",
            "count": 1
          },
          {
            "date": "2023-10-13",
            "count": 1
          },
          {
            "date": "2023-11-19",
            "count": 1
          },
          {
            "date": "2024-07-08",
            "count": 1
          },
          {
            "date": "2024-07-10",
            "count": 1
          },
          {
            "date": "2024-08-28",
            "count": 1
          },
          {
            "date": "2024-09-16",
            "count": 1
          },
          {
            "date": "2024-10-14",
            "count": 1
          },
          {
            "date": "2024-12-13",
            "count": 1
          },
          {
            "date": "2025-02-05",
            "count": 1
          },
          {
            "date": "2025-04-18",
            "count": 1
          },
          {
            "date": "2025-08-24",
            "count": 1
          },
          {
            "date": "2025-11-04",
            "count": 1
          },
          {
            "date": "2025-11-19",
            "count": 1
          },
          {
            "date": "2026-01-19",
            "count": 1
          },
          {
            "date": "2026-03-24",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 20,
        "total_forks": 20
      },
      "star_history": null,
      "open_issues_and_prs": 14
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "examples/cli-test/tsconfig.json",
        "examples/main/tsconfig.json",
        "examples/test-converters/tsconfig.json",
        "examples/ts-floor-check/tsconfig.json",
        "packages/odata-core/tsconfig.json",
        "packages/odata-query-builder/tsconfig.json",
        "packages/odata-query-objects/tsconfig.json",
        "packages/odata-service/tsconfig.json",
        "packages/odata2ts/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 2764946,
      "source_files_sampled": 525,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 1
        },
        "advisory_count": 1,
        "affected_count": 1,
        "assessed_count": 138,
        "malicious_count": 0,
        "assessed_package": "npm:@odata2ts/odata2ts@0.41.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "tslib",
          "manifest": "packages/odata-core/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.1"
        },
        {
          "name": "@odata2ts/odata-query-objects",
          "manifest": "packages/odata-query-builder/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.29.0"
        },
        {
          "name": "tslib",
          "manifest": "packages/odata-query-builder/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.1"
        },
        {
          "name": "@odata2ts/converter-api",
          "manifest": "packages/odata-query-objects/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.6"
        },
        {
          "name": "@odata2ts/http-client-api",
          "manifest": "packages/odata-query-objects/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.4"
        },
        {
          "name": "@odata2ts/odata-core",
          "manifest": "packages/odata-query-objects/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.1"
        },
        {
          "name": "tslib",
          "manifest": "packages/odata-query-objects/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.1"
        },
        {
          "name": "@odata2ts/http-client-api",
          "manifest": "packages/odata-service/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.5"
        },
        {
          "name": "@odata2ts/odata-query-builder",
          "manifest": "packages/odata-service/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.19.0"
        },
        {
          "name": "@odata2ts/odata-query-objects",
          "manifest": "packages/odata-service/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.29.0"
        },
        {
          "name": "tslib",
          "manifest": "packages/odata-service/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.1"
        },
        {
          "name": "@odata2ts/converter-api",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.5"
        },
        {
          "name": "@odata2ts/converter-runtime",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.5.5"
        },
        {
          "name": "@odata2ts/http-client-api",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.5"
        },
        {
          "name": "@odata2ts/odata-core",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.1"
        },
        {
          "name": "@prettier/plugin-xml",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.4.2"
        },
        {
          "name": "@types/xml2js",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.4.14"
        },
        {
          "name": "axios",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.18.1"
        },
        {
          "name": "change-case",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.4.4"
        },
        {
          "name": "commander",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^15.0.0"
        },
        {
          "name": "cosmiconfig",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.0.2"
        },
        {
          "name": "cosmiconfig-typescript-loader",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.3.0"
        },
        {
          "name": "deepmerge",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.1"
        },
        {
          "name": "mkdirp",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.1"
        },
        {
          "name": "prettier",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.9.6"
        },
        {
          "name": "rimraf",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.1.3"
        },
        {
          "name": "ts-morph",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^28.0.0"
        },
        {
          "name": "tsconfig-loader",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.0"
        },
        {
          "name": "type-fest",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.8.0"
        },
        {
          "name": "upper-case-first",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.2"
        },
        {
          "name": "xml2js",
          "manifest": "packages/odata2ts/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.2"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@odata2ts/converter-api",
            "direct": true,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-api",
            "direct": true,
            "version": "0.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-api",
            "direct": true,
            "version": "0.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-api",
            "direct": true,
            "version": "^0.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-api",
            "direct": true,
            "version": "^0.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-runtime",
            "direct": true,
            "version": "0.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-runtime",
            "direct": true,
            "version": "^0.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/http-client-api",
            "direct": true,
            "version": "0.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/http-client-api",
            "direct": true,
            "version": "0.6.5",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/http-client-api",
            "direct": true,
            "version": "^0.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/http-client-api",
            "direct": true,
            "version": "^0.6.5",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/odata-core",
            "direct": true,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/odata-core",
            "direct": true,
            "version": "^0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/odata-core",
            "direct": true,
            "version": "^0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/odata-query-builder",
            "direct": true,
            "version": "^0.19.0",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/odata-query-objects",
            "direct": true,
            "version": "^0.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@prettier/plugin-xml",
            "direct": true,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "@prettier/plugin-xml",
            "direct": true,
            "version": "^3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/xml2js",
            "direct": true,
            "version": "0.4.14",
            "ecosystem": "npm"
          },
          {
            "name": "@types/xml2js",
            "direct": true,
            "version": "^0.4.14",
            "ecosystem": "npm"
          },
          {
            "name": "axios",
            "direct": true,
            "version": "1.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "axios",
            "direct": true,
            "version": "^1.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "change-case",
            "direct": true,
            "version": "5.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "change-case",
            "direct": true,
            "version": "^5.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "12.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "13.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "15.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "^15.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig",
            "direct": true,
            "version": "9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig",
            "direct": true,
            "version": "^9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig-typescript-loader",
            "direct": true,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig-typescript-loader",
            "direct": true,
            "version": "^6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "deepmerge",
            "direct": true,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "deepmerge",
            "direct": true,
            "version": "^4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": true,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": true,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": true,
            "version": "^3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": true,
            "version": "3.9.6",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": true,
            "version": "^3.9.6",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": true,
            "version": "6.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": true,
            "version": "^6.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "ts-morph",
            "direct": true,
            "version": "28.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-morph",
            "direct": true,
            "version": "^28.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsconfig-loader",
            "direct": true,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsconfig-loader",
            "direct": true,
            "version": "^1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": true,
            "version": "2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": true,
            "version": "^2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": true,
            "version": "5.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": true,
            "version": "^5.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "upper-case-first",
            "direct": true,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "upper-case-first",
            "direct": true,
            "version": "^2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "xml2js",
            "direct": true,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "xml2js",
            "direct": true,
            "version": "^0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.24.7",
            "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.24.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/highlight",
            "direct": false,
            "version": "7.24.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": "@commander-js/extra-typings",
            "direct": false,
            "version": "13.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@dependents/detective-less",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@discoveryjs/json-ext",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/core",
            "direct": false,
            "version": "1.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/runtime",
            "direct": false,
            "version": "1.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/wasi-threads",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@ianvs/prettier-plugin-sort-imports",
            "direct": false,
            "version": "4.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/cliui",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/schema",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.5",
            "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/set-array",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.25",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.31",
            "ecosystem": "npm"
          },
          {
            "name": "@napi-rs/wasm-runtime",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/agent",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/fs",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-big-number",
            "direct": false,
            "version": "0.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-big-number",
            "direct": false,
            "version": "^0.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-common",
            "direct": false,
            "version": "0.3.7",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-common",
            "direct": false,
            "version": "^0.3.7",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-luxon",
            "direct": false,
            "version": "0.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-luxon",
            "direct": false,
            "version": "^0.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-v2-to-v4",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-v2-to-v4",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-v2-to-v4",
            "direct": false,
            "version": "^0.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/converter-v2-to-v4",
            "direct": false,
            "version": "^0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/http-client-axios",
            "direct": false,
            "version": "0.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/http-client-axios",
            "direct": false,
            "version": "^0.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/http-client-base",
            "direct": false,
            "version": "0.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/http-client-fetch",
            "direct": false,
            "version": "0.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/http-client-fetch",
            "direct": false,
            "version": "^0.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/odata-service",
            "direct": false,
            "version": "^0.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "@odata2ts/test-converters",
            "direct": false,
            "version": "^0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxc-project/types",
            "direct": false,
            "version": "0.139.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pkgjs/parseargs",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-android-arm64",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-darwin-arm64",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-darwin-x64",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-freebsd-x64",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm64-gnu",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm64-musl",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-ppc64-gnu",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-s390x-gnu",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-x64-gnu",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-x64-musl",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-openharmony-arm64",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-wasm32-wasi",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-win32-arm64-msvc",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-win32-x64-msvc",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/pluginutils",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@standard-schema/spec",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@ts-graphviz/adapter",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@ts-graphviz/ast",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@ts-graphviz/common",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@ts-graphviz/core",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@ts-morph/common",
            "direct": false,
            "version": "0.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tybys/wasm-util",
            "direct": false,
            "version": "0.10.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/chai",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/deep-eql",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/luxon",
            "direct": false,
            "version": "3.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/luxon",
            "direct": false,
            "version": "^3.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "22.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "24.13.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "^24",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/project-service",
            "direct": false,
            "version": "8.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/tsconfig-utils",
            "direct": false,
            "version": "8.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "8.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "8.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "8.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/coverage-istanbul",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/expect",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/mocker",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/pretty-format",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/runner",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/snapshot",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/spy",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/utils",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-core",
            "direct": false,
            "version": "3.5.40",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-dom",
            "direct": false,
            "version": "3.5.40",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-sfc",
            "direct": false,
            "version": "3.5.40",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-ssr",
            "direct": false,
            "version": "3.5.40",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/shared",
            "direct": false,
            "version": "3.5.40",
            "ecosystem": "npm"
          },
          {
            "name": "@xml-tools/parser",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "abbrev",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "aggregate-error",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "any-promise",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "app-module-path",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "assertion-error",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ast-module-types",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "async-function",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "async-generator-function",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "baseline-browser-mapping",
            "direct": false,
            "version": "2.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "bignumber.js",
            "direct": false,
            "version": "11.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "bignumber.js",
            "direct": false,
            "version": "9.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "bignumber.js",
            "direct": false,
            "version": "^9.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "bl",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.28.7",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "5.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "cacache",
            "direct": false,
            "version": "18.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001806",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chevrotain",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "chownr",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "clean-stack",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-cursor",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-spinners",
            "direct": false,
            "version": "2.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "clone",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "code-block-writer",
            "direct": false,
            "version": "13.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "1.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "commondir",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "deep-extend",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "defaults",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dependency-tree",
            "direct": false,
            "version": "11.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-indent",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "detect-newline",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "detective-amd",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "detective-cjs",
            "direct": false,
            "version": "6.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "detective-es6",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "detective-postcss",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "detective-sass",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "detective-scss",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "detective-stylus",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "detective-typescript",
            "direct": false,
            "version": "14.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "detective-vue2",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eastasianwidth",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.395",
            "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": "enhanced-resolve",
            "direct": false,
            "version": "5.24.3",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "env-cmd",
            "direct": false,
            "version": "11.0.0",
            "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": "error-ex",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escodegen",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "expect-type",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "exponential-backoff",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "filing-cabinet",
            "direct": false,
            "version": "5.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "follow-redirects",
            "direct": false,
            "version": "1.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fs-minipass",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs-minipass",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "generator-function",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "gensync",
            "direct": false,
            "version": "1.0.0-beta.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-amd-module-type",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-own-enumerable-property-symbols",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "git-hooks-list",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "10.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "13.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "gonzales-pe",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "http-cache-semantics",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "imurmurhash",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "indent-string",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "1.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "ip-address",
            "direct": false,
            "version": "9.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.15.1",
            "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-interactive",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-lambda",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-obj",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-regexp",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-url-superb",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-coverage",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-report",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-reports",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jackspeak",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "jiti",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsbn",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-android-arm64",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-darwin-arm64",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-darwin-x64",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-freebsd-x64",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm64-gnu",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm64-musl",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-x64-gnu",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-x64-musl",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-win32-arm64-msvc",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-win32-x64-msvc",
            "direct": false,
            "version": "1.33.0",
            "ecosystem": "npm"
          },
          {
            "name": "lines-and-columns",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "log-symbols",
            "direct": false,
            "version": "4.1.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": "luxon",
            "direct": false,
            "version": "3.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "luxon",
            "direct": false,
            "version": "^3.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "madge",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.30.21",
            "ecosystem": "npm"
          },
          {
            "name": "magicast",
            "direct": false,
            "version": "0.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "make-dir",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-fetch-happen",
            "direct": false,
            "version": "13.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.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-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "9.0.5",
            "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.2",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-collect",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-fetch",
            "direct": false,
            "version": "3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-flush",
            "direct": false,
            "version": "1.0.5",
            "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": "module-definition",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "module-lookup-amd",
            "direct": false,
            "version": "9.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.16",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "node-gyp",
            "direct": false,
            "version": "10.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.51",
            "ecosystem": "npm"
          },
          {
            "name": "node-source-walk",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "7.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "obug",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ora",
            "direct": false,
            "version": "5.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "p-map",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-json-from-dist",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-json-from-dist",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-ms",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-browserify",
            "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": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "pluralize",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.22",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-values-parser",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "precinct",
            "direct": false,
            "version": "12.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "prettier-plugin-packagejson",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-ms",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "proc-log",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "promise-retry",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-from-env",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "quote-unquote",
            "direct": false,
            "version": "1.0.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": "regexp-to-ast",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "requirejs",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "requirejs-config-file",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.12",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.8",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-dependency-path",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "restore-cursor",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "rolldown",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "sass-lookup",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "sax",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.5",
            "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": "siginfo",
            "direct": false,
            "version": "2.0.0",
            "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": "smart-buffer",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks",
            "direct": false,
            "version": "2.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "socks-proxy-agent",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "sort-object-keys",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "sort-package-json",
            "direct": false,
            "version": "3.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "ssri",
            "direct": false,
            "version": "10.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "stackback",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "std-env",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "stream-to-array",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width-cjs",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "stringify-object",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi-cjs",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "3.0.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": "stylus-lookup",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tagged-tag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "tar",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "tinybench",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyexec",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.17",
            "ecosystem": "npm"
          },
          {
            "name": "tinyrainbow",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-api-utils",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-expect",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-expect",
            "direct": false,
            "version": "^1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-graphviz",
            "direct": false,
            "version": "2.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "tsconfig-paths",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "4.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "6.19.8",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "7.18.2",
            "ecosystem": "npm"
          },
          {
            "name": "unique-filename",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unique-slug",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "8.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "vitest",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "walkdir",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "why-is-node-running",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi-cjs",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "xmlbuilder",
            "direct": false,
            "version": "11.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 487,
        "direct_count": 54,
        "indirect_count": 433
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 238,
        "open_issues": 13,
        "closed_ratio": 0.905,
        "closed_issues": 124,
        "closed_unmerged_prs": 19
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "texttechne",
          "commits": 653,
          "avatar_url": "https://avatars.githubusercontent.com/u/1963160?v=4"
        },
        {
          "type": "User",
          "login": "aschmidt93",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/139967229?v=4"
        },
        {
          "type": "User",
          "login": "manuelseeger",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/45933060?v=4"
        },
        {
          "type": "User",
          "login": "solokhind",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/35115249?v=4"
        },
        {
          "type": "User",
          "login": "karimayachi",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/4971243?v=4"
        },
        {
          "type": "User",
          "login": "Involture",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/23616680?v=4"
        }
      ],
      "contributors_sampled": 6,
      "top_contributor_share": 0.989
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "coverage.yml",
        "release.yaml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json",
        "yarn.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 8,
            "reason": "16 out of 18 merged PRs checked by a CI test -- score normalized to 8",
            "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/15 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "25 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "b658f9934681699d23288b1a85fa76de4275f5b1",
        "ran_at": "2026-07-26T14:33:36Z",
        "aggregate_score": 4,
        "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-25T23:51:19Z",
      "oldest_open_prs": [
        {
          "number": 404,
          "created_at": "2026-07-23T22:14:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-25T23:50:41Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 38,
          "created_at": "2022-07-30T23:06:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 107,
          "created_at": "2023-01-07T22:34:38Z",
          "last_comment_at": "2024-08-28T11:31:46Z",
          "last_comment_author": "texttechne"
        },
        {
          "number": 140,
          "created_at": "2023-03-10T12:02:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 149,
          "created_at": "2023-04-14T14:38:39Z",
          "last_comment_at": "2023-04-18T14:37:00Z",
          "last_comment_author": "texttechne"
        },
        {
          "number": 160,
          "created_at": "2023-05-10T10:03:10Z",
          "last_comment_at": "2023-05-12T15:12:58Z",
          "last_comment_author": "ShaneGH"
        },
        {
          "number": 161,
          "created_at": "2023-05-12T14:46:57Z",
          "last_comment_at": "2023-07-21T21:52:11Z",
          "last_comment_author": "texttechne"
        },
        {
          "number": 199,
          "created_at": "2023-07-31T14:22:51Z",
          "last_comment_at": "2023-11-04T17:41:20Z",
          "last_comment_author": "texttechne"
        },
        {
          "number": 207,
          "created_at": "2023-08-08T12:28:57Z",
          "last_comment_at": "2024-05-26T12:19:45Z",
          "last_comment_author": "texttechne"
        },
        {
          "number": 224,
          "created_at": "2023-10-04T14:48:44Z",
          "last_comment_at": "2023-12-19T12:58:16Z",
          "last_comment_author": "texttechne"
        },
        {
          "number": 237,
          "created_at": "2023-11-24T22:12:51Z",
          "last_comment_at": "2025-03-29T14:24:55Z",
          "last_comment_author": "texttechne"
        },
        {
          "number": 305,
          "created_at": "2024-08-25T09:11:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 323,
          "created_at": "2024-09-24T12:44:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 361,
          "created_at": "2025-10-14T12:23:51Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/odata2ts/odata2ts",
    "host": "github.com",
    "name": "odata2ts",
    "owner": "odata2ts"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 67,
      "inputs": {
        "security": 49,
        "vitality": 80,
        "community": 72,
        "governance": 58,
        "engineering": 72
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 80,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 67,
            "inputs": {
              "commits_last_year": 59,
              "human_commit_share": 0.93,
              "days_since_last_push": 0,
              "active_weeks_last_year": 7
            },
            "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": "7/52 weeks with commits",
                "points": 4.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "59 commits in the last year",
                "points": 16,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 59
                    }
                  }
                ],
                "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": "excellent",
            "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": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "@odata2ts/odata-service-v0.24.0",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "mean_days_between_releases": 28.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~28.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 28.7
                    }
                  }
                ],
                "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": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 72,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 45,
            "inputs": {
              "forks": 20,
              "stars": 133,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "133 stars",
                "points": 34.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 133
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "20 forks",
                "points": 10.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 97,
            "inputs": {
              "packages": [
                "@odata2ts/odata2ts",
                "@odata2ts/odata-core",
                "@odata2ts/odata-service",
                "@odata2ts/odata-query-builder",
                "@odata2ts/odata-query-objects"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 658907
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "658,907 downloads/month across npm",
                "points": 77.6,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 658907,
                      "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": 58,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 17,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 6,
              "top_contributor_share": 0.989
            },
            "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 99% of commits",
                "points": 0.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "6 contributors",
                "points": 8.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "merged_prs": 238,
              "open_issues": 13,
              "closed_issues": 124,
              "issue_closed_ratio": 0.905,
              "closed_unmerged_prs": 19
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "90% of issues closed",
                "points": 42.3,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 90
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "238/257 decided PRs merged",
                "points": 35.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 238,
                      "decided": 257
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/15 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "followers": 8,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "odata2ts",
              "public_repos": 7,
              "account_age_days": 1865
            },
            "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": "8 followers of odata2ts",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 8,
                      "login": "odata2ts"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "7 public repos, account ~5 yr old",
                "points": 16.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 7
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 5
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@odata2ts/odata2ts",
                "@odata2ts/odata-core",
                "@odata2ts/odata-service",
                "@odata2ts/odata-query-builder",
                "@odata2ts/odata-query-objects"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "5 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 5,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "52 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 52
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 72,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 70,
            "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": "16 out of 18 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "generator",
                "odata",
                "query-builder",
                "type-safe",
                "typescript"
              ],
              "has_wiki": true,
              "homepage": "https://odata2ts.github.io/",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://odata2ts.github.io/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "5 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 49,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 40,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "16 out of 18 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/15 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "25 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Matched the npm:@odata2ts/odata2ts@0.41.0 runtime dependency closure — what installing the published package pulls in — 138 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@odata2ts/odata2ts@0.41.0",
                  "assessed": 138
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 85,
            "inputs": {
              "source": "osv",
              "advisories": 1,
              "affected_packages": 1,
              "assessed_packages": 138,
              "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: brace-expansion 2.1.2 (high 7.5)",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "brace-expansion 2.1.2 (high 7.5)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "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": 138,
              "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": 3
            },
            "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": 51,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "93 of 93 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 93,
                      "sampled": 93
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 45,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json",
                "yarn.lock"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "examples/cli-test/tsconfig.json",
                "examples/main/tsconfig.json",
                "examples/test-converters/tsconfig.json",
                "examples/ts-floor-check/tsconfig.json",
                "packages/odata-core/tsconfig.json",
                "packages/odata-query-builder/tsconfig.json",
                "packages/odata-query-objects/tsconfig.json",
                "packages/odata-service/tsconfig.json",
                "packages/odata2ts/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "examples/cli-test/tsconfig.json, examples/main/tsconfig.json, examples/test-converters/tsconfig.json, examples/ts-floor-check/tsconfig.json, packages/odata-core/tsconfig.json, packages/odata-query-builder/tsconfig.json, packages/odata-query-objects/tsconfig.json, packages/odata-service/tsconfig.json, packages/odata2ts/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples/cli-test/tsconfig.json, examples/main/tsconfig.json, examples/test-converters/tsconfig.json, examples/ts-floor-check/tsconfig.json, packages/odata-core/tsconfig.json, packages/odata-query-builder/tsconfig.json, packages/odata-query-objects/tsconfig.json, packages/odata-service/tsconfig.json, packages/odata2ts/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 2764946,
              "source_files_sampled": 525,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/525 source files over 60KB",
                "points": 54.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 525,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T14:33:54.014033Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/odata2ts/odata2ts.svg",
  "full_name": "odata2ts/odata2ts",
  "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.