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

codoc-cli

v0.2.0

Published

Synchronisation de documentation Confluence <-> code (Markdown <-> Confluence)

Downloads

311

Readme

codoc

Synchronisation de documentation Confluence ↔ code : convertit des .md locaux en pages Confluence et inversement, dans les deux sens, à partir d'une configuration déclarative.

Outil générique et indépendant : aucune dépendance à un outil ou un environnement particulier.

Installation

npm install -g codoc-cli
codoc --version

Prérequis : Node ≥ 24, dépôt Git valide, permissions r/w.

Mise à jour automatique

Au lancement de chaque commande interactive, codoc vérifie sur npm si une version plus récente est disponible et, si oui, l'installe automatiquement (npm install -g codoc-cli@<version>) avant de relancer la commande d'origine avec le binaire à jour. Jamais en CI (CI défini) ni en sortie non-interactive (isTTY faux).

Pour désactiver complètement cette vérification, ajoute autoUpdate: false dans codoc.yaml.

Commandes

Chaque commande se lance depuis la racine du projet ciblé. Résolution des informations dans l'ordre flag CLIvaleur déjà présente dans codoc.yamlprompt console (pas de détection automatique de mode CI - voir Usage en CI).

codoc init

Génère la config initiale (codoc.yaml, .env-codoc, guide de démarrage).

codoc agent-context

Génère le contexte agent IA (basé sur codoc.yaml, qui doit déjà exister et être rempli) pour une ou plusieurs cibles.

| Cible | Fichier | Écriture | |---|---|---| | copilot — Copilot instructions (Copilot Chat / agent de code GitHub) | .github/copilot-instructions.md | bloc balisé dans un fichier potentiellement partagé | | agent — VSCode agent (fichier dédié VS Code / Copilot) | .github/agents/codoc-agent.md | fichier dédié, remplacé intégralement | | claude — Claude (contexte projet pour Claude Code) | CLAUDE.md | bloc balisé dans un fichier potentiellement partagé | | kiro — Kiro (steering file pour l'IDE Kiro) | .kiro/steering/codoc.md | fichier dédié, remplacé intégralement |

| Flag | Rôle | |---|---| | --target <clé> | Cible(s) à générer, répétable (--target a --target b) et/ou séparées par des virgules (--target a,b). Défaut : les cibles déjà en place (silencieux), sinon demandé |

Résolution propre à cette commande (différente du flag → codoc.yaml → prompt des autres commandes, cf. Usage en CI) : --target → cibles déjà présentes sur le disque (aucune invite) → sélection interactive (uniquement si --target est absent et qu'aucune cible n'existe encore).

codoc sync

Synchronise chaque doc dans les deux sens selon son maintainedIn.

| Flag | Rôle | |---|---| | --env <clé> | Ne synchronise que cet environnement Confluence. Défaut : tous | | --confirm / --no-confirm | Répond automatiquement aux suppressions de pages et adoptions en conflit de titre (accepte/refuse tout). Non fourni : demande à chaque cas |

codoc pull [url]

Importe une page Confluence existante en local (interactif). L'environnement est déduit du domaine de l'URL fournie (comparé au baseUrl de chaque environnement configuré) ; si aucun ne correspond, l'unique environnement configuré est utilisé, sinon la page est recherchée dans tous (prompt si trouvée dans plusieurs).

| Flag | Rôle | |---|---| | --as-folder / --no-as-folder | Si la page a des sous-éléments : importe tout le dossier, ou seulement la page. Non fourni : demande le cas échéant | | --keep-existing / --no-keep-existing | Si un import précédent est détecté : le remplace (valeurs existantes comme défauts), ou en crée un séparé. Non fourni : demande le cas échéant | | --in-config / --no-in-config | Ajoute (ou met à jour) l'entrée codoc.yaml. --no-in-config : import ponctuel, sans toucher ni à codoc.yaml ni à codoc.lock. Non fourni : demande en fin de commande | | --local-path <chemin> | Chemin local du fichier .md (page unique) ou dossier de destination (import dossier) | | --title <titre> | Titre de la page Confluence (page unique). Défaut : config existante, sinon le titre Confluence | | --maintained-in <code\|confluence> | code → le .md local fait foi ; confluence → la page fait foi. Défaut : confluence | | --images-dir <chemin> | Dossier local pour les images ("" pour désactiver). Défaut : doc/img |

codoc publish <chemin>

Publie un .md local vers Confluence (interactif). L'environnement est déduit du domaine de l'URL passée à --parent-page ; sans parent, ou si le domaine ne correspond à aucun environnement configuré, un choix est demandé (silencieux s'il n'y en a qu'un).

| Flag | Rôle | |---|---| | --in-config / --no-in-config | Ajoute (ou met à jour) l'entrée codoc.yaml. --no-in-config : publication ponctuelle, sans toucher ni à codoc.yaml ni à codoc.lock. Non fourni : demande en fin de commande | | --keep-existing / --no-keep-existing | Si une entrée codoc.yaml existe déjà pour ce chemin : la met à jour en place (valeurs existantes comme défauts), ou en crée une séparée. Non fourni : demande le cas échéant | | --parent-page <url> | URL de la page Confluence parente cible ("" pour aucun parent). Défaut : celle de la config existante, sinon prompt | | --title <titre> | Titre de la page Confluence (fichier unique). Défaut : config existante, sinon le H1 du fichier | | --maintained-in <code\|confluence> | Source de vérité enregistrée pour les prochains sync : code ou confluence. Défaut : code. N'affecte pas cette publication (toujours un envoi local → Confluence) |

codoc tree

Affiche l'arborescence des documents déployés.

| Flag | Rôle | |---|---| | --env <clé> | N'affiche que cet environnement Confluence. Défaut : tous |

pull et publish demandent en fin de commande si le document importé/publié doit être ajouté à codoc.yaml (par défaut : oui). Répondre non (ou --no-in-config) laisse le fichier local et la page Confluence bien réels, mais ni codoc.yaml ni codoc.lock ne sont modifiés : usage volontairement "utilitaire", hors suivi - un futur pull/publish sur le même document ne le reconnaîtra pas via son ID (seul un rapprochement par titre peut s'appliquer), exactement comme pour quelqu'un qui n'utilise jamais la config.

pull/publish hors scope de projet

pull et publish n'exigent pas de codoc.yaml : sans lui (ou si aucun environnement n'y est déclaré), ils demandent directement l'URL de base Confluence (déduite de l'URL fournie pour pull, ou de --parent-page pour publish, sinon demandée). Le spaceKey est déduit de cette même URL si elle est au format Confluence Cloud standard (/spaces/<clé>/pages|folder/...) ; sinon demandé - obligatoire pour publish, optionnel pour un pull isolé (il ne sert alors qu'à l'URL affichée en fin de commande). Puis les identifiants (mêmes conventions que .env-codoc ci-dessous, avec la même offre de sauvegarde).

En fin de commande, une sauvegarde des identifiants seule ne suffit pas à les rendre réutilisables : codoc propose donc aussi d'ajouter l'environnement à codoc.yaml (le crée si besoin). Sur refus, il rappelle précisément quoi ajouter à la main - et saute alors la question habituelle d'ajout du document à codoc.yaml (une entrée docs: référençant un environnement absent de la config n'aurait aucun sens).

Usage en CI

publish, pull et sync résolvent chaque information nécessaire dans cet ordre : flag CLI (--xxx, cf. tableaux ci-dessus) → valeur déjà présente dans codoc.yamlprompt console. Il n'y a pas de détection automatique de mode CI : une commande ne demande jamais rien tant que tout ce dont elle a besoin est fourni en flag ou déjà configuré ; si une information manque, elle est demandée comme en local (à la charge du pipeline de fournir ce qu'il faut pour rester non-interactif).

Configuration - codoc.yaml

| Champ | Rôle | |---|---| | atlassian.environments.<clé>.baseUrl / .spaceKey / .defaultParentPageId | Environnement(s) Confluence cible(s) | | drawio.* | Réglages des diagrammes générés depuis les blocs ```mermaid (un seul jeu de valeurs, partagé par tous les environnements) | | gitlab.baseUrl / gitlab.defaultBranch | Réécrit les liens vers du code en URLs GitLab dans les pages publiées (optionnel) | | jira.serverId / jira.server | Rend les liens de tickets Jira sous forme de macro Confluence native (optionnel) | | docs[] | Liste des documents synchronisés (chemin, environnement, titre, mots-clés de routage…) |

codoc init génère un codoc.yaml commenté avec tous les champs disponibles.

Identifiants - .env-codoc

Ne pas committer (ajouté à .gitignore par init).

| Variable | Usage | |---|---| | CONFLUENCE_<CLÉ>_USERNAME | Email de compte Atlassian pour l'environnement <clé> | | CONFLUENCE_<CLÉ>_API_TOKEN | Token Atlassian pour l'environnement <clé> |

Toujours préfixées par la clé de l'environnement (atlassian.environments.<clé> dans codoc.yaml) - même s'il n'y en a qu'un seul, ex. CONFLUENCE_DEFAULT_USERNAME. Pas de variable générique partagée entre environnements.

codoc.lock

Généré par sync / pull. À committer. Trace les IDs Confluence des pages synchronisées, pour des mises à jour idempotentes.