npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@simpelekees/knowmore-federation

v0.2.1

Published

Typed client, shaping helpers and table components for the footdata federation scraper (FVRZ matchcenter) — shared by FindMore and KnowMore.

Readme

@simpelekees/knowmore-federation

Typed client, shaping helpers and three table components for the footdata federation scraper (the FVRZ matchcenter mirror at footdata.rappedoos.com). Shared by FindMore and KnowMore — one copy instead of two hand-synced ones.

pnpm add @simpelekees/knowmore-federation

What's in it

| Entry | Contents | | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | @simpelekees/knowmore-federation | federationApi transport (getTeamStandings, getTeamSchedule, getTeamResults, getTeamGroup, getGroupFixtures, getTeamStats, getMatchDetail, …), matchcenter deep links, schedule shaping (mergeScheduleEntries, partitionEntries, isOurTeam, hasMatchDetail, …), standings shaping (sortStandings, recentForm, shortenTeamLabels, …), the FederationLabels context, and Schema / Paths types generated from the scraper's OpenAPI document | | @simpelekees/knowmore-federation/components | StandingsTable, SquadTable, SoccerPitch (Svelte 5, runes) |

Host setup

1. Scraper base URL. The client reads import.meta.env.VITE_SCRAPER_URL and falls back to /scraper (a same-origin dev proxy). Set it at build time:

VITE_SCRAPER_URL=https://footdata.rappedoos.com/api

2. Tailwind. The components use utility classes on the shadcn theme tokens (bg-muted, text-foreground, --primary, …) that both apps already define. Tailwind 4 does not scan node_modules by default, so add to your app.css:

@source '../node_modules/@simpelekees/knowmore-federation/dist';

The row-tint tbl-* styles ship inside the components; delete any copy from your app.css.

3. Labels (optional). Defaults are German. To use your own i18n, set a resolver once in the root layout:

<script lang="ts">
	import { setFederationLabels } from '@simpelekees/knowmore-federation';
	import * as m from '$lib/paraglide/messages';
	setFederationLabels(() => ({
		colTeam: m.col_team(),
		colPlayed: m.col_played(),
		teamsCount: (n) => m.teams_count({ count: n })
		// … any key you translate; the rest fall back to German
	}));
</script>

An English set is exported as EN_LABELS.

Usage

<script lang="ts">
	import { getTeamStandings, sortStandings, ourTeamIndex } from '@simpelekees/knowmore-federation';
	import { StandingsTable } from '@simpelekees/knowmore-federation/components';

	const standings = await getTeamStandings(clubId, teamId);
	const table = sortStandings(standings.table);
	const ourIdx = ourTeamIndex(table, 'FC Töss');
</script>

<StandingsTable
	{table}
	{ourIdx}
	computed={standings.computed}
	hrefFor={(label) => `/teams/${label}`}
/>

Generated types

src/lib/schema.gen.ts is produced by openapi-typescript from the live scraper:

pnpm types:gen     # regenerate after a scraper release
pnpm types:check   # fails when the live schema drifted from the committed file

The hand-written interfaces in api.ts remain the public surface; the generated Schema['StandingEntry'] etc. are there to diff against.

Develop

pnpm install
pnpm check        # svelte-check
pnpm build        # svelte-package → dist/ + publint
pnpm publish      # public, from the simpelekees npm login

Local iteration against an app: pnpm link --global here, then pnpm link --global @simpelekees/knowmore-federation in the app.