OpenCRVS toolkit
OpenCRVS toolkit for building country configurations.
File structure
src/
events/ # re-exports events module from commons package
scopes/ # re-exports scopes module from commons package
conditionals/ # provides tools for easily formulating complex conditionals and deduplication rules
api/ # provides an API wrapper for OpenCRVS APIs with strict typing and validation
Getting started
Development using yarn link
# tsconfig.json references commons. when `tsc --build` is run, both are built.
> yarn build:all
# If you miss this part you might face issues with types.
> cd dist
> yarn link
Internal dependencies
When adding internal package as dependency, understand that:
- Internal packages cannot be direct dependencies. Toolkit is published through npm, and dependency cannot be resolved.
- Packages may have dependencies that require strict order of installation. Ensure installations are run in proper order in pipeline and scripts.
@opencrvs/events
Toolkit "re-exports" TRPC router to allow for easy client interaction.
@opencrvs/commons
Toolkit "re-exports" common definitions (e.g. events, conditionals) and make them available through npm.
Releasing and buiding
While developing
- Update version number in
package.json
yarn build:all
npm publish
Through version control
- Update version number in
package.json
- Create a pull request
- Once merged, github action will get triggered.
Gotchas, good to know
- All dependencies of the functions and moduless used from
packages/commons
must be also defined in the package.json of the toolkit. Otherwise someone installing the package will get errors.
- Package is published and should be used without knowledge of rest of the monorepo
- Package exposes
/events, /scopes
directory, with types, from packages/commons
through the library, others are excluded.
- If the above directories have subdirectories, the types are not exposed by default. The compiled JavaScript is available though through
esbuild
. See build.sh
on how to expose subdirectories:
npx esbuild src/events/index.ts --bundle --format=cjs --outdir=./dist/events --allow-overwrite --packages=external
mkdir -p ./dist/commons/events
cp -r ../commons/build/dist/common/events/*.d.ts ./dist/commons/events
mkdir -p ./dist/commons/events/state
cp -r ../commons/build/dist/common/events/state/*.d.ts ./dist/commons/events/state