Skip to content

Commit 94ffc13

Browse files
authored
refactor to use tree shaking (#136)
1 parent b418ace commit 94ffc13

File tree

11 files changed

+39
-47
lines changed

11 files changed

+39
-47
lines changed

docs/client-packages-react.md

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@ This guide covers React-specific integration. For component properties and event
44

55
## Installation
66

7-
Ensure the GitHub package registry is configured (see [Registry Setup](./client-packages.md#registry-setup)), then install the React package:
7+
Ensure the GitHub package registry is configured (see [Registry Setup](./client-packages.md#registry-setup)), then install both packages:
88

99
```bash
10-
pnpm add @edufeed-org/oer-finder-plugin-react
10+
pnpm add @edufeed-org/oer-finder-plugin @edufeed-org/oer-finder-plugin-react
1111
```
1212

13-
The base plugin (`@edufeed-org/oer-finder-plugin`) is installed automatically as a dependency — you do not need to install it separately. All necessary imports (components, types, and adapter registration) are available directly from this React package.
14-
15-
> **Important:** Do not install `@edufeed-org/oer-finder-plugin` as a direct dependency alongside the React package. Doing so can result in two separate copies on disk, each with its own adapter registry. Adapters registered via one copy would be invisible to components from the other, causing searches to silently return zero results. Always import from `@edufeed-org/oer-finder-plugin-react` instead.
13+
The base plugin is a peer dependency of the React package. Both packages must be installed — the React package provides the React component wrappers, while the base plugin provides the Web Components, adapter registry, and adapter entry points.
1614

1715
## Operating Modes
1816

@@ -46,18 +44,19 @@ When `apiUrl` is **omitted**, adapters run directly in the browser. No backend s
4644
- You are prototyping or building a static site
4745
- You want full client-side control over adapter behavior
4846

49-
You **must register adapters** before the component renders. Call the registration function once at your app's entry point:
47+
You **must register adapters** before the component renders. Call the registration function once at your app's entry point. Import adapter registration functions directly from `@edufeed-org/oer-finder-plugin`:
5048

5149
```typescript
5250
// Register all built-in adapters
53-
import { registerAllBuiltInAdapters } from '@edufeed-org/oer-finder-plugin-react/adapters';
51+
import { registerAllBuiltInAdapters } from '@edufeed-org/oer-finder-plugin/adapters';
5452
registerAllBuiltInAdapters();
5553
```
5654

5755
Or register only the adapters you need:
5856

5957
```typescript
60-
import { registerOpenverseAdapter, registerArasaacAdapter } from '@edufeed-org/oer-finder-plugin-react/adapters';
58+
import { registerOpenverseAdapter } from '@edufeed-org/oer-finder-plugin/adapter/openverse';
59+
import { registerArasaacAdapter } from '@edufeed-org/oer-finder-plugin/adapter/arasaac';
6160
registerOpenverseAdapter();
6261
registerArasaacAdapter();
6362
```
@@ -186,7 +185,8 @@ The component code is identical to the [server-proxy example above](#server-prox
186185
**1. Register adapters once at your app entry point (e.g., `main.tsx`):**
187186

188187
```tsx
189-
import { registerOpenverseAdapter, registerArasaacAdapter } from '@edufeed-org/oer-finder-plugin-react/adapters';
188+
import { registerOpenverseAdapter } from '@edufeed-org/oer-finder-plugin/adapter/openverse';
189+
import { registerArasaacAdapter } from '@edufeed-org/oer-finder-plugin/adapter/arasaac';
190190
registerOpenverseAdapter();
191191
registerArasaacAdapter();
192192
```
@@ -303,22 +303,23 @@ The following built-in adapters are available for direct client mode:
303303
| `rpi-virtuell` | RPI-Virtuell Materialpool (GraphQL) | German educational resources |
304304
| `wikimedia` | Wikimedia Commons API | Images |
305305

306-
Register all at once or selectively — all functions are available from a single import path:
306+
Register all at once or selectively — import adapter registration functions from `@edufeed-org/oer-finder-plugin`:
307307

308308
```typescript
309309
// All adapters
310-
import { registerAllBuiltInAdapters } from '@edufeed-org/oer-finder-plugin-react/adapters';
310+
import { registerAllBuiltInAdapters } from '@edufeed-org/oer-finder-plugin/adapters';
311311
registerAllBuiltInAdapters();
312312

313-
// Or selectively
314-
import { registerOpenverseAdapter, registerWikimediaAdapter } from '@edufeed-org/oer-finder-plugin-react/adapters';
313+
// Or selectively (better for tree-shaking)
314+
import { registerOpenverseAdapter } from '@edufeed-org/oer-finder-plugin/adapter/openverse';
315+
import { registerWikimediaAdapter } from '@edufeed-org/oer-finder-plugin/adapter/wikimedia';
315316
registerOpenverseAdapter();
316317
registerWikimediaAdapter();
317318
```
318319

319320
## Key Types
320321

321-
All types are importable from `@edufeed-org/oer-finder-plugin-react`:
322+
React components and UI-related types are importable from `@edufeed-org/oer-finder-plugin-react`:
322323

323324
```typescript
324325
import {
@@ -344,19 +345,22 @@ import {
344345
type SearchParams, // Search parameter structure
345346
type SourceOption, // Source option type for UI display
346347

347-
// Adapter types
348-
type AdapterFactory, // Factory function type for custom adapters
349-
350348
// Underlying web component types (for advanced use)
351349
type OerSearchElement, // <oer-search> element class
352350
type OerListElement, // <oer-list> element class
353351
type OerCardElement, // <oer-card> element class
354352
type LoadMoreElement, // <oer-load-more> element class
353+
} from '@edufeed-org/oer-finder-plugin-react';
354+
```
355355

356-
// Adapter registry API
356+
Adapter registry API and adapter types are imported from `@edufeed-org/oer-finder-plugin`:
357+
358+
```typescript
359+
import {
357360
registerAdapter, // Register a custom adapter factory
358361
getAdapterFactory, // Retrieve a registered adapter factory by ID
359-
} from '@edufeed-org/oer-finder-plugin-react';
362+
type AdapterFactory, // Factory function type for custom adapters
363+
} from '@edufeed-org/oer-finder-plugin';
360364
```
361365

362366
### State Typing

docs/client-packages.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -585,10 +585,10 @@ The `@edufeed-org/oer-finder-plugin-react` package provides React wrapper compon
585585
Ensure [Registry Setup](#registry-setup) is configured, then:
586586
587587
```bash
588-
pnpm add @edufeed-org/oer-finder-plugin-react
588+
pnpm add @edufeed-org/oer-finder-plugin @edufeed-org/oer-finder-plugin-react
589589
```
590590
591-
This package depends on `@edufeed-org/oer-finder-plugin` internally — you do not need to install the base plugin separately. All key types (`OerItem`, `OerMetadata`, `OerListResponse`, `SourceConfig`, `LoadMoreMeta`, `SupportedLanguage`) are re-exported from this package.
591+
Both packages must be installed — the base plugin is a peer dependency of the React package. Import React components from the React package, and adapter registration functions directly from the base plugin.
592592
593593
For usage details, see the [React guide](./client-packages-react.md).
594594

packages/oer-finder-plugin-react-example/AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pnpm --filter @edufeed-org/oer-finder-plugin-react-example type-check # tsc -
2828
- **Dev server:** Vite with `@vitejs/plugin-react`
2929
- **Test:** No tests
3030
- **TypeScript:** ES2020, ESNext modules, `jsx: react-jsx`, DOM lib
31-
- **Dependencies:** `oer-finder-plugin-react` (workspace), `react`, `react-dom` (v19)
31+
- **Dependencies:** `oer-finder-plugin` (workspace), `oer-finder-plugin-react` (workspace), `react`, `react-dom` (v19)
3232

3333
## Conventions
3434

packages/oer-finder-plugin-react-example/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"format": "echo 'Format not configured yet'"
1919
},
2020
"dependencies": {
21+
"@edufeed-org/oer-finder-plugin": "workspace:*",
2122
"@edufeed-org/oer-finder-plugin-react": "workspace:*",
2223
"react": "^19.0.0",
2324
"react-dom": "^19.0.0"

packages/oer-finder-plugin-react-example/src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { useState, useCallback } from 'react';
1010
import './styles.css';
1111

1212
// Register all built-in adapters (required for direct-client mode)
13-
import { registerAllBuiltInAdapters } from '@edufeed-org/oer-finder-plugin-react/adapters';
13+
import { registerAllBuiltInAdapters } from '@edufeed-org/oer-finder-plugin/adapters';
1414
registerAllBuiltInAdapters();
1515

1616
// Import React components from the plugin-react package

packages/oer-finder-plugin-react/AGENTS.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ React wrapper components for the OER Finder Plugin Web Components.
66

77
- Uses `@lit/react`'s `createComponent()` to wrap all 4 web components as React components: `OerSearch`, `OerList`, `OerCard`, `OerLoadMore`
88
- Maps custom event names to React prop callbacks (`onSearchResults`, `onCardClick`, `onLoadMore`, etc.)
9-
- Re-exports all relevant types and the adapter registry API (`registerAdapter`, `getAdapterFactory`) from `oer-finder-plugin`
10-
- Provides a separate `./adapters` entry point that re-exports `registerAllBuiltInAdapters` for tree-shakeable adapter registration
11-
- Peer dependency on React 18 or 19
9+
- Re-exports relevant UI types from `oer-finder-plugin`
10+
- Peer dependency on `@edufeed-org/oer-finder-plugin` and React 18 or 19
11+
- Adapter registration and adapter types are imported directly from `@edufeed-org/oer-finder-plugin` by consumers
1212

1313
## Key Files
1414

15-
- `src/index.ts` — React component wrappers (via `@lit/react`), type re-exports, and adapter registry API
16-
- `src/adapters.ts` — Re-exports `registerAllBuiltInAdapters` from the plugin's `adapters` entry point
15+
- `src/index.ts` — React component wrappers (via `@lit/react`) and type re-exports
1716

1817
## Build
1918

@@ -29,8 +28,8 @@ pnpm --filter @edufeed-org/oer-finder-plugin-react format # Prettier
2928
- **Build:** Vite (ESM-only output) + tsc for declarations. Always rebuilds `oer-finder-plugin` first. CJS was dropped to avoid dual-registry issues — `oer-finder-plugin` is ESM-only, so a CJS build would create separate module instances
3029
- **Test:** No tests
3130
- **TypeScript:** ES2020, ESNext modules, bundler resolution, `jsx: react-jsx`, DOM lib
32-
- **Dependencies:** `oer-finder-plugin` (workspace). `@lit/react` is a dev dependency (bundled by Vite)
33-
- **Peer deps:** `react ^18.0.0 || ^19.0.0`
31+
- **Dependencies:** `@lit/react` is a dev dependency (bundled by Vite)
32+
- **Peer deps:** `@edufeed-org/oer-finder-plugin` (workspace), `react ^18.0.0 || ^19.0.0`
3433

3534
## Conventions
3635

packages/oer-finder-plugin-react/package.json

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@edufeed-org/oer-finder-plugin-react",
3-
"version": "0.2.0",
3+
"version": "0.3.0",
44
"description": "React components for OER Finder Plugin",
55
"author": "B310 Digital GmbH",
66
"license": "MIT",
@@ -16,10 +16,6 @@
1616
".": {
1717
"types": "./dist/index.d.ts",
1818
"import": "./dist/index.js"
19-
},
20-
"./adapters": {
21-
"types": "./dist/adapters.d.ts",
22-
"import": "./dist/adapters.js"
2319
}
2420
},
2521
"files": [
@@ -32,10 +28,8 @@
3228
"lint": "eslint \"src/**/*.ts\" --fix",
3329
"format": "prettier --write \"src/**/*.ts\""
3430
},
35-
"dependencies": {
36-
"@edufeed-org/oer-finder-plugin": "workspace:*"
37-
},
3831
"peerDependencies": {
32+
"@edufeed-org/oer-finder-plugin": "workspace:*",
3933
"react": "^18.0.0 || ^19.0.0"
4034
},
4135
"devDependencies": {

packages/oer-finder-plugin-react/src/adapters.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/oer-finder-plugin-react/src/index.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,6 @@ export type {
4545
SupportedLanguage,
4646
SourceConfig,
4747
LoadMoreMeta,
48-
AdapterFactory,
49-
} from '@edufeed-org/oer-finder-plugin';
50-
51-
// Re-export adapter registry API for React consumers
52-
export {
53-
registerAdapter,
54-
getAdapterFactory,
5548
} from '@edufeed-org/oer-finder-plugin';
5649

5750
/**

packages/oer-finder-plugin-react/vite.config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ export default defineConfig({
88
lib: {
99
entry: {
1010
index: resolve(__dirname, 'src/index.ts'),
11-
adapters: resolve(__dirname, 'src/adapters.ts'),
1211
},
1312
formats: ['es'],
1413
fileName: (_format, entryName) => `${entryName}.js`,

0 commit comments

Comments
 (0)