Skip to content

Commit 301f9c5

Browse files
authored
Accept a range of versions in peerDependencies, but install specific versions in dev (#2547)
Previously, we had a single workspace `catalog` that was used for all our dependencies. This meant that our version specifiers for `peerDependencies` and `devDependencies` were the same. The result was that: - either we would specify a single version of a package as our peer dep, which is bad because then clients get warnings if their package versions are even slightly different. - or we would specify a version range as our dev dep. This usually resulted in a more recent version of the package being installed in dev, e.g. if we specified `^1.1.0`, the installed version might be `1.3.5`. This is bad because we might accidentally depend on features introduced in 1.3.x that aren't present in 1.1.0 — meaning our peer dep range is a lie. This PR fixes things so that: - We install a specific version of each package in dev, e.g. `1.1.0`. - We accept any version compatible with that as a peer dependency, e.g. `^1.1.0`. - We can run `utils/sync-dependencies.ts` to update our package catalog based on the webapp frontend's package.json. Issue: none ## Test plan: ``` pnpm storybook open http://localhost:6006 ``` Review the stories. Everything should work. Run `utils/sync-dependencies.ts ../webapp/services/static/package.json`. There should be no changes to `pnpm-workspace.yaml`. Author: benchristel Reviewers: catandthemachines, benchristel, jeremywiebe, anakaren-rojas Required Reviewers: Approved By: catandthemachines, jeremywiebe Checks: ✅ 8 checks were successful Pull Request URL: #2547
1 parent 35e4d13 commit 301f9c5

File tree

31 files changed

+2463
-1282
lines changed

31 files changed

+2463
-1282
lines changed

.changeset/lemon-actors-melt.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
---

.github/dependabot.yml

Lines changed: 0 additions & 29 deletions
This file was deleted.

dev/package.json

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,27 @@
2121
"@khanacademy/perseus-linter": "workspace:*",
2222
"@khanacademy/pure-markdown": "workspace:*",
2323
"@khanacademy/simple-markdown": "workspace:*",
24-
"@khanacademy/wonder-blocks-banner": "catalog:",
25-
"@khanacademy/wonder-blocks-button": "catalog:",
26-
"@khanacademy/wonder-blocks-core": "catalog:",
27-
"@khanacademy/wonder-blocks-dropdown": "catalog:",
28-
"@khanacademy/wonder-blocks-icon": "catalog:",
29-
"@khanacademy/wonder-blocks-icon-button": "catalog:",
30-
"@khanacademy/wonder-blocks-layout": "catalog:",
31-
"@khanacademy/wonder-blocks-link": "catalog:",
32-
"@khanacademy/wonder-blocks-search-field": "catalog:",
33-
"@khanacademy/wonder-blocks-switch": "catalog:",
34-
"@khanacademy/wonder-blocks-timing": "catalog:",
35-
"@khanacademy/wonder-blocks-tokens": "catalog:",
36-
"@khanacademy/wonder-blocks-toolbar": "catalog:",
37-
"@khanacademy/wonder-blocks-tooltip": "catalog:",
38-
"@khanacademy/wonder-stuff-core": "catalog:",
39-
"@phosphor-icons/core": "catalog:",
40-
"aphrodite": "catalog:",
41-
"react": "catalog:",
42-
"react-dom": "catalog:"
24+
"@khanacademy/wonder-blocks-banner": "catalog:devDeps",
25+
"@khanacademy/wonder-blocks-button": "catalog:devDeps",
26+
"@khanacademy/wonder-blocks-core": "catalog:devDeps",
27+
"@khanacademy/wonder-blocks-dropdown": "catalog:devDeps",
28+
"@khanacademy/wonder-blocks-icon": "catalog:devDeps",
29+
"@khanacademy/wonder-blocks-icon-button": "catalog:devDeps",
30+
"@khanacademy/wonder-blocks-layout": "catalog:devDeps",
31+
"@khanacademy/wonder-blocks-link": "catalog:devDeps",
32+
"@khanacademy/wonder-blocks-search-field": "catalog:devDeps",
33+
"@khanacademy/wonder-blocks-switch": "catalog:devDeps",
34+
"@khanacademy/wonder-blocks-timing": "catalog:devDeps",
35+
"@khanacademy/wonder-blocks-tokens": "catalog:devDeps",
36+
"@khanacademy/wonder-blocks-toolbar": "catalog:devDeps",
37+
"@khanacademy/wonder-blocks-tooltip": "catalog:devDeps",
38+
"@khanacademy/wonder-stuff-core": "catalog:devDeps",
39+
"@phosphor-icons/core": "catalog:devDeps",
40+
"aphrodite": "catalog:devDeps",
41+
"react": "catalog:devDeps",
42+
"react-dom": "catalog:devDeps"
4343
},
4444
"devDependencies": {
45-
"vite": "catalog:"
45+
"vite": "catalog:devDeps"
4646
}
4747
}

package.json

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616
"@jest/globals": "^29.7.0",
1717
"@khanacademy/eslint-config": "^5.2.1",
1818
"@khanacademy/eslint-plugin": "^3.1.2",
19-
"@khanacademy/mathjax-renderer": "catalog:",
20-
"@khanacademy/wonder-blocks-button": "catalog:",
21-
"@khanacademy/wonder-blocks-core": "catalog:",
22-
"@khanacademy/wonder-blocks-icon": "catalog:",
23-
"@khanacademy/wonder-blocks-layout": "catalog:",
24-
"@khanacademy/wonder-blocks-switch": "catalog:",
25-
"@khanacademy/wonder-blocks-tokens": "catalog:",
26-
"@khanacademy/wonder-blocks-typography": "catalog:",
27-
"@phosphor-icons/core": "catalog:",
19+
"@khanacademy/mathjax-renderer": "catalog:devDeps",
20+
"@khanacademy/wonder-blocks-button": "catalog:devDeps",
21+
"@khanacademy/wonder-blocks-core": "catalog:devDeps",
22+
"@khanacademy/wonder-blocks-icon": "catalog:devDeps",
23+
"@khanacademy/wonder-blocks-layout": "catalog:devDeps",
24+
"@khanacademy/wonder-blocks-switch": "catalog:devDeps",
25+
"@khanacademy/wonder-blocks-tokens": "catalog:devDeps",
26+
"@khanacademy/wonder-blocks-typography": "catalog:devDeps",
27+
"@phosphor-icons/core": "catalog:devDeps",
2828
"@rollup/plugin-alias": "^5.1.1",
2929
"@rollup/plugin-commonjs": "^28.0.3",
3030
"@rollup/plugin-node-resolve": "^16.0.1",
@@ -52,7 +52,7 @@
5252
"@typescript-eslint/parser": "^8.18.0",
5353
"@vitejs/plugin-react-swc": "^3.8.1",
5454
"ancesdir": "^3.1.0",
55-
"aphrodite": "catalog:",
55+
"aphrodite": "catalog:devDeps",
5656
"cross-env": "^5.2.0",
5757
"css-loader": "^6.8.1",
5858
"cypress": "^13.6.5",
@@ -89,8 +89,8 @@
8989
"nyc": "^15.1.0",
9090
"pnpm": "^9.15.4",
9191
"prettier": "^3",
92-
"react": "catalog:",
93-
"react-dom": "catalog:",
92+
"react": "catalog:devDeps",
93+
"react-dom": "catalog:devDeps",
9494
"react-json-view": "^1.19.1",
9595
"react-popper": "^2.2.5",
9696
"react-router": "5.3.4",
@@ -103,14 +103,15 @@
103103
"rollup-plugin-filesize": "^10.0.0",
104104
"rollup-plugin-preserve-shebangs": "^0.2.0",
105105
"rollup-plugin-styles": "^4.0.0",
106+
"semver": "^7.7.2",
106107
"sloc": "^0.2.1",
107108
"storybook": "^9.0.4",
108109
"style-loader": "^3.3.3",
109110
"swc_mut_cjs_exports": "^8.0.1",
110-
"tiny-invariant": "catalog:",
111+
"tiny-invariant": "catalog:devDeps",
111112
"typescript": "5.7.2",
112113
"typescript-coverage-report": "^0.7.0",
113-
"vite": "catalog:",
114+
"vite": "catalog:devDeps",
114115
"vite-plugin-istanbul": "^5.0.0",
115116
"winston": "^3.7.2",
116117
"yaml": "^2.7.0"

packages/kas/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@
3131
"devDependencies": {
3232
"jison": "0.4.15",
3333
"perseus-build-settings": "workspace:*",
34-
"underscore": "catalog:"
34+
"underscore": "catalog:devDeps"
3535
},
3636
"peerDependencies": {
37-
"underscore": "catalog:"
37+
"underscore": "catalog:peerDeps"
3838
},
3939
"keywords": [
4040
"parsing",

packages/keypad-context/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@
3030
},
3131
"devDependencies": {
3232
"perseus-build-settings": "workspace:*",
33-
"react": "catalog:"
33+
"react": "catalog:devDeps"
3434
},
3535
"peerDependencies": {
36-
"react": "catalog:"
36+
"react": "catalog:peerDeps"
3737
},
3838
"keywords": []
3939
}

packages/kmath/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@
2929
"@khanacademy/perseus-utils": "workspace:*"
3030
},
3131
"devDependencies": {
32-
"jquery": "catalog:",
32+
"jquery": "catalog:devDeps",
3333
"perseus-build-settings": "workspace:*",
34-
"underscore": "catalog:"
34+
"underscore": "catalog:devDeps"
3535
},
3636
"peerDependencies": {
37-
"jquery": "catalog:",
38-
"underscore": "catalog:"
37+
"jquery": "catalog:peerDeps",
38+
"underscore": "catalog:peerDeps"
3939
},
4040
"keywords": []
4141
}

packages/math-input/package.json

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -45,37 +45,37 @@
4545
"@khanacademy/perseus-utils": "workspace:*"
4646
},
4747
"devDependencies": {
48-
"@khanacademy/mathjax-renderer": "catalog:",
49-
"@khanacademy/wonder-blocks-clickable": "catalog:",
50-
"@khanacademy/wonder-blocks-core": "catalog:",
51-
"@khanacademy/wonder-blocks-popover": "catalog:",
52-
"@khanacademy/wonder-blocks-timing": "catalog:",
53-
"@khanacademy/wonder-blocks-tokens": "catalog:",
54-
"@khanacademy/wonder-stuff-core": "catalog:",
55-
"@phosphor-icons/core": "catalog:",
56-
"aphrodite": "catalog:",
57-
"jquery": "catalog:",
48+
"@khanacademy/mathjax-renderer": "catalog:devDeps",
49+
"@khanacademy/wonder-blocks-clickable": "catalog:devDeps",
50+
"@khanacademy/wonder-blocks-core": "catalog:devDeps",
51+
"@khanacademy/wonder-blocks-popover": "catalog:devDeps",
52+
"@khanacademy/wonder-blocks-timing": "catalog:devDeps",
53+
"@khanacademy/wonder-blocks-tokens": "catalog:devDeps",
54+
"@khanacademy/wonder-stuff-core": "catalog:devDeps",
55+
"@phosphor-icons/core": "catalog:devDeps",
56+
"aphrodite": "catalog:devDeps",
57+
"jquery": "catalog:devDeps",
5858
"mathquill": "github:Khan/mathquill#v1.0.3",
5959
"perseus-build-settings": "workspace:*",
60-
"prop-types": "catalog:",
61-
"react": "catalog:",
62-
"react-dom": "catalog:",
60+
"prop-types": "catalog:devDeps",
61+
"react": "catalog:devDeps",
62+
"react-dom": "catalog:devDeps",
6363
"react-transition-group": "^4.4.1"
6464
},
6565
"peerDependencies": {
66-
"@khanacademy/mathjax-renderer": "catalog:",
67-
"@khanacademy/wonder-blocks-clickable": "catalog:",
68-
"@khanacademy/wonder-blocks-core": "catalog:",
69-
"@khanacademy/wonder-blocks-popover": "catalog:",
70-
"@khanacademy/wonder-blocks-timing": "catalog:",
71-
"@khanacademy/wonder-blocks-tokens": "catalog:",
72-
"@khanacademy/wonder-stuff-core": "catalog:",
73-
"@phosphor-icons/core": "catalog:",
74-
"aphrodite": "catalog:",
75-
"jquery": "catalog:",
76-
"prop-types": "catalog:",
77-
"react": "catalog:",
78-
"react-dom": "catalog:",
66+
"@khanacademy/mathjax-renderer": "catalog:peerDeps",
67+
"@khanacademy/wonder-blocks-clickable": "catalog:peerDeps",
68+
"@khanacademy/wonder-blocks-core": "catalog:peerDeps",
69+
"@khanacademy/wonder-blocks-popover": "catalog:peerDeps",
70+
"@khanacademy/wonder-blocks-timing": "catalog:peerDeps",
71+
"@khanacademy/wonder-blocks-tokens": "catalog:peerDeps",
72+
"@khanacademy/wonder-stuff-core": "catalog:peerDeps",
73+
"@phosphor-icons/core": "catalog:peerDeps",
74+
"aphrodite": "catalog:peerDeps",
75+
"jquery": "catalog:peerDeps",
76+
"prop-types": "catalog:peerDeps",
77+
"react": "catalog:peerDeps",
78+
"react-dom": "catalog:peerDeps",
7979
"react-transition-group": "^4.4.1"
8080
},
8181
"keywords": []

packages/perseus-core/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@
2727
"dependencies": {
2828
"@khanacademy/kas": "workspace:*",
2929
"@khanacademy/perseus-utils": "workspace:*",
30-
"tiny-invariant": "catalog:"
30+
"tiny-invariant": "catalog:prodDeps"
3131
},
3232
"devDependencies": {
33-
"@khanacademy/wonder-stuff-core": "catalog:",
33+
"@khanacademy/wonder-stuff-core": "catalog:devDeps",
3434
"perseus-build-settings": "workspace:*",
35-
"underscore": "catalog:"
35+
"underscore": "catalog:devDeps"
3636
},
3737
"peerDependencies": {
38-
"@khanacademy/wonder-stuff-core": "catalog:",
39-
"underscore": "catalog:"
38+
"@khanacademy/wonder-stuff-core": "catalog:peerDeps",
39+
"underscore": "catalog:peerDeps"
4040
},
4141
"keywords": []
4242
}

packages/perseus-editor/package.json

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -46,67 +46,67 @@
4646
"@khanacademy/pure-markdown": "workspace:*",
4747
"katex": "0.11.1",
4848
"mafs": "^0.19.0",
49-
"tiny-invariant": "catalog:"
49+
"tiny-invariant": "catalog:prodDeps"
5050
},
5151
"devDependencies": {
52-
"@khanacademy/mathjax-renderer": "catalog:",
53-
"@khanacademy/wonder-blocks-accordion": "catalog:",
54-
"@khanacademy/wonder-blocks-banner": "catalog:",
55-
"@khanacademy/wonder-blocks-button": "catalog:",
56-
"@khanacademy/wonder-blocks-clickable": "catalog:",
57-
"@khanacademy/wonder-blocks-core": "catalog:",
58-
"@khanacademy/wonder-blocks-dropdown": "catalog:",
59-
"@khanacademy/wonder-blocks-form": "catalog:",
60-
"@khanacademy/wonder-blocks-icon": "catalog:",
61-
"@khanacademy/wonder-blocks-icon-button": "catalog:",
62-
"@khanacademy/wonder-blocks-labeled-field": "catalog:",
63-
"@khanacademy/wonder-blocks-layout": "catalog:",
64-
"@khanacademy/wonder-blocks-pill": "catalog:",
65-
"@khanacademy/wonder-blocks-switch": "catalog:",
66-
"@khanacademy/wonder-blocks-timing": "catalog:",
67-
"@khanacademy/wonder-blocks-tokens": "catalog:",
68-
"@khanacademy/wonder-blocks-tooltip": "catalog:",
69-
"@khanacademy/wonder-blocks-typography": "catalog:",
70-
"@khanacademy/wonder-stuff-core": "catalog:",
71-
"@phosphor-icons/core": "catalog:",
72-
"aphrodite": "catalog:",
73-
"classnames": "catalog:",
74-
"jquery": "catalog:",
52+
"@khanacademy/mathjax-renderer": "catalog:devDeps",
53+
"@khanacademy/wonder-blocks-accordion": "catalog:devDeps",
54+
"@khanacademy/wonder-blocks-banner": "catalog:devDeps",
55+
"@khanacademy/wonder-blocks-button": "catalog:devDeps",
56+
"@khanacademy/wonder-blocks-clickable": "catalog:devDeps",
57+
"@khanacademy/wonder-blocks-core": "catalog:devDeps",
58+
"@khanacademy/wonder-blocks-dropdown": "catalog:devDeps",
59+
"@khanacademy/wonder-blocks-form": "catalog:devDeps",
60+
"@khanacademy/wonder-blocks-icon": "catalog:devDeps",
61+
"@khanacademy/wonder-blocks-icon-button": "catalog:devDeps",
62+
"@khanacademy/wonder-blocks-labeled-field": "catalog:devDeps",
63+
"@khanacademy/wonder-blocks-layout": "catalog:devDeps",
64+
"@khanacademy/wonder-blocks-pill": "catalog:devDeps",
65+
"@khanacademy/wonder-blocks-switch": "catalog:devDeps",
66+
"@khanacademy/wonder-blocks-timing": "catalog:devDeps",
67+
"@khanacademy/wonder-blocks-tokens": "catalog:devDeps",
68+
"@khanacademy/wonder-blocks-tooltip": "catalog:devDeps",
69+
"@khanacademy/wonder-blocks-typography": "catalog:devDeps",
70+
"@khanacademy/wonder-stuff-core": "catalog:devDeps",
71+
"@phosphor-icons/core": "catalog:devDeps",
72+
"aphrodite": "catalog:devDeps",
73+
"classnames": "catalog:devDeps",
74+
"jquery": "catalog:devDeps",
7575
"jsdiff": "workspace:*",
7676
"perseus-build-settings": "workspace:*",
77-
"prop-types": "catalog:",
78-
"react": "catalog:",
79-
"react-dom": "catalog:",
80-
"underscore": "catalog:"
77+
"prop-types": "catalog:devDeps",
78+
"react": "catalog:devDeps",
79+
"react-dom": "catalog:devDeps",
80+
"underscore": "catalog:devDeps"
8181
},
8282
"peerDependencies": {
83-
"@khanacademy/mathjax-renderer": "catalog:",
84-
"@khanacademy/wonder-blocks-accordion": "catalog:",
85-
"@khanacademy/wonder-blocks-banner": "catalog:",
86-
"@khanacademy/wonder-blocks-button": "catalog:",
87-
"@khanacademy/wonder-blocks-clickable": "catalog:",
88-
"@khanacademy/wonder-blocks-core": "catalog:",
89-
"@khanacademy/wonder-blocks-dropdown": "catalog:",
90-
"@khanacademy/wonder-blocks-form": "catalog:",
91-
"@khanacademy/wonder-blocks-icon": "catalog:",
92-
"@khanacademy/wonder-blocks-icon-button": "catalog:",
93-
"@khanacademy/wonder-blocks-labeled-field": "catalog:",
94-
"@khanacademy/wonder-blocks-layout": "catalog:",
95-
"@khanacademy/wonder-blocks-pill": "catalog:",
96-
"@khanacademy/wonder-blocks-switch": "catalog:",
97-
"@khanacademy/wonder-blocks-timing": "catalog:",
98-
"@khanacademy/wonder-blocks-tokens": "catalog:",
99-
"@khanacademy/wonder-blocks-tooltip": "catalog:",
100-
"@khanacademy/wonder-blocks-typography": "catalog:",
101-
"@khanacademy/wonder-stuff-core": "catalog:",
102-
"@phosphor-icons/core": "catalog:",
103-
"aphrodite": "catalog:",
104-
"classnames": "catalog:",
105-
"jquery": "catalog:",
106-
"prop-types": "catalog:",
107-
"react": "catalog:",
108-
"react-dom": "catalog:",
109-
"underscore": "catalog:"
83+
"@khanacademy/mathjax-renderer": "catalog:peerDeps",
84+
"@khanacademy/wonder-blocks-accordion": "catalog:peerDeps",
85+
"@khanacademy/wonder-blocks-banner": "catalog:peerDeps",
86+
"@khanacademy/wonder-blocks-button": "catalog:peerDeps",
87+
"@khanacademy/wonder-blocks-clickable": "catalog:peerDeps",
88+
"@khanacademy/wonder-blocks-core": "catalog:peerDeps",
89+
"@khanacademy/wonder-blocks-dropdown": "catalog:peerDeps",
90+
"@khanacademy/wonder-blocks-form": "catalog:peerDeps",
91+
"@khanacademy/wonder-blocks-icon": "catalog:peerDeps",
92+
"@khanacademy/wonder-blocks-icon-button": "catalog:peerDeps",
93+
"@khanacademy/wonder-blocks-labeled-field": "catalog:peerDeps",
94+
"@khanacademy/wonder-blocks-layout": "catalog:peerDeps",
95+
"@khanacademy/wonder-blocks-pill": "catalog:peerDeps",
96+
"@khanacademy/wonder-blocks-switch": "catalog:peerDeps",
97+
"@khanacademy/wonder-blocks-timing": "catalog:peerDeps",
98+
"@khanacademy/wonder-blocks-tokens": "catalog:peerDeps",
99+
"@khanacademy/wonder-blocks-tooltip": "catalog:peerDeps",
100+
"@khanacademy/wonder-blocks-typography": "catalog:peerDeps",
101+
"@khanacademy/wonder-stuff-core": "catalog:peerDeps",
102+
"@phosphor-icons/core": "catalog:peerDeps",
103+
"aphrodite": "catalog:peerDeps",
104+
"classnames": "catalog:peerDeps",
105+
"jquery": "catalog:peerDeps",
106+
"prop-types": "catalog:peerDeps",
107+
"react": "catalog:peerDeps",
108+
"react-dom": "catalog:peerDeps",
109+
"underscore": "catalog:peerDeps"
110110
},
111111
"keywords": []
112112
}

0 commit comments

Comments
 (0)