@reckona/mreact-compat 0.0.152 → 0.0.154
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/class-component.d.ts +2 -2
- package/dist/class-component.d.ts.map +1 -1
- package/dist/class-component.js +29 -3
- package/dist/class-component.js.map +1 -1
- package/dist/dom-props.d.ts.map +1 -1
- package/dist/dom-props.js +0 -21
- package/dist/dom-props.js.map +1 -1
- package/dist/element.d.ts +0 -1
- package/dist/element.d.ts.map +1 -1
- package/dist/element.js +2 -41
- package/dist/element.js.map +1 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -1
- package/dist/fiber-reconciler.js +45 -3
- package/dist/fiber-reconciler.js.map +1 -1
- package/dist/hooks.d.ts +5 -2
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +38 -15
- package/dist/hooks.js.map +1 -1
- package/dist/host-reconciler.d.ts.map +1 -1
- package/dist/host-reconciler.js +37 -32
- package/dist/host-reconciler.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react-default.d.ts +2 -1
- package/dist/react-default.d.ts.map +1 -1
- package/dist/react-default.js +2 -1
- package/dist/react-default.js.map +1 -1
- package/dist/server-render.d.ts +1 -0
- package/dist/server-render.d.ts.map +1 -1
- package/dist/server-render.js +103 -39
- package/dist/server-render.js.map +1 -1
- package/package.json +3 -3
- package/src/class-component.ts +35 -2
- package/src/dom-props.ts +0 -30
- package/src/element.ts +4 -57
- package/src/events.ts +2 -0
- package/src/fiber-reconciler.ts +54 -2
- package/src/hooks.ts +43 -15
- package/src/host-reconciler.ts +43 -36
- package/src/index.ts +1 -1
- package/src/react-default.ts +2 -1
- package/src/server-render.ts +120 -46
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export { createContext, renderContextConsumerToString, renderContextProviderToSt
|
|
|
6
6
|
export { applyStreamingHydrationFragments, createRoot, createStreamingHydrationRoot, enableEventHydrationManifestReplay, enableHydrationEventReplay, flushSync, hydrateRoot, queueHydrationEvent, readEventHydrationManifest, render, unmountComponentAtNode, } from "./render.js";
|
|
7
7
|
export type { EventHydrationManifest, EventHydrationManifestEntry, HydrateRootOptions, HydrationRecoverableErrorInfo, Root, RootOptions, SelectiveHydrationBoundary, SelectiveHydrationOptions, StreamingHydrationRoot, StreamingHydrationRootOptions, } from "./render.js";
|
|
8
8
|
export { useCallback, useDebugValue, useDeferredValue, useEffectEvent, useEffect, useId, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useOptimistic, useReducer, useRef, useState, useSyncExternalStore, use, useActionState, act, cache, cacheSignal, captureOwnerStack, startTransition, unstable_useCacheRefresh, useTransition, version, } from "./hooks.js";
|
|
9
|
-
export { renderToString } from "./server-render.js";
|
|
9
|
+
export { renderChildToString, renderToString } from "./server-render.js";
|
|
10
10
|
export type { StartTransition, TransitionScope } from "./hooks.js";
|
|
11
11
|
export { default } from "./react-default.js";
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,aAAa,EACb,6BAA6B,EAC7B,6BAA6B,EAC7B,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gCAAgC,EAChC,UAAU,EACV,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,MAAM,EACN,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,kBAAkB,EAClB,6BAA6B,EAC7B,IAAI,EACJ,WAAW,EACX,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,GAAG,EACH,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,aAAa,EACb,6BAA6B,EAC7B,6BAA6B,EAC7B,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gCAAgC,EAChC,UAAU,EACV,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,MAAM,EACN,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,kBAAkB,EAClB,6BAA6B,EAC7B,IAAI,EACJ,WAAW,EACX,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,GAAG,EACH,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,6 @@ export { Fragment, Activity, Profiler, Suspense, SuspenseList, StrictMode, Child
|
|
|
3
3
|
export { createContext, renderContextConsumerToString, renderContextProviderToString, useContext, } from "./context.js";
|
|
4
4
|
export { applyStreamingHydrationFragments, createRoot, createStreamingHydrationRoot, enableEventHydrationManifestReplay, enableHydrationEventReplay, flushSync, hydrateRoot, queueHydrationEvent, readEventHydrationManifest, render, unmountComponentAtNode, } from "./render.js";
|
|
5
5
|
export { useCallback, useDebugValue, useDeferredValue, useEffectEvent, useEffect, useId, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useOptimistic, useReducer, useRef, useState, useSyncExternalStore, use, useActionState, act, cache, cacheSignal, captureOwnerStack, startTransition, unstable_useCacheRefresh, useTransition, version, } from "./hooks.js";
|
|
6
|
-
export { renderToString } from "./server-render.js";
|
|
6
|
+
export { renderChildToString, renderToString } from "./server-render.js";
|
|
7
7
|
export { default } from "./react-default.js";
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,GACL,MAAM,cAAc,CAAC;AActB,OAAO,EACL,aAAa,EACb,6BAA6B,EAC7B,6BAA6B,EAC7B,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gCAAgC,EAChC,UAAU,EACV,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,MAAM,EACN,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAarB,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,GAAG,EACH,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,GACL,MAAM,cAAc,CAAC;AActB,OAAO,EACL,aAAa,EACb,6BAA6B,EAC7B,6BAA6B,EAC7B,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gCAAgC,EAChC,UAAU,EACV,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,MAAM,EACN,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAarB,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,GAAG,EACH,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC","sourcesContent":["export {\n Component,\n PureComponent,\n} from \"./class-component.js\";\nexport {\n Fragment,\n Activity,\n Profiler,\n Suspense,\n SuspenseList,\n StrictMode,\n Children,\n cloneElement,\n createElement,\n createErrorBoundary,\n createPortal,\n createRef,\n forwardRef,\n isValidElement,\n lazy,\n memo,\n} from \"./element.js\";\nexport type {\n ErrorBoundaryOptions,\n ElementType,\n ReactCompatElement,\n ReactCompatNode,\n} from \"./element.js\";\nexport type {\n FormEvent,\n FormEventHandler,\n JSXEvent,\n JSXEventHandler,\n} from \"./jsx-runtime.js\";\n\nexport {\n createContext,\n renderContextConsumerToString,\n renderContextProviderToString,\n useContext,\n} from \"./context.js\";\nexport {\n applyStreamingHydrationFragments,\n createRoot,\n createStreamingHydrationRoot,\n enableEventHydrationManifestReplay,\n enableHydrationEventReplay,\n flushSync,\n hydrateRoot,\n queueHydrationEvent,\n readEventHydrationManifest,\n render,\n unmountComponentAtNode,\n} from \"./render.js\";\nexport type {\n EventHydrationManifest,\n EventHydrationManifestEntry,\n HydrateRootOptions,\n HydrationRecoverableErrorInfo,\n Root,\n RootOptions,\n SelectiveHydrationBoundary,\n SelectiveHydrationOptions,\n StreamingHydrationRoot,\n StreamingHydrationRootOptions,\n} from \"./render.js\";\nexport {\n useCallback,\n useDebugValue,\n useDeferredValue,\n useEffectEvent,\n useEffect,\n useId,\n useImperativeHandle,\n useInsertionEffect,\n useLayoutEffect,\n useMemo,\n useOptimistic,\n useReducer,\n useRef,\n useState,\n useSyncExternalStore,\n use,\n useActionState,\n act,\n cache,\n cacheSignal,\n captureOwnerStack,\n startTransition,\n unstable_useCacheRefresh,\n useTransition,\n version,\n} from \"./hooks.js\";\nexport { renderChildToString, renderToString } from \"./server-render.js\";\nexport type { StartTransition, TransitionScope } from \"./hooks.js\";\nexport { default } from \"./react-default.js\";\n"]}
|
package/dist/react-default.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Fragment, Activity, Profiler, Suspense, SuspenseList, cloneElement, cre
|
|
|
2
2
|
import { createContext, renderContextConsumerToString, renderContextProviderToString, useContext } from "./context.js";
|
|
3
3
|
import { applyStreamingHydrationFragments, createRoot, createStreamingHydrationRoot, enableEventHydrationManifestReplay, enableHydrationEventReplay, flushSync, hydrateRoot, queueHydrationEvent, readEventHydrationManifest, render, unmountComponentAtNode } from "./render.js";
|
|
4
4
|
import { useCallback, useDebugValue, useDeferredValue, useEffectEvent, useEffect, useId, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useOptimistic, useReducer, useRef, useState, useSyncExternalStore, use, useActionState, act, cache, cacheSignal, captureOwnerStack, startTransition, unstable_useCacheRefresh, useTransition } from "./hooks.js";
|
|
5
|
-
import { renderToString } from "./server-render.js";
|
|
5
|
+
import { renderChildToString, renderToString } from "./server-render.js";
|
|
6
6
|
declare const ReactCompat: {
|
|
7
7
|
readonly Component: import("./class-component.js").ComponentConstructor;
|
|
8
8
|
readonly PureComponent: import("./class-component.js").PureComponentConstructor;
|
|
@@ -64,6 +64,7 @@ declare const ReactCompat: {
|
|
|
64
64
|
readonly cache: typeof cache;
|
|
65
65
|
readonly cacheSignal: typeof cacheSignal;
|
|
66
66
|
readonly captureOwnerStack: typeof captureOwnerStack;
|
|
67
|
+
readonly renderChildToString: typeof renderChildToString;
|
|
67
68
|
readonly renderToString: typeof renderToString;
|
|
68
69
|
readonly startTransition: typeof startTransition;
|
|
69
70
|
readonly unstable_useCacheRefresh: typeof unstable_useCacheRefresh;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-default.d.ts","sourceRoot":"","sources":["../src/react-default.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EAGZ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,UAAU,EAEV,IAAI,EACJ,IAAI,EACL,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,6BAA6B,EAC7B,6BAA6B,EAC7B,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gCAAgC,EAChC,UAAU,EACV,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,MAAM,EACN,sBAAsB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,GAAG,EACH,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,aAAa,EAEd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"react-default.d.ts","sourceRoot":"","sources":["../src/react-default.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EAGZ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,UAAU,EAEV,IAAI,EACJ,IAAI,EACL,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,6BAA6B,EAC7B,6BAA6B,EAC7B,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gCAAgC,EAChC,UAAU,EACV,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,MAAM,EACN,sBAAsB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,GAAG,EACH,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,aAAa,EAEd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzE,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DP,CAAC;AAEX,eAAe,WAAW,CAAC"}
|
package/dist/react-default.js
CHANGED
|
@@ -3,7 +3,7 @@ import { Fragment, Activity, Profiler, Suspense, SuspenseList, StrictMode, Child
|
|
|
3
3
|
import { createContext, renderContextConsumerToString, renderContextProviderToString, useContext, } from "./context.js";
|
|
4
4
|
import { applyStreamingHydrationFragments, createRoot, createStreamingHydrationRoot, enableEventHydrationManifestReplay, enableHydrationEventReplay, flushSync, hydrateRoot, queueHydrationEvent, readEventHydrationManifest, render, unmountComponentAtNode, } from "./render.js";
|
|
5
5
|
import { useCallback, useDebugValue, useDeferredValue, useEffectEvent, useEffect, useId, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useOptimistic, useReducer, useRef, useState, useSyncExternalStore, use, useActionState, act, cache, cacheSignal, captureOwnerStack, startTransition, unstable_useCacheRefresh, useTransition, version, } from "./hooks.js";
|
|
6
|
-
import { renderToString } from "./server-render.js";
|
|
6
|
+
import { renderChildToString, renderToString } from "./server-render.js";
|
|
7
7
|
const ReactCompat = {
|
|
8
8
|
Component,
|
|
9
9
|
PureComponent,
|
|
@@ -59,6 +59,7 @@ const ReactCompat = {
|
|
|
59
59
|
cache,
|
|
60
60
|
cacheSignal,
|
|
61
61
|
captureOwnerStack,
|
|
62
|
+
renderChildToString,
|
|
62
63
|
renderToString,
|
|
63
64
|
startTransition,
|
|
64
65
|
unstable_useCacheRefresh,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-default.js","sourceRoot":"","sources":["../src/react-default.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,6BAA6B,EAC7B,6BAA6B,EAC7B,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gCAAgC,EAChC,UAAU,EACV,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,MAAM,EACN,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,GAAG,EACH,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"react-default.js","sourceRoot":"","sources":["../src/react-default.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,6BAA6B,EAC7B,6BAA6B,EAC7B,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gCAAgC,EAChC,UAAU,EACV,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,MAAM,EACN,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,GAAG,EACH,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,WAAW,GAAG;IAClB,SAAS;IACT,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,mBAAmB;IACnB,YAAY;IACZ,SAAS;IACT,UAAU;IACV,cAAc;IACd,IAAI;IACJ,IAAI;IACJ,aAAa;IACb,6BAA6B;IAC7B,6BAA6B;IAC7B,UAAU;IACV,gCAAgC;IAChC,UAAU;IACV,4BAA4B;IAC5B,kCAAkC;IAClC,0BAA0B;IAC1B,SAAS;IACT,WAAW;IACX,mBAAmB;IACnB,0BAA0B;IAC1B,MAAM;IACN,sBAAsB;IACtB,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,cAAc;IACd,SAAS;IACT,KAAK;IACL,mBAAmB;IACnB,kBAAkB;IAClB,eAAe;IACf,OAAO;IACP,aAAa;IACb,UAAU;IACV,MAAM;IACN,QAAQ;IACR,oBAAoB;IACpB,GAAG;IACH,cAAc;IACd,GAAG;IACH,KAAK;IACL,WAAW;IACX,iBAAiB;IACjB,mBAAmB;IACnB,cAAc;IACd,eAAe;IACf,wBAAwB;IACxB,aAAa;IACb,OAAO;CACC,CAAC;AAEX,eAAe,WAAW,CAAC","sourcesContent":["import {\n Component,\n PureComponent,\n} from \"./class-component.js\";\nimport {\n Fragment,\n Activity,\n Profiler,\n Suspense,\n SuspenseList,\n StrictMode,\n Children,\n cloneElement,\n createElement,\n createErrorBoundary,\n createPortal,\n createRef,\n forwardRef,\n isValidElement,\n lazy,\n memo,\n} from \"./element.js\";\nimport {\n createContext,\n renderContextConsumerToString,\n renderContextProviderToString,\n useContext,\n} from \"./context.js\";\nimport {\n applyStreamingHydrationFragments,\n createRoot,\n createStreamingHydrationRoot,\n enableEventHydrationManifestReplay,\n enableHydrationEventReplay,\n flushSync,\n hydrateRoot,\n queueHydrationEvent,\n readEventHydrationManifest,\n render,\n unmountComponentAtNode,\n} from \"./render.js\";\nimport {\n useCallback,\n useDebugValue,\n useDeferredValue,\n useEffectEvent,\n useEffect,\n useId,\n useImperativeHandle,\n useInsertionEffect,\n useLayoutEffect,\n useMemo,\n useOptimistic,\n useReducer,\n useRef,\n useState,\n useSyncExternalStore,\n use,\n useActionState,\n act,\n cache,\n cacheSignal,\n captureOwnerStack,\n startTransition,\n unstable_useCacheRefresh,\n useTransition,\n version,\n} from \"./hooks.js\";\nimport { renderChildToString, renderToString } from \"./server-render.js\";\n\nconst ReactCompat = {\n Component,\n PureComponent,\n Fragment,\n Activity,\n Profiler,\n Suspense,\n SuspenseList,\n StrictMode,\n Children,\n cloneElement,\n createElement,\n createErrorBoundary,\n createPortal,\n createRef,\n forwardRef,\n isValidElement,\n lazy,\n memo,\n createContext,\n renderContextConsumerToString,\n renderContextProviderToString,\n useContext,\n applyStreamingHydrationFragments,\n createRoot,\n createStreamingHydrationRoot,\n enableEventHydrationManifestReplay,\n enableHydrationEventReplay,\n flushSync,\n hydrateRoot,\n queueHydrationEvent,\n readEventHydrationManifest,\n render,\n unmountComponentAtNode,\n useCallback,\n useDebugValue,\n useDeferredValue,\n useEffectEvent,\n useEffect,\n useId,\n useImperativeHandle,\n useInsertionEffect,\n useLayoutEffect,\n useMemo,\n useOptimistic,\n useReducer,\n useRef,\n useState,\n useSyncExternalStore,\n use,\n useActionState,\n act,\n cache,\n cacheSignal,\n captureOwnerStack,\n renderChildToString,\n renderToString,\n startTransition,\n unstable_useCacheRefresh,\n useTransition,\n version,\n} as const;\n\nexport default ReactCompat;\n"]}
|
package/dist/server-render.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ import { type RootRuntimeOptions } from "./hooks.js";
|
|
|
3
3
|
export declare function renderToString<TProps>(component: ((props: TProps) => ReactCompatNode) | (new (props: TProps) => {
|
|
4
4
|
render(): ReactCompatNode;
|
|
5
5
|
}), props?: TProps, options?: RootRuntimeOptions): string;
|
|
6
|
+
export declare function renderChildToString(value: unknown): string;
|
|
6
7
|
//# sourceMappingURL=server-render.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-render.d.ts","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAQtB,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAUpB,wBAAgB,cAAc,CAAC,MAAM,EACnC,SAAS,EACL,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,eAAe,CAAC,GACpC,CAAC,KAAK,KAAK,EAAE,MAAM,KAAK;IAAE,MAAM,IAAI,eAAe,CAAA;CAAE,CAAC,EAC1D,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,MAAM,
|
|
1
|
+
{"version":3,"file":"server-render.d.ts","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAQtB,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAUpB,wBAAgB,cAAc,CAAC,MAAM,EACnC,SAAS,EACL,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,eAAe,CAAC,GACpC,CAAC,KAAK,KAAK,EAAE,MAAM,KAAK;IAAE,MAAM,IAAI,eAAe,CAAA;CAAE,CAAC,EAC1D,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CA+BR;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAkB1D"}
|
package/dist/server-render.js
CHANGED
|
@@ -22,11 +22,43 @@ export function renderToString(component, props, options = {}) {
|
|
|
22
22
|
? rendered
|
|
23
23
|
: renderNodeToString(rendered, runtime, "0.0");
|
|
24
24
|
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (isThenable(error)) {
|
|
27
|
+
throw new Error("renderToString does not support Suspense. Use a streaming server renderer for components that suspend.");
|
|
28
|
+
}
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
runtime.dispose();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
// Renders a single child value the way the interpreter renders expression
|
|
37
|
+
// children: primitives escape, null/undefined/boolean render nothing, and
|
|
38
|
+
// react nodes fall back to the interpreter. Compiled compat pages call this
|
|
39
|
+
// for expression children whose runtime type is unknown.
|
|
40
|
+
export function renderChildToString(value) {
|
|
41
|
+
if (value === null || value === undefined || typeof value === "boolean") {
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
45
|
+
return escapeHtml(value);
|
|
46
|
+
}
|
|
47
|
+
const runtime = createRootRuntime(() => undefined, { idMode: "server" });
|
|
48
|
+
return runWithCacheScope(createCacheScope(), () => {
|
|
49
|
+
try {
|
|
50
|
+
return renderNodeToString(value, runtime, "0.0");
|
|
51
|
+
}
|
|
25
52
|
finally {
|
|
26
53
|
runtime.dispose();
|
|
27
54
|
}
|
|
28
55
|
});
|
|
29
56
|
}
|
|
57
|
+
function isThenable(value) {
|
|
58
|
+
return (typeof value === "object" &&
|
|
59
|
+
value !== null &&
|
|
60
|
+
typeof value.then === "function");
|
|
61
|
+
}
|
|
30
62
|
function renderNodeToString(node, runtime, path) {
|
|
31
63
|
if (node === null || node === undefined || typeof node === "boolean") {
|
|
32
64
|
return "";
|
|
@@ -60,7 +92,13 @@ function renderElementToString(element, runtime, path) {
|
|
|
60
92
|
if (isVoidHtmlElement(element.type)) {
|
|
61
93
|
return `<${element.type}${attributes}/>`;
|
|
62
94
|
}
|
|
63
|
-
|
|
95
|
+
// Primitive children dominate real markup; serializing them inline skips
|
|
96
|
+
// one recursive call and one child-path allocation per text leaf.
|
|
97
|
+
const children = element.props.children;
|
|
98
|
+
if (typeof children === "string" || typeof children === "number") {
|
|
99
|
+
return `<${element.type}${attributes}>${escapeHtml(children)}</${element.type}>`;
|
|
100
|
+
}
|
|
101
|
+
return `<${element.type}${attributes}>${renderNodeToString(children, runtime, `${path}.children`)}</${element.type}>`;
|
|
64
102
|
}
|
|
65
103
|
if (element.type === Fragment) {
|
|
66
104
|
return renderNodeToString(element.props.children, runtime, `${path}.fragment`);
|
|
@@ -105,30 +143,23 @@ function renderElementToString(element, runtime, path) {
|
|
|
105
143
|
return "";
|
|
106
144
|
}
|
|
107
145
|
function renderAttributesToString(props) {
|
|
108
|
-
const
|
|
109
|
-
const entries = Object.entries(sanitizedProps);
|
|
110
|
-
if (entries.length === 0 ||
|
|
111
|
-
(entries.length === 1 && entries[0]?.[0] === "children")) {
|
|
112
|
-
return "";
|
|
113
|
-
}
|
|
146
|
+
const skipUnsafeMetaRefreshContent = hasUnsafeMetaRefreshProps(props);
|
|
114
147
|
let attributes = "";
|
|
115
|
-
for (const
|
|
116
|
-
|
|
148
|
+
for (const name in props) {
|
|
149
|
+
if (skipUnsafeMetaRefreshContent && name === "content") {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
attributes += renderHtmlAttribute(name, props[name]);
|
|
117
153
|
}
|
|
118
154
|
return attributes;
|
|
119
155
|
}
|
|
120
|
-
function
|
|
121
|
-
const httpEquiv = props["http-equiv"] ?? props.httpEquiv;
|
|
156
|
+
function hasUnsafeMetaRefreshProps(props) {
|
|
122
157
|
const content = props.content;
|
|
123
|
-
if (typeof
|
|
124
|
-
return
|
|
125
|
-
}
|
|
126
|
-
if (!isUnsafeMetaRefreshContent(httpEquiv, content)) {
|
|
127
|
-
return props;
|
|
158
|
+
if (typeof content !== "string") {
|
|
159
|
+
return false;
|
|
128
160
|
}
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
return sanitized;
|
|
161
|
+
const httpEquiv = props["http-equiv"] ?? props.httpEquiv;
|
|
162
|
+
return typeof httpEquiv === "string" && isUnsafeMetaRefreshContent(httpEquiv, content);
|
|
132
163
|
}
|
|
133
164
|
function isClassComponentType(value) {
|
|
134
165
|
return (typeof value === "function" &&
|
|
@@ -179,14 +210,20 @@ function renderInputAttributesToString(props) {
|
|
|
179
210
|
.filter((attribute) => attribute !== "")
|
|
180
211
|
.join("");
|
|
181
212
|
}
|
|
213
|
+
// Matches the /^on/i prefix without allocating a fresh regex per attribute.
|
|
214
|
+
function isEventHandlerName(name) {
|
|
215
|
+
return (name.length > 1 &&
|
|
216
|
+
(name.charCodeAt(0) | 32) === 111 &&
|
|
217
|
+
(name.charCodeAt(1) | 32) === 110);
|
|
218
|
+
}
|
|
182
219
|
function renderHtmlAttribute(name, value) {
|
|
183
|
-
if (
|
|
220
|
+
if (value === null ||
|
|
221
|
+
value === undefined ||
|
|
222
|
+
typeof value === "function" ||
|
|
223
|
+
name === "children" ||
|
|
184
224
|
name === "key" ||
|
|
185
225
|
name === "ref" ||
|
|
186
|
-
|
|
187
|
-
value === null ||
|
|
188
|
-
value === undefined ||
|
|
189
|
-
typeof value === "function") {
|
|
226
|
+
isEventHandlerName(name)) {
|
|
190
227
|
return "";
|
|
191
228
|
}
|
|
192
229
|
if (name === "style") {
|
|
@@ -197,7 +234,7 @@ function renderHtmlAttribute(name, value) {
|
|
|
197
234
|
if (!VALID_ATTRIBUTE_NAME.test(attributeName)) {
|
|
198
235
|
return "";
|
|
199
236
|
}
|
|
200
|
-
if (
|
|
237
|
+
if (isEventHandlerName(attributeName)) {
|
|
201
238
|
return "";
|
|
202
239
|
}
|
|
203
240
|
if (typeof value === "boolean" && isBooleanishStringAttribute(attributeName)) {
|
|
@@ -227,12 +264,13 @@ function renderHtmlAttribute(name, value) {
|
|
|
227
264
|
return ` ${attributeName}="${escapeHtml(stringValue)}"`;
|
|
228
265
|
}
|
|
229
266
|
const VALID_ATTRIBUTE_NAME = /^[A-Za-z_][\w.\-:]*$/;
|
|
230
|
-
function isBooleanishStringAttribute(
|
|
231
|
-
|
|
232
|
-
|
|
267
|
+
function isBooleanishStringAttribute(attributeName) {
|
|
268
|
+
// Callers pass the already-mapped HTML attribute name.
|
|
269
|
+
const lowerCased = attributeName.toLowerCase();
|
|
270
|
+
return lowerCased.startsWith("aria-") || BOOLEANISH_STRING_ATTRIBUTES.has(lowerCased);
|
|
233
271
|
}
|
|
234
|
-
function isDataAttribute(
|
|
235
|
-
return
|
|
272
|
+
function isDataAttribute(attributeName) {
|
|
273
|
+
return attributeName.toLowerCase().startsWith("data-");
|
|
236
274
|
}
|
|
237
275
|
const BOOLEANISH_STRING_ATTRIBUTES = new Set([
|
|
238
276
|
"contenteditable",
|
|
@@ -272,7 +310,6 @@ const HTML_ATTRIBUTE_ALIASES = {
|
|
|
272
310
|
minLength: "minlength",
|
|
273
311
|
noValidate: "novalidate",
|
|
274
312
|
playsInline: "playsinline",
|
|
275
|
-
readOnly: "readOnly",
|
|
276
313
|
rowSpan: "rowspan",
|
|
277
314
|
spellCheck: "spellcheck",
|
|
278
315
|
srcDoc: "srcdoc",
|
|
@@ -284,13 +321,21 @@ function renderStyleAttribute(value) {
|
|
|
284
321
|
if (typeof value !== "object" || value === null) {
|
|
285
322
|
return "";
|
|
286
323
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
propertyValue
|
|
292
|
-
|
|
293
|
-
|
|
324
|
+
const styleProps = value;
|
|
325
|
+
let css = "";
|
|
326
|
+
for (const name in styleProps) {
|
|
327
|
+
const propertyValue = styleProps[name];
|
|
328
|
+
if (propertyValue === null ||
|
|
329
|
+
propertyValue === undefined ||
|
|
330
|
+
typeof propertyValue === "boolean" ||
|
|
331
|
+
propertyValue === "") {
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
css += css === ""
|
|
335
|
+
? `${toKebabCase(name)}:${renderCssValue(name, propertyValue)}`
|
|
336
|
+
: `;${toKebabCase(name)}:${renderCssValue(name, propertyValue)}`;
|
|
337
|
+
}
|
|
338
|
+
return css;
|
|
294
339
|
}
|
|
295
340
|
function renderCssValue(name, value) {
|
|
296
341
|
if (typeof value !== "number" || value === 0 || isUnitlessCssProperty(name)) {
|
|
@@ -298,8 +343,27 @@ function renderCssValue(name, value) {
|
|
|
298
343
|
}
|
|
299
344
|
return `${value}px`;
|
|
300
345
|
}
|
|
346
|
+
const UPPERCASE_LETTER = /[A-Z]/;
|
|
347
|
+
const UPPERCASE_LETTER_GLOBAL = /[A-Z]/g;
|
|
348
|
+
// Distinct camelCase style names per app are few; the cap only guards
|
|
349
|
+
// pathological dynamically-generated property names.
|
|
350
|
+
const KEBAB_CASE_CACHE = new Map();
|
|
351
|
+
const KEBAB_CASE_CACHE_LIMIT = 512;
|
|
352
|
+
function kebabReplace(letter) {
|
|
353
|
+
return `-${letter.toLowerCase()}`;
|
|
354
|
+
}
|
|
301
355
|
function toKebabCase(value) {
|
|
302
|
-
|
|
356
|
+
if (!UPPERCASE_LETTER.test(value)) {
|
|
357
|
+
return value;
|
|
358
|
+
}
|
|
359
|
+
let cached = KEBAB_CASE_CACHE.get(value);
|
|
360
|
+
if (cached === undefined) {
|
|
361
|
+
cached = value.replace(UPPERCASE_LETTER_GLOBAL, kebabReplace);
|
|
362
|
+
if (KEBAB_CASE_CACHE.size < KEBAB_CASE_CACHE_LIMIT) {
|
|
363
|
+
KEBAB_CASE_CACHE.set(value, cached);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return cached;
|
|
303
367
|
}
|
|
304
368
|
function isUnitlessCssProperty(name) {
|
|
305
369
|
return (name === "flex" ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-render.js","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Activity,\n FORWARD_REF_TYPE,\n Fragment,\n MEMO_TYPE,\n Profiler,\n isReactCompatElement,\n type ForwardRefType,\n type MemoType,\n type ReactCompatElement,\n type ReactCompatNode,\n} from \"./element.js\";\nimport {\n consumerContext,\n isReactCompatConsumer,\n isReactCompatProvider,\n renderWithContextProvider,\n useContext,\n} from \"./context.js\";\nimport {\n createCacheScope,\n createRootRuntime,\n renderWithRootRuntime,\n runWithCacheScope,\n type RootRuntime,\n type RootRuntimeOptions,\n} from \"./hooks.js\";\nimport {\n isDangerousHtmlAttribute,\n isDangerousHtmlOptIn,\n isUnsafeMetaRefreshContent,\n isUnsafeUrlAttribute,\n} from \"./url-safety.js\";\nimport { escapeHtmlAttribute as escapeHtml } from \"@reckona/mreact-shared/html-escape\";\nimport { isVoidHtmlElement } from \"@reckona/mreact-shared\";\n\nexport function renderToString<TProps>(\n component:\n | ((props: TProps) => ReactCompatNode)\n | (new (props: TProps) => { render(): ReactCompatNode }),\n props?: TProps,\n options: RootRuntimeOptions = {},\n): string {\n const runtime = createRootRuntime(() => undefined, {\n ...options,\n idMode: \"server\",\n });\n\n return runWithCacheScope(createCacheScope(), () => {\n try {\n const rendered = renderWithRootRuntime(runtime, \"0\", () => {\n if (isClassComponentType(component)) {\n const instance = new component(props as Record<string, unknown>);\n return instance.render();\n }\n\n return (component as (props: TProps) => ReactCompatNode)(props as TProps);\n });\n return typeof rendered === \"string\"\n ? rendered\n : renderNodeToString(rendered, runtime, \"0.0\");\n } finally {\n runtime.dispose();\n }\n });\n}\n\nfunction renderNodeToString(\n node: ReactCompatNode,\n runtime: RootRuntime,\n path: string,\n): string {\n if (node === null || node === undefined || typeof node === \"boolean\") {\n return \"\";\n }\n\n if (typeof node === \"string\" || typeof node === \"number\") {\n return escapeHtml(node);\n }\n\n if (Array.isArray(node)) {\n let html = \"\";\n for (let index = 0; index < node.length; index += 1) {\n html += renderNodeToString(node[index], runtime, `${path}.${index}`);\n }\n return html;\n }\n\n if (!isReactCompatElement(node)) {\n return \"\";\n }\n\n return renderElementToString(node, runtime, path);\n}\n\nfunction renderElementToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n if (typeof element.type === \"string\") {\n if (element.type === \"textarea\") {\n return renderTextareaToString(element, runtime, path);\n }\n\n if (element.type === \"select\") {\n return renderSelectToString(element, runtime, path);\n }\n\n const attributes =\n element.type === \"input\"\n ? renderInputAttributesToString(element.props)\n : renderAttributesToString(element.props);\n if (isVoidHtmlElement(element.type)) {\n return `<${element.type}${attributes}/>`;\n }\n\n return `<${element.type}${attributes}>${renderNodeToString(element.props.children, runtime, `${path}.children`)}</${element.type}>`;\n }\n\n if (element.type === Fragment) {\n return renderNodeToString(element.props.children, runtime, `${path}.fragment`);\n }\n\n if (element.type === Activity) {\n if ((element.props as { mode?: unknown }).mode === \"hidden\") {\n return \"\";\n }\n\n return `<!--&-->${renderNodeToString(element.props.children, runtime, `${path}.activity`)}<!--/&-->`;\n }\n\n if (element.type === Profiler) {\n return renderNodeToString(element.props.children, runtime, `${path}.profiler`);\n }\n\n if (isReactCompatProvider(element.type)) {\n return renderWithContextProvider(\n element.type,\n (element.props as { value?: unknown }).value,\n () => renderNodeToString(element.props.children, runtime, `${path}.provider`),\n );\n }\n\n if (isReactCompatConsumer(element.type)) {\n const children = element.props.children;\n\n if (typeof children === \"function\") {\n return renderNodeToString(\n (children as (value: unknown) => ReactCompatNode)(useContext(consumerContext(element.type))),\n runtime,\n `${path}.consumer`,\n );\n }\n\n return \"\";\n }\n\n if (isForwardRefType(element.type)) {\n const forwardRefType = element.type;\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () =>\n forwardRefType.render(element.props, element.ref),\n ),\n runtime,\n `${path}.forwardRef`,\n );\n }\n\n if (isMemoType(element.type)) {\n return renderNodeToString(\n {\n ...element,\n type: element.type.type,\n },\n runtime,\n `${path}.memo`,\n );\n }\n\n if (isClassComponentType(element.type)) {\n const instance = new element.type(element.props);\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () => instance.render()),\n runtime,\n `${path}.class`,\n );\n }\n\n if (typeof element.type === \"function\") {\n const component = element.type as (props: typeof element.props) => ReactCompatNode;\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () => component(element.props)),\n runtime,\n `${path}.0`,\n );\n }\n\n return \"\";\n}\n\nfunction renderAttributesToString(props: Record<string, unknown>): string {\n const sanitizedProps = sanitizeMetaRefreshProps(props);\n const entries = Object.entries(sanitizedProps);\n if (\n entries.length === 0 ||\n (entries.length === 1 && entries[0]?.[0] === \"children\")\n ) {\n return \"\";\n }\n\n let attributes = \"\";\n for (const [name, value] of entries) {\n attributes += renderHtmlAttribute(name, value);\n }\n return attributes;\n}\n\nfunction sanitizeMetaRefreshProps(\n props: Record<string, unknown>,\n): Record<string, unknown> {\n const httpEquiv = props[\"http-equiv\"] ?? props.httpEquiv;\n const content = props.content;\n if (typeof httpEquiv !== \"string\" || typeof content !== \"string\") {\n return props;\n }\n if (!isUnsafeMetaRefreshContent(httpEquiv, content)) {\n return props;\n }\n\n const sanitized = { ...props };\n delete sanitized.content;\n return sanitized;\n}\n\nfunction isClassComponentType(\n value: unknown,\n): value is new (props: Record<string, unknown>) => { render(): ReactCompatNode } {\n return (\n typeof value === \"function\" &&\n typeof (value as { prototype?: { render?: unknown } }).prototype?.render === \"function\"\n );\n}\n\nfunction renderTextareaToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n const value =\n (element.props as { value?: unknown; defaultValue?: unknown }).value ??\n (element.props as { value?: unknown; defaultValue?: unknown }).defaultValue ??\n element.props.children;\n const attributes = Object.entries(element.props)\n .filter(([name]) => name !== \"value\" && name !== \"defaultValue\")\n .map(([name, child]) => renderHtmlAttribute(name, child))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n\n return `<textarea${attributes}>${renderNodeToString(value as ReactCompatNode, runtime, `${path}.textarea`)}</textarea>`;\n}\n\nfunction renderSelectToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n const selectedValue =\n (element.props as { value?: unknown; defaultValue?: unknown }).value ??\n (element.props as { value?: unknown; defaultValue?: unknown }).defaultValue;\n const attributes = Object.entries(element.props)\n .filter(([name]) => name !== \"value\" && name !== \"defaultValue\")\n .map(([name, child]) => renderHtmlAttribute(name, child))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n\n return `<select${attributes}>${renderSelectChildrenToString(\n element.props.children,\n selectedValue,\n runtime,\n `${path}.select`,\n )}</select>`;\n}\n\nfunction renderSelectChildrenToString(\n children: ReactCompatNode,\n selectedValue: unknown,\n runtime: RootRuntime,\n path: string,\n): string {\n const childArray = Array.isArray(children) ? children : [children];\n\n return childArray.map((child, index) => {\n if (!isReactCompatElement(child) || child.type !== \"option\") {\n return renderNodeToString(child, runtime, `${path}.${index}`);\n }\n\n const optionValue =\n (child.props as { value?: unknown }).value ?? child.props.children;\n const selected =\n selectedValue !== undefined && String(optionValue) === String(selectedValue);\n const props = selected\n ? { ...child.props, selected: true }\n : child.props;\n\n return renderElementToString({ ...child, props }, runtime, `${path}.${index}`);\n }).join(\"\");\n}\n\nfunction renderInputAttributesToString(props: Record<string, unknown>): string {\n const hasValue = props.value !== undefined;\n const hasChecked = props.checked !== undefined;\n\n return Object.entries(props)\n .filter(([name]) =>\n !((name === \"defaultValue\" && hasValue) || (name === \"defaultChecked\" && hasChecked))\n )\n .sort(([leftName], [rightName]) =>\n Number(isInputValueAttribute(leftName)) - Number(isInputValueAttribute(rightName))\n )\n .map(([name, value]) => renderHtmlAttribute(toInputHtmlAttributeName(name), value))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n}\n\nfunction renderHtmlAttribute(name: string, value: unknown): string {\n if (\n name === \"children\" ||\n name === \"key\" ||\n name === \"ref\" ||\n /^on/i.test(name) ||\n value === null ||\n value === undefined ||\n typeof value === \"function\"\n ) {\n return \"\";\n }\n\n if (name === \"style\") {\n const style = renderStyleAttribute(value);\n return style === \"\" ? \"\" : ` style=\"${escapeHtml(style)}\"`;\n }\n\n const attributeName = toHtmlAttributeName(name);\n\n if (!VALID_ATTRIBUTE_NAME.test(attributeName)) {\n return \"\";\n }\n\n if (/^on/i.test(attributeName)) {\n return \"\";\n }\n\n if (typeof value === \"boolean\" && isBooleanishStringAttribute(attributeName)) {\n return ` ${attributeName}=\"${value ? \"true\" : \"false\"}\"`;\n }\n\n if (typeof value === \"boolean\" && isDataAttribute(attributeName)) {\n return ` ${attributeName}=\"${value ? \"true\" : \"false\"}\"`;\n }\n\n if (value === false) {\n return \"\";\n }\n\n if (isDangerousHtmlAttribute(attributeName)) {\n return isDangerousHtmlOptIn(value)\n ? ` ${attributeName}=\"${escapeHtml(value.__html)}\"`\n : \"\";\n }\n\n if (typeof value === \"object\") {\n return \"\";\n }\n\n if (value === true) {\n return ` ${attributeName}=\"\"`;\n }\n\n const stringValue = String(value);\n\n if (isUnsafeUrlAttribute(attributeName, stringValue)) {\n return \"\";\n }\n\n return ` ${attributeName}=\"${escapeHtml(stringValue)}\"`;\n}\n\nconst VALID_ATTRIBUTE_NAME = /^[A-Za-z_][\\w.\\-:]*$/;\n\nfunction isBooleanishStringAttribute(name: string): boolean {\n const attributeName = toHtmlAttributeName(name).toLowerCase();\n return attributeName.startsWith(\"aria-\") || BOOLEANISH_STRING_ATTRIBUTES.has(attributeName);\n}\n\nfunction isDataAttribute(name: string): boolean {\n return toHtmlAttributeName(name).toLowerCase().startsWith(\"data-\");\n}\n\nconst BOOLEANISH_STRING_ATTRIBUTES = new Set<string>([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\nfunction isInputValueAttribute(name: string): boolean {\n return name === \"value\" || name === \"defaultValue\";\n}\n\nfunction toInputHtmlAttributeName(name: string): string {\n if (name === \"defaultValue\") {\n return \"value\";\n }\n\n if (name === \"defaultChecked\") {\n return \"checked\";\n }\n\n return name;\n}\n\nfunction toHtmlAttributeName(name: string): string {\n return HTML_ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst HTML_ATTRIBUTE_ALIASES: Record<string, string> = {\n acceptCharset: \"accept-charset\",\n autoFocus: \"autofocus\",\n autoPlay: \"autoplay\",\n charSet: \"charset\",\n className: \"class\",\n colSpan: \"colspan\",\n contentEditable: \"contenteditable\",\n crossOrigin: \"crossorigin\",\n encType: \"enctype\",\n formAction: \"formaction\",\n frameBorder: \"frameborder\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n maxLength: \"maxlength\",\n minLength: \"minlength\",\n noValidate: \"novalidate\",\n playsInline: \"playsinline\",\n readOnly: \"readOnly\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nfunction renderStyleAttribute(value: unknown): string {\n if (typeof value !== \"object\" || value === null) {\n return \"\";\n }\n\n return Object.entries(value)\n .filter(([, propertyValue]) =>\n propertyValue !== null &&\n propertyValue !== undefined &&\n typeof propertyValue !== \"boolean\" &&\n propertyValue !== \"\",\n )\n .map(([name, propertyValue]) =>\n `${toKebabCase(name)}:${renderCssValue(name, propertyValue)}`,\n )\n .join(\";\");\n}\n\nfunction renderCssValue(name: string, value: unknown): string {\n if (typeof value !== \"number\" || value === 0 || isUnitlessCssProperty(name)) {\n return String(value);\n }\n\n return `${value}px`;\n}\n\nfunction toKebabCase(value: string): string {\n return value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\n\nfunction isUnitlessCssProperty(name: string): boolean {\n return (\n name === \"flex\" ||\n name === \"fontWeight\" ||\n name === \"lineHeight\" ||\n name === \"opacity\" ||\n name === \"order\" ||\n name === \"zIndex\" ||\n name === \"zoom\"\n );\n}\n\nfunction isForwardRefType(value: unknown): value is ForwardRefType {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === FORWARD_REF_TYPE\n );\n}\n\nfunction isMemoType(value: unknown): value is MemoType {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === MEMO_TYPE\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"server-render.js","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Activity,\n FORWARD_REF_TYPE,\n Fragment,\n MEMO_TYPE,\n Profiler,\n isReactCompatElement,\n type ForwardRefType,\n type MemoType,\n type ReactCompatElement,\n type ReactCompatNode,\n} from \"./element.js\";\nimport {\n consumerContext,\n isReactCompatConsumer,\n isReactCompatProvider,\n renderWithContextProvider,\n useContext,\n} from \"./context.js\";\nimport {\n createCacheScope,\n createRootRuntime,\n renderWithRootRuntime,\n runWithCacheScope,\n type RootRuntime,\n type RootRuntimeOptions,\n} from \"./hooks.js\";\nimport {\n isDangerousHtmlAttribute,\n isDangerousHtmlOptIn,\n isUnsafeMetaRefreshContent,\n isUnsafeUrlAttribute,\n} from \"./url-safety.js\";\nimport { escapeHtmlAttribute as escapeHtml } from \"@reckona/mreact-shared/html-escape\";\nimport { isVoidHtmlElement } from \"@reckona/mreact-shared\";\n\nexport function renderToString<TProps>(\n component:\n | ((props: TProps) => ReactCompatNode)\n | (new (props: TProps) => { render(): ReactCompatNode }),\n props?: TProps,\n options: RootRuntimeOptions = {},\n): string {\n const runtime = createRootRuntime(() => undefined, {\n ...options,\n idMode: \"server\",\n });\n\n return runWithCacheScope(createCacheScope(), () => {\n try {\n const rendered = renderWithRootRuntime(runtime, \"0\", () => {\n if (isClassComponentType(component)) {\n const instance = new component(props as Record<string, unknown>);\n return instance.render();\n }\n\n return (component as (props: TProps) => ReactCompatNode)(props as TProps);\n });\n return typeof rendered === \"string\"\n ? rendered\n : renderNodeToString(rendered, runtime, \"0.0\");\n } catch (error) {\n if (isThenable(error)) {\n throw new Error(\n \"renderToString does not support Suspense. Use a streaming server renderer for components that suspend.\",\n );\n }\n\n throw error;\n } finally {\n runtime.dispose();\n }\n });\n}\n\n// Renders a single child value the way the interpreter renders expression\n// children: primitives escape, null/undefined/boolean render nothing, and\n// react nodes fall back to the interpreter. Compiled compat pages call this\n// for expression children whose runtime type is unknown.\nexport function renderChildToString(value: unknown): string {\n if (value === null || value === undefined || typeof value === \"boolean\") {\n return \"\";\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n return escapeHtml(value);\n }\n\n const runtime = createRootRuntime(() => undefined, { idMode: \"server\" });\n\n return runWithCacheScope(createCacheScope(), () => {\n try {\n return renderNodeToString(value as ReactCompatNode, runtime, \"0.0\");\n } finally {\n runtime.dispose();\n }\n });\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction renderNodeToString(\n node: ReactCompatNode,\n runtime: RootRuntime,\n path: string,\n): string {\n if (node === null || node === undefined || typeof node === \"boolean\") {\n return \"\";\n }\n\n if (typeof node === \"string\" || typeof node === \"number\") {\n return escapeHtml(node);\n }\n\n if (Array.isArray(node)) {\n let html = \"\";\n for (let index = 0; index < node.length; index += 1) {\n html += renderNodeToString(node[index], runtime, `${path}.${index}`);\n }\n return html;\n }\n\n if (!isReactCompatElement(node)) {\n return \"\";\n }\n\n return renderElementToString(node, runtime, path);\n}\n\nfunction renderElementToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n if (typeof element.type === \"string\") {\n if (element.type === \"textarea\") {\n return renderTextareaToString(element, runtime, path);\n }\n\n if (element.type === \"select\") {\n return renderSelectToString(element, runtime, path);\n }\n\n const attributes =\n element.type === \"input\"\n ? renderInputAttributesToString(element.props)\n : renderAttributesToString(element.props);\n if (isVoidHtmlElement(element.type)) {\n return `<${element.type}${attributes}/>`;\n }\n\n // Primitive children dominate real markup; serializing them inline skips\n // one recursive call and one child-path allocation per text leaf.\n const children = element.props.children;\n if (typeof children === \"string\" || typeof children === \"number\") {\n return `<${element.type}${attributes}>${escapeHtml(children)}</${element.type}>`;\n }\n\n return `<${element.type}${attributes}>${renderNodeToString(children, runtime, `${path}.children`)}</${element.type}>`;\n }\n\n if (element.type === Fragment) {\n return renderNodeToString(element.props.children, runtime, `${path}.fragment`);\n }\n\n if (element.type === Activity) {\n if ((element.props as { mode?: unknown }).mode === \"hidden\") {\n return \"\";\n }\n\n return `<!--&-->${renderNodeToString(element.props.children, runtime, `${path}.activity`)}<!--/&-->`;\n }\n\n if (element.type === Profiler) {\n return renderNodeToString(element.props.children, runtime, `${path}.profiler`);\n }\n\n if (isReactCompatProvider(element.type)) {\n return renderWithContextProvider(\n element.type,\n (element.props as { value?: unknown }).value,\n () => renderNodeToString(element.props.children, runtime, `${path}.provider`),\n );\n }\n\n if (isReactCompatConsumer(element.type)) {\n const children = element.props.children;\n\n if (typeof children === \"function\") {\n return renderNodeToString(\n (children as (value: unknown) => ReactCompatNode)(useContext(consumerContext(element.type))),\n runtime,\n `${path}.consumer`,\n );\n }\n\n return \"\";\n }\n\n if (isForwardRefType(element.type)) {\n const forwardRefType = element.type;\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () =>\n forwardRefType.render(element.props, element.ref),\n ),\n runtime,\n `${path}.forwardRef`,\n );\n }\n\n if (isMemoType(element.type)) {\n return renderNodeToString(\n {\n ...element,\n type: element.type.type,\n },\n runtime,\n `${path}.memo`,\n );\n }\n\n if (isClassComponentType(element.type)) {\n const instance = new element.type(element.props);\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () => instance.render()),\n runtime,\n `${path}.class`,\n );\n }\n\n if (typeof element.type === \"function\") {\n const component = element.type as (props: typeof element.props) => ReactCompatNode;\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () => component(element.props)),\n runtime,\n `${path}.0`,\n );\n }\n\n return \"\";\n}\n\nfunction renderAttributesToString(props: Record<string, unknown>): string {\n const skipUnsafeMetaRefreshContent = hasUnsafeMetaRefreshProps(props);\n\n let attributes = \"\";\n for (const name in props) {\n if (skipUnsafeMetaRefreshContent && name === \"content\") {\n continue;\n }\n attributes += renderHtmlAttribute(name, props[name]);\n }\n return attributes;\n}\n\nfunction hasUnsafeMetaRefreshProps(props: Record<string, unknown>): boolean {\n const content = props.content;\n if (typeof content !== \"string\") {\n return false;\n }\n\n const httpEquiv = props[\"http-equiv\"] ?? props.httpEquiv;\n return typeof httpEquiv === \"string\" && isUnsafeMetaRefreshContent(httpEquiv, content);\n}\n\nfunction isClassComponentType(\n value: unknown,\n): value is new (props: Record<string, unknown>) => { render(): ReactCompatNode } {\n return (\n typeof value === \"function\" &&\n typeof (value as { prototype?: { render?: unknown } }).prototype?.render === \"function\"\n );\n}\n\nfunction renderTextareaToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n const value =\n (element.props as { value?: unknown; defaultValue?: unknown }).value ??\n (element.props as { value?: unknown; defaultValue?: unknown }).defaultValue ??\n element.props.children;\n const attributes = Object.entries(element.props)\n .filter(([name]) => name !== \"value\" && name !== \"defaultValue\")\n .map(([name, child]) => renderHtmlAttribute(name, child))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n\n return `<textarea${attributes}>${renderNodeToString(value as ReactCompatNode, runtime, `${path}.textarea`)}</textarea>`;\n}\n\nfunction renderSelectToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n const selectedValue =\n (element.props as { value?: unknown; defaultValue?: unknown }).value ??\n (element.props as { value?: unknown; defaultValue?: unknown }).defaultValue;\n const attributes = Object.entries(element.props)\n .filter(([name]) => name !== \"value\" && name !== \"defaultValue\")\n .map(([name, child]) => renderHtmlAttribute(name, child))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n\n return `<select${attributes}>${renderSelectChildrenToString(\n element.props.children,\n selectedValue,\n runtime,\n `${path}.select`,\n )}</select>`;\n}\n\nfunction renderSelectChildrenToString(\n children: ReactCompatNode,\n selectedValue: unknown,\n runtime: RootRuntime,\n path: string,\n): string {\n const childArray = Array.isArray(children) ? children : [children];\n\n return childArray.map((child, index) => {\n if (!isReactCompatElement(child) || child.type !== \"option\") {\n return renderNodeToString(child, runtime, `${path}.${index}`);\n }\n\n const optionValue =\n (child.props as { value?: unknown }).value ?? child.props.children;\n const selected =\n selectedValue !== undefined && String(optionValue) === String(selectedValue);\n const props = selected\n ? { ...child.props, selected: true }\n : child.props;\n\n return renderElementToString({ ...child, props }, runtime, `${path}.${index}`);\n }).join(\"\");\n}\n\nfunction renderInputAttributesToString(props: Record<string, unknown>): string {\n const hasValue = props.value !== undefined;\n const hasChecked = props.checked !== undefined;\n\n return Object.entries(props)\n .filter(([name]) =>\n !((name === \"defaultValue\" && hasValue) || (name === \"defaultChecked\" && hasChecked))\n )\n .sort(([leftName], [rightName]) =>\n Number(isInputValueAttribute(leftName)) - Number(isInputValueAttribute(rightName))\n )\n .map(([name, value]) => renderHtmlAttribute(toInputHtmlAttributeName(name), value))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n}\n\n// Matches the /^on/i prefix without allocating a fresh regex per attribute.\nfunction isEventHandlerName(name: string): boolean {\n return (\n name.length > 1 &&\n (name.charCodeAt(0) | 32) === 111 &&\n (name.charCodeAt(1) | 32) === 110\n );\n}\n\nfunction renderHtmlAttribute(name: string, value: unknown): string {\n if (\n value === null ||\n value === undefined ||\n typeof value === \"function\" ||\n name === \"children\" ||\n name === \"key\" ||\n name === \"ref\" ||\n isEventHandlerName(name)\n ) {\n return \"\";\n }\n\n if (name === \"style\") {\n const style = renderStyleAttribute(value);\n return style === \"\" ? \"\" : ` style=\"${escapeHtml(style)}\"`;\n }\n\n const attributeName = toHtmlAttributeName(name);\n\n if (!VALID_ATTRIBUTE_NAME.test(attributeName)) {\n return \"\";\n }\n\n if (isEventHandlerName(attributeName)) {\n return \"\";\n }\n\n if (typeof value === \"boolean\" && isBooleanishStringAttribute(attributeName)) {\n return ` ${attributeName}=\"${value ? \"true\" : \"false\"}\"`;\n }\n\n if (typeof value === \"boolean\" && isDataAttribute(attributeName)) {\n return ` ${attributeName}=\"${value ? \"true\" : \"false\"}\"`;\n }\n\n if (value === false) {\n return \"\";\n }\n\n if (isDangerousHtmlAttribute(attributeName)) {\n return isDangerousHtmlOptIn(value)\n ? ` ${attributeName}=\"${escapeHtml(value.__html)}\"`\n : \"\";\n }\n\n if (typeof value === \"object\") {\n return \"\";\n }\n\n if (value === true) {\n return ` ${attributeName}=\"\"`;\n }\n\n const stringValue = String(value);\n\n if (isUnsafeUrlAttribute(attributeName, stringValue)) {\n return \"\";\n }\n\n return ` ${attributeName}=\"${escapeHtml(stringValue)}\"`;\n}\n\nconst VALID_ATTRIBUTE_NAME = /^[A-Za-z_][\\w.\\-:]*$/;\n\nfunction isBooleanishStringAttribute(attributeName: string): boolean {\n // Callers pass the already-mapped HTML attribute name.\n const lowerCased = attributeName.toLowerCase();\n return lowerCased.startsWith(\"aria-\") || BOOLEANISH_STRING_ATTRIBUTES.has(lowerCased);\n}\n\nfunction isDataAttribute(attributeName: string): boolean {\n return attributeName.toLowerCase().startsWith(\"data-\");\n}\n\nconst BOOLEANISH_STRING_ATTRIBUTES = new Set<string>([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\nfunction isInputValueAttribute(name: string): boolean {\n return name === \"value\" || name === \"defaultValue\";\n}\n\nfunction toInputHtmlAttributeName(name: string): string {\n if (name === \"defaultValue\") {\n return \"value\";\n }\n\n if (name === \"defaultChecked\") {\n return \"checked\";\n }\n\n return name;\n}\n\nfunction toHtmlAttributeName(name: string): string {\n return HTML_ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst HTML_ATTRIBUTE_ALIASES: Record<string, string> = {\n acceptCharset: \"accept-charset\",\n autoFocus: \"autofocus\",\n autoPlay: \"autoplay\",\n charSet: \"charset\",\n className: \"class\",\n colSpan: \"colspan\",\n contentEditable: \"contenteditable\",\n crossOrigin: \"crossorigin\",\n encType: \"enctype\",\n formAction: \"formaction\",\n frameBorder: \"frameborder\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n maxLength: \"maxlength\",\n minLength: \"minlength\",\n noValidate: \"novalidate\",\n playsInline: \"playsinline\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nfunction renderStyleAttribute(value: unknown): string {\n if (typeof value !== \"object\" || value === null) {\n return \"\";\n }\n\n const styleProps = value as Record<string, unknown>;\n let css = \"\";\n for (const name in styleProps) {\n const propertyValue = styleProps[name];\n if (\n propertyValue === null ||\n propertyValue === undefined ||\n typeof propertyValue === \"boolean\" ||\n propertyValue === \"\"\n ) {\n continue;\n }\n\n css += css === \"\"\n ? `${toKebabCase(name)}:${renderCssValue(name, propertyValue)}`\n : `;${toKebabCase(name)}:${renderCssValue(name, propertyValue)}`;\n }\n return css;\n}\n\nfunction renderCssValue(name: string, value: unknown): string {\n if (typeof value !== \"number\" || value === 0 || isUnitlessCssProperty(name)) {\n return String(value);\n }\n\n return `${value}px`;\n}\n\nconst UPPERCASE_LETTER = /[A-Z]/;\nconst UPPERCASE_LETTER_GLOBAL = /[A-Z]/g;\n// Distinct camelCase style names per app are few; the cap only guards\n// pathological dynamically-generated property names.\nconst KEBAB_CASE_CACHE = new Map<string, string>();\nconst KEBAB_CASE_CACHE_LIMIT = 512;\n\nfunction kebabReplace(letter: string): string {\n return `-${letter.toLowerCase()}`;\n}\n\nfunction toKebabCase(value: string): string {\n if (!UPPERCASE_LETTER.test(value)) {\n return value;\n }\n\n let cached = KEBAB_CASE_CACHE.get(value);\n if (cached === undefined) {\n cached = value.replace(UPPERCASE_LETTER_GLOBAL, kebabReplace);\n if (KEBAB_CASE_CACHE.size < KEBAB_CASE_CACHE_LIMIT) {\n KEBAB_CASE_CACHE.set(value, cached);\n }\n }\n return cached;\n}\n\nfunction isUnitlessCssProperty(name: string): boolean {\n return (\n name === \"flex\" ||\n name === \"fontWeight\" ||\n name === \"lineHeight\" ||\n name === \"opacity\" ||\n name === \"order\" ||\n name === \"zIndex\" ||\n name === \"zoom\"\n );\n}\n\nfunction isForwardRefType(value: unknown): value is ForwardRefType {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === FORWARD_REF_TYPE\n );\n}\n\nfunction isMemoType(value: unknown): value is MemoType {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === MEMO_TYPE\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reckona/mreact-compat",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.154",
|
|
4
4
|
"description": "React-compatible runtime implementation for mreact.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"compatibility",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"access": "public"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@reckona/mreact-reactive-core": "0.0.
|
|
73
|
-
"@reckona/mreact-shared": "0.0.
|
|
72
|
+
"@reckona/mreact-reactive-core": "0.0.154",
|
|
73
|
+
"@reckona/mreact-shared": "0.0.154"
|
|
74
74
|
}
|
|
75
75
|
}
|
package/src/class-component.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { renderWithRootRuntime, useLayoutEffect, useRef, type RootRuntime } from "./hooks.js";
|
|
2
|
-
import type
|
|
2
|
+
import { isReactCompatElement, type ReactCompatElement, type ReactCompatNode } from "./element.js";
|
|
3
3
|
import { withHydrationComponentStack, type RenderOptions } from "./hydration.js";
|
|
4
4
|
import type { ReconcileNode, ReconcileResult } from "./reconcile-types.js";
|
|
5
5
|
import { isThenable } from "./thenable.js";
|
|
@@ -239,6 +239,7 @@ export function reconcileClassComponent(
|
|
|
239
239
|
rendered.type,
|
|
240
240
|
rendered.instance,
|
|
241
241
|
error,
|
|
242
|
+
componentStackFromNode(rendered.node, getClassComponentName(rendered.type)),
|
|
242
243
|
);
|
|
243
244
|
|
|
244
245
|
if (fallbackNode === undefined) {
|
|
@@ -387,6 +388,7 @@ export function recoverClassComponentError(
|
|
|
387
388
|
type: ClassComponentType,
|
|
388
389
|
instance: ClassComponentInstance,
|
|
389
390
|
error: unknown,
|
|
391
|
+
componentStack = componentStackFromClassType(type),
|
|
390
392
|
): ReactCompatNode | undefined {
|
|
391
393
|
if (isThenable(error) || !isErrorBoundaryClass(type, instance)) {
|
|
392
394
|
return undefined;
|
|
@@ -403,7 +405,9 @@ export function recoverClassComponentError(
|
|
|
403
405
|
};
|
|
404
406
|
}
|
|
405
407
|
|
|
406
|
-
instance.componentDidCatch?.(normalizedError, {
|
|
408
|
+
instance.componentDidCatch?.(normalizedError, {
|
|
409
|
+
componentStack,
|
|
410
|
+
});
|
|
407
411
|
return instance.render();
|
|
408
412
|
}
|
|
409
413
|
|
|
@@ -419,6 +423,35 @@ function getClassComponentName(type: ClassComponentType): string {
|
|
|
419
423
|
return type.name === "" ? "Anonymous" : type.name;
|
|
420
424
|
}
|
|
421
425
|
|
|
426
|
+
function componentStackFromClassType(type: ClassComponentType): string {
|
|
427
|
+
return `\n at ${getClassComponentName(type)}`;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
function componentStackFromNode(node: ReactCompatNode, boundaryName: string): string {
|
|
431
|
+
const childName = componentNameFromNode(node);
|
|
432
|
+
return childName === undefined || childName === boundaryName
|
|
433
|
+
? `\n at ${boundaryName}`
|
|
434
|
+
: `\n at ${childName}\n at ${boundaryName}`;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
function componentNameFromNode(node: ReactCompatNode): string | undefined {
|
|
438
|
+
if (!isReactCompatElement(node)) {
|
|
439
|
+
return undefined;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
if (typeof node.type === "string") {
|
|
443
|
+
return node.type;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
const displayName = (node.type as { displayName?: unknown }).displayName;
|
|
447
|
+
if (typeof displayName === "string" && displayName !== "") {
|
|
448
|
+
return displayName;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
const name = (node.type as { name?: unknown }).name;
|
|
452
|
+
return typeof name === "string" && name !== "" ? name : "Anonymous";
|
|
453
|
+
}
|
|
454
|
+
|
|
422
455
|
export function reconcileErrorBoundary(
|
|
423
456
|
parent: ParentNode,
|
|
424
457
|
previousNodes: readonly Node[],
|
package/src/dom-props.ts
CHANGED
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
setAppliedProps,
|
|
4
4
|
ensureDelegatedEventListenersForProp,
|
|
5
5
|
} from "./host-event-binder.js";
|
|
6
|
-
import { HOST_OWN_PROPS_META } from "./element.js";
|
|
7
6
|
import { reportRecoverable, type RenderOptions } from "./hydration.js";
|
|
8
7
|
import {
|
|
9
8
|
isDangerousHtmlAttribute,
|
|
@@ -30,13 +29,6 @@ export function applyProps(
|
|
|
30
29
|
const nextProps = sanitizeMetaRefreshElementProps(element, props);
|
|
31
30
|
|
|
32
31
|
if (previous === undefined && !preserveHydrationAttributes) {
|
|
33
|
-
if (applyInitialRowProps(element, nextProps)) {
|
|
34
|
-
setAppliedProps(element, {
|
|
35
|
-
props: nextProps,
|
|
36
|
-
});
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
32
|
applyInitialProps(element, nextProps, path, options);
|
|
41
33
|
setAppliedProps(element, {
|
|
42
34
|
props: nextProps,
|
|
@@ -285,28 +277,6 @@ function applyInitialProps(
|
|
|
285
277
|
|
|
286
278
|
}
|
|
287
279
|
|
|
288
|
-
function applyInitialRowProps(
|
|
289
|
-
element: HostElement,
|
|
290
|
-
props: Record<string, unknown>,
|
|
291
|
-
): boolean {
|
|
292
|
-
const meta = (props as { [HOST_OWN_PROPS_META]?: number })[HOST_OWN_PROPS_META];
|
|
293
|
-
|
|
294
|
-
if (meta === undefined) {
|
|
295
|
-
return false;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
element.setAttribute("data-key", String(props["data-key"]));
|
|
299
|
-
|
|
300
|
-
if ((meta & 1) !== 0) {
|
|
301
|
-
element.setAttribute("class", "selected");
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
if ((meta & 2) !== 0) {
|
|
305
|
-
element.setAttribute("data-selected", "true");
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
return true;
|
|
309
|
-
}
|
|
310
280
|
|
|
311
281
|
export function applyPostChildFormProps(
|
|
312
282
|
element: Element,
|