feat(lib/react/jsx-runtime): switch to objects for storage

This commit is contained in:
PalmDevs 2025-07-18 23:41:04 +07:00
parent c1f56c7e60
commit feaf1cd194
No known key found for this signature in database
GPG key ID: 6FAE8F8677ACA8BA
3 changed files with 17 additions and 16 deletions

View file

@ -3,9 +3,9 @@ import type { AfterJSXCallback, BeforeJSXCallback, InsteadJSXCallback } from '.'
export const jPatches = new Map<
ElementType | keyof JSX.IntrinsicElements,
[
before?: Set<BeforeJSXCallback<any>>,
after?: Set<AfterJSXCallback<any>>,
instead?: Set<InsteadJSXCallback<any>>,
]
{
before?: Set<BeforeJSXCallback<any>>
after?: Set<AfterJSXCallback<any>>
instead?: Set<InsteadJSXCallback<any>>
}
>()

View file

@ -38,11 +38,11 @@ export function afterJSX<E extends ElementType>(
) {
let patches = jPatches.get(type)
if (!patches) {
patches = [undefined, new Set(), undefined]
patches = {}
jPatches.set(type, patches)
} else if (!patches[1]) patches[1] = new Set()
}
const set = patches[1]!
const set = (patches.after ??= new Set())
set.add(patch as AfterJSXCallback<E>)
return () => {
@ -65,11 +65,11 @@ export function beforeJSX<E extends ElementType>(
) {
let patches = jPatches.get(type)
if (!patches) {
patches = [new Set(), undefined, undefined]
patches = {}
jPatches.set(type, patches)
} else if (!patches[0]) patches[0] = new Set()
}
const set = patches[0]!
const set = (patches.before ??= new Set())
set.add(patch as BeforeJSXCallback<E>)
return () => {
@ -92,11 +92,11 @@ export function insteadJSX<E extends ElementType>(
) {
let patches = jPatches.get(type)
if (!patches) {
patches = [undefined, undefined, new Set()]
patches = {}
jPatches.set(type, patches)
} else if (!patches[2]) patches[2] = new Set()
}
const set = patches[2]!
const set = (patches.instead ??= new Set())
set.add(patch as InsteadJSXCallback<E>)
return () => {
@ -108,6 +108,7 @@ export function insteadJSX<E extends ElementType>(
function attemptCleanup(type: ElementType) {
const patches = jPatches.get(type)!
if (patches[0]?.size || patches[1]?.size || patches[2]?.size) return
if (patches.before?.size || patches.after?.size || patches.instead?.size)
return
jPatches.delete(type)
}

View file

@ -14,7 +14,7 @@ const patch = (
const patches = jPatches.get(type)
if (!patches) return Reflect.apply(orig, ReactJSXRuntime, args)
const [before, after, instead] = patches
const { before, after, instead } = patches
if (before) for (const cb of before) args = cb(args)