# Common

## What it is responsible for

Common manages shared, framework-facing declarations and input-pipe entry points for the codebase. Its documentation says that the common package comes with decorators such as `@Controller()` and `@Injectable()`. Work enters through `DefaultValuePipe`, `ParseFilePipe`, `ParseArrayPipe`, and `ParseBoolPipe`; related named pipes cover boolean, date, enum, float, integer, UUID, and validation cases. Common also names logging, serialization, middleware, route, and configuration abstractions, placing those cross-cutting symbols under one package boundary.

## What it needs, and who needs it

Common needs no dependency within this repository. Its consumers include `Core`, `Cats`, and integrations for injector, inspector, scopes, discovery, GraphQL code-first, and hello-world. Without this package, those dependents lose the listed source of common decorators, pipes, interfaces, types, constants, and classes; their references to symbols such as `ValidationPipe` or `Logger` would no longer have this declared upstream package.

## Notable members

`DefaultValuePipe` is a work-entry member and signals the default-value pipe path. `ParseFilePipe` is another work-entry member, representing the file-parsing pipe path. `MiddlewareConsumer` stands out because the documentation explicitly defines an interface for applying user-defined middleware to routes; `MiddlewareConfiguration`, `MiddlewareConfigProxy`, `NestMiddleware`, and `RouteInfo` place that interface in a named middleware-and-routing group. `ConsoleLogger` and `Logger` similarly mark logging as part of Common’s shared surface.

353 entities in `packages/common`. **8 other subsystems depend on it**, which makes it the most depended-upon part of this codebase.

## What it is made of

Its 353 entities sit in 161 files under `packages/common`: 92 interfaces, 85 functions, 63 constants, 32 type aliases and 81 more.
`route-params.decorator.ts` holds 36 of them — more than any other file here.
`HttpException` declares 12 methods, the widest surface here.

## Where work enters

- [`DefaultValuePipe`](pipe-defaultvaluepipe) — `packages/common/pipes/default-value.pipe.ts`:1
- [`ParseFilePipe`](pipe-parsefilepipe) — `packages/common/pipes/file/parse-file.pipe.ts`:1
- [`ParseArrayPipe`](pipe-parsearraypipe) — `packages/common/pipes/parse-array.pipe.ts`:1
- [`ParseBoolPipe`](pipe-parseboolpipe) — `packages/common/pipes/parse-bool.pipe.ts`:1

## How it refuses and fails

6 of its components record a refusal or a failure handler.
All 6 of them refuse work outright, under a condition written into the component itself.
Their `catch` blocks handle a failure that already happened in 2 places.
Of those 2, 1 logs it and continues and 1 turns it into a return value.

## Boundaries

**8 other subsystems depend on this one** — `Core`, `Microservices`, `Platform Express`, `Testing`, `Platform Fastify`, `Platform Socket.io`, `Platform Ws`, `Websockets`. Changing what it exposes changes them.

Those 8 hold 742 edges between them, unevenly: `Core` reaches in across 471 edges, against 2 from `Platform Socket.io`. What they reach is narrower than the folder: 140 of its 353 members carry every inbound edge — `Type` (59), `Logger` (40) and `isUndefined` (29), plus 137 more.

**It depends on no other subsystem in this repository** — it is a leaf.

## How this code is named

These conventions cover most of the codebase. Learning them is faster than reading an index —
each one lets you find any member of its family without looking it up.

| Pattern | Where | Count | Examples |
|---|---|---|---|
| `*.interface.ts` | across the repository | 67 | `type.interface.ts`, `file.interface.ts`, `on-init.interface.ts`, `abstract.interface.ts` |
| `*.decorator.ts` | across the repository | 24 | `sse.decorator.ts`, `bind.decorator.ts`, `catch.decorator.ts`, `inject.decorator.ts` |
| `*.exception.ts` | `packages/common/exceptions/` | 23 | `gone.exception.ts`, `http.exception.ts`, `conflict.exception.ts`, `forbidden.exception.ts` |
| `*.util.ts` | across the repository | 16 | `cli-colors.util.ts`, `forward-ref.util.ts`, `is-log-level.util.ts`, `load-package.util.ts` |
