Skip to content

Commit bb7ba79

Browse files
committed
Fetch package versions during build
1 parent 19d103b commit bb7ba79

File tree

3 files changed

+56
-72
lines changed

3 files changed

+56
-72
lines changed

docusaurus.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ export default {
132132
},
133133
},
134134
plugins: [
135+
'./src/plugins/react-navigation-versions.mjs',
135136
[
136137
'@docusaurus/plugin-client-redirects',
137138
{

src/components/Pre.js

Lines changed: 3 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,8 @@
11
import { useColorMode } from '@docusaurus/theme-common';
2+
import { usePluginData } from '@docusaurus/useGlobalData';
23
import MDXPre from '@theme-original/MDXComponents/Pre';
34
import React from 'react';
45

5-
const peers = {
6-
'react-native-safe-area-context': '*',
7-
'react-native-screens': '*',
8-
};
9-
10-
const versions = {
11-
7: {
12-
'@react-navigation/bottom-tabs': [
13-
'7.0.0-rc.20',
14-
{
15-
...peers,
16-
'@react-navigation/native': '*',
17-
},
18-
],
19-
'@react-navigation/core': '7.0.0-rc.10',
20-
'@react-navigation/native': '7.0.0-rc.13',
21-
'@react-navigation/drawer': [
22-
'7.0.0-rc.18',
23-
{
24-
...peers,
25-
'@react-navigation/native': '*',
26-
'react-native-gesture-handler': '*',
27-
'react-native-reanimated': '*',
28-
},
29-
],
30-
'@react-navigation/elements': [
31-
'2.0.0-rc.14',
32-
{
33-
...peers,
34-
'@react-navigation/native': '*',
35-
},
36-
],
37-
'@react-navigation/material-top-tabs': [
38-
'7.0.0-rc.14',
39-
{
40-
...peers,
41-
'@react-navigation/native': '*',
42-
'react-native-pager-view': '*',
43-
},
44-
],
45-
'@react-navigation/native-stack': [
46-
'7.0.0-rc.15',
47-
{
48-
...peers,
49-
'@react-navigation/native': '*',
50-
},
51-
],
52-
'@react-navigation/routers': '7.0.0-rc.6',
53-
'@react-navigation/stack': [
54-
'7.0.0-rc.15',
55-
{
56-
...peers,
57-
'@react-navigation/native': '*',
58-
'react-native-gesture-handler': '*',
59-
},
60-
],
61-
'react-native-drawer-layout': [
62-
'4.0.0-rc.7',
63-
{
64-
'react-native-gesture-handler': '*',
65-
'react-native-reanimated': '*',
66-
},
67-
],
68-
'react-native-tab-view': [
69-
'4.0.0-rc.7',
70-
{
71-
'react-native-pager-view': '*',
72-
},
73-
],
74-
},
75-
};
76-
776
export default function Pre({
787
children,
798
'data-name': name,
@@ -84,6 +13,8 @@ export default function Pre({
8413
...rest
8514
}) {
8615
const { colorMode } = useColorMode();
16+
const { versions } = usePluginData('react-navigation-versions');
17+
8718
const child = React.Children.only(children);
8819

8920
// Handle diffs with language
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
export default function friendsPlugin(context, options) {
2+
return {
3+
name: 'react-navigation-versions',
4+
async contentLoaded({ content, actions }) {
5+
const queries = {
6+
7: {
7+
tag: 'next',
8+
packages: [
9+
'@react-navigation/bottom-tabs',
10+
'@react-navigation/core',
11+
'@react-navigation/drawer',
12+
'@react-navigation/elements',
13+
'@react-navigation/material-top-tabs',
14+
'@react-navigation/native-stack',
15+
'@react-navigation/native',
16+
'@react-navigation/routers',
17+
'@react-navigation/stack',
18+
'react-native-drawer-layout',
19+
'react-native-tab-view',
20+
],
21+
},
22+
};
23+
24+
const versions = Object.fromEntries(
25+
await Promise.all(
26+
Object.entries(queries).map(async ([version, { tag, packages }]) => {
27+
const items = await Promise.all(
28+
packages.map(async (name) => {
29+
const pkg = await fetch(
30+
`https://registry.npmjs.org/${name}/${tag}`
31+
).then((res) => res.json());
32+
33+
const peers = Object.fromEntries(
34+
Object.entries(pkg.peerDependencies || {}).map(([name]) => [
35+
name,
36+
'*',
37+
])
38+
);
39+
40+
return [name, [pkg.version, peers]];
41+
})
42+
);
43+
44+
return [version, Object.fromEntries(items)];
45+
})
46+
)
47+
);
48+
49+
actions.setGlobalData({ versions });
50+
},
51+
};
52+
}

0 commit comments

Comments
 (0)