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

@elirames/seedly

v0.5.0

Published

Génère des données de test cohérentes à partir de votre schéma PostgreSQL, sans écrire un seul fichier de seed.

Readme

seedly

npm CI license

Remplit votre base de développement avec des données cohérentes, en lisant votre schéma PostgreSQL. Pas de fichier de seed à écrire, pas de fixtures à maintenir.

npx @elirames/seedly --url postgres://localhost/mon_app_dev --rows users=50,orders=200
✓ 12 tables analysées
✓ ordre d'insertion résolu
✓ 50 users, 200 orders, 137 order_items insérés en 340 ms
  graine : 42 — relancez avec --seed 42 pour le même jeu de données

Le problème

Vous démarrez une fonctionnalité. Il vous faut des clients, des commandes, des lignes de commande — cohérents entre eux, respectant vos clés étrangères et vos contraintes d'unicité. Alors vous écrivez un fichier de seed. Puis le schéma change, et le fichier ne compile plus. Vous le réparez. Puis un collègue ajoute une colonne NOT NULL, et ça recommence.

Un fichier de seed est une copie du schéma, écrite à la main, qui se périme.

seedly ne duplique rien : il lit le schéma réel, dans la base réelle, à l'instant où vous lancez la commande.

Pourquoi lire la base plutôt que l'ORM

seedly interroge le catalogue PostgreSQL — information_schema, pg_enum, pg_constraint. Il ne sait pas quel outil a créé vos tables, et c'est précisément l'intérêt : il fonctionne avec Prisma, Drizzle, TypeORM, Sequelize, Rails, Django, Laravel, ou du SQL écrit à la main.

Une seule implémentation, aucun adaptateur à maintenir.

Ce qu'il comprend

| Élément du schéma | Effet sur les données générées | |---|---| | Clés étrangères | ordre d'insertion, valeurs qui pointent vers des lignes existantes | | Contraintes d'unicité | aucune collision, y compris sur les contraintes composites | | Types énumérés | valeurs tirées parmi celles déclarées | | NOT NULL | jamais de valeur nulle là où c'est interdit | | Longueurs (varchar(n)) | texte tronqué à la bonne taille | | Nom de colonne | email cohérent avec le nom de la ligne, city/country en paire réelle, price → un montant | | Cycles de clés étrangères | insérés en deux temps (NULL puis mise à jour), auto-références comprises |

Deux détails qui font la différence

Les données d'une ligne sont cohérentes entre elles. updated_at tombe après created_at, l'e-mail reprend le prénom et le nom de la ligne, la ville va avec le bon pays. Des valeurs valides mais incohérentes masquent exactement les bugs qu'on cherche à trouver — et trahissent la donnée générée à l'œil nu.

Les clés étrangères ne sont pas réparties uniformément. 200 commandes sur 50 clients ne donnent pas 4 commandes chacun : quelques clients en ont trente, beaucoup n'en ont aucune. C'est cette forme-là qui fait ressortir les requêtes lentes et les pages qui débordent.

Déterminisme

Toute la génération dérive d'une graine.

seedly --seed 42    # produit toujours exactement le même jeu de données

Votre équipe partage les mêmes données. Un bug trouvé sur un jeu de données se reproduit à l'identique : il suffit de noter la graine dans le ticket.

Options

| Option | Défaut | Rôle | |---|---|---| | --url | $DATABASE_URL | chaîne de connexion PostgreSQL | | --rows | 10 par table | volumes, ex. users=50,orders=200 | | --seed | aléatoire | graine de génération | | --schema | public | schéma à peupler | | --only | — | limite à certaines tables | | --exclude | — | ignore certaines tables | | --truncate | false | vide les tables avant d'insérer | | --dry-run | false | affiche le plan sans rien écrire |

Sécurité

seedly écrit dans votre base. Il refuse de s'exécuter si l'URL de connexion ne pointe pas vers localhost, sauf --i-know-what-im-doing.

État

Version 0.5 — en construction.

  • [x] Introspection du schéma
  • [x] Tri topologique des tables
  • [x] Insertion transactionnelle
  • [x] Contraintes d'unicité et types énumérés
  • [x] Inférence par nom de colonne
  • [x] Distribution réaliste
  • [x] Cycles de clés étrangères

Reste avant la 1.0 : polissage des tests, documentation, publication sur npm.

Construit avec l'IA

Ce projet a été conçu et écrit en binôme avec Claude (Anthropic) — conception, code et tests. C'est assumé : un truc cool, fait honnêtement.

Licence

MIT