Skip to content

scaleway/scaleway-lib

Repository files navigation

scaleway

scaleway-lib

scaleway-lib is a set of NPM packages used at Scaleway.



Available packages

Development

Locally

$ git clone git@github.com:scaleway/scaleway-lib.git
$ cd scaleway-lib
$ pnpm install
$ # ... do your changes ...
$ pnpm run lint
$ pnpm run test:unit

Link against another project (with yalc) => FAVORED

yalc is a tool aiming to simplify working with local npm packages by providing a different workflow than npm/yarn/pnpm link, hence avoiding most of their issues with module resolving.

$ pnpm install -g yalc # Make sure to have the yalc binary
$ cd scaleway-lib/packages/example_package
$ pnpm run build && yalc publish
$ # Now it's ready to install in your project
$ cd ../../../project-something
$ yalc add @scaleway/package-name
$ cd ../scaleway-lib/packages/example_package
$ # If you do some changes into your package
$ pnpm run build && yalc publish --push --sig # --push will automatically update the package on projects where it have been added, --sig updates the signature hash to trigger webpack update

⚠️ since 1.0.0.pre.51 (2021-04-23), yalc publish needs the --sig option to trigger webpack module actual update.

⚠️ yalc create a yalc.lock and updates the package.json in the target project. Make sure to not commit these changes

Testing a package in a pnpm workspace

If you need to test a package that is used in more than one project in a pnpm workspace, it can be tedious to add the package in all projects and you might still have issues with modules resolution.

In order to install your local package in all the projects of the monorepo, you can use the pnpm overrides feature:

  • first install the package using yalc (yalc add @scaleway/package) at the root of the pnpm workspace
  • then add a pnpm override to use the yalc version in the whole workspace

Example package.json:

"dependencies": {
  "@scaleway/package": "file:.yalc/@scaleway/package", // <- added by yalc
}
"pnpm": {
  "overrides": {
    "@scaleway/package": "$@scaleway/package", // <- tell pnpm to use the version referenced in the dependencies
  }
}

Link against another project (with pnpm link)

$ cd packages/example_package && pnpm link
$ cd - && pnpm run build # rebuild the package
$ # Now it's ready to link into your project
$ cd ../project-something
$ pnpm link @scaleway/example_package

Linting

$ pnpm run lint
$ pnpm run lint:fix

Unit Test

$ pnpm run test:unit # Will run all tests
$ pnpm run test:unit:coverage # Will generate a coverage report

Notes

Tools

This projects uses

On build targets

For platform neutral packages the target is esnext by default. And for Node cli packages target is node@24

On build outputs

We only output ESM modules. Please read this.

On commits

We don't enforce anything on the commit level but your PR title must respect the conventionnal commits convention

Contributing Guidelines

  • Ensure tests are still ok and code coverage have not decreased
  • Follow linter rules (tldr).
  • CI is enforced, you won't be able to merge unless pipeline is successful.