# Shared libraries discussion Things to possibly chat about • What do we want to share? (components, utils) • NPM private repo with semver • Monorepos (Lerna, Turborepo, NX) - https://trunkbaseddevelopment.com/monorepos/ • Devops (not main focus though) • Git repo(s) • Speed of build • Speed of testing • How do we work out what projects are affected by a change? • Dependency graphs (eg FE  depends on components (eg button)  depends on utils (eg auto data cy id) • Shared caching • Moving to vite at same time? • Shared eslint/TS config etc ## Fings wot we wanna share - utils (pure typescript) - primitive types organisation, no knowledge of domain - could be used by node (FE + BE) - models (types) - eg studies - api/RTKQ stuff - components (frontend) - chips/buttons - components (mdgroup specific) - visit type chips - components FE web - components FE native button.web.tsx button.native.tsx FE -> API -> Models -> Components -> Utils -> Utils ## Other things to add/use? - React Native Web - Vite transition - Storybook ## Monorepo platforms - Lerna: https://github.com/lerna/lerna - Turborepo: https://turborepo.org/ - Nx: https://nx.dev/ ## Semver NPM private repository - Can be individually versioned - Would be painful to keep dependant packages up to date ## Need/extra thoughts - decent integration tests - identify what is affected by changes - what happens if your change to a util affects many shared things? (Ticket scope) - to 'try and avoid versioning' so we dont add to tech debt as we will always be up to date and working