diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0253570d..8c2ebf81 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -53,6 +53,7 @@ updates: tools: patterns: - '@storybook/*' + - 'del-cli' - 'outdent' - 'sass-embedded' - 'storybook' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6b76fccc..50129e25 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,11 +41,15 @@ jobs: - name: Jest Tests run: yarn test --coverage - - name: Typescript build + - name: Package build run: yarn build + env: + NODE_ENV: production - name: Storybook build run: yarn build-storybook + env: + NODE_ENV: production - name: Switch to PR branch if: ${{ github.event_name == 'pull_request' && env.CHROMATIC_PROJECT_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 90b5aed3..4d066f74 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,8 +36,10 @@ jobs: - name: Jest Tests run: yarn test --coverage - - name: Typescript build + - name: Package build run: yarn build + env: + NODE_ENV: production - name: Publish npm package if: ${{ !github.event.release.prerelease }} diff --git a/README.md b/README.md index f0d6ec89..d80ff5f2 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ This repository contains the code for NHS.UK React components - a port of the [N [View documentation and examples](https://nhsdigital.github.io/nhsuk-react-components) -## Installation +## Install package -You can install this package using either `npm` or `yarn`. +You can install this package into your service using either `npm` or `yarn`. ```bash npm install --save nhsuk-react-components @@ -41,6 +41,30 @@ import { DateInput, Form } from 'nhsuk-react-components'; ; ``` +## Development + +To run this project locally, set up Yarn using [Node.js corepack](https://github.com/nodejs/corepack#readme) + +```bash +npm install -g corepack +corepack enable +yarn install +``` + +Then run the following: + +1. **Build and watch package** + + ```bash + yarn build --watch + ``` + +2. **Open documentation and examples** + + ```bash + yarn storybook + ``` + ## Upgrading - [Upgrading to 1.0](/docs/upgrade-to-1.0.md) diff --git a/babel.config.cjs b/babel.config.cjs index 26f171e8..a9432e21 100644 --- a/babel.config.cjs +++ b/babel.config.cjs @@ -1,6 +1,4 @@ -// Node.js environment with default -// https://nodejs.org/en/learn/getting-started/nodejs-the-difference-between-development-and-production -const { NODE_ENV = 'development' } = process.env; +const { NODE_ENV } = process.env; /** * Babel config @@ -27,7 +25,7 @@ module.exports = { [ '@babel/preset-react', { - development: NODE_ENV === 'test' || NODE_ENV === 'development', + development: NODE_ENV !== 'production', runtime: 'automatic', useBuiltIns: true, }, diff --git a/package.json b/package.json index 34cf80b5..8d1c7ac9 100644 --- a/package.json +++ b/package.json @@ -48,8 +48,8 @@ "!**/*.test.*" ], "scripts": { - "cleanup": "rm -rf dist/ > /dev/null", - "build": "NODE_ENV=production yarn cleanup && rollup -c", + "clean": "del-cli dist/*", + "build": "rollup --config", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "test": "jest --color", @@ -92,6 +92,7 @@ "babel-plugin-module-resolver": "^5.0.3", "babel-plugin-replace-import-extension": "^1.1.5", "classnames": "^2.5.1", + "del-cli": "^7.0.0", "eslint": "^9.39.4", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-typescript": "^4.4.4", @@ -125,7 +126,7 @@ "react-dom": ">=18.2.0", "tslib": ">=2.8.0" }, - "packageManager": "yarn@4.10.3", + "packageManager": "yarn@4.14.1", "publishConfig": { "access": "public" } diff --git a/rollup.config.js b/rollup.config.js index 80b9c916..34730408 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -11,6 +11,8 @@ import preserveDirectives from 'rollup-preserve-directives'; import packageJson from './package.json' with { type: 'json' }; import tsBuildConfig from './tsconfig.build.json' with { type: 'json' }; +const { NODE_ENV } = process.env; + const { outDir } = tsBuildConfig.compilerOptions; const external = Object.keys(packageJson.peerDependencies); @@ -73,7 +75,13 @@ export default defineConfig( // Handle warnings as errors onwarn(warning) { - throw new Error(warning.message, { cause: warning }); + if (NODE_ENV === 'production') { + throw new Error(warning.message, { + cause: warning, + }); + } + + console.warn(warning.message); }, }), ), diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index 00b28b2d..4338a695 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -9,12 +9,13 @@ NHS.UK Frontend ported to React [![CD Build and Publish to NPM](https://github.com/NHSDigital/nhsuk-react-components/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/NHSDigital/nhsuk-react-components/actions/workflows/release.yml) [![Bundle Size](https://img.shields.io/bundlephobia/minzip/nhsuk-react-components.svg)](https://bundlephobia.com/result?p=nhsuk-react-components) -## Installation +## Install package -You can install this package using either `yarn` or `npm`. +You can install this package into your service using either `npm` or `yarn`. ```bash npm install --save nhsuk-react-components + # Or yarn add nhsuk-react-components ``` diff --git a/yarn.lock b/yarn.lock index 2d9d179b..9f196513 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # Manual changes might be lost - proceed with caution! __metadata: - version: 8 + version: 9 cacheKey: 10c0 "@aashutoshrathi/word-wrap@npm:^1.2.3": @@ -2491,6 +2491,33 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + "@npmcli/agent@npm:^4.0.0": version: 4.0.0 resolution: "@npmcli/agent@npm:4.0.0" @@ -3134,6 +3161,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/merge-streams@npm:^2.1.0": + version: 2.3.0 + resolution: "@sindresorhus/merge-streams@npm:2.3.0" + checksum: 10c0/69ee906f3125fb2c6bb6ec5cdd84e8827d93b49b3892bce8b62267116cc7e197b5cccf20c160a1d32c26014ecd14470a72a5e3ee37a58f1d6dadc0db1ccf3894 + languageName: node + linkType: hard + "@sinonjs/commons@npm:^3.0.1": version: 3.0.1 resolution: "@sinonjs/commons@npm:3.0.1" @@ -4898,6 +4932,35 @@ __metadata: languageName: node linkType: hard +"del-cli@npm:^7.0.0": + version: 7.0.0 + resolution: "del-cli@npm:7.0.0" + dependencies: + del: "npm:^8.0.1" + meow: "npm:^14.0.0" + presentable-error: "npm:^0.0.1" + bin: + del: cli.js + del-cli: cli.js + checksum: 10c0/5430d233e55bfb52f3e27647e177535d0d2dac0354aeef99ff8769892203d949dc18e0bb945ef2b17d6941a8d27432b87192f50545ef4847f1b430c6b45b9305 + languageName: node + linkType: hard + +"del@npm:^8.0.1": + version: 8.0.1 + resolution: "del@npm:8.0.1" + dependencies: + globby: "npm:^14.0.2" + is-glob: "npm:^4.0.3" + is-path-cwd: "npm:^3.0.0" + is-path-inside: "npm:^4.0.0" + p-map: "npm:^7.0.2" + presentable-error: "npm:^0.0.1" + slash: "npm:^5.1.0" + checksum: 10c0/77100f260e6b5bd2a927fe4a770b321c088aa15ce9c8266b9f0297a85613c225913e52fc78150ea701b163d0d9c9fec945107fef0e23836747a57a7d3709fb1c + languageName: node + linkType: hard + "dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" @@ -5709,6 +5772,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.3.3": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -5723,6 +5799,15 @@ __metadata: languageName: node linkType: hard +"fastq@npm:^1.6.0": + version: 1.20.1 + resolution: "fastq@npm:1.20.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e + languageName: node + linkType: hard + "fb-watchman@npm:^2.0.2": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" @@ -5985,6 +6070,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + "glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" @@ -6071,6 +6165,20 @@ __metadata: languageName: node linkType: hard +"globby@npm:^14.0.2": + version: 14.1.0 + resolution: "globby@npm:14.1.0" + dependencies: + "@sindresorhus/merge-streams": "npm:^2.1.0" + fast-glob: "npm:^3.3.3" + ignore: "npm:^7.0.3" + path-type: "npm:^6.0.0" + slash: "npm:^5.1.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10c0/527a1063c5958255969620c6fa4444a2b2e9278caddd571d46dfbfa307cb15977afb746e84d682ba5b6c94fc081e8997f80ff05dd235441ba1cb16f86153e58e + languageName: node + linkType: hard + "globrex@npm:^0.1.2": version: 0.1.2 resolution: "globrex@npm:0.1.2" @@ -6240,7 +6348,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^7.0.5": +"ignore@npm:^7.0.3, ignore@npm:^7.0.5": version: 7.0.5 resolution: "ignore@npm:7.0.5" checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d @@ -6465,7 +6573,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.3": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -6523,6 +6631,20 @@ __metadata: languageName: node linkType: hard +"is-path-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "is-path-cwd@npm:3.0.0" + checksum: 10c0/8135b789c74e137501ca33b11a846c32d160c517037c0ce390004a98335e010b9712792d97c73d9e98a5ecbcfd03589a81e95c72e1c05014a69fead963a02753 + languageName: node + linkType: hard + +"is-path-inside@npm:^4.0.0": + version: 4.0.0 + resolution: "is-path-inside@npm:4.0.0" + checksum: 10c0/51188d7e2b1d907a9a5f7c18d99a90b60870b951ed87cf97595d9aaa429d4c010652c3350bcbf31182e7f4b0eab9a1860b43e16729b13cb1a44baaa6cdb64c46 + languageName: node + linkType: hard + "is-potential-custom-element-name@npm:^1.0.1": version: 1.0.1 resolution: "is-potential-custom-element-name@npm:1.0.1" @@ -7638,6 +7760,13 @@ __metadata: languageName: node linkType: hard +"meow@npm:^14.0.0": + version: 14.1.0 + resolution: "meow@npm:14.1.0" + checksum: 10c0/f0ca4bb4fd08e4b9470fcbb7332deb61d72d40d4bda18ffb87c1a98e5014c0b44749ae9f0cab18fa532e26d61cef5d453831f9ae23ac09fa8ea0e0469be73ebc + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -7645,6 +7774,13 @@ __metadata: languageName: node linkType: hard +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + "micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" @@ -7873,6 +8009,7 @@ __metadata: babel-plugin-module-resolver: "npm:^5.0.3" babel-plugin-replace-import-extension: "npm:^1.1.5" classnames: "npm:^2.5.1" + del-cli: "npm:^7.0.0" eslint: "npm:^9.39.4" eslint-config-prettier: "npm:^10.1.8" eslint-import-resolver-typescript: "npm:^4.4.4" @@ -8284,6 +8421,13 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^6.0.0": + version: 6.0.0 + resolution: "path-type@npm:6.0.0" + checksum: 10c0/55baa8b1187d6dc683d5a9cfcc866168d6adff58e5db91126795376d818eee46391e00b2a4d53e44d844c7524a7d96aa68cc68f4f3e500d3d069a39e6535481c + languageName: node + linkType: hard + "pathval@npm:^2.0.0": version: 2.0.1 resolution: "pathval@npm:2.0.1" @@ -8362,6 +8506,13 @@ __metadata: languageName: node linkType: hard +"presentable-error@npm:^0.0.1": + version: 0.0.1 + resolution: "presentable-error@npm:0.0.1" + checksum: 10c0/84a0ef6f2c34fbb1ee006b803b9e6df52886b39ae431f0359364f8a8b74b41ca98976217fdced80bf56a9dee05fa2b456cbb57323cfc3e135bce8825ec5e8650 + languageName: node + linkType: hard + "prettier@npm:^3.8.3": version: 3.8.3 resolution: "prettier@npm:3.8.3" @@ -8447,6 +8598,13 @@ __metadata: languageName: node linkType: hard +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + "react-docgen-typescript@npm:^2.2.2": version: 2.2.2 resolution: "react-docgen-typescript@npm:2.2.2" @@ -8735,6 +8893,13 @@ __metadata: languageName: node linkType: hard +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + "rollup-preserve-directives@npm:^1.1.3": version: 1.1.3 resolution: "rollup-preserve-directives@npm:1.1.3" @@ -8940,6 +9105,15 @@ __metadata: languageName: node linkType: hard +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + "rxjs@npm:^7.4.0": version: 7.8.2 resolution: "rxjs@npm:7.8.2" @@ -9374,6 +9548,13 @@ __metadata: languageName: node linkType: hard +"slash@npm:^5.1.0": + version: 5.1.0 + resolution: "slash@npm:5.1.0" + checksum: 10c0/eb48b815caf0bdc390d0519d41b9e0556a14380f6799c72ba35caf03544d501d18befdeeef074bc9c052acf69654bc9e0d79d7f1de0866284137a40805299eb3 + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -10044,6 +10225,13 @@ __metadata: languageName: node linkType: hard +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: 10c0/0a32a997d6c15f1c2a077a15b1c4ca6f268d574cf5b8975e778bb98e6f8db4ef4e86dfcae4e158cd4c7e38fb4dd383b93b13eefddc7f178dea13d3ac8a603271 + languageName: node + linkType: hard + "unplugin@npm:^2.3.5": version: 2.3.10 resolution: "unplugin@npm:2.3.10"