К содержимому

Справочник пакетов и провайдеров ​

Эта страница организована вокруг вопроса, который пытается решить приложение, а не вокруг структуры каталога packages/. Импортируйте из наименьшего публичного пакета, которому принадлежит контракт. Поведение, зависящее от runtime, вынесено в явный subpath. Пакеты-провайдеры не являются взаимозаменяемыми реализациями с одной универсальной гарантией.

Как читать эту страницу ​

  • Контракт — переносимый интерфейс или интерфейс, не зависящий от конкретного провайдера.
  • Провайдер — реализация на базе памяти, файла, сетевого сервиса или нативной библиотеки.
  • Адаптер жизненного цикла — Server-wrapper вокруг нативного ресурса, созданного приложением.
  • Доказательство — вид опоры в репозитории: исходник/export, объявленные тесты или зафиксированный результат локальной команды. Это не превращает версию пакета в утверждение о публикации в npm или готовности к production.

Текущий инвентарь исходников содержит 45 манифеста пакетов @go-like/*, не помеченных как private, и 27 публичных source subpath; все они имеют версию 0.0.1 в этой рабочей копии. 44 workspace examples/* — это приватные приложения, а не публичные пакеты.

Выбор по задаче ​

ЗадачаНачните сДобавьте при необходимостиgo-like не владеет
Открыть Web API@go-like/web, @go-like/core@go-like/web/node или нативный Fetch handler фреймворкаРоутером, middleware фреймворка, auth, политикой ответов
Вызвать внутренний сервис@go-like/client, @go-like/transport@go-like/transport-memory, @go-like/transport-http, @go-like/structБизнес-идемпотентностью, сгенерированным IDL, full-duplex RPC
Обнаружить экземпляры сервиса@go-like/registryОдин Registry provider, filters, SelectorСогласованностью backend lease/revision или глобальным locator
Загрузить конфигурацию@go-like/configenv/file/YAML или один внешний Config providerНеявной глобальной конфигурацией и транзакциями ресурсов
Хранить авторитетные bytes@go-like/storeMemory, File, Consul, etcd или Vault providerУниверсальной БД/ORM или едиными гарантиями провайдеров
Кешировать временные значения@go-like/cacheMemory или Redis providerAuthority, persistence, CAS, долговечным бизнес-состоянием
Публиковать или получать bytes@go-like/brokerMemory, RabbitMQ или NATSУниверсальными ack/nack/term, DLQ, durable offset, exactly-once
Добавить типизированные event payloads@go-like/eventCodec, принадлежащий приложениюSchema registry, replay, settlement policy
Запустить существующий scheduler или worker@go-like/core@go-like/croner, @go-like/bullmq, @go-like/natsНативными queue, processor, job policy или broker connection
Добавить операции@go-like/health, @go-like/resiliencePino, Winston, OTel, PrometheusГлобальной инструментацией, auth, политикой deployment

Фундаментальные пакеты ​

ПакетДля чего использоватьОсновной публичный APIПримечание о runtime и владении
@go-like/contextЯвные отмена, deadline, причины и значенияbackground, todo, withCancel, withCancelCause, withDeadline, withDeadlineCause, withTimeout, withTimeoutCause, cause, withoutCancel, withValue, afterFunc, canceled, deadlineExceededПереносимый исходный контракт. Context внутри использует AbortSignal; это не Go ABI и не DI bag
@go-like/coreКомпоновка жизненного цикла приложения и ресурсовnewApp, server, registrar, beforeStart, afterStart, beforeStop, afterStop, startTimeout, stopTimeout, context, id, name, version, metadata, endpoint, newContext, fromContextПереносимые структурные Server и App. Соседние stop вызываются конкурентно
@go-like/metadataНеизменяемые многозначные metadata и явное распространениеТипы metadata и функции propagationДомены metadata Client и Server разделены; metadata не является доверенной identity
@go-like/structRuntime-валидация Struct для типизированных endpoints и JSONstruct, Infer, Struct, StructErrorТекущий публичный пакет. Это runtime-валидация, а не Protobuf, IDL или generated code
@go-like/healthRegistry проверок liveness и readinessnewProbeRegistry, ProbeRegistry, Probe, ProbeReportПустой liveness проходит; пустой readiness закрывается по умолчанию; timeout probe — 1 000 ms
@go-like/resilienceЯвные retry, circuit breaker и неблокирующее rate limitingretry, exponentialBackoff, newCircuitBreaker, newTokenBucketLimiter, circuitOpenРазрешение retry объявляет caller; автоматических idempotency и фоновой limiter-задачи нет

Web и внутренние вызовы ​

ПакетДля чего использоватьОсновной публичный APIЗа что не отвечает
@go-like/webСтандартный Web Handler и мост request ContextHandler, ContextHandler, contextHandlerRoutes, WebSockets, SSE policy, listener, authentication
@go-like/web/healthМаршруты health HandlercreateHealthHandlerРегистрацию probes или mounting routes фреймворка
@go-like/web/nodeNode listener вокруг Fetch HandlernewNodeServer, hostname, port, nodeShutdownTimeoutTLS/HTTP2 внутреннего HTTP Transport; для этого используйте @go-like/transport-http/node
@go-like/clientВнутренние unary calls, discovery, selection, middleware, retries, poolingnewClient, withTransport, withEndpoint, withDiscovery, withSelector, withFilter, withBlock, withRetry, middleware, use, circuitBreakerMiddleware, closeTimeout, poolSize, poolTtlМаршруты фреймворка, безопасность business replay, лимиты физических сокетов
@go-like/serverInternal JSON and SSE server и route dispatchnewServer, transport, address, advertise, Server.registerHandler, httpRoute, middleware, use, listenOption, rateLimitMiddlewareРоутер фреймворка и авторизация приложения
@go-like/transportTransport SPI и граница Fetch Request/ResponseTransport, Client, Listener, defineService, ServerStream, TransportInfo, Endpoint, endpoint, chain, serviceErrorКонкретный wire без выбранного provider; internal full-duplex promise отсутствует
@go-like/transport-memoryВнутрипроцессный unary TransportnewMemoryTransportМежпроцессное поведение, persistence, network fallback, TLS
@go-like/transport-httpВнутренний HTTP Transport на базе FetchnewHTTPTransport, executor, maxMessageBytesПолный переносимый listener без внедрённого HTTPHost; native Node TLS controls
@go-like/transport-http/nodeНативный Node internal HTTP TransportnewNodeHTTPTransport, allowHTTP1, clientAuthАвтоматическую security policy
@go-like/transport-grpc-bufConnect/gRPC-Web unary, server-streamingnewHandler, fromHandlerContext, callOptionsКод Context-first на основе Protobuf-ES
@go-like/transport-grpc-buf/nativeСтандартный gRPC: четыре вида вызовов через /nativenewClient, newServerDiscovery, Selector, TLS/mTLS
@go-like/protoc-gen-likeГенератор Node во время сборкиprotoc-gen-like, protocGenLikeProtobuf-ES

Пакеты Config ​

Пакет или subpathДля чего использоватьОсновная функцияГраница
@go-like/configConfig manager и object sourcesnewConfig, source, objectSource, schema, resolver, placeholderResolver, onReloadError, onTerminalErrorImmutable snapshots и принятый lifecycle watcher; сам по себе не Core Server
@go-like/config/envЯвный источник environment recordenvSourceПолучает внедрённый record; не читает ambient runtime globals
@go-like/config/fileFile source и JSON decoder contractfileSource, jsonFileDecoderТребует явной file capability
@go-like/config/nodeNode file capabilitynewNodeFileCapabilityRuntime-specific Node subpath
@go-like/config/yamlДекодирование YAML в ConfigObjectdecodeYamlДекодирование — не source watching и не schema publication
@go-like/config-consulConsul HTTP configuration sourceconsulSource, jsonConsulDecoderConsul blocking-query и consistency behavior
@go-like/config-etcdGateway configuration source для etcdetcdSource, jsonEtcdDecoderRevision, compaction и gateway protocol behavior
@go-like/config-kubernetesОдин ключ Kubernetes ConfigMap или SecretkubernetesSource, jsonKubernetesDecoderResource-version/relist semantics; cross-resource transaction отсутствует
@go-like/config-vaultVault KV v2 sourcevaultSourceVault authentication, TLS, token policy и KV semantics

Внешние Config-провайдеры используют внедрённый стандартный Fetch. Credentials и redirects имеют security behavior, зависящее от провайдера; http против https остаётся решением приложения или deployment, если провайдер явно это не запрещает.

Пакеты Registry ​

ПакетДля чего использоватьОсновная функцияПримечание о runtime/backend
@go-like/registryКонтракт, snapshot, filters и selectorsfilterVersion, filterLabel, newRandomSelector, newRoundRobinSelector, newWeightedRoundRobinSelector, newP2CSelector, newEWMASelectorПолные snapshots-замены; feedback выбора передаётся явно
@go-like/registry/providerHelpers автора provider и диагностика регистрацииproviderOptions, notifyRegistrationError, helpers snapshot/providerProvider-facing subpath, не обычный application entrypoint
@go-like/registry-consulРегистрация и discovery ConsulnewConsulRegistryHealth filtering, blocking-query, TTL/critical behavior нативны для Consul
@go-like/registry-etcdРегистрация и discovery etcdnewEtcdRegistryLeases, revisions, watch/relist, compaction behavior
@go-like/registry-kubernetesEndpointSlice discovery и необязательная регистрацияnewKubernetesRegistryKubernetes EndpointSlice, owner references, fabricated TTL отсутствует
@go-like/registry-mdnsЛокальное multicast discoverynewMDNSRegistryRoot provider переносим по замыслу; UDP host находится в /node
@go-like/registry-mdns/nodeNode UDP multicast capabilitynewNodeMDNSHostЯвный Node runtime subpath
@go-like/registry-zookeeperЭфемерная регистрация и discovery ZooKeepernewZookeeperRegistryДокументированы Node.js и Bun

Registry описывает доступность, а не долговечные бизнес-данные. Провайдер может сохранять последний snapshot во время восстановления временного watcher, но авторитетный пустой snapshot должен закрываться по умолчанию.

Пакеты Store и Cache ​

ПакетДля чего использоватьОсновная функцияГраница
@go-like/storeКонтракт record и optionsexpiresIn, ifAbsent, ifRevision, prefix, limit, cursorRevisions, CAS, TTL, pagination; возможности зависят от провайдера
@go-like/store/providerHelpers provider для write/delete/listwriteOptions, deleteOptions, listOptions, helpers snapshot и conflictProvider-facing; сам по себе не durable backend
@go-like/store-memoryЛокальные Store-тестыnewMemoryStore, clockНет durability после перезапуска и межпроцессного состояния
@go-like/store-fileЛокальный File StorenewFileStoreLocal state с одним владельцем; для Node host используйте /node
@go-like/store-file/nodeNode file capabilitynewNodeFileStoreHostЯвный Node subpath
@go-like/store-consulConsul KV StorenewConsulStoreConsul sessions, сочетания TTL/CAS и uncertain mutation behavior
@go-like/store-etcdetcd KV StorenewEtcdStoreGateway, lease, revision, compaction и uncertain mutation behavior
@go-like/store-vaultVault KV v2 StorenewVaultStoreНе обещает единообразную Store semantics TTL/CAS
@go-like/cacheКонтракт временных values/TTLexpiresInНет CAS, revision, durability или authority
@go-like/cache-memoryЛокальный process cachenewMemoryCache, clockНет persistence; lazy expiry; подходит для тестов и локального ускорения
@go-like/cache-redisCache на базе RedisnewRedisCacheNative Redis connection, обработка credentials в URL и runtime requirements остаются видимыми

Пакеты Broker, событий и рабочих процессов ​

Пакет или subpathДля чего использоватьОсновная функцияГраница
@go-like/brokerByte/topic Broker contractnewBrokerServerНет переносимых ack/nack/term, DLQ, retry или durable offset
@go-like/broker/providerProvider terminal registrationregisterSubscriberTerminal, subscriberTerminalProvider-facing lifecycle bookkeeping
@go-like/broker-memoryIn-process broker с exact-topicnewMemoryBrokerInstance-private, broadcast, без durable settlement
@go-like/broker-rabbitmqBorrowed, confirm или recovering RabbitMQ brokernewRabbitMqBroker, newConfirmRabbitMqBroker, newRecoveringRabbitMqBrokeramqplib channel/connection и нативная settlement semantics
@go-like/eventTyped codec поверх BrokereventBrokerNative delivery остаётся видимой; нет replay или schema registry
@go-like/natsNATS lifecycle и native broker entrypointsnewNatsCoreServer, natsCoreDrainTimeoutCore connection и semantics subscription остаются нативными
@go-like/nats/brokerNATS Core BrokernewNatsCoreBrokerNative Msg, queue group, drain и at-most-once semantics
@go-like/nats/jetstreamLifecycle ConsumerMessages JetStreamnewNatsJetStreamServer, natsJetStreamCloseTimeoutNative ConsumerMessages close/stop/closed behavior
@go-like/nats/jetstream/brokerTyped byte Broker поверх JetStreamnewNatsJetStreamBrokerJsMsg, PubAck, ack/nak/term, redelivery и DLQ остаются нативными
@go-like/cronerLifecycle для существующих Croner jobsnewCronerServerCroner schedule, callback, overlap и passive terminal semantics
@go-like/bullmqLifecycle для существующего BullMQ WorkernewBullMqWorkerServer, bullMqWorkerShutdownTimeoutQueue, Redis, processor, retry/backoff, stalled jobs и job identity

Пакеты логирования и наблюдаемости ​

ПакетДля чего использоватьОсновная функцияЗа что не отвечает
@go-like/pinoPino wrappers для request/broker и lifecycle drainlogClient, logUnaryMiddleware, logWebHandler, logBroker, newPinoServer, pinoDrainTimeoutСоздание logger, destination policy, redaction, global setup
@go-like/winstonWinston wrappers и shutdown lifecycleLogging wrappers, newWinstonServerLogger/transports и их native finish/close semantics
@go-like/otelЯвные OpenTelemetry trace/metric wrappersnewOtelServer, traceClient, traceUnaryMiddleware, traceWebHandler, traceBroker, measureClient, measureClientMiddleware, measureUnaryMiddleware, newRequestMetricsGlobal providers, exporters, context manager, automatic instrumentation
@go-like/prometheusPrometheus request metrics и scrape HandlernewRequestMetrics, measureClient, measureUnaryMiddleware, measureWebHandler, measureBroker, createPrometheusHandlerGlobal Registry, collectors вне переданного Registry, background tasks

Полный инвентарь публичных source subpath ​

Ниже перечислены 27 явных source subpath, объявленных текущими package manifest. Сгенерированные пакеты могут добавить export ./package.json только с metadata; это не дополнительный пакет и не source API.

#SubpathОсновные exportsДля кого предназначен
1@go-like/broker/providerregisterSubscriberTerminal, subscriberTerminalАвторы провайдеров
2@go-like/cache/providerputOptionsАвторы провайдеров
3@go-like/config/envenvSourceАвторы приложений
4@go-like/config/filefileSource, jsonFileDecoderАвторы приложений
5@go-like/config/nodenewNodeFileCapabilityАвторы Node runtime
6@go-like/config/yamldecodeYamlАвторы приложений
7@go-like/core/lifecyclewaitForContextАвторы lifecycle/provider
8@go-like/core/nodesignalИнтеграция процесса Node/Bun
9@go-like/nats/brokernewNatsCoreBrokerПриложения NATS Core
10@go-like/nats/jetstreamnewNatsJetStreamServer, natsJetStreamCloseTimeoutПриложения JetStream
11@go-like/nats/jetstream/brokernewNatsJetStreamBrokerПриложения JetStream Broker
12@go-like/registry/providerprovider options и snapshot helpersАвторы провайдеров
13@go-like/registry-mdns/nodenewNodeMDNSHostПриложения mDNS Node
14@go-like/store/providerwrite/delete/list options и snapshotsАвторы провайдеров
15@go-like/store-file/nodenewNodeFileStoreHostПриложения File Store Node
16@go-like/struct/codecencodeJson, decodeJsonАвторы типизированных контрактов
17@go-like/struct/runtimeintrospection и parsing helpersАвторы runtime/provider
18@go-like/transport/headersGo-Like-Metadata, Go-Like-Timeout-MsАвторы Transport-провайдеров
19@go-like/transport/jsonencodeJsonBody, decodeJsonBody, jsonContentTypeАвторы typed/raw Transport
20@go-like/transport/providermetadata, кодеки ServiceError, ошибки transport и observeCallАвторы провайдеров
21@go-like/transport-http/nodenewNodeHTTPTransport, allowHTTP1, clientAuthПриложения HTTP Node
22@go-like/web/healthcreateHealthHandlerWeb-приложения
23@go-like/web/nodenewNodeServer, hostname, port, nodeShutdownTimeoutПриложения Web host Node
24@go-like/client/discoverynewDiscoveryResolver, DiscoveryResolverАвторы приложений
25@go-like/transport-grpc-buf/nativenewClient, newServerАвторы приложений
26@go-like/transport/sseencodeSSEComment, encodeSSEEvent, encodeSSEJsonEvent, eventStreamContentTypeSSE server streams
27@go-like/web/bunnewBunServer, hostname, port, bunShutdownTimeoutWeb applications

@go-like/otel/testing и @go-like/web/node/testing не являются path mappings TypeScript или текущими exports package manifest. Не документируйте их как публичные entrypoint.

Матрица выбора runtime ​

Entry или семейство провайдеровПереносимый исходникНативный Bun/NodeФормулировка доказательства
Context, Core root, Health, Metadata, Resilience, StructДаНативный import не требуетсяИсходный контракт; перед release проверяйте текущую выполненную matrix
Web root и Web healthДаHost нужен отдельноHandler переносим; Handler сам по себе не listener
Memory Transport, Memory Store, Memory Cache, Memory BrokerProcess-local sourceВнешний сервис не нуженНе distributed, не durable, не cross-process
HTTP root и Fetch-based Config/Registry/Store providersВнедрённый FetchFetch выбирает runtimeПереносимо по source или объявленной lane, но не universal parity
/node subpathsНетСпецифичны Node, иногда исполняются на BunЯвный import меняет runtime graph
Native SDK NATS, RabbitMQ, BullMQ, Redis, Pino, Winston, OTelЗависит от providerFixtures Node/Bun или package-specific evidenceЧитайте README провайдера и область E2E
ZooKeeperНетNode/BunНе обобщайте свойства корневого Registry

Правила выбора функций ​

  • Используйте contextHandler на Web-границе, когда нужен Context, а не собственный request bag фреймворка.
  • Используйте newApp и server(...), когда один процесс принимает более одного ресурса или нужно явно обозначить владение signal и shutdown.
  • Используйте типизированный server.registerHandler(endpoint, handler), когда обе стороны должны совместно использовать runtime Struct validation. Используйте raw server.registerHandler(service, endpoint, handler), когда приложение владеет другим byte contract.
  • Для прямой маршрутизации задавайте withEndpoint(...) при создании клиента. Для Discovery используйте вместе withEndpoint("discovery:///<name>") и withDiscovery(...); не объединяйте прямые адреса с Discovery. Оба источника используют один Selector.
  • Используйте withSelector(...), withFilter(...) и withBlock() только тогда, когда сервису действительно нужно добавляемое ими поведение control plane.
  • Используйте withRetry(...) только после того, как записаны authorization повтора, максимальное общее число попыток, predicate ошибки и бизнес-идемпотентность.
  • Используйте newMemoryStore для детерминированных тестов, а не для заявления о durability.
  • Используйте newMemoryCache для временного ускорения, а не как источник истины для записей о приёме или платежах.
  • Используйте newBrokerServer, чтобы подключить одну подписку к Core, а не чтобы получить универсальный queue worker или settlement API.
  • Используйте newOtelServer, newPinoServer, newWinstonServer или Prometheus Handler только после того, как приложение создало нативный provider или registry.

Явные исключения ​

@go-like/protoc-gen-like генерирует Protobuf RPC с первым аргументом Context на основе Protobuf-ES. @go-like/transport-grpc-buf предоставляет unary и server-streaming Connect/gRPC-Web через Fetch; /native добавляет стандартный gRPC со всеми четырьмя видами вызовов, включая client-streaming и bidi. Этот путь независим от внутреннего пути Fetch/SSE.

Это не включает стандартный gRPC в браузере, request-streaming/bidi через Fetch, официальные health/reflection, универсальную аутентификацию, Event Store/replay, ORM или оркестрацию кластера.

Управляемый gRPC в Node 26.12.1 и Bun 1.4.4 прошёл регрессионный тест drain с медленным потребителем. Исправление ранее выявленных ограничений отмены и завершения в Connect 2.1.2 и Bun 1.4.2 Fetch не подтверждено.