Référence des paquets et fournisseurs
Cette page est organisée autour de la question que l'application cherche à résoudre, et non autour de l'arborescence packages/. Importez depuis le plus petit paquet public propriétaire du contrat. Le comportement propre au runtime est exposé par un sous-chemin explicite. Les paquets fournisseurs ne sont pas des implémentations interchangeables avec une garantie universelle unique.
Lire cette page
- Contrat désigne une interface portable ou neutre vis-à-vis du fournisseur.
- Fournisseur désigne une implémentation adossée à la mémoire, à un fichier, à un service réseau ou à une bibliothèque native.
- Adaptateur de cycle de vie désigne un wrapper
Serverautour d'une ressource native créée par l'application. - Preuve indique le type d'appui fourni par le dépôt : source/export, tests déclarés ou résultat d'une commande locale rapporté. Cela ne transforme pas une version de paquet en affirmation de publication npm ou de disponibilité en production.
L'inventaire source actuel contient 45 manifests de paquets @go-like/* non privés et 27 sous-chemins source publics, tous en version 0.0.1 dans ce checkout. Les 44 workspaces examples/* sont des applications privées, pas des paquets publics.
Choisir selon le besoin
| Besoin | Commencer avec | Ajouter si nécessaire | go-like ne possède pas |
|---|---|---|---|
| Exposer une API Web | @go-like/web, @go-like/core | @go-like/web/node ou le handler Fetch natif d'un framework | Routeur, middleware du framework, auth, policy de réponse |
| Appeler un service interne | @go-like/client, @go-like/transport | @go-like/transport-memory, @go-like/transport-http, @go-like/struct | Idempotence métier, IDL généré, RPC full-duplex |
| Découvrir des instances de service | @go-like/registry | Un fournisseur Registry, des filtres, un Selector | Cohérence des leases/révisions du backend ou service locator global |
| Charger la configuration | @go-like/config | env/file/YAML ou un fournisseur Config externe | Configuration globale implicite et transactions inter-ressources |
| Stocker des octets faisant autorité | @go-like/store | Fournisseur Memory, File, Consul, etcd ou Vault | Base de données/ORM générique ou garanties uniformes du fournisseur |
| Mettre en cache des valeurs jetables | @go-like/cache | Fournisseur Memory ou Redis | Autorité, persistance, CAS, état métier durable |
| Publier ou consommer des octets | @go-like/broker | Memory, RabbitMQ ou NATS | ack/nack/term universels, DLQ, offset durable, exactly-once |
| Ajouter des payloads d'événements typés | @go-like/event | Un Codec appartenant à l'application | Schema registry, replay, policy de règlement |
| Exécuter un scheduler ou worker existant | @go-like/core | @go-like/croner, @go-like/bullmq, @go-like/nats | Queue, processor, policy de job ou connexion broker native |
| Ajouter des opérations | @go-like/health, @go-like/resilience | Pino, Winston, OTel, Prometheus | Instrumentation globale, auth, policy de déploiement |
Paquets fondamentaux
| Paquet | À utiliser pour | API publique principale | Note runtime et propriété |
|---|---|---|---|
@go-like/context | Annulation explicite, échéances, causes et valeurs | background, todo, withCancel, withCancelCause, withDeadline, withDeadlineCause, withTimeout, withTimeoutCause, cause, withoutCancel, withValue, afterFunc, canceled, deadlineExceeded | Contrat source portable. Context utilise AbortSignal en interne ; ce n'est ni un ABI Go ni un conteneur DI implicite |
@go-like/core | Composer le cycle de vie de l'application et des ressources | newApp, server, registrar, beforeStart, afterStart, beforeStop, afterStop, startTimeout, stopTimeout, context, id, name, version, metadata, endpoint, newContext, fromContext | Server et App structurels et portables. Les arrêts des frères sont concurrents |
@go-like/metadata | Métadonnées multivaluées immuables et propagation explicite | types de metadata et fonctions de propagation | Les domaines de metadata Client et Server sont séparés ; la metadata n'est pas une identité de confiance |
@go-like/struct | Validation Struct à l'exécution pour endpoints typés et JSON | struct, Infer, Struct, StructError | Paquet public actuel. C'est de la validation runtime, pas Protobuf, IDL ou code généré |
@go-like/health | Registry de probes de liveness et readiness | newProbeRegistry, ProbeRegistry, Probe, ProbeReport | Une liveness vide réussit ; une readiness vide échoue par défaut ; le timeout de probe par défaut est de 1 000 ms |
@go-like/resilience | Retry explicite, circuit breaker et rate limiting non bloquant | retry, exponentialBackoff, newCircuitBreaker, newTokenBucketLimiter, circuitOpen | L'autorisation du retry est déclarée par le caller ; aucune idempotence automatique ni tâche de limiter en arrière-plan |
Paquets Web et appels internes
| Paquet | À utiliser pour | API publique principale | Ne possède pas |
|---|---|---|---|
@go-like/web | Handler Web standard et pont Context de la requête | Handler, ContextHandler, contextHandler | Routes, WebSockets, policy SSE, listener, authentification |
@go-like/web/health | Routes de Handler de santé | createHealthHandler | Enregistrement des probes ou montage des routes du framework |
@go-like/web/node | Listener Node autour d'un Fetch Handler | newNodeServer, hostname, port, nodeShutdownTimeout | TLS/HTTP2 du Transport HTTP interne ; utilisez @go-like/transport-http/node pour cela |
@go-like/client | Appels internes unaires, découverte, sélection, middleware, retries, pooling | newClient, withTransport, withEndpoint, withDiscovery, withSelector, withFilter, withBlock, withRetry, middleware, use, circuitBreakerMiddleware, closeTimeout, poolSize, poolTtl | Routes framework, sécurité de rejeu métier, limites de sockets physiques |
@go-like/server | Server interne de Message unaire et dispatch des routes | newServer, transport, address, advertise, Server.registerHandler, httpRoute, middleware, use, listenOption, rateLimitMiddleware | Routeur du framework et autorisation applicative |
@go-like/transport | SPI Transport et frontière Fetch Request/Response | Transport, Client, Listener, defineService, ServerStream, TransportInfo, Endpoint, endpoint, chain, serviceError | Un wire concret si aucun fournisseur n'est choisi ; pas de promesse de full-duplex interne |
@go-like/transport-memory | Transport unaire en processus | newMemoryTransport | Comportement interprocessus, persistance, repli réseau, TLS |
@go-like/transport-http | Transport HTTP interne adossé à Fetch | newHTTPTransport, executor, maxMessageBytes | Listener portable complet sans HTTPHost injecté ; contrôles TLS natifs Node |
@go-like/transport-http/node | Transport HTTP interne natif Node | newNodeHTTPTransport, allowHTTP1, clientAuth | Policy de sécurité automatique |
@go-like/transport-grpc-buf | Connect/gRPC-Web unary, server-streaming | newHandler, fromHandlerContext, callOptions | Code Context-first sur Protobuf-ES |
@go-like/transport-grpc-buf/native | gRPC standard avec quatre cardinalités via /native | newClient, newServer | Discovery, Selector, TLS/mTLS |
@go-like/protoc-gen-like | Générateur Node au build | protoc-gen-like, protocGenLike | Protobuf-ES |
Paquets Config
| Paquet ou sous-chemin | À utiliser pour | Fonction principale | Frontière |
|---|---|---|---|
@go-like/config | Gestionnaire Config et sources objet | newConfig, source, objectSource, schema, resolver, placeholderResolver, onReloadError, onTerminalError | Snapshots immuables et cycle de vie accepté des watchers ; pas un Server Core en soi |
@go-like/config/env | Source explicite d'un record d'environnement | envSource | Accepte un record injecté ; ne lit pas les globaux implicites du runtime |
@go-like/config/file | Source fichier et contrat de décodeur JSON | fileSource, jsonFileDecoder | Nécessite une capacité fichier explicite |
@go-like/config/node | Capacité fichier Node | newNodeFileCapability | Sous-chemin propre au runtime Node |
@go-like/config/yaml | Décodage YAML vers ConfigObject | decodeYaml | Le décodage n'est ni une surveillance de source ni une publication de schéma |
@go-like/config-consul | Source de configuration HTTP Consul | consulSource, jsonConsulDecoder | Comportement blocking-query et cohérence propres à Consul |
@go-like/config-etcd | Source de configuration via gateway etcd | etcdSource, jsonEtcdDecoder | Révision, compaction et protocole du gateway |
@go-like/config-kubernetes | Une clé d'un ConfigMap ou Secret Kubernetes | kubernetesSource, jsonKubernetesDecoder | Sémantique resource-version/relist ; aucune transaction inter-ressources |
@go-like/config-vault | Source Vault KV v2 | vaultSource | Authentification Vault, TLS, policy de token et sémantique KV |
Les fournisseurs Config externes utilisent un Fetch standard injecté. Les credentials et les redirects ont un comportement de sécurité propre à chaque fournisseur ; http contre https reste un choix de l'application ou du déploiement, sauf si un fournisseur le refuse.
Paquets Registry
| Paquet | À utiliser pour | Fonction principale | Note runtime/backend |
|---|---|---|---|
@go-like/registry | Contrat, snapshot, filtres et sélecteurs | filterVersion, filterLabel, newRandomSelector, newRoundRobinSelector, newWeightedRoundRobinSelector, newP2CSelector, newEWMASelector | Snapshots de remplacement complet ; le feedback de sélection est explicite |
@go-like/registry/provider | Helpers d'auteur de fournisseur et diagnostics | providerOptions, notifyRegistrationError, helpers de snapshot/provider | Sous-chemin réservé aux fournisseurs, pas l'entrypoint habituel d'une application |
@go-like/registry-consul | Enregistrement et découverte Consul | newConsulRegistry | Filtrage health, blocking-query, TTL et comportement critical propres à Consul |
@go-like/registry-etcd | Enregistrement et découverte etcd | newEtcdRegistry | Leases, révisions, watch/relist et compaction |
@go-like/registry-kubernetes | Découverte EndpointSlice et enregistrement optionnel | newKubernetesRegistry | EndpointSlice Kubernetes, owner references, aucun TTL inventé |
@go-like/registry-mdns | Découverte multicast locale | newMDNSRegistry | Le fournisseur racine est portable par conception ; le host UDP est /node |
@go-like/registry-mdns/node | Capacité multicast UDP Node | newNodeMDNSHost | Sous-chemin explicite du runtime Node |
@go-like/registry-zookeeper | Enregistrement et découverte éphémères ZooKeeper | newZookeeperRegistry | Node.js et Bun documentés |
Registry représente la joignabilité, pas les données métier durables. Un fournisseur peut conserver le dernier snapshot pendant la reconstruction d'un watcher transitoire, mais un snapshot vide faisant autorité doit échouer par défaut.
Paquets Store et Cache
| Paquet | À utiliser pour | Fonction principale | Frontière |
|---|---|---|---|
@go-like/store | Contrat et options des records | expiresIn, ifAbsent, ifRevision, prefix, limit, cursor | Révisions, CAS, TTL, pagination ; les capacités varient selon le fournisseur |
@go-like/store/provider | Assistants write/delete/list du fournisseur | writeOptions, deleteOptions, listOptions, helpers de snapshot et de conflit | Orienté fournisseur ; n'est pas un backend durable par lui-même |
@go-like/store-memory | Tests de Store local au processus | newMemoryStore, clock | Aucune durabilité après redémarrage ni état interprocessus |
@go-like/store-file | Store local sur fichier | newFileStore | État local à un propriétaire unique ; utilisez /node pour le host Node |
@go-like/store-file/node | Capacité fichier Node | newNodeFileStoreHost | Sous-chemin Node explicite |
@go-like/store-consul | Store KV Consul | newConsulStore | Sessions Consul, combinaisons TTL/CAS et comportement incertain des mutations |
@go-like/store-etcd | Store KV etcd | newEtcdStore | Gateway, lease, révision, compaction et comportement incertain des mutations |
@go-like/store-vault | Store Vault KV v2 | newVaultStore | Ne promet pas une sémantique TTL/CAS uniforme du Store |
@go-like/cache | Contrat de valeurs jetables/TTL | expiresIn | Ni CAS, ni révision, ni durabilité, ni autorité |
@go-like/cache-memory | Cache local au processus | newMemoryCache, clock | Pas de persistance ; expiration lazy ; adapté aux tests et à l'accélération locale |
@go-like/cache-redis | Cache adossé à Redis | newRedisCache | Connexion Redis native, gestion des credentials d'URL et exigences runtime restent visibles |
Paquets Broker, événements et travail
| Paquet ou sous-chemin | À utiliser pour | Fonction principale | Frontière |
|---|---|---|---|
@go-like/broker | Contrat Broker d'octets/topics | newBrokerServer | Pas d'ack/nack/term, DLQ, retry ou offset durable portable |
@go-like/broker/provider | Enregistrement terminal du fournisseur | registerSubscriberTerminal, subscriberTerminal | Suivi du cycle de vie orienté fournisseur |
@go-like/broker-memory | Broker en processus à topics exacts | newMemoryBroker | Privé à l'instance, broadcast, sans règlement durable |
@go-like/broker-rabbitmq | Broker RabbitMQ borrowed, confirm ou recovering | newRabbitMqBroker, newConfirmRabbitMqBroker, newRecoveringRabbitMqBroker | Channel/connection amqplib et sémantiques natives de règlement |
@go-like/event | Codec typé sur un Broker | eventBroker | La livraison native reste visible ; pas de replay ni de schema registry |
@go-like/nats | Cycle de vie NATS et entrypoints de broker natifs | newNatsCoreServer, natsCoreDrainTimeout | Connexion Core et sémantiques de souscription restent natives |
@go-like/nats/broker | Broker NATS Core | newNatsCoreBroker | Msg natif, queue group, drain et sémantique at-most-once |
@go-like/nats/jetstream | Cycle de vie ConsumerMessages JetStream | newNatsJetStreamServer, natsJetStreamCloseTimeout | Comportement natif close/stop/closed de ConsumerMessages |
@go-like/nats/jetstream/broker | Broker d'octets typé sur JetStream | newNatsJetStreamBroker | JsMsg, PubAck, ack/nak/term, redelivery et DLQ restent natifs |
@go-like/croner | Cycle de vie de jobs Croner existants | newCronerServer | Schedule, callback, overlap et sémantique terminale passive de Croner |
@go-like/bullmq | Cycle de vie d'un Worker BullMQ existant | newBullMqWorkerServer, bullMqWorkerShutdownTimeout | Queue, Redis, processor, retry/backoff, stalled jobs et identité du job |
Paquets de logging et d'observabilité
| Paquet | À utiliser pour | Fonction principale | Ne possède pas |
|---|---|---|---|
@go-like/pino | Wrappers Pino de requêtes/brokers et cycle de vie du drain | logClient, logUnaryMiddleware, logWebHandler, logBroker, newPinoServer, pinoDrainTimeout | Création du logger, policy de destination, masquage, configuration globale |
@go-like/winston | Wrappers Winston et cycle de vie d'arrêt | wrappers de logging, newWinstonServer | Logger/transports et leurs sémantiques natives finish/close |
@go-like/otel | Wrappers explicites de traces/métriques OpenTelemetry | newOtelServer, traceClient, traceUnaryMiddleware, traceWebHandler, traceBroker, measureClient, measureClientMiddleware, measureUnaryMiddleware, newRequestMetrics | Providers globaux, exporters, context manager, instrumentation automatique |
@go-like/prometheus | Métriques de requêtes Prometheus et Handler de scrape | newRequestMetrics, measureClient, measureUnaryMiddleware, measureWebHandler, measureBroker, createPrometheusHandler | Registry global, collectors hors du Registry fourni, tâches en arrière-plan |
Inventaire complet des sous-chemins source publics
Voici les 27 sous-chemins source explicites déclarés par les manifests de paquets actuels. Les paquets générés peuvent ajouter un export ./package.json contenant uniquement des métadonnées ; ce n'est ni un paquet supplémentaire ni une API source.
| # | Sous-chemin | Exports principaux | Public visé |
|---|---|---|---|
| 1 | @go-like/broker/provider | registerSubscriberTerminal, subscriberTerminal | Auteurs de fournisseurs |
| 2 | @go-like/cache/provider | putOptions | Auteurs de fournisseurs |
| 3 | @go-like/config/env | envSource | Auteurs d'applications |
| 4 | @go-like/config/file | fileSource, jsonFileDecoder | Auteurs d'applications |
| 5 | @go-like/config/node | newNodeFileCapability | Auteurs runtime Node |
| 6 | @go-like/config/yaml | decodeYaml | Auteurs d'applications |
| 7 | @go-like/core/lifecycle | waitForContext | Auteurs de cycle de vie/fournisseurs |
| 8 | @go-like/core/node | signal | Intégration de processus Node/Bun |
| 9 | @go-like/nats/broker | newNatsCoreBroker | Applications NATS Core |
| 10 | @go-like/nats/jetstream | newNatsJetStreamServer, natsJetStreamCloseTimeout | Applications JetStream |
| 11 | @go-like/nats/jetstream/broker | newNatsJetStreamBroker | Applications Broker JetStream |
| 12 | @go-like/registry/provider | options fournisseur et helpers de snapshot | Auteurs de fournisseurs |
| 13 | @go-like/registry-mdns/node | newNodeMDNSHost | Applications mDNS Node |
| 14 | @go-like/store/provider | options write/delete/list et snapshots | Auteurs de fournisseurs |
| 15 | @go-like/store-file/node | newNodeFileStoreHost | Applications Store fichier Node |
| 16 | @go-like/struct/codec | encodeJson, decodeJson | Auteurs de contrats typés |
| 17 | @go-like/struct/runtime | introspection et helpers de parsing | Auteurs runtime/fournisseurs |
| 18 | @go-like/transport/headers | Go-Like-Metadata, Go-Like-Timeout-Ms | Auteurs de fournisseurs Transport |
| 19 | @go-like/transport/json | encodeJsonBody, decodeJsonBody, jsonContentType | Auteurs Transport typé/brut |
| 20 | @go-like/transport/provider | metadata, codecs ServiceError, erreurs de transport et observeCall | Auteurs de fournisseurs |
| 21 | @go-like/transport-http/node | newNodeHTTPTransport, allowHTTP1, clientAuth | Applications HTTP Node |
| 22 | @go-like/web/health | createHealthHandler | Applications Web |
| 23 | @go-like/web/node | newNodeServer, hostname, port, nodeShutdownTimeout | Applications host Web Node |
| 24 | @go-like/client/discovery | newDiscoveryResolver, DiscoveryResolver | Auteurs d’applications |
| 25 | @go-like/transport-grpc-buf/native | newClient, newServer | Auteurs d’applications |
| 26 | @go-like/transport/sse | encodeSSEComment, encodeSSEEvent, encodeSSEJsonEvent, eventStreamContentType | SSE server streams |
| 27 | @go-like/web/bun | newBunServer, hostname, port, bunShutdownTimeout | Web applications |
@go-like/otel/testing et @go-like/web/node/testing ne sont ni des mappings de chemins TypeScript ni des exports actuels des manifests de paquets. Ne les documentez pas comme entrypoints publics.
Matrice de décision runtime
| Entrée ou famille de fournisseurs | Source portable | Natif Bun/Node | Formulation de preuve |
|---|---|---|---|
| Context, Core root, Health, Metadata, Resilience, Struct | Oui | Aucun import natif requis | Contrat source ; vérifiez la matrice actuellement exécutée avant une formulation de release |
| Web root et Web health | Oui | Host requis séparément | Le Handler est portable ; un Handler n'est pas un listener |
| Memory Transport, Memory Store, Memory Cache, Memory Broker | Source locale au processus | Aucun service externe | Ni distribué, ni durable, ni interprocessus |
| HTTP root et fournisseurs Config/Registry/Store adossés à Fetch | Fetch injecté | Le runtime choisit Fetch | Portable par source ou lane déclarée, pas de parité universelle |
Sous-chemins /node | Non | Spécifiques Node, avec exécution possible sur Bun | Un import explicite modifie le graphe runtime |
| NATS, RabbitMQ, BullMQ, Redis, Pino, Winston, SDK natifs OTel | Dépend du fournisseur | Fixtures Node/Bun ou preuve propre au paquet | Lisez le README du fournisseur et le périmètre E2E |
| ZooKeeper | Non | Node/Bun | Ne généralisez pas depuis la racine Registry |
Règles de sélection des fonctions
- Utilisez
contextHandlerà la frontière Web lorsque vous avez besoin d'un Context, plutôt qu'une sacoche de requête propre au framework. - Utilisez
newAppetserver(...)lorsqu'un processus possède plusieurs ressources admises, ou lorsque la propriété du signal et de l'arrêt doit être explicite. - Utilisez
server.registerHandler(endpoint, handler)typé lorsque les deux côtés doivent partager une validation Struct runtime. Utilisezserver.registerHandler(service, endpoint, handler)brut lorsque l'application possède un autre contrat d'octets . - Utilisez
withEndpoint(...)à la construction du client pour le routage direct. Pour Discovery, utilisez ensemblewithEndpoint("discovery:///<name>")etwithDiscovery(...); ne combinez pas les adresses directes avec Discovery. Les deux sources utilisent le même Selector. - Utilisez
withSelector(...),withFilter(...)etwithBlock()uniquement si le service a besoin du comportement de plan de contrôle qu'ils ajoutent. - Utilisez
withRetry(...)seulement après avoir écrit l'autorisation de rejeu, le nombre maximal total de tentatives, le prédicat d'échec et l'idempotence métier. - Utilisez
newMemoryStorepour des tests déterministes, pas pour revendiquer une durabilité. - Utilisez
newMemoryCachepour une accélération jetable, pas comme autorité des rendez-vous ou des paiements. - Utilisez
newBrokerServerpour rattacher une souscription à Core, pas pour obtenir un worker de file universel ni une API de règlement. - Utilisez
newOtelServer,newPinoServer,newWinstonServerou un Handler Prometheus seulement après que l'application a créé le fournisseur ou Registry natif.
Exclusions explicites
@go-like/protoc-gen-like génère le code Protobuf RPC avec Context en premier argument, sur Protobuf-ES. @go-like/transport-grpc-buf fournit unary et server-streaming Connect/gRPC-Web via Fetch ; /native ajoute gRPC standard avec les quatre cardinalités, dont client-streaming et bidi. Ce chemin est indépendant du chemin interne Fetch/SSE.
Cela n’inclut pas gRPC standard dans le navigateur, request-streaming/bidi via Fetch, health/reflection officiels, authentification générique, Event Store/replay, ORM ou orchestration de clusters.
gRPC géré sous Node 26.12.1 et Bun 1.4.4 a passé le test de régression du drain avec consommateur lent. La correction des limites historiques d’annulation et d’arrêt de Connect 2.1.2 et de Bun 1.4.2 Fetch reste non vérifiée.