Skip to content

Releases: stats-forge/github-stats-forge

@stats-forge/github-stats-forge-cli@0.4.1

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 11 Sep 05:49
Immutable release. Only release title and notes can be modified.
ac7519a

Patch Changes

  • #88 7de50e4 - build: depend on the inquirer prompts used, not on @inquirer/prompts

    The 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 text

    The 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

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 10 Sep 05:43
Immutable release. Only release title and notes can be modified.
ff3a371

Minor Changes

  • #79 0ca9fe1 - fix(core)!: enforce the allowlists, which were parsed and never checked

    ALLOWLIST and GIST_ALLOWLIST are read into CardConfig and now enforced: the api handlers
    refuse an identity the deployment does not name, before anything is fetched,
    as a new not_allowed error code.
    Until now the lists were consulted nowhere, so a deployment configured with either served anyone
    who asked. They are also renamed, from the WHITELIST / GIST_WHITELIST the previous
    release read; a deployment still setting those is not pinned.

    It covers every GitHub login — username, and the organization card's org — and the gist
    card's id, matched case-insensitively because GitHub logins are, with the spaces around
    each entry ignored.
    It does not cover the wakatime card, whose username is a WakaTime profile rather than a
    GitHub login.

    Three smaller changes come with it:
    ErrorCode gains not_allowed, which a host branching on the union will want a case for;
    no_tokens is now retryable, the fix being a token on the next start rather than a query change;
    and a PAT_ variable set to the empty string is now skipped rather than spending a retry.

@stats-forge/github-stats-forge-cli@0.4.0

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 10 Sep 05:43
Immutable release. Only release title and notes can be modified.
ff3a371

Minor Changes

  • #76 971285c - feat(cli): group the option menu into sections

    Every 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, s and q reach the three actions from anywhere in it.

    CardOption carries its section as a required group;
    the params a card cannot render without are CardField, which has none.

Patch Changes

  • #78 0064e34 - fix: point the bin at a committed shim, so a clean install can link it

    bin named build/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 names bin.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

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 09 Sep 16:54
Immutable release. Only release title and notes can be modified.
15cf60a

Minor Changes

  • #68 a6bfe27 - fix(core)!: keep the organization card when the token may not read members

    membersWithRole needs the organization Members permission,
    which a GitHub App installation token does not carry by default.
    GitHub answers FORBIDDEN on that one field and still returns the organization,
    but the fetcher threw on any errors entry,
    so a token without the permission lost the whole card — including the stats it could read.
    That refusal is now tolerated: publicMembers comes back null
    and the card leaves the member row out, whether or not show asked for it.
    Any other GraphQL error still throws as before.

    OrganizationData.publicMembers is therefore number | null.

Patch Changes

@stats-forge/github-stats-forge-cli@0.3.2

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 09 Sep 16:54
Immutable release. Only release title and notes can be modified.
15cf60a

Patch Changes

  • Updated dependencies [cdc67b5, a6bfe27]:
    • @stats-forge/github-stats-forge-core@0.5.0

@stats-forge/github-stats-forge-core@0.4.0

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 08 Sep 17:38
Immutable release. Only release title and notes can be modified.
e656077

Minor Changes

  • #64 e647e18 - feat(core): add an organization card

    org draws 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.
    show adds releases, commits, public members, the most common language and the founding year.

    fetchOrganization is the fetcher behind it, exported with its OrganizationData.
    It reads public, non-fork repositories most-starred first and walks at most five pages of 100,
    so truncated says when the totals it summed are a lower bound.

  • #61 f9c9d38 - feat(core): interpolate translations, and give each card its own locale table

    A 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
    read 1 contribution rather than 1 contributions.

    src/translations.ts is 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 through localize

    A 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. The lastYear wording, 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

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 08 Sep 17:38
Immutable release. Only release title and notes can be modified.
e656077

Patch Changes

  • #64 e647e18 - feat(cli): offer the organization card

    It asks for the organization's login, then the options that card takes.

  • Updated dependencies [3116862, e647e18, f9c9d38]:

    • @stats-forge/github-stats-forge-core@0.4.0

@stats-forge/github-stats-forge-core@0.3.0

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 07 Sep 11:46
Immutable release. Only release title and notes can be modified.
f1e1677

Minor Changes

  • #58 5fa21c7 - fix(core): point the error card's report link at this project

    The inherited text pointed at a shortener that redirects to the upstream project,
    so every reported bug went to the wrong repository.
    It now reads File 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

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 07 Sep 11:46
Immutable release. Only release title and notes can be modified.
f1e1677

Minor Changes

  • #58 5fa21c7 - feat(cli): export the card catalog

    ./cards now exposes cards, findCard and COMMON_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

Choose a tag to compare

@stats-forge-helper stats-forge-helper released this 06 Sep 21:10
Immutable release. Only release title and notes can be modified.
32d5aee

Minor Changes

  • #51 e4dfa0c - feat(core)!: draw every card from one type scale, with a title icon and a banded header

    common/brand.ts owns the font stack, the type scale, the weights and the widths,
    so a card composes from it rather than writing a font shorthand 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:

    • stats moves from 287 to 300 and, with its rank, from 450 to 500,
    • contributedTo from 450 to 500, wakatime from 495 to 500,
    • donut layout from 350 to 400.
      Pass card_width to keep a card at the size it is.
  • #47 3af493a - feat(core)!: count the stats and contributedTo cards within a date range

    from and to replace commits_year, and give the contributedTo card the same pair.
    Each accepts 2024, 2024-03 or 2024-03-15 and covers the whole of what it names,
    so from=2024 starts on the 1st of January and to=2024 ends on the 31st of December.
    Either end may be left open;
    a date outside 2008 through this year, or a from after its to, is rejected.

    commits_year also counted a day too many:
    GitHub reads an omitted to as a year after from,
    so ?commits_year=2024 included the 1st of January 2025.

  • #46 e9c9eeb - feat(core)!: gather each card's accepted option values into one OPTIONS object

    Every 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, so stats.RANK_ICONS becomes stats.OPTIONS.rank_icon,
    topLangs.LAYOUTS becomes topLangs.OPTIONS.layout,
    and wakatime.DISPLAY_FORMATS becomes wakatime.OPTIONS.display_format.

    It also covers the comma-separated params, which had no published list at all:
    show, hide and role, 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 through I18n

    The contributedTo and gist cards read their words from a locale table now
    and accept locale, as do the stats card's Rank label
    and the repo card's missing description and unspecified language.

    I18n#t falls 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 the contributedTo card

    The repositories a user has contributed to, all-time, ranked, with a mark per
    contribution year showing which ones each repository got. It reuses the walk stats
    already runs for all_time_contributed_to, so it costs no extra request.

    contributions counts commit-days, not commits: GitHub groups commit contributions by
    day.

Patch Changes

  • #48 05d7a7d - refactor(core): share one handler shape across the api endpoints

    Every 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 GraphQL NOT_FOUND through the same helper,
    clampValue and buildSearchFilter take the typed values their callers already pass,
    and measureText no longer rebuilds its width table on every call.