Nest-yalc stands for Nestjs - Yet Another Library Collection
- Support of the CrudGen filters for the GraphQL endpoints
- Automatic runtime generation of CRUD endpoints using the NestJS dependency factory method
- Parametrized the generation of: Resolver, Service, Dataloader, TypeORM repository based on ORM entities and DTOs.
- Implemented JSON support for TypeORM entities by using decorators
- Possibility to handle MySQL views (read) and their relative table (write) via the same repository
- Custom decorators to extend the NestJS GraphQL library with features such as: field middleware, graphql-typeorm field mapping, nested field resolver with dataloader or join etc.
- Helper methods for jest to be integrated in a monorepo solution
- Utils classes and methods
-
SQLite skeleton app (REST + GraphQL + EventManager + Logger + ApiStrategy) — a minimal, copyable example app that wires together most features of this library and can be used as a starting point for your own projects.
-
How to orchestrate errors, logging and HTTP status codes with EventManager and DefaultError
To handle scripts and dependencies between all the libraries of this collection we use a root package.json.
At the moment it handles both the devDependencies needed to run the tests and the build process, as well as the
dependencies of the libraries itself.
The npm workspace approach must be preferred by the way. It allows us to
specify the dependencies and some scripts directly inside the package itself but still having the possibility of managing them
from the root package.json. (see aws-sdk library for example)
The main package.json contain some scripts to run the unit test for all the libraries of this collection.
It uses the jest projects feature in background configured by jest.config.ts by using a customized mechanism
implemented in our @nest-yalc/jest library.
ESM mocking note: when Jest errors with messages like “Cannot assign to read only property …” while mocking ESM modules (common with GraphQL decorators or helpers), load the module via importMockedEsm from @nestjs-yalc/jest/esm.helper before importing the SUT. importMockedEsm wraps functions with jest.fn and registers them using jest.unstable_mockModule, which avoids read-only export issues. Use mockNestJSGraphql(import.meta) for @nestjs/graphql convenience.
To run the tests with the coverage use npm run test:cov and then you can check the status of the tests by running npm run test:cov:serve
Then you should be able to browse the coverage reports via: http://127.0.0.1:8080/lcov-report/
Currently our github pipeline checks that the linter and the tests are passing with 100% of coverage threshold
the nestjs-yalc directory structure is flat to let it be integrated in other projects easily
- tsconfig.*.json
- tsconfig.json -> used by the compiler and the IDE
- tsconfig.test.json -> used by jest
- tsconfig.dev.json -> used by other dev tools such as eslint
- test.js
- examples/ ->
- docs/ -> used for the the github pages markdown
- [other_libraries]/
var/asl-test.cjs: manual AsyncLocalStorage sanity check (Fastify + ALS). Not used by builds/tests; run manually if you need to confirm ALS behaviour across injected requests.build-dist.mjs: local pack script that writesdist/package.jsonfor each package with exports pointing at compiled output. Sourcepackage.jsonfiles stay untouched; the distpackage.jsonis generated afternpm run build. This is a repo-specific helper (not standard npm) to keep local file-based consumption aligned with the compiled layout.