Search by

mj-zana / contracts

mjnable

Framework-wide abstractions shared between Zana packages

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-09-09 13:43:10 UTC


README

Framework-wide abstractions shared between Zana packages.

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