Monorepo Structure

Directory layout for core, client, and react packages.

#Directory layout

The repository is a pnpm workspace. Each package is independently buildable and publishable.

void-snippets/
├── packages/
│   ├── core/
│   │   └── src/
│   │       ├── types.ts          — VSId, VSPagination, VSQueryParams, VSListResult
│   │       ├── adapters.ts       — VSAdapters interface, createDefaultAdapters()
│   │       └── utils.ts          — catchError, stringToId
│   │
│   ├── client/
│   │   └── src/
│   │       ├── configure.ts      — registers the shared axios instance
│   │       ├── resource-service.ts — generic CRUD base class
│   │       └── error-handler.ts  — handleApiError()
│   │
│   ├── react/
│   │   └── src/
│   │       ├── hooks/
│   │       │   ├── create-resource-hooks.ts  — the main factory
│   │       │   ├── use-alert-message.ts
│   │       │   ├── use-async-state.ts
│   │       │   ├── use-call-timer.ts
│   │       │   ├── use-modal.ts
│   │       │   └── use-pagination.ts
│   │       ├── socket/
│   │       │   └── create-socket-hooks.ts    — Socket.IO factory
│   │       └── routing/
│   │           ├── create-route-contract.ts
│   │           ├── define-route.ts
│   │           └── use-typed-search-params.ts
│   │
│   ├── angular/
│   │   └── src/
│   │       ├── hooks/
│   │       │   └── createResourceInject.ts   — the main factory
│   │       ├── services/
│   │       │   └── angular-resource.service.ts — HttpClient-backed base class
│   │       ├── providers.ts                  — provideVoidAngular()
│   │       └── utils/
│   │           ├── maybe-signal.ts           — MaybeSignal<T>, resolveSignal()
│   │           ├── optimistic-stack.ts       — WeakMap rollback/replay stack
│   │           └── query-keys.ts             — buildListKey, buildGetKey, buildInfiniteKey
│   │
│   └── nestjs/
│       └── src/
│           ├── config/
│           │   └── define-resource.ts        — defineResource(), the config object
│           ├── factory/
│           │   ├── resource-service.factory.ts    — ResourceService(def)
│           │   └── resource-controller.factory.ts — ResourceController(def)
│           ├── repository/
│           │   ├── resource.repository.ts    — ResourceRepository, ORM auto-detected
│           │   └── adapters/                 — typeorm.adapter.ts, mongoose.adapter.ts
│           ├── module/
│           │   └── void-resource.module.ts   — VoidResourceModule.forRoot / forFeature
│           ├── mongoose/index.ts             — forMongooseResource(), createBaseSchema()
│           └── typeorm/index.ts              — forTypeOrmResource(), VSBaseEntity family

├── pnpm-workspace.yaml
└── tsconfig.base.json

Each package exposes a single barrel entry point (src/index.ts) that re-exports everything consumers need.