From 89ffc2d2a8c393062bd66141d3bdba0e8a5c7d56 Mon Sep 17 00:00:00 2001 From: Matt Hillsdon Date: Sat, 29 Aug 2026 11:36:20 +0000 Subject: [PATCH 1/3] Move typedoc and react out of runtime dependencies typedoc is only used by the docs script, but as a runtime dependency its typescript peer range (capped at 5.8.x for typedoc 0.27) constrains consumers' typescript version: classroom's Renovate typescript 5.9 bump produced a lockfile npm ci rejects. react/react-dom were listed in both dependencies and peerDependencies, forcing react on consumers of the vanilla entry point. They are now devDependencies (for Storybook) alongside the existing peer ranges. --- package-lock.json | 47 +++++++++++++++++++++++++++++++++++------------ package.json | 8 ++++---- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index f00d4b2..b75c744 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,10 +10,7 @@ "license": "MIT", "dependencies": { "base64-js": "^1.5.1", - "react": ">=18.0.0", - "react-dom": ">=18.0.0", - "tslib": ">=2.0.0", - "typedoc": "^0.27.6" + "tslib": ">=2.0.0" }, "devDependencies": { "@chromatic-com/storybook": "^1.2.25", @@ -32,8 +29,11 @@ "eslint-plugin-react-refresh": "^0.4.6", "eslint-plugin-storybook": "^0.8.0", "prettier": "^3.2.5", + "react": "^19.0.0", + "react-dom": "^19.0.0", "storybook": "^8.0.5", "tslib": "^2.6.2", + "typedoc": "^0.27.6", "typescript": "^5.2.2" }, "engines": { @@ -820,6 +820,7 @@ "version": "1.27.2", "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.27.2.tgz", "integrity": "sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==", + "dev": true, "dependencies": { "@shikijs/engine-oniguruma": "^1.27.2", "@shikijs/types": "^1.27.2", @@ -1306,6 +1307,7 @@ "version": "1.29.2", "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz", "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==", + "dev": true, "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" @@ -1315,6 +1317,7 @@ "version": "1.29.2", "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz", "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==", + "dev": true, "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" @@ -1323,7 +1326,8 @@ "node_modules/@shikijs/vscode-textmate": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz", - "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==" + "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==", + "dev": true }, "node_modules/@storybook/addon-actions": { "version": "8.5.3", @@ -2020,6 +2024,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, "dependencies": { "@types/unist": "*" } @@ -2076,7 +2081,8 @@ "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true }, "node_modules/@types/uuid": { "version": "9.0.8", @@ -2428,7 +2434,8 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/aria-query": { "version": "5.3.0", @@ -2487,7 +2494,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -2524,6 +2532,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -2895,6 +2904,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, "engines": { "node": ">=0.12" }, @@ -4106,6 +4116,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, "dependencies": { "uc.micro": "^2.0.0" } @@ -4167,7 +4178,8 @@ "node_modules/lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true }, "node_modules/lz-string": { "version": "1.5.0", @@ -4197,6 +4209,7 @@ "version": "14.1.0", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -4221,7 +4234,8 @@ "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true }, "node_modules/memoizerific": { "version": "1.11.3", @@ -4279,6 +4293,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4611,6 +4626,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, "engines": { "node": ">=6" } @@ -4639,6 +4655,7 @@ "version": "19.0.0", "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4692,6 +4709,7 @@ "version": "19.0.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "dev": true, "dependencies": { "scheduler": "^0.25.0" }, @@ -4898,7 +4916,8 @@ "node_modules/scheduler": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "dev": true }, "node_modules/semver": { "version": "7.7.1", @@ -5229,6 +5248,7 @@ "version": "0.27.6", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.6.tgz", "integrity": "sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw==", + "dev": true, "dependencies": { "@gerrit0/mini-shiki": "^1.24.0", "lunr": "^2.3.9", @@ -5250,6 +5270,7 @@ "version": "5.7.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5261,7 +5282,8 @@ "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true }, "node_modules/universalify": { "version": "2.0.1", @@ -5509,6 +5531,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "dev": true, "bin": { "yaml": "bin.mjs" }, diff --git a/package.json b/package.json index 8b51d97..1694cad 100644 --- a/package.json +++ b/package.json @@ -72,10 +72,7 @@ }, "dependencies": { "base64-js": "^1.5.1", - "react": ">=18.0.0", - "react-dom": ">=18.0.0", - "tslib": ">=2.0.0", - "typedoc": "^0.27.6" + "tslib": ">=2.0.0" }, "devDependencies": { "@chromatic-com/storybook": "^1.2.25", @@ -94,8 +91,11 @@ "eslint-plugin-react-refresh": "^0.4.6", "eslint-plugin-storybook": "^0.8.0", "prettier": "^3.2.5", + "react": "^19.0.0", + "react-dom": "^19.0.0", "storybook": "^8.0.5", "tslib": "^2.6.2", + "typedoc": "^0.27.6", "typescript": "^5.2.2" } } From 5bc5fea04080ee22fc0781301622f18535044de3 Mon Sep 17 00:00:00 2001 From: Matt Hillsdon Date: Sat, 29 Aug 2026 11:39:58 +0000 Subject: [PATCH 2/3] Remove unused tslib importHelpers is not enabled, so tsc inlines its helpers and nothing imports tslib. --- package-lock.json | 4 +--- package.json | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index b75c744..b458a5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,7 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "base64-js": "^1.5.1", - "tslib": ">=2.0.0" + "base64-js": "^1.5.1" }, "devDependencies": { "@chromatic-com/storybook": "^1.2.25", @@ -32,7 +31,6 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "storybook": "^8.0.5", - "tslib": "^2.6.2", "typedoc": "^0.27.6", "typescript": "^5.2.2" }, diff --git a/package.json b/package.json index 1694cad..3f14c1d 100644 --- a/package.json +++ b/package.json @@ -71,8 +71,7 @@ "react-dom": ">=18.0.0" }, "dependencies": { - "base64-js": "^1.5.1", - "tslib": ">=2.0.0" + "base64-js": "^1.5.1" }, "devDependencies": { "@chromatic-com/storybook": "^1.2.25", @@ -94,7 +93,6 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "storybook": "^8.0.5", - "tslib": "^2.6.2", "typedoc": "^0.27.6", "typescript": "^5.2.2" } From 0996877594e64a0286cc97f73e3338d484c94b01 Mon Sep 17 00:00:00 2001 From: Matt Hillsdon Date: Sat, 29 Aug 2026 11:43:24 +0000 Subject: [PATCH 3/3] Exclude stories from the published build They were compiled into dist despite not being exported, dragging their base64-js import in as a runtime dependency; it is now dev-only. The build uses a new tsconfig.build.json while tsconfig.json still covers everything for the editor and the new typecheck script in ci, so the stories remain typechecked (Storybook's own build only transpiles). --- package-lock.json | 5 ++--- package.json | 9 ++++----- tsconfig.build.json | 4 ++++ tsconfig.cjs.json | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 tsconfig.build.json diff --git a/package-lock.json b/package-lock.json index b458a5b..618dcfc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,6 @@ "name": "@microbit/python-editor-embed", "version": "0.0.0", "license": "MIT", - "dependencies": { - "base64-js": "^1.5.1" - }, "devDependencies": { "@chromatic-com/storybook": "^1.2.25", "@storybook/addon-essentials": "^8.0.5", @@ -23,6 +20,7 @@ "@types/react-dom": "^18.2.22", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", + "base64-js": "^1.5.1", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", @@ -2499,6 +2497,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", diff --git a/package.json b/package.json index 3f14c1d..42aff9c 100644 --- a/package.json +++ b/package.json @@ -57,11 +57,12 @@ }, "scripts": { "dev": "vite", - "build:esm": "tsc -p tsconfig.json && echo '{\"type\": \"module\"}' > dist/esm/package.json", + "build:esm": "tsc -p tsconfig.build.json && echo '{\"type\": \"module\"}' > dist/esm/package.json", "build:cjs": "tsc -p tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > dist/cjs/package.json", "build": "npm run build:esm && npm run build:cjs", + "typecheck": "tsc -p tsconfig.json --noEmit", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "ci": "npm run lint && npm run build && npm run build:storybook", + "ci": "npm run lint && npm run typecheck && npm run build && npm run build:storybook", "storybook": "storybook dev -p 6006", "build:storybook": "storybook build", "docs": "typedoc" @@ -70,11 +71,9 @@ "react": ">=18.0.0", "react-dom": ">=18.0.0" }, - "dependencies": { - "base64-js": "^1.5.1" - }, "devDependencies": { "@chromatic-com/storybook": "^1.2.25", + "base64-js": "^1.5.1", "@storybook/addon-essentials": "^8.0.5", "@storybook/addon-interactions": "^8.0.5", "@storybook/addon-links": "^8.0.5", diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..64abd3c --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/stories"] +} diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json index 1800027..a2ffba7 100644 --- a/tsconfig.cjs.json +++ b/tsconfig.cjs.json @@ -1,5 +1,5 @@ { - "extends": "./tsconfig.json", + "extends": "./tsconfig.build.json", "compilerOptions": { "module": "CommonJS", "moduleResolution": "Node",