Search by

mj-zana / contracts

mjnable

This package is abandoned and no longer maintained. No replacement package was suggested.

Abandoned: Zana 2 packages own their contracts. See the README for where each interface moved.

Package info

github.com/mjnable/zana-contracts

pkg:composer/mj-zana/contracts

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-08-09 10:42 UTC

This package is auto-updated.

Last update: 2026-10-24 21:20:03 UTC


README

Warning

This package is abandoned. It gets no 2.x release. In Zana 2, each package owns its own contracts (ADR-006, ADR-014). Version 1.x keeps working, and Composer warns that the package is abandoned.

Where each interface moved

1.x (Zana\Contracts\…) Zana 2
Container\* Zana\Container\Contracts\* in mj-zana/container
Configuration\ConfigurationInterface Zana\Configuration\ConfigurationInterface in mj-zana/configuration
Application\ApplicationInterface Zana\Core\ApplicationInterface in mj-zana/core
Application\ConsoleKernelInterface Zana\Console\ConsoleKernel in mj-zana/console
Application\CommandInterface, QueryHandlerInterface, CommandHandlerInterface Zana\Ddd\Application\Command and Query in mj-zana/ddd; handlers use #[Zana\Mediator\Attribute\Handles] in mj-zana/mediator
Mediator\MediatorInterface Zana\Mediator\MediatorInterface in mj-zana/mediator
Pipeline\* Zana\Mediator\PipelineBehavior in mj-zana/mediator, or PSR-15 middleware for HTTP
Http\RequestInterface, ResponseInterface PSR-7 Psr\Http\Message\ServerRequestInterface and ResponseInterface
Http\MiddlewareInterface PSR-15 Psr\Http\Server\MiddlewareInterface
Http\KernelInterface Zana\Http\HttpKernel in mj-zana/http
Http\Exceptions\* Zana\Http\Exception\* (HttpException, NotFoundHttpException, MethodNotAllowedHttpException, ...) in mj-zana/http
Routing\* Zana\Routing\Router and Route in mj-zana/routing
Database\ConnectionInterface Zana\Database\ConnectionInterface in mj-zana/database
Domain\RepositoryInterface Zana\Ddd\Domain\RepositoryInterface in mj-zana/ddd

The rest of this file documents 1.x.

Purpose

mj-zana/contracts is the public API surface of the framework. It contains the interfaces, enums, and lightweight immutable value types that appear in the signatures of public contracts. Packages depend on this common, dependency-free foundation rather than on each other's concrete classes.

mj-zana/contracts            ← public API surface (interfaces, enums, value types)
      ▲            ▲
      │            │
  http/routing  middleware/container/...

Content

Namespace Contracts
Zana\Contracts\Http RequestInterface, ResponseInterface, KernelInterface, MiddlewareInterface
Zana\Contracts\Routing RouterInterface, RouteInterface
Zana\Contracts\Pipeline PipelineInterface, MiddlewareInterface
Zana\Contracts\Container ContainerInterface, ServiceProviderInterface, ServiceScopeInterface, ScopeMetadataInterface, ScopeType, ServiceLifetime, DisposableInterface
Zana\Contracts\Configuration ConfigurationInterface
Zana\Contracts\Events EventDispatcherInterface

Rules

  1. Public API surface — anytime a type appears in the signature of a public contract (interface, enum, or value object), it belongs in mj-zana/contracts. Implementations stay in their respective packages.
  2. Representation interfaces are complete — if a concrete type represents a framework object that may cross package boundaries (RequestInterface, ResponseInterface, RouteInterface, ScopeMetadataInterface, ...), its interface fully describes its public behavior. Consumers never need to cast back to a concrete class.
  3. Capability interfaces are minimal — capability interfaces expose only the behavior required to perform the capability (DisposableInterface, CacheInterface, LoggerInterface, ...). They stay as small as possible.
  4. Enums in contracts — any enum appearing in a public contract (ScopeType, RouteMethod, CacheStrategy, ...) belongs in mj-zana/contracts.
  5. Only promote what's shared — if an interface has one implementation and nobody outside its package needs it, keep it in that package.
  6. Exceptions are implementation details — they stay in their packages unless they are part of the public API consumed across packages.

Install

composer require mj-zana/contracts