Skip to content

Commit

Permalink
[rcr] Reexport React.__COMPILER_RUNTIME.c or fallback to polyfill (#3…
Browse files Browse the repository at this point in the history
…1140)

This PR updates the standalone `react-compiler-runtime` package to
either re-export `React.__COMPILER_RUNTIME.c` or to use a userspace
polyfill.
  • Loading branch information
poteto authored Oct 7, 2024
1 parent b78a7f2 commit d2367f1
Showing 1 changed file with 21 additions and 16 deletions.
37 changes: 21 additions & 16 deletions compiler/packages/react-compiler-runtime/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,27 @@ const ReactSecretInternals =
type MemoCache = Array<number | typeof $empty>;

const $empty = Symbol.for('react.memo_cache_sentinel');
/**
* DANGER: this hook is NEVER meant to be called directly!
**/
export function c(size: number) {
return React.useState(() => {
const $ = new Array(size);
for (let ii = 0; ii < size; ii++) {
$[ii] = $empty;
}
// This symbol is added to tell the react devtools that this array is from
// useMemoCache.
// @ts-ignore
$[$empty] = true;
return $;
})[0];
}

// Re-export React.c if present, otherwise fallback to the userspace polyfill for versions of React
// < 19.
export const c =
// @ts-expect-error
typeof React.__COMPILER_RUNTIME?.c === 'function'
? // @ts-expect-error
React.__COMPILER_RUNTIME.c
: function c(size: number) {
return React.useMemo<Array<unknown>>(() => {
const $ = new Array(size);
for (let ii = 0; ii < size; ii++) {
$[ii] = $empty;
}
// This symbol is added to tell the react devtools that this array is from
// useMemoCache.
// @ts-ignore
$[$empty] = true;
return $;
}, []);
};

const LazyGuardDispatcher: {[key: string]: (...args: Array<any>) => any} = {};
[
Expand Down

0 comments on commit d2367f1

Please sign in to comment.