diff --git a/src/lib/ingest/loaders/libraries.ts b/src/lib/ingest/loaders/libraries.ts index 09bd906..0f50b5a 100644 --- a/src/lib/ingest/loaders/libraries.ts +++ b/src/lib/ingest/loaders/libraries.ts @@ -22,9 +22,10 @@ export class LibrariesLoader implements ContentLoader { name = 'LibrariesLoader'; private libraries: LibraryData[] = [ - // Core React & React Native (9 repositories) + // Core React & React Native (10 repositories) { repo: 'facebook/react', name: 'React', category: 'Core React', tier: 'Tier 1' }, { repo: 'facebook/react-native', name: 'React Native', category: 'Core React', tier: 'Tier 1' }, + { repo: 'facebook/react-strict-dom', name: 'React Strict DOM', category: 'Core React', tier: 'Tier 2' }, { repo: 'facebook/hermes', name: 'Hermes', category: 'Core React', tier: 'Tier 1' }, { repo: 'reactjs/react.dev', name: 'React Documentation', category: 'Core React', tier: 'Tier 1' }, { repo: 'reactjs/rfcs', name: 'React RFCs', category: 'Core React', tier: 'Tier 1' }, diff --git a/src/lib/library-icons.tsx b/src/lib/library-icons.tsx index 3ddc657..82d5fec 100644 --- a/src/lib/library-icons.tsx +++ b/src/lib/library-icons.tsx @@ -56,6 +56,7 @@ export const libraryIcons: Record = { // Core React react: SiReact, "react-native": SiReact, + "react-strict-dom": SiReact, jest: SiJest, relay: SiGraphql, hermes: SiReact, // Hermes is from Meta/Facebook @@ -142,6 +143,7 @@ export const libraryIcons: Record = { export const libraryDisplayNames: Record = { react: "React", "react-native": "React Native", + "react-strict-dom": "React Strict DOM", jest: "Jest", relay: "Relay", hermes: "Hermes", diff --git a/src/lib/maintainer-tiers.test.ts b/src/lib/maintainer-tiers.test.ts index f5b6dc0..9f940e2 100644 --- a/src/lib/maintainer-tiers.test.ts +++ b/src/lib/maintainer-tiers.test.ts @@ -93,4 +93,30 @@ describe('ecosystemLibraries', () => { }) ); }); + + it('includes React Strict DOM in related library datasets', async () => { + expect(findLibrary('facebook', 'react-strict-dom')).toMatchObject({ + category: 'core', + tier: 2, + }); + expect(NPMCollector.getPackageName('facebook', 'react-strict-dom')).toBe('react-strict-dom'); + expect(libraryDisplayNames['react-strict-dom']).toBe('React Strict DOM'); + + expect(PROBE_REPOS).toContainEqual( + expect.objectContaining({ + owner: 'facebook', + repo: 'react-strict-dom', + category: 'ui-library', + }) + ); + + const loader = new LibrariesLoader(); + const records = await loader.load(); + expect(records).toContainEqual( + expect.objectContaining({ + id: 'library-facebook-react-strict-dom', + title: 'React Strict DOM', + }) + ); + }); }); diff --git a/src/lib/maintainer-tiers.ts b/src/lib/maintainer-tiers.ts index 83c1ebe..373c214 100644 --- a/src/lib/maintainer-tiers.ts +++ b/src/lib/maintainer-tiers.ts @@ -48,11 +48,12 @@ export type ContributionStats = { }; export const ecosystemLibraries: RepoTarget[] = [ - // Core React (9 repos) + // Core React (10 repos) { owner: "facebook", name: "react", category: "core", tier: 1 }, // Includes React Compiler (in /compiler subdirectory) { owner: "facebook", name: "relay", category: "data", tier: 1 }, { owner: "facebook", name: "jest", category: "testing", tier: 1 }, { owner: "facebook", name: "react-native", category: "core", tier: 1 }, + { owner: "facebook", name: "react-strict-dom", category: "core", tier: 2 }, { owner: "facebook", name: "hermes", category: "core", tier: 1, hasNpmPackage: false }, // JavaScript engine (C++ binary, not on NPM) { owner: "reactjs", name: "react.dev", category: "core", tier: 1, hasNpmPackage: false }, // Documentation website (not a library) { owner: "reactjs", name: "rfcs", category: "core", tier: 1, hasNpmPackage: false }, // RFC repository (not a library) diff --git a/src/lib/ris/collectors/npm-collector.ts b/src/lib/ris/collectors/npm-collector.ts index d22ab1d..32fc797 100644 --- a/src/lib/ris/collectors/npm-collector.ts +++ b/src/lib/ris/collectors/npm-collector.ts @@ -172,6 +172,7 @@ export class NPMCollector { const specialCases: Record = { 'facebook/react': 'react', 'facebook/react-native': 'react-native', + 'facebook/react-strict-dom': 'react-strict-dom', 'facebook/jest': 'jest', 'facebook/relay': 'react-relay', 'facebook/hermes': null, // JavaScript engine (C++ binary, not on NPM) diff --git a/src/lib/ris/data/probe-repos.ts b/src/lib/ris/data/probe-repos.ts index 53334d3..295311d 100644 --- a/src/lib/ris/data/probe-repos.ts +++ b/src/lib/ris/data/probe-repos.ts @@ -28,6 +28,7 @@ export const PROBE_REPOS: ProbeRepo[] = [ { owner: 'gatsbyjs', repo: 'gatsby', stars: 55000, category: 'framework', description: 'Gatsby framework' }, { owner: 'facebook', repo: 'docusaurus', stars: 59000, category: 'framework', description: 'Docusaurus documentation framework' }, { owner: 'expo', repo: 'expo', stars: 32000, category: 'framework', description: 'Expo React Native' }, + { owner: 'facebook', repo: 'react-strict-dom', stars: 3506, category: 'ui-library', description: 'React Strict DOM cross-platform component system' }, // UI Component Libraries { owner: 'mui', repo: 'material-ui', stars: 93000, category: 'ui-library', description: 'Material UI' },