Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
92b3018
Let Shakapacker choose SWC parsers
ihabadham Jun 4, 2026
d1fef75
Wire dummy client into TypeScript checks
ihabadham Jun 4, 2026
00a0b0f
Type selected dummy render example
ihabadham Jun 4, 2026
2ecddad
Type client rendered HTML example
ihabadham Jun 4, 2026
0396ff4
Type manual renderer entrypoint
ihabadham Jun 4, 2026
8aa8b61
Type manual render component
ihabadham Jun 4, 2026
ab91379
Type router dummy flow
ihabadham Jun 4, 2026
edc4610
Update router dummy docs links
ihabadham Jun 4, 2026
450de8f
Type HelloWorld core dummy flow
ihabadham Jun 4, 2026
898d321
Update HelloWorld dummy references
ihabadham Jun 4, 2026
a03ad5c
Type HelloWorld hooks dummy flow
ihabadham Jun 4, 2026
4cf89ba
Type HelloWorld props dummy flow
ihabadham Jun 4, 2026
993a34a
Type pure component dummy flow
ihabadham Jun 4, 2026
776098a
Type cache-disabled dummy flow
ihabadham Jun 4, 2026
070b7a3
Type asset example dummy flows
ihabadham Jun 4, 2026
9eed7ed
Update image example docs link
ihabadham Jun 4, 2026
f7e999e
Type Turbo Stream dummy flow
ihabadham Jun 4, 2026
382ee47
Accept arbitrary render props
ihabadham Jun 4, 2026
fcd9250
Type XHR rehydration dummy flow
ihabadham Jun 4, 2026
bcb40aa
Update XHR rehydration dummy references
ihabadham Jun 4, 2026
9a38bde
Type logging error dummy flow
ihabadham Jun 4, 2026
8b8dbb3
Update logging error dummy references
ihabadham Jun 4, 2026
27dbff6
Type React Helmet dummy flow
ihabadham Jun 4, 2026
78d069e
Type plain JS render helper
ihabadham Jun 4, 2026
9179ccd
Type invalid render-function fixture
ihabadham Jun 4, 2026
ff0875f
Type Redux state primitives
ihabadham Jun 4, 2026
05f6d02
Type Redux dummy flow
ihabadham Jun 4, 2026
dd1c018
Update Redux dummy references
ihabadham Jun 4, 2026
8d51bfb
Type dummy strict mode helpers
ihabadham Jun 4, 2026
5191ecf
Type ReScript dummy wrappers
ihabadham Jun 4, 2026
914cbea
Type dummy client bundle
ihabadham Jun 4, 2026
3214310
Type registered non-React modules
ihabadham Jun 4, 2026
590b100
Resolve server bundle sources by extension
ihabadham Jun 4, 2026
ac5b0a3
Type dummy server bundle
ihabadham Jun 4, 2026
ca7c1d0
Update dummy source references
ihabadham Jun 4, 2026
9719922
Use stable dummy source links
ihabadham Jun 4, 2026
625e306
Document dummy TypeScript migration
ihabadham Jun 4, 2026
a31c5a5
Teach Knip about dummy TypeScript packs
ihabadham Jun 4, 2026
0939331
Address dummy TypeScript review feedback
ihabadham Jun 4, 2026
4d69a19
Address dummy TypeScript review blockers
justin808 Jun 5, 2026
744e1fa
docs: use relative dummy server bundle link
justin808 Jun 5, 2026
4df938e
Merge remote-tracking branch 'origin/main' into codex/pr-3606
justin808 Jun 5, 2026
a969fe9
Fix dummy TypeScript review issues
justin808 Jun 5, 2026
4ec40ee
Merge remote-tracking branch 'origin/main' into codex/pr-3606
justin808 Jun 5, 2026
4258650
fix: address dummy TypeScript review nits
justin808 Jun 5, 2026
b18f280
fix: preserve generated server bundle output path
justin808 Jun 5, 2026
928df76
Merge remote-tracking branch 'origin/main' into codex/pr-3606
justin808 Jun 5, 2026
a405f34
fix(types): address dummy app review comments
justin808 Jun 5, 2026
d533427
docs(types): clarify dummy TypeScript migration details
justin808 Jun 5, 2026
4f0cd61
fix(types): address dummy migration review nits
justin808 Jun 5, 2026
64c5daf
fix(types): address dummy app review follow-ups
justin808 Jun 5, 2026
bcd7f12
fix(types): address dummy app review cleanup
justin808 Jun 5, 2026
0525f65
Suppress generated imports for mjs cjs entrypoints
justin808 Jun 5, 2026
bb7a1c2
Address dummy TypeScript review threads
justin808 Jun 5, 2026
55261b8
Address dummy TypeScript generator review follow-ups
justin808 Jun 5, 2026
431b612
Address generator review nits
justin808 Jun 5, 2026
86567c4
fix(types): preserve object component registrations
justin808 Jun 5, 2026
80f04e8
fix(dummy): stabilize TypeScript pack generation
justin808 Jun 5, 2026
d61e13c
fix(client): allow React object component registrations
justin808 Jun 5, 2026
8f962aa
Merge remote-tracking branch 'origin/main' into codex/pr-3606
justin808 Jun 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ After a release, run `/update-changelog` in Claude Code to analyze commits, writ

- **[Pro]** **RSC CSS no longer flashes unstyled (FOUC) behind `'use client'` boundaries**: CSS imported by a `'use client'` boundary in a true React Server Component tree is now preloaded instead of loading only as a side effect of the JS chunk evaluating. The published `react-on-rails-rsc@19.0.5-rc.6` package now records each client reference's `.css` siblings in the RSC client manifest, and the Pro RSC renderer emits `<link rel="stylesheet" precedence="ror-rsc">` for them inside the RSC payload so React 19 hoists the stylesheets into `<head>` and blocks paint until they load — on both server render and client-side navigation. Fixes [Issue 3211](https://github.com/shakacode/react_on_rails/issues/3211). [PR 3587](https://github.com/shakacode/react_on_rails/pull/3587) by [justin808](https://github.com/justin808).
- **[Pro]** **`react-on-rails-rsc` prerelease (RC) versions no longer mark the dependency tree invalid**: The `react-on-rails-pro` peer dependency on the optional `react-on-rails-rsc` is now `*`, so installing any coordinated `react-on-rails-rsc` build — including prereleases such as `react-on-rails-rsc@19.0.5-rc.6` — no longer makes `npm ls react-on-rails-rsc` fail with `ELSPROBLEMS`. npm's strict semver only lets a prerelease satisfy a comparator that shares its exact `major.minor.patch` tuple, so no bounded range — including the `>= 19.0.2 < 20.0.0` range introduced in [PR 3580](https://github.com/shakacode/react_on_rails/pull/3580) — can admit prereleases across the React 19 line (e.g. `19.0.5-rc.6`, `19.2.x-rc.*`) without enumerating every patch tuple. `react-on-rails-rsc` stays an optional peer that Pro resolves only on the React Server Components path; the supported pairing is React on Rails RSC on the React 19 line (currently `>= 19.0.2`), and a mismatched build fails loudly at bundle time through Pro's `react-on-rails-rsc/*` imports rather than relying on the peer-range warning. Fixes [Issue 3609](https://github.com/shakacode/react_on_rails/issues/3609). [PR 3616](https://github.com/shakacode/react_on_rails/pull/3616) by [justin808](https://github.com/justin808).
- **TypeScript source server bundles work with auto-generated packs**: React on Rails now resolves the configured server bundle source entrypoint by extension, so apps can keep `config.server_bundle_js_file = "server-bundle.js"` as the compiled/runtime bundle name while using a TypeScript source entrypoint such as `packs/server-bundle.ts`. Public registration types also now cover plain object modules used by `server_render_js`, matching existing runtime behavior. Resolves [Issue 1583](https://github.com/shakacode/react_on_rails/issues/1583). [PR 3606](https://github.com/shakacode/react_on_rails/pull/3606) by [ihabadham](https://github.com/ihabadham).
- **[Pro]** **Client teardown failures are no longer hidden at `console.info`**: when `ComponentRenderer.unmount()` catches an error from `unmountComponentAtNode` (the React 16/17 legacy unmount path), it now logs at `console.error` instead of `console.info`. A caught error there means the component tree did not unmount cleanly — a teardown failure — and most log collectors and default browser-console filters drop `info`, so the failure was effectively silent. Addresses item 2 of [Issue 3592](https://github.com/shakacode/react_on_rails/issues/3592). [PR 3610](https://github.com/shakacode/react_on_rails/pull/3610) by [justin808](https://github.com/justin808).
- **Renderer functions no longer leak their mount on navigation/unmount**: Renderer functions (the 3-argument `(props, railsContext, domNodeId) => …` registration form) own their own React root, but React on Rails never tracked any cleanup state for them, so every renderer-function mount leaked on Turbo/Turbolinks navigation. Renderer functions may now optionally return a teardown wrapper (`{ teardown: () => void | Promise<void> }`, sync or async); returning nothing keeps the previous behavior, so existing renderers are unaffected. Both the core and Pro client renderers invoke the teardown on page unload and on same-id node replacement, and cleanup failures on same-id replacement are now logged to `console.error` instead of only being visible when tracing is enabled. The renderers differ only in the async race: if a navigation unmounts the mount while an async renderer is still resolving its teardown, Pro still runs the teardown once it resolves, whereas the core renderer is best-effort and may drop a still-pending async teardown while the renderer is awaiting dynamic imports, fetches, or other I/O on a fast navigation; active async renderer failures are logged and then untracked so a later load call can retry. The framework-shipped Pro `wrapServerComponentRenderer` now returns such a teardown wrapper, closing the leak automatically for every `registerServerComponent` user. TypeScript note: the exported `RendererFunction` type covers 3-argument renderers that return nothing or an optional teardown wrapper; `RenderFunction` keeps its existing component/server-result return contract, including legacy 3-argument renderers that returned a component only to satisfy the old type. Fixes [Issue 3209](https://github.com/shakacode/react_on_rails/issues/3209). [PR 3576](https://github.com/shakacode/react_on_rails/pull/3576) by [justin808](https://github.com/justin808).

Expand Down
2 changes: 1 addition & 1 deletion docs/oss/api-reference/view-helpers-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ Why would you want to take over mounting yourself? One use case is code splittin
[React Router](https://reactrouter.com/) is supported via manual integration, including server-side rendering. See:

1. [React on Rails docs for React Router](../building-features/react-router.md)
2. Examples in [spec/dummy/app/views/react_router](https://github.com/shakacode/react_on_rails/tree/main/react_on_rails/spec/dummy/app/views/react_router) and follow to the JavaScript code in the [spec/dummy/client/app/startup/RouterApp.server.jsx](https://github.com/shakacode/react_on_rails/blob/main/react_on_rails/spec/dummy/client/app/startup/RouterApp.server.jsx).
2. Examples in [spec/dummy/app/views/react_router](https://github.com/shakacode/react_on_rails/tree/main/react_on_rails/spec/dummy/app/views/react_router) and follow to the JavaScript code in the [spec/dummy/client/app/startup/RouterApp.server.tsx](../../../react_on_rails/spec/dummy/client/app/startup/RouterApp.server.tsx).
3. [React on Rails Pro loadable-components guide](../building-features/code-splitting.md) for modern code splitting with server-side rendering.

### TanStack Router
Expand Down
2 changes: 1 addition & 1 deletion docs/oss/building-features/images.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const assetLoaderRules = [
];
```

A full example can be found at [react_on_rails/spec/dummy/client/app/startup/ImageExample.jsx](https://github.com/shakacode/react_on_rails/blob/main/react_on_rails/spec/dummy/client/app/startup/ImageExample.jsx)
A full example can be found at [react_on_rails/spec/dummy/client/app/startup/ImageExample.tsx](../../../react_on_rails/spec/dummy/client/app/startup/ImageExample.tsx)

You are free to use images either in image tags or as background images in SCSS files. In current
apps, prefer relative imports from files under `app/javascript`, or define your own webpack alias
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,13 @@ If you already have an existing server bundle entrypoint and have not set `make_

```javascript
// import statement added by react_on_rails:generate_packs rake task
import './../generated/server-bundle-generated.js';
import '../generated/server-bundle-generated.js';
```

We recommend committing this import statement to your version control system.

> Example (dummy app): see the server bundle entrypoint import.
> [Dummy server-bundle.js](https://github.com/shakacode/react_on_rails/blob/main/react_on_rails/spec/dummy/client/app/packs/server-bundle.js)
> [Dummy `server-bundle.ts`](../../../react_on_rails/spec/dummy/client/app/packs/server-bundle.ts)

## Usage

Expand Down Expand Up @@ -509,7 +509,7 @@ _Screenshots show browser dev tools network analysis demonstrating the dramatic

If server rendering is enabled, the component will be registered for usage both in server and client rendering. To have separate definitions for client and server rendering, name the component files `ComponentName.server.jsx` and `ComponentName.client.jsx`. The `ComponentName.server.jsx` file will be used for server rendering and the `ComponentName.client.jsx` file for client rendering. If you don't want the component rendered on the server, you should only have the `ComponentName.client.jsx` file.

> Example (dummy app): paired files such as [`ReduxApp.client.jsx`](https://github.com/shakacode/react_on_rails/blob/main/react_on_rails/spec/dummy/client/app/startup/ReduxApp.client.jsx) and [`ReduxApp.server.jsx`](https://github.com/shakacode/react_on_rails/blob/main/react_on_rails/spec/dummy/client/app/startup/ReduxApp.server.jsx), and [`RouterApp.client.jsx`](https://github.com/shakacode/react_on_rails/blob/main/react_on_rails/spec/dummy/client/app/startup/RouterApp.client.jsx) and [`RouterApp.server.jsx`](https://github.com/shakacode/react_on_rails/blob/main/react_on_rails/spec/dummy/client/app/startup/RouterApp.server.jsx).
> Example (dummy app): paired files such as [`ReduxApp.client.tsx`](../../../react_on_rails/spec/dummy/client/app/startup/ReduxApp.client.tsx) and [`ReduxApp.server.tsx`](../../../react_on_rails/spec/dummy/client/app/startup/ReduxApp.server.tsx), and [`RouterApp.client.tsx`](../../../react_on_rails/spec/dummy/client/app/startup/RouterApp.client.tsx) and [`RouterApp.server.tsx`](../../../react_on_rails/spec/dummy/client/app/startup/RouterApp.server.tsx).

Once generated, all server entrypoints will be imported into a file named `[ReactOnRails.configuration.server_bundle_js_file]-generated.js`, which in turn will be imported into a source file named the same as `ReactOnRails.configuration.server_bundle_js_file`. If your server bundling logic is such that your server bundle source entrypoint is not named the same as your `ReactOnRails.configuration.server_bundle_js_file` and changing it would be difficult, please let us know.

Expand Down Expand Up @@ -607,11 +607,11 @@ registerServerComponent({ Dashboard, Profile });
ReactOnRails.register({ LikeButton, CommentForm });
```

Your existing `packs/server-bundle.js` entry file doesn't need manual changes — the packs generator adds one import line at the top pointing to the aggregated file:
Your existing `packs/server-bundle.js` or `packs/server-bundle.ts` entry file doesn't need manual changes — the packs generator adds one import line at the top pointing to the aggregated file:

```js
// packs/server-bundle.js
import './../generated/server-bundle-generated.js'; // added by react_on_rails:generate_packs
// packs/server-bundle.js or packs/server-bundle.ts
import '../generated/server-bundle-generated.js'; // added by react_on_rails:generate_packs
// ... your own custom server-side code continues here
```

Expand Down
32 changes: 8 additions & 24 deletions docs/oss/migrating/babel-to-swc-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,6 @@ try {
const customConfig = {
options: {
jsc: {
parser: {
syntax: 'ecmascript',
jsx: true,
dynamicImport: true,
},
transform: {
react: {
runtime: 'automatic',
Expand Down Expand Up @@ -140,13 +135,13 @@ If you need stable React Server Components support today:

### Features Migrated Successfully

| Babel Feature | SWC Equivalent | Notes |
| ------------------ | --------------------------------- | --------------------------- |
| JSX Transform | `jsc.transform.react` | Automatic runtime supported |
| React Fast Refresh | `jsc.transform.react.refresh` | Works in development mode |
| Dynamic Imports | `jsc.parser.dynamicImport` | Fully supported |
| Class Properties | Built-in | No config needed |
| TypeScript | `jsc.parser.syntax: 'typescript'` | Native support |
| Babel Feature | SWC Equivalent | Notes |
| ------------------ | ------------------------------ | --------------------------- |
| JSX Transform | `jsc.transform.react` | Automatic runtime supported |
| React Fast Refresh | `jsc.transform.react.refresh` | Works in development mode |
| Dynamic Imports | Shakapacker SWC parser default | Fully supported |
| Class Properties | Built-in | No config needed |
| TypeScript | Shakapacker SWC parser default | Native support |

### Features Requiring Different Approach

Expand Down Expand Up @@ -225,18 +220,7 @@ yarn add -D @typescript-eslint/parser @typescript-eslint/eslint-plugin

### Issue: TypeScript Files Not Transpiling

**Solution**: For TypeScript files, update your SWC config to use TypeScript parser:

```javascript
jsc: {
parser: {
syntax: 'typescript',
tsx: true,
dynamicImport: true,
},
// ... rest of config
}
```
**Solution**: Do not hardcode `jsc.parser` in `config/swc.config.js`. Shakapacker selects the SWC parser per file extension, using TypeScript mode for `.ts` and `.tsx` files. Keep custom settings under `jsc.transform`, `jsc.keepClassNames`, and other non-parser options unless the app has a specific parser feature to enable.

## Testing Results

Expand Down
6 changes: 3 additions & 3 deletions knip.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,8 @@ const config: KnipConfig = {
'react_on_rails/spec/dummy': {
entry: [
Comment thread
justin808 marked this conversation as resolved.
'app/assets/config/manifest.js!',
'client/app/packs/**/*.js!',
// Not sure why this isn't detected as a dependency of client/app/packs/server-bundle.js
'client/app/packs/**/*.{js,jsx,ts,tsx}!',
// Not sure why this isn't detected as a dependency of client/app/packs/server-bundle.ts
'client/app/generated/server-bundle-generated.js!',
'config/webpack/{production,development,test}.js',
// Declaring this as webpack.config instead doesn't work correctly
Expand Down Expand Up @@ -201,7 +201,7 @@ const config: KnipConfig = {
'client/app/startup/**',
'client/app/store/**',
// ReScript entry files that import compiled .res.js files (compiled at build time)
'client/app/packs/rescript-components.js',
'client/app/packs/rescript-components.ts',
],
project: ['**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}!', 'config/webpack/*.js'],
paths: {
Expand Down
10 changes: 7 additions & 3 deletions packages/react-on-rails-pro/src/ComponentRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@
* https://github.com/shakacode/react_on_rails/blob/master/REACT-ON-RAILS-PRO-LICENSE.md
*/

import { type RegisteredComponent, type ReactComponentOrRenderFunction } from 'react-on-rails/types';
import {
type ReactComponentOrRenderFunction,
type RegisteredComponent,
type RegisteredComponentValue,
} from 'react-on-rails/types';
import isRenderFunction from 'react-on-rails/isRenderFunction';
import CallbackRegistry from './CallbackRegistry.ts';

Expand All @@ -22,7 +26,7 @@ const componentRegistry = new CallbackRegistry<RegisteredComponent>('component')
* @param components { component1: component1, component2: component2, etc. }
* @public
*/
export function register(components: Record<string, ReactComponentOrRenderFunction>): void {
export function register(components: Record<string, RegisteredComponentValue>): void {
Object.keys(components).forEach((name) => {
const component = components[name];
if (!component) {
Expand All @@ -44,7 +48,7 @@ export function register(components: Record<string, ReactComponentOrRenderFuncti

Comment thread
justin808 marked this conversation as resolved.
componentRegistry.set(name, {
name,
component,
component: component as ReactComponentOrRenderFunction,
Comment thread
justin808 marked this conversation as resolved.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The as ReactComponentOrRenderFunction cast silently discards the Record<string, unknown> arm of the new RegisteredComponentValue union at the type level. The OSS registry stores component typed as RegisteredComponentValue; the pro registry narrows it back to the function-only type at storage time.

If a plain-object server_render_js registration ever flows through the pro bundle, downstream runtime guards in createReactOutput / delegateToRenderer will still fire — but callers that read .component from this registry will see the wrong type and any function-call guard that depends on the stored type won't trigger.

Consider one of:

  1. Widening the CallbackRegistry generic to RegisteredComponent<RegisteredComponentValue> (aligning with the OSS change), or
  2. Keeping the narrowed type but adding an explicit pre-storage guard that throws/warns when typeof component !== 'function', instead of casting.
Suggested change
component: component as ReactComponentOrRenderFunction,
component: component as ReactComponentOrRenderFunction,

renderFunction,
isRenderer,
});
Expand Down
8 changes: 7 additions & 1 deletion packages/react-on-rails/src/ClientRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import type {
RendererFunction,
RendererTeardown,
RenderReturnType,
RegisteredComponentValue,
} from './types/index.ts';
import ComponentRegistry from './ComponentRegistry.ts';
import StoreRegistry from './StoreRegistry.ts';
Expand All @@ -19,6 +20,7 @@ import { isRendererTeardownResult } from './rendererTeardown.ts';
const REACT_ON_RAILS_STORE_ATTRIBUTE = 'data-js-react-on-rails-store';

type RendererResult = ReturnType<RendererFunction>;
type RegisteredComponentEntry = RegisteredComponent<RegisteredComponentValue>;

// An entry in `renderedRoots`. We track two kinds of mounts so both can be cleaned up on page
// unload or same-id node replacement:
Expand Down Expand Up @@ -110,7 +112,7 @@ function domNodeIdForEl(el: Element): string {
type DelegationResult = { delegated: false } | { delegated: true; result: RendererResult };

function delegateToRenderer(
componentObj: RegisteredComponent,
componentObj: RegisteredComponentEntry,
props: Record<string, unknown>,
railsContext: RailsContext,
domNodeId: string,
Expand All @@ -133,6 +135,10 @@ DELEGATING TO RENDERER ${name} for dom node with id: ${domNodeId} with props, ra
// component union, so `as RendererFunction` is a runtime-invariant assertion guarded by
// `isRenderer` (the registry only sets it for a 3-arg render function), not a structural
// narrowing.
if (typeof component !== 'function') {
throw new Error(`Registered renderer "${name}" must be a function.`);
}

const result = (component as RendererFunction)(props, railsContext, domNodeId);
return { delegated: true, result };
}
Expand Down
12 changes: 7 additions & 5 deletions packages/react-on-rails/src/ComponentRegistry.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import type { RegisteredComponent, ReactComponentOrRenderFunction } from './types/index.ts';
import type { RegisteredComponent, RegisteredComponentValue } from './types/index.ts';
import isRenderFunction from './isRenderFunction.ts';

const registeredComponents = new Map<string, RegisteredComponent>();
type RegisteredComponentEntry = RegisteredComponent<RegisteredComponentValue>;

const registeredComponents = new Map<string, RegisteredComponentEntry>();

export default {
/**
* @param components { component1: component1, component2: component2, etc. }
*/
register(components: Record<string, ReactComponentOrRenderFunction>): void {
register(components: Record<string, RegisteredComponentValue>): void {
Object.keys(components).forEach((name) => {
const component = components[name];
if (!component) {
Expand Down Expand Up @@ -40,7 +42,7 @@ export default {
* @param name
* @returns { name, component, renderFunction, isRenderer }
*/
get(name: string): RegisteredComponent {
get(name: string): RegisteredComponentEntry {
const registeredComponent = registeredComponents.get(name);
if (registeredComponent !== undefined) {
return registeredComponent;
Expand All @@ -56,7 +58,7 @@ Registered component names include [ ${keys} ]. Maybe you forgot to register the
* @returns Map where key is the component name and values are the
* { name, component, renderFunction, isRenderer}
*/
components(): Map<string, RegisteredComponent> {
components(): Map<string, RegisteredComponentEntry> {
return registeredComponents;
},

Expand Down
Loading
Loading