NRK.no Sanity libraries contains an assortment of plugins and libraries used by NRK.no to extend Sanity Studio and apps using Sanity as a datasource.
Principles of nrkno-sanity outlines a bit about how NRK.no has configured Sanity Studio to optimize for a multi-team environment, all shipping content to distributed frontend.
Many of the libraries are based around the idea of option driven design, and everything relies on typesafe-schemas.
Please note that NRK is not looking for contributions for this particular repo.
This monorepo uses Lerna for versioning & publishing to npm. Publishing is triggered manually by the nrk.no team using CI infrastructure.
It is recommended to skim through the Lerna documentation.
Run npm install && npm run init
.
This will:
- install all dependencies needed for Lerna.
- install and hoist all package dependencies, then build everything.
- prepare husky commit hooks required for development.
Rerun npm run init
after package dependencies have change, to hoist & link everything correctly.
npm run test
To test a package in another project, use npm link/yarn link.
npm run upgrade:sanity
Script will upgrade (minor) Sanity dependencies in the root and all packages, install, hoist and link everything.
All commits on master should follow convential commit format:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
We use commitlint to enforce this with a git-hook.
fix: allow provided config object to extend other configs
feat: allow provided config object to extend other configs
BREAKING CHANGE: `extends` key in config file is now used for extending other config files
npm run version:dry-run
Approximate result:
Changes:
- @nrk/nrkno-lib-1: 0.4.0 => 0.4.1
- @nrk/sanity-plugin-nrkno-lib-2 1.4.0 => 1.5.0
? Are you sure you want to create these versions? No
Note: A yes answer will modify package.json files & update CHANGELOG.md, but nothing will be commited or pushed.
Publishing is triggered by nrk.no team using CI infrastructure (nrkno-sanity-libs-releaser).
Note: Packages are private on npm by default. Add
"publishConfig": {
"access": "public"
}
to package.json to make it public on npm.