From 408d20cb47d17525c33f3afd0c49c3e404516664 Mon Sep 17 00:00:00 2001 From: Markus Wendorf Date: Wed, 11 Nov 2026 15:02:19 +0100 Subject: [PATCH] perf: import ramda functions from per-function modules Root imports from 'ramda' pull the whole library into bundles that don't tree-shake (e.g. Metro by default). Per-function 'ramda/src/*' imports keep only the used functions and are also the smallest with Expo's tree shaking enabled. Co-Authored-By: Claude Opus 5.5 --- packages/render/src/RenderHTMLSource.tsx | 2 +- packages/render/src/context/ListStyleSpecsProvider.tsx | 2 +- packages/render/src/context/RenderersPropsProvider.tsx | 2 +- packages/render/src/elements/ListElement.tsx | 2 +- packages/render/src/elements/extractImageStyleProps.ts | 2 +- packages/render/src/helpers/selectSharedProps.ts | 5 ++++- packages/render/src/helpers/splitBoxModelStyle.ts | 3 ++- packages/render/src/hooks/useProfiler.ts | 2 +- packages/transient-render-engine/src/TRenderEngine.ts | 2 +- packages/transient-render-engine/src/styles/TStyles.ts | 4 +++- packages/transient-render-engine/src/tree/TTextCtor.ts | 2 +- 11 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/render/src/RenderHTMLSource.tsx b/packages/render/src/RenderHTMLSource.tsx index 2ededa7f..f71fea73 100644 --- a/packages/render/src/RenderHTMLSource.tsx +++ b/packages/render/src/RenderHTMLSource.tsx @@ -1,4 +1,4 @@ -import { equals } from 'ramda'; +import equals from 'ramda/src/equals'; import React, { memo, ReactElement, useMemo } from 'react'; import { Dimensions } from 'react-native'; import ttreeEventsContext from './context/ttreeEventsContext'; diff --git a/packages/render/src/context/ListStyleSpecsProvider.tsx b/packages/render/src/context/ListStyleSpecsProvider.tsx index 9cb0c3a9..736e8b35 100644 --- a/packages/render/src/context/ListStyleSpecsProvider.tsx +++ b/packages/render/src/context/ListStyleSpecsProvider.tsx @@ -1,6 +1,6 @@ /* eslint-disable react-native/no-inline-styles */ import { MarkerBoxProps } from '@jsamr/react-native-li'; -import { mapObjIndexed } from 'ramda'; +import mapObjIndexed from 'ramda/src/mapObjIndexed'; import React, { createContext, PropsWithChildren, diff --git a/packages/render/src/context/RenderersPropsProvider.tsx b/packages/render/src/context/RenderersPropsProvider.tsx index 9a4cce92..e0140e68 100644 --- a/packages/render/src/context/RenderersPropsProvider.tsx +++ b/packages/render/src/context/RenderersPropsProvider.tsx @@ -1,5 +1,5 @@ import React, { PropsWithChildren, useMemo } from 'react'; -import { mergeDeepRight } from 'ramda'; +import mergeDeepRight from 'ramda/src/mergeDeepRight'; import { RenderersProps, RenderHTMLPassedProps } from '../shared-types'; import defaultRendererProps from './defaultRendererProps'; diff --git a/packages/render/src/elements/ListElement.tsx b/packages/render/src/elements/ListElement.tsx index e5d057be..6cbf5ce8 100644 --- a/packages/render/src/elements/ListElement.tsx +++ b/packages/render/src/elements/ListElement.tsx @@ -10,7 +10,7 @@ import type { } from '../shared-types'; import { useTChildrenRenderer } from '../context/TChildrenRendererContext'; import { DEFAULT_TEXT_COLOR } from '../constants'; -import { pick } from 'ramda'; +import pick from 'ramda/src/pick'; import { useListStyleSpecs } from '../context/ListStyleSpecsProvider'; export interface ListElementProps diff --git a/packages/render/src/elements/extractImageStyleProps.ts b/packages/render/src/elements/extractImageStyleProps.ts index b43fbf84..6e226bfb 100644 --- a/packages/render/src/elements/extractImageStyleProps.ts +++ b/packages/render/src/elements/extractImageStyleProps.ts @@ -1,5 +1,5 @@ import { WebBlockStyles } from '@native-html/transient-render-engine'; -import { pick } from 'ramda'; +import pick from 'ramda/src/pick'; import { ImageStyle } from 'react-native'; const keysToExtract: (keyof ImageStyle)[] = [ diff --git a/packages/render/src/helpers/selectSharedProps.ts b/packages/render/src/helpers/selectSharedProps.ts index d3c438a4..5ecdf4e0 100644 --- a/packages/render/src/helpers/selectSharedProps.ts +++ b/packages/render/src/helpers/selectSharedProps.ts @@ -1,4 +1,7 @@ -import { mergeRight, pick, pickBy, pipe } from 'ramda'; +import mergeRight from 'ramda/src/mergeRight'; +import pick from 'ramda/src/pick'; +import pickBy from 'ramda/src/pickBy'; +import pipe from 'ramda/src/pipe'; import { RenderHTMLProps, RenderHTMLAmbiantSharedProps } from '../shared-types'; import defaultSharedProps from '../context/defaultSharedProps'; diff --git a/packages/render/src/helpers/splitBoxModelStyle.ts b/packages/render/src/helpers/splitBoxModelStyle.ts index 86a7692b..df01a198 100644 --- a/packages/render/src/helpers/splitBoxModelStyle.ts +++ b/packages/render/src/helpers/splitBoxModelStyle.ts @@ -2,7 +2,8 @@ import { NativeBlockStyles, NativeTextStyles } from '@native-html/transient-render-engine'; -import { omit, pick } from 'ramda'; +import omit from 'ramda/src/omit'; +import pick from 'ramda/src/pick'; type NativeStyles = NativeBlockStyles | NativeTextStyles; diff --git a/packages/render/src/hooks/useProfiler.ts b/packages/render/src/hooks/useProfiler.ts index eba28daa..72285476 100644 --- a/packages/render/src/hooks/useProfiler.ts +++ b/packages/render/src/hooks/useProfiler.ts @@ -1,5 +1,5 @@ import { useCallback, useRef } from 'react'; -import { identity } from 'ramda'; +import identity from 'ramda/src/identity'; declare const performance: { now: () => number }; diff --git a/packages/transient-render-engine/src/TRenderEngine.ts b/packages/transient-render-engine/src/TRenderEngine.ts index e270ad46..5a6c43ee 100644 --- a/packages/transient-render-engine/src/TRenderEngine.ts +++ b/packages/transient-render-engine/src/TRenderEngine.ts @@ -2,7 +2,7 @@ import { collapse } from './flow/collapse'; import { hoist } from './flow/hoist'; import { translateDocument } from './flow/translate'; import { ParserOptions as HTMLParserOptions } from 'htmlparser2'; -import { omit } from 'ramda'; +import omit from 'ramda/src/omit'; import { CSSProcessorConfig, defaultCSSProcessorConfig diff --git a/packages/transient-render-engine/src/styles/TStyles.ts b/packages/transient-render-engine/src/styles/TStyles.ts index 712c88ea..0e5de43b 100644 --- a/packages/transient-render-engine/src/styles/TStyles.ts +++ b/packages/transient-render-engine/src/styles/TStyles.ts @@ -1,5 +1,7 @@ import { CSSProperties, CSSProcessedProps } from '@native-html/css-processor'; -import { compose, isNil, not } from 'ramda'; +import compose from 'ramda/src/compose'; +import isNil from 'ramda/src/isNil'; +import not from 'ramda/src/not'; const notNil = compose(not, isNil); /** diff --git a/packages/transient-render-engine/src/tree/TTextCtor.ts b/packages/transient-render-engine/src/tree/TTextCtor.ts index 1a87b7c4..fedd9d13 100644 --- a/packages/transient-render-engine/src/tree/TTextCtor.ts +++ b/packages/transient-render-engine/src/tree/TTextCtor.ts @@ -1,7 +1,7 @@ import { Text } from '../dom/dom-utils'; import HTMLContentModel from '../model/HTMLContentModel'; -import { compose } from 'ramda'; +import compose from 'ramda/src/compose'; import { TNodeInit, TNodeImpl } from './tree-types'; import { normalizeWhitespaces,