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.jsonEach package exposes a single barrel entry point (src/index.ts) that re-exports everything consumers need.