Releases: stats-forge/github-stats-forge
Release list
@stats-forge/github-stats-forge-cli@0.4.1
Patch Changes
-
#88
7de50e4- build: depend on the inquirer prompts used, not on@inquirer/promptsThe meta-package pulled all ten prompts, five of them never imported.
Ten packages leave the install, and nothing about the prompts changes. -
#89
8157af8- feat: ask a numeric option as a number, not as textThe eighteen numeric options fell through to a text prompt,
so anything typed reached the query string unchecked.
A count refuses a fraction now, and a weight takes one.
@stats-forge/github-stats-forge-core@0.6.0
Minor Changes
-
#79
0ca9fe1- fix(core)!: enforce the allowlists, which were parsed and never checkedALLOWLISTandGIST_ALLOWLISTare read intoCardConfigand now enforced: the api handlers
refuse an identity the deployment does not name, before anything is fetched,
as a newnot_allowederror code.
Until now the lists were consulted nowhere, so a deployment configured with either served anyone
who asked. They are also renamed, from theWHITELIST/GIST_WHITELISTthe previous
release read; a deployment still setting those is not pinned.It covers every GitHub login —
username, and the organization card'sorg— and the gist
card'sid, matched case-insensitively because GitHub logins are, with the spaces around
each entry ignored.
It does not cover the wakatime card, whoseusernameis a WakaTime profile rather than a
GitHub login.Three smaller changes come with it:
ErrorCodegainsnot_allowed, which a host branching on the union will want a case for;
no_tokensis nowretryable, the fix being a token on the next start rather than a query change;
and aPAT_variable set to the empty string is now skipped rather than spending a retry.
@stats-forge/github-stats-forge-cli@0.4.0
Minor Changes
-
#76
971285c- feat(cli): group the option menu into sectionsEvery option now sits under a heading that says what it governs:
what the card counts, what it shows, its text and size, its colors and border.
Generate, save and quit carry a heading of their own above them.
The list is as tall as the terminal, an unanswered option is dimmed,
and typing jumps to a label —g,sandqreach the three actions from anywhere in it.CardOptioncarries its section as a requiredgroup;
the params a card cannot render without areCardField, which has none.
Patch Changes
-
#78
0064e34- fix: point the bin at a committed shim, so a clean install can link itbinnamedbuild/index.js, which does not exist until the package is built —
so pnpm warned on every clean install of the workspace,
once for each app that depends on the CLI, and created no bin link.
It now namesbin.js, three committed lines that import the built entry point. -
Updated dependencies [
0ca9fe1]:- @stats-forge/github-stats-forge-core@0.6.0
@stats-forge/github-stats-forge-core@0.5.0
Minor Changes
-
#68
a6bfe27- fix(core)!: keep the organization card when the token may not read membersmembersWithRoleneeds the organizationMemberspermission,
which a GitHub App installation token does not carry by default.
GitHub answersFORBIDDENon that one field and still returns the organization,
but the fetcher threw on anyerrorsentry,
so a token without the permission lost the whole card — including the stats it could read.
That refusal is now tolerated:publicMemberscomes backnull
and the card leaves the member row out, whether or notshowasked for it.
Any other GraphQL error still throws as before.OrganizationData.publicMembersis thereforenumber | null.
Patch Changes
-
#75
cdc67b5- feat(core): update language colorsRegenerated from the upstream linguist languages file.
@stats-forge/github-stats-forge-cli@0.3.2
@stats-forge/github-stats-forge-core@0.4.0
Minor Changes
-
#64
e647e18- feat(core): add an organization cardorgdraws an organization's description and what its public repositories add up to:
how many there are, the stars, forks and watchers they hold between them,
and how many issues and pull requests are open across them.
showadds releases, commits, public members, the most common language and the founding year.fetchOrganizationis the fetcher behind it, exported with itsOrganizationData.
It reads public, non-fork repositories most-starred first and walks at most five pages of 100,
sotruncatedsays when the totals it summed are a lower bound. -
#61
f9c9d38- feat(core): interpolate translations, and give each card its own locale tableA wording carries the values drawn into it as
{name}placeholders,
so word order and the possessive belong to the translation rather than to the card.
Where the wording depends on a number it writes a form per plural category,
picked by the locale's own rules — which is what makes a single contribution
read1 contributionrather than1 contributions.src/translations.tsis gone: each card is now a folder holding its renderer and its
locales.ts, and the tables are plain data instead of functions rebuilt on every render.
Patch Changes
-
#65
3116862- refactor(core): draw a card's text throughlocalizeA card binds its locale table to the requested locale once and then names each wording
where it draws it —t.title({ name, apostrophe }), one function per key, taking exactly
the values that key's wording declares. A key carries no card name in front of it any
more, since the table it belongs to is named at the top of the card rather than at every
call site. ThelastYearwording, which two cards draw, moves to a table of its own in
common/, so no card reads another card's translations. The rendered SVG is unchanged.
@stats-forge/github-stats-forge-cli@0.3.1
@stats-forge/github-stats-forge-core@0.3.0
Minor Changes
-
#58
5fa21c7- fix(core): point the error card's report link at this projectThe inherited text pointed at a shortener that redirects to the upstream project,
so every reported bug went to the wrong repository.
It now readsFile an issue at https://tinyurl.com/stats-forge-bug,
on its own line under the message because it no longer fits beside the title.
@stats-forge/github-stats-forge-cli@0.3.0
Minor Changes
-
#58
5fa21c7- feat(cli): export the card catalog./cardsnow exposescards,findCardandCOMMON_OPTIONS,
so a second UI over the same options reads one list rather than keeping its own.
The documentation site's card builder is the first to do it.
Patch Changes
- Updated dependencies [
5fa21c7]:- @stats-forge/github-stats-forge-core@0.3.0
@stats-forge/github-stats-forge-core@0.2.0
Minor Changes
-
#51
e4dfa0c- feat(core)!: draw every card from one type scale, with a title icon and a banded headercommon/brand.tsowns the font stack, the type scale, the weights and the widths,
so a card composes from it rather than writing afontshorthand of its own.
Every card now has a banded header:- a tint behind the title that follows the card's own corners
- a title icon distinct per card, and a short rule beneath that icon
- both drawn in the theme's icon color so they read against the title
Default widths snap to 300, 400 or 500:
statsmoves from 287 to 300 and, with its rank, from 450 to 500,contributedTofrom 450 to 500,wakatimefrom 495 to 500,donutlayout from 350 to 400.
Passcard_widthto keep a card at the size it is.
-
#47
3af493a- feat(core)!: count thestatsandcontributedTocards within a date rangefromandtoreplacecommits_year, and give thecontributedTocard the same pair.
Each accepts2024,2024-03or2024-03-15and covers the whole of what it names,
sofrom=2024starts on the 1st of January andto=2024ends on the 31st of December.
Either end may be left open;
a date outside 2008 through this year, or afromafter itsto, is rejected.commits_yearalso counted a day too many:
GitHub reads an omittedtoas a year afterfrom,
so?commits_year=2024included the 1st of January 2025. -
#46
e9c9eeb- feat(core)!: gather each card's accepted option values into oneOPTIONSobjectEvery handler now carries
OPTIONS, keyed by the query param each set governs:
stats.OPTIONS.rank_icon,topLangs.OPTIONS.layout,wakatime.OPTIONS.display_format.
This replaces the flat properties, sostats.RANK_ICONSbecomesstats.OPTIONS.rank_icon,
topLangs.LAYOUTSbecomestopLangs.OPTIONS.layout,
andwakatime.DISPLAY_FORMATSbecomeswakatime.OPTIONS.display_format.It also covers the comma-separated params, which had no published list at all:
show,hideandrole, so a UI can offer their values the way it offers an enum's.
The values live on the render function that draws them and the handler forwards them,
so what renders, what validates and what a UI offers cannot drift apart. -
#49
dc8ba26- feat(core): put every card's remaining English text throughI18nThe
contributedToand gist cards read their words from a locale table now
and acceptlocale, as do the stats card'sRanklabel
and the repo card's missing description and unspecified language.I18n#tfalls back to the English string when a locale has no entry for a key,
so a key can be written in English and translated later —
before, such a key threw and failed the whole card. -
#44
bf6a552- feat(core): add thecontributedTocardThe repositories a user has contributed to, all-time, ranked, with a mark per
contribution year showing which ones each repository got. It reuses the walkstats
already runs forall_time_contributed_to, so it costs no extra request.contributionscounts commit-days, not commits: GitHub groups commit contributions by
day.
Patch Changes
-
#48
05d7a7d- refactor(core): share one handler shape across the api endpointsEvery endpoint is now
cardHandler(schema, render),
so the color pass, the query parse and the error card are written once rather than in each handler.
The fetchers classify a GraphQLNOT_FOUNDthrough the same helper,
clampValueandbuildSearchFiltertake the typed values their callers already pass,
andmeasureTextno longer rebuilds its width table on every call.