react-native-boost 1.1.0 → 1.2.0
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 +5 -2
- package/dist/plugin/esm/index.mjs +103 -54
- package/dist/plugin/esm/index.mjs.map +1 -1
- package/dist/plugin/index.d.ts +10 -0
- package/dist/plugin/index.js +103 -54
- package/dist/plugin/index.js.map +1 -1
- package/dist/runtime/esm/index.mjs +16 -4
- package/dist/runtime/esm/index.mjs.map +1 -1
- package/dist/runtime/esm/index.web.mjs +2 -1
- package/dist/runtime/esm/index.web.mjs.map +1 -1
- package/dist/runtime/index.d.ts +16 -3
- package/dist/runtime/index.js +15 -2
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/index.web.d.ts +2 -1
- package/dist/runtime/index.web.js +2 -0
- package/dist/runtime/index.web.js.map +1 -1
- package/package.json +5 -1
- package/src/plugin/index.ts +5 -1
- package/src/plugin/optimizers/text/index.ts +93 -31
- package/src/plugin/optimizers/view/index.ts +13 -22
- package/src/plugin/types/index.ts +17 -1
- package/src/plugin/utils/common/attributes.ts +71 -12
- package/src/plugin/utils/common/validation.ts +32 -9
- package/src/runtime/index.ts +39 -5
- package/src/runtime/index.web.ts +5 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../src/plugin/utils/plugin-error.ts","../../../src/plugin/utils/helpers.ts","../../../src/plugin/utils/common/validation.ts","../../../src/plugin/utils/constants.ts","../../../src/plugin/utils/common/attributes.ts","../../../src/plugin/utils/common/base.ts","../../../src/plugin/optimizers/text/index.ts","../../../src/plugin/utils/logger.ts","../../../src/plugin/optimizers/view/index.ts","../../../src/plugin/index.ts"],"sourcesContent":["export default class PluginError extends Error {\n constructor(message: string) {\n super(`[react-native-boost] Babel plugin exception: ${message}`);\n this.name = 'PluginError';\n }\n}\n","export const ensureArray = <T>(value: T | T[]): T[] => {\n if (Array.isArray(value)) return value;\n return [value];\n};\n\nexport type BailoutCheck = {\n reason: string;\n shouldBail: () => boolean;\n};\n\nexport const getFirstBailoutReason = (checks: readonly BailoutCheck[]): string | null => {\n for (const check of checks) {\n if (check.shouldBail()) {\n return check.reason;\n }\n }\n\n return null;\n};\n","import { NodePath, types as t } from '@babel/core';\nimport { ensureArray } from '../helpers';\nimport { HubFile } from '../../types';\nimport { minimatch } from 'minimatch';\nimport nodePath from 'node:path';\nimport PluginError from '../plugin-error';\n\n/**\n * Checks if the file is in the list of ignored files.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param ignores - List of glob paths (absolute or relative to import.meta.dirname).\n * @returns true if the file matches any of the ignore patterns.\n */\nexport const isIgnoredFile = (path: NodePath<t.JSXOpeningElement>, ignores: string[]): boolean => {\n const hub = path.hub as unknown;\n const file = typeof hub === 'object' && hub !== null && 'file' in hub ? (hub.file as HubFile) : undefined;\n\n if (!file) {\n throw new PluginError('No file found in Babel hub');\n }\n\n const fileName = file.opts.filename;\n\n // Use the current working directory which typically corresponds to the user's project root.\n const baseDirectory = 'cwd' in file.opts ? (file.opts.cwd as string) : process.cwd();\n\n // Iterate through the ignore patterns.\n for (const pattern of ignores) {\n // If the pattern is not absolute, join it with the baseDir\n const absolutePattern = nodePath.isAbsolute(pattern) ? pattern : nodePath.join(baseDirectory, pattern);\n\n // Check if the file name matches the glob pattern.\n if (minimatch(fileName, absolutePattern, { dot: true })) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const isForcedLine = (path: NodePath<t.JSXOpeningElement>): boolean => {\n return hasDecoratorComment(path, '@boost-force');\n};\n\nexport const isIgnoredLine = (path: NodePath<t.JSXOpeningElement>): boolean => {\n return hasDecoratorComment(path, '@boost-ignore');\n};\n\n/**\n * Checks if the JSX element has a preceding comment containing the given decorator string.\n *\n * Scans the JSXOpeningElement's own leading comments, the parent element's comments,\n * ObjectProperty containers, and backward siblings.\n */\nfunction hasDecoratorComment(path: NodePath<t.JSXOpeningElement>, decorator: string): boolean {\n if (path.node.leadingComments?.some((comment) => comment.value.includes(decorator))) {\n return true;\n }\n\n const jsxElementPath = path.parentPath;\n if (jsxElementPath.node.leadingComments?.some((comment) => comment.value.includes(decorator))) {\n return true;\n }\n\n // Check leading comments on the ObjectProperty (if the JSX element is a value inside an object literal).\n const propertyPath = jsxElementPath.parentPath;\n if (\n propertyPath &&\n propertyPath.isObjectProperty() &&\n propertyPath.node.leadingComments?.some((comment) => comment.value.includes(decorator))\n ) {\n return true;\n }\n\n if (!jsxElementPath.parentPath) return false;\n\n const containerPath = jsxElementPath.parentPath;\n const siblings = ensureArray(containerPath.get('children'));\n const index = siblings.findIndex((sibling) => sibling.node === jsxElementPath.node);\n if (index === -1) return false;\n\n for (let index_ = index - 1; index_ >= 0; index_--) {\n const sibling = siblings[index_];\n if (sibling.isJSXText() && sibling.node.value.trim() === '') {\n continue;\n }\n if (sibling.isJSXExpressionContainer()) {\n const expression = sibling.get('expression');\n if (expression && expression.node) {\n const comments = [\n ...(expression.node.leadingComments || []),\n ...(expression.node.trailingComments || []),\n ...(expression.node.innerComments || []),\n ].map((comment) => comment.value.trim());\n if (comments.some((comment) => comment.includes(decorator))) {\n return true;\n }\n }\n }\n if (\n sibling.node.leadingComments &&\n sibling.node.leadingComments.some((comment) => comment.value.includes(decorator))\n ) {\n return true;\n }\n break;\n }\n return false;\n}\n\n/**\n * Checks if the path represents a valid JSX component with the specified name.\n *\n * @param path - The NodePath to check.\n * @param componentName - The name of the component to validate against.\n * @returns true if the path is a valid JSX component with the specified name.\n */\nexport const isValidJSXComponent = (path: NodePath<t.JSXOpeningElement>, componentName: string): boolean => {\n // Check if the node name is a JSX identifier\n if (!t.isJSXIdentifier(path.node.name)) return false;\n\n // Check if the parent is a JSX element\n const parent = path.parent;\n if (!t.isJSXElement(parent)) return false;\n\n // For aliasing, we check if the underlying imported name matches the expected name\n const componentIdentifier = path.node.name.name;\n const binding = path.scope.getBinding(componentIdentifier);\n if (!binding) return false;\n if (\n binding.kind === 'module' &&\n t.isImportDeclaration(binding.path.parent) &&\n t.isImportSpecifier(binding.path.node)\n ) {\n const imported = binding.path.node.imported;\n if (t.isIdentifier(imported)) {\n return imported.name === componentName;\n }\n }\n\n // Fallback to string match if binding is not available\n return path.node.name.name === componentName;\n};\n\n/**\n * Checks if the component is imported from 'react-native' and not from a custom module.\n *\n * @param path - The NodePath to check.\n * @param expectedImportedName - The expected import name of the component (we'll also check for aliased imports).\n * @returns true if the component is imported from 'react-native'\n */\nexport const isReactNativeImport = (path: NodePath<t.JSXOpeningElement>, expectedImportedName: string): boolean => {\n if (!t.isJSXIdentifier(path.node.name)) return false;\n const localName = path.node.name.name;\n const binding = path.scope.getBinding(localName);\n if (!binding) return false;\n if (binding.kind === 'module') {\n const importDeclaration = binding.path.parent;\n if (!t.isImportDeclaration(importDeclaration)) return false;\n // Verify it's imported from 'react-native'\n if (importDeclaration.source.value !== 'react-native') return false;\n\n // For named imports, check the imported name (not the alias)\n if (t.isImportSpecifier(binding.path.node)) {\n const imported = binding.path.node.imported;\n if (t.isIdentifier(imported)) {\n return imported.name === expectedImportedName;\n }\n }\n\n // For default imports, we just assume it's valid if imported from react-native.\n if (t.isImportDefaultSpecifier(binding.path.node)) {\n return true;\n }\n }\n return false;\n};\n\ntype AncestorClassification = 'safe' | 'text' | 'unknown';\nexport type ViewAncestorClassification = AncestorClassification;\ntype ScopeBinding = NonNullable<ReturnType<NodePath<t.Node>['scope']['getBinding']>>;\n\ntype AncestorAnalysisContext = {\n componentCache: WeakMap<t.Node, AncestorClassification>;\n componentInProgress: WeakSet<t.Node>;\n renderExpressionInProgress: WeakSet<t.Node>;\n};\n\nexport const getViewAncestorClassification = (path: NodePath<t.JSXOpeningElement>): ViewAncestorClassification => {\n return classifyViewAncestors(path);\n};\n\nfunction classifyViewAncestors(path: NodePath<t.JSXOpeningElement>): AncestorClassification {\n const context: AncestorAnalysisContext = {\n componentCache: new WeakMap<t.Node, AncestorClassification>(),\n componentInProgress: new WeakSet<t.Node>(),\n renderExpressionInProgress: new WeakSet<t.Node>(),\n };\n\n let classification: AncestorClassification = 'safe';\n let ancestorPath: NodePath<t.Node> | null = path.parentPath.parentPath;\n\n while (ancestorPath) {\n if (ancestorPath.isJSXElement()) {\n const ancestorClassification = classifyJSXElementAsAncestor(ancestorPath, context);\n classification = mergeAncestorClassification(classification, ancestorClassification);\n\n if (classification === 'text') return classification;\n }\n\n ancestorPath = ancestorPath.parentPath;\n }\n\n return classification;\n}\n\nfunction classifyJSXElementAsAncestor(\n path: NodePath<t.JSXElement>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n const openingElementName = path.node.openingElement.name;\n\n if (t.isJSXIdentifier(openingElementName)) {\n return classifyJSXIdentifierAsAncestor(path, openingElementName.name, context);\n }\n\n if (t.isJSXMemberExpression(openingElementName)) {\n return classifyJSXMemberExpressionAsAncestor(path, openingElementName);\n }\n\n return 'unknown';\n}\n\nfunction classifyJSXIdentifierAsAncestor(\n path: NodePath<t.JSXElement>,\n identifierName: string,\n context: AncestorAnalysisContext\n): AncestorClassification {\n if (identifierName === 'Fragment') return 'safe';\n\n const binding = path.scope.getBinding(identifierName);\n if (!binding) return 'unknown';\n\n return classifyBindingAsAncestor(binding, context);\n}\n\nfunction classifyJSXMemberExpressionAsAncestor(\n path: NodePath<t.JSXElement>,\n expression: t.JSXMemberExpression\n): AncestorClassification {\n if (!t.isJSXIdentifier(expression.object) || !t.isJSXIdentifier(expression.property)) {\n return 'unknown';\n }\n\n const binding = path.scope.getBinding(expression.object.name);\n if (!binding || binding.kind !== 'module' || !t.isImportNamespaceSpecifier(binding.path.node)) {\n return 'unknown';\n }\n\n const importDeclaration = binding.path.parent;\n if (!t.isImportDeclaration(importDeclaration)) return 'unknown';\n\n if (importDeclaration.source.value === 'react-native') {\n return expression.property.name === 'Text' ? 'text' : 'safe';\n }\n\n if (importDeclaration.source.value === 'react' && expression.property.name === 'Fragment') {\n return 'safe';\n }\n\n return 'unknown';\n}\n\nfunction classifyBindingAsAncestor(binding: ScopeBinding, context: AncestorAnalysisContext): AncestorClassification {\n if (binding.kind === 'module') {\n return classifyModuleBindingAsAncestor(binding);\n }\n\n return classifyLocalBindingAsAncestor(binding, context);\n}\n\nfunction classifyModuleBindingAsAncestor(binding: ScopeBinding): AncestorClassification {\n const importDeclaration = binding.path.parent;\n if (!t.isImportDeclaration(importDeclaration)) return 'unknown';\n\n const source = importDeclaration.source.value;\n if (source === 'react-native') {\n if (t.isImportSpecifier(binding.path.node)) {\n const importedName = getImportSpecifierImportedName(binding.path.node);\n if (!importedName) return 'unknown';\n return importedName === 'Text' ? 'text' : 'safe';\n }\n\n if (t.isImportNamespaceSpecifier(binding.path.node)) {\n return 'safe';\n }\n\n return 'unknown';\n }\n\n if (source === 'react' && t.isImportSpecifier(binding.path.node)) {\n const importedName = getImportSpecifierImportedName(binding.path.node);\n if (importedName === 'Fragment') return 'safe';\n }\n\n return 'unknown';\n}\n\nfunction classifyLocalBindingAsAncestor(\n binding: ScopeBinding,\n context: AncestorAnalysisContext\n): AncestorClassification {\n const cacheKey = binding.path.node;\n const cached = context.componentCache.get(cacheKey);\n if (cached) return cached;\n\n if (context.componentInProgress.has(cacheKey)) {\n return 'unknown';\n }\n\n context.componentInProgress.add(cacheKey);\n\n let classification: AncestorClassification;\n if (binding.path.isFunctionDeclaration()) {\n classification = analyzeFunctionComponent(binding.path, context);\n } else if (binding.path.isVariableDeclarator()) {\n classification = analyzeVariableDeclaratorComponent(binding.path, context);\n } else {\n classification = 'unknown';\n }\n\n context.componentInProgress.delete(cacheKey);\n context.componentCache.set(cacheKey, classification);\n\n return classification;\n}\n\nfunction analyzeVariableDeclaratorComponent(\n path: NodePath<t.VariableDeclarator>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n const initPath = path.get('init');\n if (!initPath.node) return 'unknown';\n\n if (initPath.isArrowFunctionExpression() || initPath.isFunctionExpression()) {\n return analyzeFunctionComponent(initPath, context);\n }\n\n if (initPath.isCallExpression()) {\n return analyzeCallWrappedComponent(initPath, context);\n }\n\n if (initPath.isIdentifier()) {\n const aliasBinding = path.scope.getBinding(initPath.node.name);\n if (!aliasBinding) return 'unknown';\n\n return classifyBindingAsAncestor(aliasBinding, context);\n }\n\n return 'unknown';\n}\n\nfunction analyzeCallWrappedComponent(\n path: NodePath<t.CallExpression>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n if (!isReactMemoOrForwardRefCall(path)) return 'unknown';\n\n const [firstArgumentPath] = path.get('arguments');\n if (!firstArgumentPath?.node) return 'unknown';\n\n if (firstArgumentPath.isArrowFunctionExpression() || firstArgumentPath.isFunctionExpression()) {\n return analyzeFunctionComponent(firstArgumentPath, context);\n }\n\n if (firstArgumentPath.isIdentifier()) {\n const wrappedComponentBinding = path.scope.getBinding(firstArgumentPath.node.name);\n if (!wrappedComponentBinding) return 'unknown';\n\n return classifyBindingAsAncestor(wrappedComponentBinding, context);\n }\n\n if (firstArgumentPath.isCallExpression()) {\n return analyzeCallWrappedComponent(firstArgumentPath, context);\n }\n\n return 'unknown';\n}\n\nfunction isReactMemoOrForwardRefCall(path: NodePath<t.CallExpression>): boolean {\n const calleePath = path.get('callee');\n\n if (calleePath.isIdentifier()) {\n if (!isMemoOrForwardRefName(calleePath.node.name)) return false;\n\n const binding = path.scope.getBinding(calleePath.node.name);\n return isReactImportBinding(binding);\n }\n\n if (calleePath.isMemberExpression()) {\n const objectPath = calleePath.get('object');\n const propertyPath = calleePath.get('property');\n\n if (!objectPath.isIdentifier() || !propertyPath.isIdentifier()) return false;\n if (!isMemoOrForwardRefName(propertyPath.node.name)) return false;\n\n const objectBinding = path.scope.getBinding(objectPath.node.name);\n return isReactImportBinding(objectBinding);\n }\n\n return false;\n}\n\nfunction isMemoOrForwardRefName(name: string): boolean {\n return name === 'memo' || name === 'forwardRef';\n}\n\nfunction isReactImportBinding(binding: ScopeBinding | undefined): binding is ScopeBinding {\n if (!binding || binding.kind !== 'module') return false;\n\n const importDeclaration = binding.path.parent;\n return t.isImportDeclaration(importDeclaration) && importDeclaration.source.value === 'react';\n}\n\nfunction analyzeFunctionComponent(\n path: NodePath<t.FunctionDeclaration | t.FunctionExpression | t.ArrowFunctionExpression>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n const bodyPath = path.get('body');\n\n if (!bodyPath.isBlockStatement()) {\n return analyzeRenderExpression(bodyPath as NodePath<t.Node>, context);\n }\n\n let classification: AncestorClassification = 'safe';\n\n for (const statementPath of bodyPath.get('body')) {\n if (!statementPath.isReturnStatement()) continue;\n\n const argumentPath = statementPath.get('argument');\n if (!argumentPath.node) continue;\n\n const returnClassification = analyzeRenderExpression(argumentPath as NodePath<t.Node>, context);\n classification = mergeAncestorClassification(classification, returnClassification);\n\n if (classification === 'text') return classification;\n }\n\n return classification;\n}\n\nfunction analyzeRenderExpression(path: NodePath<t.Node>, context: AncestorAnalysisContext): AncestorClassification {\n if (path.isJSXFragment()) {\n return analyzeJSXChildren(path.get('children'), context);\n }\n\n let classification: AncestorClassification = 'safe';\n let hasJSX = false;\n\n path.traverse({\n JSXOpeningElement(jsxPath) {\n hasJSX = true;\n\n const jsxElementPath = jsxPath.parentPath;\n if (!jsxElementPath.isJSXElement()) {\n classification = mergeAncestorClassification(classification, 'unknown');\n return;\n }\n\n const jsxClassification = classifyJSXElementAsAncestor(jsxElementPath, context);\n classification = mergeAncestorClassification(classification, jsxClassification);\n\n if (classification === 'text') {\n jsxPath.stop();\n }\n },\n });\n\n if (hasJSX) return classification;\n\n if (path.isIdentifier()) {\n return analyzeIdentifierRenderExpression(path, context);\n }\n\n if (path.isMemberExpression() && isPropsChildrenMemberExpression(path.node)) {\n return 'safe';\n }\n\n if (\n path.isNullLiteral() ||\n path.isBooleanLiteral() ||\n path.isNumericLiteral() ||\n path.isStringLiteral() ||\n path.isBigIntLiteral()\n ) {\n return 'safe';\n }\n\n return 'unknown';\n}\n\nfunction analyzeJSXChildren(\n children: Array<NodePath<t.JSXText | t.JSXExpressionContainer | t.JSXSpreadChild | t.JSXElement | t.JSXFragment>>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n let classification: AncestorClassification = 'safe';\n\n for (const childPath of children) {\n if (childPath.isJSXElement()) {\n const childClassification = classifyJSXElementAsAncestor(childPath, context);\n classification = mergeAncestorClassification(classification, childClassification);\n } else if (childPath.isJSXFragment()) {\n const fragmentClassification = analyzeJSXChildren(childPath.get('children'), context);\n classification = mergeAncestorClassification(classification, fragmentClassification);\n } else if (childPath.isJSXExpressionContainer()) {\n const expressionPath = childPath.get('expression');\n if (!expressionPath.node || expressionPath.isJSXEmptyExpression()) continue;\n\n const expressionClassification = analyzeRenderExpression(expressionPath as NodePath<t.Node>, context);\n classification = mergeAncestorClassification(classification, expressionClassification);\n } else if (childPath.isJSXSpreadChild()) {\n classification = mergeAncestorClassification(classification, 'unknown');\n }\n\n if (classification === 'text') {\n return classification;\n }\n }\n\n return classification;\n}\n\nfunction analyzeIdentifierRenderExpression(\n path: NodePath<t.Identifier>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n if (path.node.name === 'children') return 'safe';\n\n const binding = path.scope.getBinding(path.node.name);\n if (!binding) return 'unknown';\n\n if (binding.kind === 'param') {\n return binding.identifier.name === 'children' ? 'safe' : 'unknown';\n }\n\n if (!binding.path.isVariableDeclarator()) return 'unknown';\n\n const cacheKey = binding.path.node;\n if (context.renderExpressionInProgress.has(cacheKey)) {\n return 'unknown';\n }\n\n const initPath = binding.path.get('init');\n if (!initPath.node) return 'unknown';\n\n context.renderExpressionInProgress.add(cacheKey);\n const classification = analyzeRenderExpression(initPath as NodePath<t.Node>, context);\n context.renderExpressionInProgress.delete(cacheKey);\n\n return classification;\n}\n\nfunction isPropsChildrenMemberExpression(expression: t.MemberExpression): boolean {\n if (!t.isIdentifier(expression.object, { name: 'props' })) return false;\n if (!t.isIdentifier(expression.property, { name: 'children' })) return false;\n return !expression.computed;\n}\n\nfunction mergeAncestorClassification(\n current: AncestorClassification,\n next: AncestorClassification\n): AncestorClassification {\n if (current === 'text' || next === 'text') return 'text';\n if (current === 'unknown' || next === 'unknown') return 'unknown';\n return 'safe';\n}\n\nfunction getImportSpecifierImportedName(specifier: t.ImportSpecifier): string | undefined {\n if (t.isIdentifier(specifier.imported)) {\n return specifier.imported.name;\n }\n\n if (t.isStringLiteral(specifier.imported)) {\n return specifier.imported.value;\n }\n\n return undefined;\n}\n\n/**\n * Checks whether the closest JSX element ancestor is expo-router Link with a truthy asChild prop.\n *\n * We only bail on Text optimization when Link is effectively slotting that Text as the clickable child.\n */\nexport const hasExpoRouterLinkParentWithAsChild = (path: NodePath<t.JSXOpeningElement>): boolean => {\n const textElementPath = path.parentPath;\n if (!textElementPath.isJSXElement()) return false;\n\n let ancestorPath: NodePath<t.Node> | null = textElementPath.parentPath;\n\n while (ancestorPath) {\n if (ancestorPath.isJSXElement()) {\n if (!isExpoRouterLinkElement(ancestorPath)) return false;\n\n return hasTruthyAsChildAttribute(ancestorPath.node.openingElement.attributes);\n }\n\n ancestorPath = ancestorPath.parentPath;\n }\n\n return false;\n};\n\nfunction isExpoRouterLinkElement(path: NodePath<t.JSXElement>): boolean {\n const openingElementName = path.node.openingElement.name;\n\n if (t.isJSXIdentifier(openingElementName)) {\n const binding = path.scope.getBinding(openingElementName.name);\n if (!binding || binding.kind !== 'module') return false;\n if (!t.isImportSpecifier(binding.path.node)) return false;\n\n const importDeclaration = binding.path.parent;\n if (!t.isImportDeclaration(importDeclaration) || importDeclaration.source.value !== 'expo-router') return false;\n\n const imported = binding.path.node.imported;\n return t.isIdentifier(imported, { name: 'Link' }) || (t.isStringLiteral(imported) && imported.value === 'Link');\n }\n\n if (t.isJSXMemberExpression(openingElementName)) {\n if (!t.isJSXIdentifier(openingElementName.object)) return false;\n if (!t.isJSXIdentifier(openingElementName.property, { name: 'Link' })) return false;\n\n const namespaceBinding = path.scope.getBinding(openingElementName.object.name);\n if (!namespaceBinding || namespaceBinding.kind !== 'module') return false;\n if (!t.isImportNamespaceSpecifier(namespaceBinding.path.node)) return false;\n\n const importDeclaration = namespaceBinding.path.parent;\n return t.isImportDeclaration(importDeclaration) && importDeclaration.source.value === 'expo-router';\n }\n\n return false;\n}\n\nfunction hasTruthyAsChildAttribute(attributes: (t.JSXAttribute | t.JSXSpreadAttribute)[]): boolean {\n let asChildAttribute: t.JSXAttribute | undefined;\n\n for (const attribute of attributes) {\n if (t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name, { name: 'asChild' })) {\n asChildAttribute = attribute;\n }\n }\n\n if (!asChildAttribute) return false;\n\n return isJSXAttributeValueTruthy(asChildAttribute.value);\n}\n\nfunction isJSXAttributeValueTruthy(value: t.JSXAttribute['value']): boolean {\n if (!value) return true;\n if (t.isStringLiteral(value)) return value.value.length > 0;\n if (t.isJSXElement(value) || t.isJSXFragment(value)) return true;\n\n if (t.isJSXExpressionContainer(value)) {\n const staticTruthiness = getStaticExpressionTruthiness(value.expression);\n return staticTruthiness ?? true;\n }\n\n return true;\n}\n\nfunction getStaticExpressionTruthiness(expression: t.Expression | t.JSXEmptyExpression): boolean | undefined {\n if (t.isJSXEmptyExpression(expression)) return false;\n if (t.isBooleanLiteral(expression)) return expression.value;\n if (t.isNullLiteral(expression)) return false;\n if (t.isStringLiteral(expression)) return expression.value.length > 0;\n if (t.isNumericLiteral(expression)) return expression.value !== 0 && !Number.isNaN(expression.value);\n if (t.isBigIntLiteral(expression)) return expression.value !== '0';\n if (t.isIdentifier(expression, { name: 'undefined' })) return false;\n\n if (t.isTemplateLiteral(expression) && expression.expressions.length === 0) {\n return (expression.quasis[0]?.value.cooked ?? '').length > 0;\n }\n\n if (t.isUnaryExpression(expression, { operator: '!' })) {\n const staticTruthiness = getStaticExpressionTruthiness(expression.argument);\n return staticTruthiness === undefined ? undefined : !staticTruthiness;\n }\n\n return undefined;\n}\n","export const RUNTIME_MODULE_NAME = 'react-native-boost/runtime';\n\n/**\n * The set of accessibility properties that need to be normalized.\n */\nexport const ACCESSIBILITY_PROPERTIES = new Set([\n 'accessibilityLabel',\n 'aria-label',\n 'accessibilityState',\n 'aria-busy',\n 'aria-checked',\n 'aria-disabled',\n 'aria-expanded',\n 'aria-selected',\n 'accessible',\n]);\n\n// Maps the `userSelect` values to the corresponding boolean for the `selectable` prop\nexport const USER_SELECT_STYLE_TO_SELECTABLE_PROP: Record<string, boolean> = {\n auto: true,\n text: true,\n none: false,\n contain: true,\n all: true,\n};\n","import { NodePath, types as t } from '@babel/core';\nimport { ACCESSIBILITY_PROPERTIES } from '../constants';\nimport { USER_SELECT_STYLE_TO_SELECTABLE_PROP } from '../constants';\n\n/**\n * Checks if the JSX element has a blacklisted property.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param blacklist - The set of blacklisted properties.\n * @returns true if the JSX element has a blacklisted property.\n */\nexport const hasBlacklistedProperty = (path: NodePath<t.JSXOpeningElement>, blacklist: Set<string>): boolean => {\n return path.node.attributes.some((attribute) => {\n // Check direct attributes (e.g., onPress={handler})\n if (t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name) && blacklist.has(attribute.name.name)) {\n return true;\n }\n\n // Check spread attributes (e.g., {...props})\n if (t.isJSXSpreadAttribute(attribute)) {\n if (t.isIdentifier(attribute.argument)) {\n const binding = path.scope.getBinding(attribute.argument.name);\n let objectExpression: t.ObjectExpression | undefined;\n if (binding) {\n // If the binding node is a VariableDeclarator, use its initializer\n if (t.isVariableDeclarator(binding.path.node)) {\n objectExpression = binding.path.node.init as t.ObjectExpression;\n } else if (t.isObjectExpression(binding.path.node)) {\n objectExpression = binding.path.node;\n }\n }\n if (objectExpression && t.isObjectExpression(objectExpression)) {\n return objectExpression.properties.some((property) => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n return blacklist.has(property.key.name);\n }\n return false;\n });\n }\n }\n // Bail if we can't resolve the spread attribute\n return true;\n }\n\n // For other attribute types, assume no blacklisting\n return false;\n });\n};\n\n/**\n * Adds a default property to a JSX element if it's not already defined. It avoids adding a default\n * if it cannot statically determine whether the property is already set.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param key - The property key.\n * @param value - The default value expression.\n */\nexport const addDefaultProperty = (path: NodePath<t.JSXOpeningElement>, key: string, value: t.Expression) => {\n let propertyIsFound = false;\n let hasUnresolvableSpread = false;\n\n for (const attribute of path.node.attributes) {\n if (t.isJSXAttribute(attribute) && attribute.name.name === key) {\n propertyIsFound = true;\n break;\n }\n\n if (t.isJSXSpreadAttribute(attribute)) {\n if (t.isObjectExpression(attribute.argument)) {\n const propertyInSpread = attribute.argument.properties.some(\n (p) =>\n (t.isObjectProperty(p) && t.isIdentifier(p.key) && p.key.name === key) ||\n (t.isObjectProperty(p) && t.isStringLiteral(p.key) && p.key.value === key)\n );\n if (propertyInSpread) {\n propertyIsFound = true;\n break;\n }\n } else if (t.isIdentifier(attribute.argument)) {\n const binding = path.scope.getBinding(attribute.argument.name);\n if (\n binding?.path.node &&\n t.isVariableDeclarator(binding.path.node) &&\n t.isObjectExpression(binding.path.node.init)\n ) {\n const propertyInSpread = binding.path.node.init.properties.some(\n (p) =>\n (t.isObjectProperty(p) && t.isIdentifier(p.key) && p.key.name === key) ||\n (t.isObjectProperty(p) && t.isStringLiteral(p.key) && p.key.value === key)\n );\n if (propertyInSpread) {\n propertyIsFound = true;\n break;\n }\n } else {\n hasUnresolvableSpread = true;\n break;\n }\n } else {\n hasUnresolvableSpread = true;\n break;\n }\n }\n }\n\n if (!propertyIsFound && !hasUnresolvableSpread) {\n path.node.attributes.push(t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(value)));\n }\n};\n\n/**\n * Helper that builds an Object.assign expression out of the existing JSX attributes.\n * It handles both plain JSXAttributes and spread attributes.\n *\n * @param attributes - The attributes to build the expression from.\n * @returns The Object.assign expression.\n */\nexport const buildPropertiesFromAttributes = (attributes: (t.JSXAttribute | t.JSXSpreadAttribute)[]): t.Expression => {\n const arguments_: t.Expression[] = [];\n for (const attribute of attributes) {\n if (t.isJSXSpreadAttribute(attribute)) {\n arguments_.push(attribute.argument);\n } else if (t.isJSXAttribute(attribute)) {\n const key = attribute.name.name;\n let value: t.Expression;\n if (!attribute.value) {\n value = t.booleanLiteral(true);\n } else if (t.isStringLiteral(attribute.value)) {\n value = attribute.value;\n } else if (t.isJSXExpressionContainer(attribute.value)) {\n value = t.isJSXEmptyExpression(attribute.value.expression)\n ? t.booleanLiteral(true)\n : attribute.value.expression;\n } else {\n value = t.nullLiteral();\n }\n // If the key is not a valid JavaScript identifier (e.g. \"aria-label\"), use a string literal.\n const validIdentifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n const keyNode =\n typeof key === 'string' && validIdentifierRegex.test(key) ? t.identifier(key) : t.stringLiteral(key.toString());\n\n arguments_.push(t.objectExpression([t.objectProperty(keyNode, value)]));\n }\n }\n if (arguments_.length === 0) {\n return t.objectExpression([]);\n }\n return t.callExpression(t.memberExpression(t.identifier('Object'), t.identifier('assign')), [\n t.objectExpression([]),\n ...arguments_,\n ]);\n};\n\n/**\n * Checks if the JSX element has an accessibility property.\n *\n * @param path - The NodePath for the JSXOpeningElement, used for scope lookup.\n * @param attributes - The attributes to check.\n * @returns true if the JSX element has an accessibility property.\n */\nexport const hasAccessibilityProperty = (\n path: NodePath<t.JSXOpeningElement>,\n attributes: (t.JSXAttribute | t.JSXSpreadAttribute)[]\n): boolean => {\n for (const attribute of attributes) {\n if (t.isJSXAttribute(attribute)) {\n const key = attribute.name.name;\n if (typeof key === 'string' && ACCESSIBILITY_PROPERTIES.has(key)) {\n return true;\n }\n } else if (t.isJSXSpreadAttribute(attribute)) {\n if (t.isObjectExpression(attribute.argument)) {\n for (const property of attribute.argument.properties) {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n ACCESSIBILITY_PROPERTIES.has(property.key.name)\n ) {\n return true;\n }\n }\n } else if (t.isIdentifier(attribute.argument)) {\n const binding = path.scope.getBinding(attribute.argument.name);\n if (binding && t.isVariableDeclarator(binding.path.node)) {\n const declarator = binding.path.node as t.VariableDeclarator;\n if (declarator.init && t.isObjectExpression(declarator.init)) {\n for (const property of declarator.init.properties) {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n ACCESSIBILITY_PROPERTIES.has(property.key.name)\n ) {\n return true;\n }\n }\n continue;\n }\n }\n return true;\n } else {\n return true;\n }\n }\n }\n return false;\n};\n\n/**\n * Extracts the `style` attribute from a JSX attributes list.\n *\n * @returns An object containing the attribute node itself (if found) and the expression inside\n */\nexport function extractStyleAttribute(attributes: Array<t.JSXAttribute | t.JSXSpreadAttribute>): {\n styleAttribute?: t.JSXAttribute;\n styleExpr?: t.Expression;\n} {\n for (const attribute of attributes) {\n if (t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name, { name: 'style' })) {\n if (\n attribute.value &&\n t.isJSXExpressionContainer(attribute.value) &&\n !t.isJSXEmptyExpression(attribute.value.expression)\n ) {\n return {\n styleAttribute: attribute,\n styleExpr: attribute.value.expression,\n };\n }\n return { styleAttribute: attribute };\n }\n }\n return {};\n}\n\n/**\n * Attempts to statically extract the `userSelect` style property from a style expression.\n *\n * If the `userSelect` value can be resolved at compile-time, the property is removed from the\n * object literal (or array element) and its mapped boolean value for the native `selectable`\n * prop is returned. When the value is unknown or the expression is not statically analysable,\n * `undefined` is returned and no modification is made.\n */\nexport function extractSelectableAndUpdateStyle(styleExpr: t.Expression): boolean | undefined {\n // Helper to process a single ObjectExpression\n const handleObjectExpression = (objectExpr: t.ObjectExpression): boolean | undefined => {\n let selectableValue: boolean | undefined;\n\n objectExpr.properties = objectExpr.properties.filter((property) => {\n if (\n !t.isObjectProperty(property) ||\n (!t.isIdentifier(property.key, { name: 'userSelect' }) &&\n !(t.isStringLiteral(property.key) && property.key.value === 'userSelect'))\n ) {\n return true; // keep property\n }\n\n if (t.isStringLiteral(property.value)) {\n const mapped = USER_SELECT_STYLE_TO_SELECTABLE_PROP[property.value.value];\n if (mapped !== undefined) {\n selectableValue = mapped;\n }\n }\n\n // Remove the `userSelect` property\n return false;\n });\n\n return selectableValue;\n };\n\n if (t.isObjectExpression(styleExpr)) {\n return handleObjectExpression(styleExpr);\n }\n\n if (t.isArrayExpression(styleExpr)) {\n let selectableValue: boolean | undefined;\n for (const element of styleExpr.elements) {\n if (element && t.isObjectExpression(element)) {\n const value = handleObjectExpression(element);\n if (value !== undefined) {\n selectableValue = value; // prefer last defined value\n }\n }\n }\n return selectableValue;\n }\n\n return undefined; // not statically analysable\n}\n\n/**\n * Checks if a node represents a string value.\n */\nexport const isStringNode = (path: NodePath<t.JSXOpeningElement>, child: t.Node): boolean => {\n if (t.isJSXText(child) || t.isStringLiteral(child)) return true;\n\n if (t.isJSXExpressionContainer(child)) {\n const expression = child.expression;\n if (t.isIdentifier(expression)) {\n const binding = path.scope.getBinding(expression.name);\n if (binding && binding.path.node && t.isVariableDeclarator(binding.path.node)) {\n return !!binding.path.node.init && t.isStringLiteral(binding.path.node.init);\n }\n return false;\n }\n if (t.isStringLiteral(expression)) return true;\n }\n return false;\n};\n","import { NodePath, types as t } from '@babel/core';\nimport { addDefault, addNamed } from '@babel/helper-module-imports';\nimport { FileImportOptions, HubFile } from '../../types';\nimport { RUNTIME_MODULE_NAME } from '../constants';\n\n/**\n * Adds a hint to the file object to ensure that a specific import is added only once and cached on the file object.\n *\n * @param opts - Object containing the function arguments:\n * - file: The Babel file object (e.g. HubFile)\n * - nameHint: The name hint which also acts as the cache key to ensure the import is only added once (e.g. 'processAccessibilityProps')\n * - path: The current Babel NodePath\n * - importName: The named import string (e.g. 'processAccessibilityProps'), used when importType is 'named'\n * - moduleName: The module to import from (e.g. 'react-native-boost/runtime')\n * - importType: Either 'named' (default) or 'default' to determine the type of import to use.\n *\n * @returns The identifier returned by addNamed or addDefault.\n */\nexport function addFileImportHint({\n file,\n nameHint,\n path,\n importName,\n moduleName,\n importType = 'named',\n}: FileImportOptions): t.Identifier {\n if (!file.__hasImports?.[nameHint]) {\n file.__hasImports = file.__hasImports || {};\n file.__hasImports[nameHint] =\n importType === 'default'\n ? addDefault(path, moduleName, { nameHint })\n : addNamed(path, importName, moduleName, { nameHint });\n }\n return file.__hasImports[nameHint];\n}\n\n/**\n * Replaces a component with its native counterpart.\n * This function handles both the opening and closing tags.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param parent - The parent JSX element.\n * @param file - The Babel file object.\n * @param nativeComponentName - The name of the native component to import.\n * @param moduleName - The module to import the native component from.\n * @returns The identifier for the imported native component.\n */\nexport const replaceWithNativeComponent = (\n path: NodePath<t.JSXOpeningElement>,\n parent: t.JSXElement,\n file: HubFile,\n nativeComponentName: string\n): t.Identifier => {\n // Add native component import (cached on file) to prevent duplicate imports\n const nativeIdentifier = addFileImportHint({\n file,\n nameHint: nativeComponentName,\n path,\n importName: nativeComponentName,\n moduleName: RUNTIME_MODULE_NAME,\n importType: 'named',\n });\n\n // Get the current name of the component, which may be aliased (i.e. Text -> RNText)\n const currentName = (path.node.name as t.JSXIdentifier).name;\n\n // Replace the component with its native counterpart\n const jsxName = path.node.name as t.JSXIdentifier;\n jsxName.name = nativeIdentifier.name;\n\n // If the element is not self-closing, update the closing element as well\n if (\n !path.node.selfClosing &&\n parent.closingElement &&\n t.isJSXIdentifier(parent.closingElement.name) &&\n parent.closingElement.name.name === currentName\n ) {\n parent.closingElement.name.name = nativeIdentifier.name;\n }\n\n return nativeIdentifier;\n};\n","import { NodePath, types as t } from '@babel/core';\nimport { HubFile, Optimizer, PluginLogger } from '../../types';\nimport PluginError from '../../utils/plugin-error';\nimport { BailoutCheck, getFirstBailoutReason } from '../../utils/helpers';\nimport {\n addDefaultProperty,\n addFileImportHint,\n buildPropertiesFromAttributes,\n hasAccessibilityProperty,\n hasBlacklistedProperty,\n isForcedLine,\n isIgnoredLine,\n isValidJSXComponent,\n isReactNativeImport,\n replaceWithNativeComponent,\n isStringNode,\n hasExpoRouterLinkParentWithAsChild,\n} from '../../utils/common';\nimport { RUNTIME_MODULE_NAME } from '../../utils/constants';\nimport { ACCESSIBILITY_PROPERTIES } from '../../utils/constants';\nimport { extractStyleAttribute, extractSelectableAndUpdateStyle } from '../../utils/common';\n\nexport const textBlacklistedProperties = new Set([\n 'id',\n 'nativeID',\n 'onLongPress',\n 'onPress',\n 'onPressIn',\n 'onPressOut',\n 'onResponderGrant',\n 'onResponderMove',\n 'onResponderRelease',\n 'onResponderTerminate',\n 'onResponderTerminationRequest',\n 'onStartShouldSetResponder',\n 'pressRetentionOffset',\n 'suppressHighlighting',\n 'selectionColor', // TODO: we can use react-native's internal `processColor` to process this at runtime\n]);\n\nexport const textOptimizer: Optimizer = (path, logger) => {\n if (!isValidJSXComponent(path, 'Text')) return;\n if (!isReactNativeImport(path, 'Text')) return;\n\n const parent = path.parent as t.JSXElement;\n const forced = isForcedLine(path);\n\n const overridableChecks: BailoutCheck[] = [\n {\n reason: 'contains blacklisted props',\n shouldBail: () => hasBlacklistedProperty(path, textBlacklistedProperties),\n },\n {\n reason: 'is a direct child of expo-router Link with asChild',\n shouldBail: () => hasExpoRouterLinkParentWithAsChild(path),\n },\n {\n reason: 'contains non-string children',\n shouldBail: () => hasInvalidChildren(path, parent),\n },\n ];\n\n if (forced) {\n const overriddenReason = getFirstBailoutReason(overridableChecks);\n\n if (overriddenReason) {\n logger.forced({ component: 'Text', path, reason: overriddenReason });\n }\n } else {\n const skipReason = getFirstBailoutReason([\n {\n reason: 'line is marked with @boost-ignore',\n shouldBail: () => isIgnoredLine(path),\n },\n ...overridableChecks,\n ]);\n\n if (skipReason) {\n logger.skipped({ component: 'Text', path, reason: skipReason });\n return;\n }\n }\n\n const hub = path.hub as unknown;\n const file = typeof hub === 'object' && hub !== null && 'file' in hub ? (hub.file as HubFile) : undefined;\n\n if (!file) {\n throw new PluginError('No file found in Babel hub');\n }\n\n logger.optimized({\n component: 'Text',\n path,\n });\n\n // Process props\n fixNegativeNumberOfLines({ path, logger });\n addDefaultProperty(path, 'allowFontScaling', t.booleanLiteral(true));\n addDefaultProperty(path, 'ellipsizeMode', t.stringLiteral('tail'));\n processProps(path, file);\n\n // Replace the Text component with NativeText\n replaceWithNativeComponent(path, parent, file, 'NativeText');\n};\n\n/**\n * Checks if the Text component has any invalid children or blacklisted properties.\n * This function combines the checks for both attribute-based children and JSX children.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param parent - The parent JSX element.\n * @returns true if the component has invalid children or blacklisted properties.\n */\nfunction hasInvalidChildren(path: NodePath<t.JSXOpeningElement>, parent: t.JSXElement): boolean {\n for (const attribute of path.node.attributes) {\n if (t.isJSXSpreadAttribute(attribute)) continue; // Spread attributes are handled in hasBlacklistedProperty\n\n if (\n t.isJSXIdentifier(attribute.name) &&\n attribute.value &&\n // For a \"children\" attribute, optimization is allowed only if it is a string\n attribute.name.name === 'children' &&\n !isStringNode(path, attribute.value)\n ) {\n return true;\n }\n }\n\n // Return true if any child is not a string node\n return !parent.children.every((child) => isStringNode(path, child));\n}\n\n/**\n * Fixes negative numberOfLines values by setting them to 0.\n */\nfunction fixNegativeNumberOfLines({ path, logger }: { path: NodePath<t.JSXOpeningElement>; logger: PluginLogger }) {\n for (const attribute of path.node.attributes) {\n if (\n t.isJSXAttribute(attribute) &&\n t.isJSXIdentifier(attribute.name, { name: 'numberOfLines' }) &&\n attribute.value &&\n t.isJSXExpressionContainer(attribute.value)\n ) {\n let originalValue: number | undefined;\n if (t.isNumericLiteral(attribute.value.expression)) {\n originalValue = attribute.value.expression.value;\n } else if (\n t.isUnaryExpression(attribute.value.expression) &&\n attribute.value.expression.operator === '-' &&\n t.isNumericLiteral(attribute.value.expression.argument)\n ) {\n originalValue = -attribute.value.expression.argument.value;\n }\n if (originalValue !== undefined && originalValue < 0) {\n logger.warning({\n component: 'Text',\n path,\n message: `'numberOfLines' must be a non-negative number, received: ${originalValue}. The value will be set to 0.`,\n });\n attribute.value.expression = t.numericLiteral(0);\n }\n }\n }\n}\n\n/**\n * Processes style and accessibility attributes, replacing them with optimized versions.\n */\nfunction processProps(path: NodePath<t.JSXOpeningElement>, file: HubFile) {\n // Grab the up-to-date list of attributes\n const currentAttributes = [...path.node.attributes];\n\n const { styleExpr, styleAttribute } = extractStyleAttribute(currentAttributes);\n const hasA11y = hasAccessibilityProperty(path, currentAttributes);\n\n // ============================================\n // 1. Prepare spread attributes (style / a11y)\n // ============================================\n\n const spreadAttributes: t.JSXSpreadAttribute[] = [];\n\n // --- Accessibility ---\n if (hasA11y) {\n const accessibilityAttributes = currentAttributes.filter((attribute) => {\n if (!t.isJSXAttribute(attribute)) return false;\n return t.isJSXIdentifier(attribute.name) && ACCESSIBILITY_PROPERTIES.has(attribute.name.name as string);\n });\n\n const normalizeIdentifier = addFileImportHint({\n file,\n nameHint: 'processAccessibilityProps',\n path,\n importName: 'processAccessibilityProps',\n moduleName: RUNTIME_MODULE_NAME,\n });\n\n const accessibilityObject = buildPropertiesFromAttributes(accessibilityAttributes);\n const accessibilityExpr = t.callExpression(t.identifier(normalizeIdentifier.name), [accessibilityObject]);\n spreadAttributes.push(t.jsxSpreadAttribute(accessibilityExpr));\n }\n\n // --- Style ---\n let selectableAttribute: t.JSXAttribute | undefined;\n if (styleExpr) {\n // Attempt a compile-time extraction of `userSelect`\n const selectableValue = extractSelectableAndUpdateStyle(styleExpr);\n\n if (selectableValue != null) {\n selectableAttribute = t.jsxAttribute(\n t.jsxIdentifier('selectable'),\n t.jsxExpressionContainer(t.booleanLiteral(selectableValue))\n );\n }\n\n const flattenIdentifier = addFileImportHint({\n file,\n nameHint: 'processTextStyle',\n path,\n importName: 'processTextStyle',\n moduleName: RUNTIME_MODULE_NAME,\n });\n const flattenedStyleExpr = t.callExpression(t.identifier(flattenIdentifier.name), [styleExpr]);\n spreadAttributes.push(t.jsxSpreadAttribute(flattenedStyleExpr));\n }\n\n // ============================================\n // 2. Collect the remaining (non-processed) attributes\n // ============================================\n const remainingAttributes: (t.JSXAttribute | t.JSXSpreadAttribute)[] = [];\n\n for (const attribute of currentAttributes) {\n // Skip the style attribute (we have replaced it with a spread)\n if (styleAttribute && attribute === styleAttribute) continue;\n\n // Skip accessibility attributes if we processed them\n if (\n hasA11y &&\n t.isJSXAttribute(attribute) &&\n t.isJSXIdentifier(attribute.name) &&\n ACCESSIBILITY_PROPERTIES.has(attribute.name.name as string)\n ) {\n continue;\n }\n\n remainingAttributes.push(attribute);\n }\n\n path.node.attributes = [...spreadAttributes, selectableAttribute, ...remainingAttributes].filter(\n (attribute): attribute is t.JSXAttribute | t.JSXSpreadAttribute => attribute !== undefined\n );\n}\n","import {\n HubFile,\n OptimizationLogPayload,\n PluginLogger,\n SkippedOptimizationLogPayload,\n WarningLogPayload,\n} from '../types';\n\nconst LOG_PREFIX = '[react-native-boost]';\n\nconst ANSI_RESET = '\\u001B[0m';\nconst ANSI_GREEN = '\\u001B[32m';\nconst ANSI_YELLOW = '\\u001B[33m';\nconst ANSI_MAGENTA = '\\u001B[35m';\nconst ANSI_RED = '\\u001B[31m';\n\nexport const noopLogger: PluginLogger = {\n optimized() {},\n skipped() {},\n forced() {},\n warning() {},\n};\n\nexport const createLogger = ({ verbose, silent }: { verbose: boolean; silent: boolean }): PluginLogger => {\n if (silent) return noopLogger;\n\n return {\n optimized(payload) {\n writeLog('optimized', `Optimized ${payload.component} in ${formatPathLocation(payload.path)}`);\n },\n skipped(payload) {\n if (!verbose) return;\n writeLog('skipped', `Skipped ${payload.component} in ${formatPathLocation(payload.path)} (${payload.reason})`);\n },\n forced(payload) {\n writeLog(\n 'forced',\n `Force-optimized ${payload.component} in ${formatPathLocation(payload.path)} (skipped bailout: ${payload.reason})`\n );\n },\n warning(payload) {\n const context = formatWarningContext(payload);\n const message = context.length > 0 ? `${context}: ${payload.message}` : payload.message;\n writeLog('warning', message);\n },\n };\n};\n\nfunction formatWarningContext(payload: WarningLogPayload): string {\n const location = formatPathLocation(payload.path);\n\n if (payload.component && location.length > 0) {\n return `${payload.component} in ${location}`;\n }\n\n if (payload.component) {\n return payload.component;\n }\n\n return location;\n}\n\ntype LogLevel = 'optimized' | 'skipped' | 'forced' | 'warning';\n\nfunction writeLog(level: LogLevel, message: string): void {\n const levelTag = formatLevel(level);\n console.log(`${LOG_PREFIX} ${levelTag} ${message}`);\n}\n\nfunction formatLevel(level: LogLevel): string {\n if (level === 'optimized') {\n return colorize('[optimized]', ANSI_GREEN);\n }\n\n if (level === 'skipped') {\n return colorize('[skipped]', ANSI_YELLOW);\n }\n\n if (level === 'forced') {\n return colorize('[forced]', ANSI_RED);\n }\n\n return colorize('[warning]', ANSI_MAGENTA);\n}\n\nfunction colorize(value: string, colorCode: string): string {\n if (!shouldUseColor()) return value;\n return `${colorCode}${value}${ANSI_RESET}`;\n}\n\nfunction shouldUseColor(): boolean {\n if (process.env.NO_COLOR != null) return false;\n\n if (process.env.FORCE_COLOR === '0') return false;\n if (process.env.FORCE_COLOR != null) return true;\n\n if (process.env.CLICOLOR === '0') return false;\n if (process.env.CLICOLOR_FORCE != null && process.env.CLICOLOR_FORCE !== '0') return true;\n\n if (process.stdout?.isTTY === true || process.stderr?.isTTY === true) {\n return true;\n }\n\n const colorTerm = process.env.COLORTERM;\n if (colorTerm != null && colorTerm !== '') {\n return true;\n }\n\n const term = process.env.TERM;\n return term != null && term !== '' && term.toLowerCase() !== 'dumb';\n}\n\nfunction formatPathLocation(\n payloadPath: OptimizationLogPayload['path'] | SkippedOptimizationLogPayload['path'] | undefined\n): string {\n if (!payloadPath) return 'unknown file:unknown line';\n\n const hub = payloadPath.hub as unknown;\n const file = typeof hub === 'object' && hub !== null && 'file' in hub ? (hub.file as HubFile) : undefined;\n const filename = file?.opts?.filename ?? 'unknown file';\n const lineNumber = payloadPath.node.loc?.start.line ?? 'unknown line';\n\n return `${filename}:${lineNumber}`;\n}\n","import { types as t } from '@babel/core';\nimport { HubFile, Optimizer } from '../../types';\nimport PluginError from '../../utils/plugin-error';\nimport { BailoutCheck, getFirstBailoutReason } from '../../utils/helpers';\nimport {\n hasBlacklistedProperty,\n isForcedLine,\n isIgnoredLine,\n isValidJSXComponent,\n isReactNativeImport,\n replaceWithNativeComponent,\n getViewAncestorClassification,\n ViewAncestorClassification,\n} from '../../utils/common';\n\nexport const viewBlacklistedProperties = new Set([\n // TODO: process a11y props at runtime\n 'accessible',\n 'accessibilityLabel',\n 'accessibilityState',\n 'aria-busy',\n 'aria-checked',\n 'aria-disabled',\n 'aria-expanded',\n 'aria-label',\n 'aria-selected',\n 'id',\n 'nativeID',\n 'style', // TODO: process style at runtime\n]);\n\nexport const viewOptimizer: Optimizer = (path, logger, options) => {\n if (!isValidJSXComponent(path, 'View')) return;\n if (!isReactNativeImport(path, 'View')) return;\n\n let ancestorClassification: ViewAncestorClassification | undefined;\n const getAncestorClassification = () => {\n if (!ancestorClassification) {\n ancestorClassification = getViewAncestorClassification(path);\n }\n\n return ancestorClassification;\n };\n\n const forced = isForcedLine(path);\n\n const overridableChecks: BailoutCheck[] = [\n {\n reason: 'contains blacklisted props',\n shouldBail: () => hasBlacklistedProperty(path, viewBlacklistedProperties),\n },\n {\n reason: 'has Text ancestor',\n shouldBail: () => getAncestorClassification() === 'text',\n },\n {\n reason: 'has unresolved ancestor and dangerous optimization is disabled',\n shouldBail: () =>\n getAncestorClassification() === 'unknown' && options?.dangerouslyOptimizeViewWithUnknownAncestors !== true,\n },\n ];\n\n if (forced) {\n const overriddenReason = getFirstBailoutReason(overridableChecks);\n\n if (overriddenReason) {\n logger.forced({ component: 'View', path, reason: overriddenReason });\n }\n } else {\n const skipReason = getFirstBailoutReason([\n {\n reason: 'line is marked with @boost-ignore',\n shouldBail: () => isIgnoredLine(path),\n },\n ...overridableChecks,\n ]);\n\n if (skipReason) {\n logger.skipped({ component: 'View', path, reason: skipReason });\n return;\n }\n }\n\n const hub = path.hub as unknown;\n const file = typeof hub === 'object' && hub !== null && 'file' in hub ? (hub.file as HubFile) : undefined;\n\n if (!file) {\n throw new PluginError('No file found in Babel hub');\n }\n\n logger.optimized({\n component: 'View',\n path,\n });\n\n const parent = path.parent as t.JSXElement;\n\n replaceWithNativeComponent(path, parent, file, 'NativeView');\n};\n","import { declare } from '@babel/helper-plugin-utils';\nimport { textOptimizer } from './optimizers/text';\nimport { PluginLogger, PluginOptions } from './types';\nimport { createLogger } from './utils/logger';\nimport { viewOptimizer } from './optimizers/view';\nimport { isIgnoredFile } from './utils/common';\n\nexport type { PluginOptimizationOptions, PluginOptions } from './types';\n\ntype PluginState = {\n opts?: PluginOptions;\n __reactNativeBoostLogger?: PluginLogger;\n};\n\nexport default declare((api) => {\n api.assertVersion(7);\n\n return {\n name: 'react-native-boost',\n visitor: {\n JSXOpeningElement(path, state) {\n const pluginState = state as PluginState;\n const options = (pluginState.opts ?? {}) as PluginOptions;\n const logger = getOrCreateLogger(pluginState, options);\n\n if (isIgnoredFile(path, options.ignores ?? [])) return;\n if (options.optimizations?.text !== false) textOptimizer(path, logger);\n if (options.optimizations?.view !== false) viewOptimizer(path, logger, options);\n },\n },\n };\n});\n\nfunction getOrCreateLogger(state: PluginState, options: PluginOptions): PluginLogger {\n if (state.__reactNativeBoostLogger) {\n return state.__reactNativeBoostLogger;\n }\n\n state.__reactNativeBoostLogger = createLogger({\n verbose: options.verbose === true,\n silent: options.silent === true,\n });\n\n return state.__reactNativeBoostLogger;\n}\n"],"names":["t"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/plugin/utils/plugin-error.ts","../../../src/plugin/utils/helpers.ts","../../../src/plugin/utils/common/validation.ts","../../../src/plugin/utils/constants.ts","../../../src/plugin/utils/common/attributes.ts","../../../src/plugin/utils/common/base.ts","../../../src/plugin/optimizers/text/index.ts","../../../src/plugin/utils/logger.ts","../../../src/plugin/optimizers/view/index.ts","../../../src/plugin/index.ts"],"sourcesContent":["export default class PluginError extends Error {\n constructor(message: string) {\n super(`[react-native-boost] Babel plugin exception: ${message}`);\n this.name = 'PluginError';\n }\n}\n","export const ensureArray = <T>(value: T | T[]): T[] => {\n if (Array.isArray(value)) return value;\n return [value];\n};\n\nexport type BailoutCheck = {\n reason: string;\n shouldBail: () => boolean;\n};\n\nexport const getFirstBailoutReason = (checks: readonly BailoutCheck[]): string | null => {\n for (const check of checks) {\n if (check.shouldBail()) {\n return check.reason;\n }\n }\n\n return null;\n};\n","import { NodePath, types as t } from '@babel/core';\nimport { ensureArray, BailoutCheck } from '../helpers';\nimport { HubFile } from '../../types';\nimport { minimatch } from 'minimatch';\nimport nodePath from 'node:path';\nimport PluginError from '../plugin-error';\n\n/**\n * Checks if the file is in the list of ignored files.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param ignores - List of glob paths (absolute or relative to import.meta.dirname).\n * @returns true if the file matches any of the ignore patterns.\n */\nexport const isIgnoredFile = (path: NodePath<t.JSXOpeningElement>, ignores: string[]): boolean => {\n const hub = path.hub as unknown;\n const file = typeof hub === 'object' && hub !== null && 'file' in hub ? (hub.file as HubFile) : undefined;\n\n if (!file) {\n throw new PluginError('No file found in Babel hub');\n }\n\n const fileName = file.opts.filename;\n\n // Use the current working directory which typically corresponds to the user's project root.\n const baseDirectory = 'cwd' in file.opts ? (file.opts.cwd as string) : process.cwd();\n\n // Iterate through the ignore patterns.\n for (const pattern of ignores) {\n // If the pattern is not absolute, join it with the baseDir\n const absolutePattern = nodePath.isAbsolute(pattern) ? pattern : nodePath.join(baseDirectory, pattern);\n\n // Check if the file name matches the glob pattern.\n if (minimatch(fileName, absolutePattern, { dot: true })) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const isForcedLine = (path: NodePath<t.JSXOpeningElement>): boolean => {\n return hasDecoratorComment(path, '@boost-force');\n};\n\nexport const isIgnoredLine = (path: NodePath<t.JSXOpeningElement>): boolean => {\n return hasDecoratorComment(path, '@boost-ignore');\n};\n\n/**\n * Checks if the JSX element has a preceding comment containing the given decorator string.\n *\n * Scans the JSXOpeningElement's own leading comments, the parent element's comments,\n * ObjectProperty containers, and backward siblings.\n */\nfunction hasDecoratorComment(path: NodePath<t.JSXOpeningElement>, decorator: string): boolean {\n if (path.node.leadingComments?.some((comment) => comment.value.includes(decorator))) {\n return true;\n }\n\n const jsxElementPath = path.parentPath;\n if (jsxElementPath.node.leadingComments?.some((comment) => comment.value.includes(decorator))) {\n return true;\n }\n\n // Check leading comments on the ObjectProperty (if the JSX element is a value inside an object literal).\n const propertyPath = jsxElementPath.parentPath;\n if (\n propertyPath &&\n propertyPath.isObjectProperty() &&\n propertyPath.node.leadingComments?.some((comment) => comment.value.includes(decorator))\n ) {\n return true;\n }\n\n if (!jsxElementPath.parentPath) return false;\n\n const containerPath = jsxElementPath.parentPath;\n const siblings = ensureArray(containerPath.get('children'));\n const index = siblings.findIndex((sibling) => sibling.node === jsxElementPath.node);\n if (index === -1) return false;\n\n for (let index_ = index - 1; index_ >= 0; index_--) {\n const sibling = siblings[index_];\n if (sibling.isJSXText() && sibling.node.value.trim() === '') {\n continue;\n }\n if (sibling.isJSXExpressionContainer()) {\n const expression = sibling.get('expression');\n if (expression && expression.node) {\n const comments = [\n ...(expression.node.leadingComments || []),\n ...(expression.node.trailingComments || []),\n ...(expression.node.innerComments || []),\n ].map((comment) => comment.value.trim());\n if (comments.some((comment) => comment.includes(decorator))) {\n return true;\n }\n }\n }\n if (\n sibling.node.leadingComments &&\n sibling.node.leadingComments.some((comment) => comment.value.includes(decorator))\n ) {\n return true;\n }\n break;\n }\n return false;\n}\n\n/**\n * Checks if the path represents a valid JSX component with the specified name.\n *\n * @param path - The NodePath to check.\n * @param componentName - The name of the component to validate against.\n * @returns true if the path is a valid JSX component with the specified name.\n */\nexport const isValidJSXComponent = (path: NodePath<t.JSXOpeningElement>, componentName: string): boolean => {\n // Check if the node name is a JSX identifier\n if (!t.isJSXIdentifier(path.node.name)) return false;\n\n // Check if the parent is a JSX element\n const parent = path.parent;\n if (!t.isJSXElement(parent)) return false;\n\n // For aliasing, we check if the underlying imported name matches the expected name\n const componentIdentifier = path.node.name.name;\n const binding = path.scope.getBinding(componentIdentifier);\n if (!binding) return false;\n if (\n binding.kind === 'module' &&\n t.isImportDeclaration(binding.path.parent) &&\n t.isImportSpecifier(binding.path.node)\n ) {\n const imported = binding.path.node.imported;\n if (t.isIdentifier(imported)) {\n return imported.name === componentName;\n }\n }\n\n // Fallback to string match if binding is not available\n return path.node.name.name === componentName;\n};\n\n/**\n * Checks if the component is imported from 'react-native' and not from a custom module.\n *\n * @param path - The NodePath to check.\n * @param expectedImportedName - The expected import name of the component (we'll also check for aliased imports).\n * @returns true if the component is imported from 'react-native'\n */\nexport const isReactNativeImport = (path: NodePath<t.JSXOpeningElement>, expectedImportedName: string): boolean => {\n if (!t.isJSXIdentifier(path.node.name)) return false;\n const localName = path.node.name.name;\n const binding = path.scope.getBinding(localName);\n if (!binding) return false;\n if (binding.kind === 'module') {\n const importDeclaration = binding.path.parent;\n if (!t.isImportDeclaration(importDeclaration)) return false;\n // Verify it's imported from 'react-native'\n if (importDeclaration.source.value !== 'react-native') return false;\n\n // For named imports, check the imported name (not the alias)\n if (t.isImportSpecifier(binding.path.node)) {\n const imported = binding.path.node.imported;\n if (t.isIdentifier(imported)) {\n return imported.name === expectedImportedName;\n }\n }\n\n // For default imports, we just assume it's valid if imported from react-native.\n if (t.isImportDefaultSpecifier(binding.path.node)) {\n return true;\n }\n }\n return false;\n};\n\nexport type AncestorClassification = 'safe' | 'text' | 'unknown';\ntype ScopeBinding = NonNullable<ReturnType<NodePath<t.Node>['scope']['getBinding']>>;\n\ntype AncestorAnalysisContext = {\n componentCache: WeakMap<t.Node, AncestorClassification>;\n componentInProgress: WeakSet<t.Node>;\n renderExpressionInProgress: WeakSet<t.Node>;\n};\n\nexport const getAncestorClassification = (path: NodePath<t.JSXOpeningElement>): AncestorClassification => {\n const context: AncestorAnalysisContext = {\n componentCache: new WeakMap<t.Node, AncestorClassification>(),\n componentInProgress: new WeakSet<t.Node>(),\n renderExpressionInProgress: new WeakSet<t.Node>(),\n };\n\n let classification: AncestorClassification = 'safe';\n let ancestorPath: NodePath<t.Node> | null = path.parentPath.parentPath;\n\n while (ancestorPath) {\n if (ancestorPath.isJSXElement()) {\n const ancestorClassification = classifyJSXElementAsAncestor(ancestorPath, context);\n classification = mergeAncestorClassification(classification, ancestorClassification);\n\n if (classification === 'text') return classification;\n }\n\n ancestorPath = ancestorPath.parentPath;\n }\n\n return classification;\n};\n\n/**\n * The ancestor-safety bailout checks shared by the Text and View optimizers. An element nested under a\n * `Text` renders as the inline `NativeVirtualText` host (`RCTVirtualText`) instead of the block\n * `NativeText`/`NativeView` host, so optimizing it would emit the wrong host; an `'unknown'` ancestor\n * chain cannot be proven free of such a `Text`, so it bails too unless the caller opts into the risk.\n *\n * The ancestor walk is lazy (it runs only if these checks are reached) and memoized across the two\n * checks. Each optimizer passes its own resolved `dangerouslyOptimize*WithUnknownAncestors` flag.\n */\nexport const ancestorBailoutChecks = (\n path: NodePath<t.JSXOpeningElement>,\n dangerousOptimizationEnabled: boolean\n): BailoutCheck[] => {\n let classification: AncestorClassification | undefined;\n const classify = () => (classification ??= getAncestorClassification(path));\n\n return [\n {\n reason: 'has Text ancestor',\n shouldBail: () => classify() === 'text',\n },\n {\n reason: 'has unresolved ancestor and dangerous optimization is disabled',\n shouldBail: () => classify() === 'unknown' && !dangerousOptimizationEnabled,\n },\n ];\n};\n\nfunction classifyJSXElementAsAncestor(\n path: NodePath<t.JSXElement>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n const openingElementName = path.node.openingElement.name;\n\n if (t.isJSXIdentifier(openingElementName)) {\n return classifyJSXIdentifierAsAncestor(path, openingElementName.name, context);\n }\n\n if (t.isJSXMemberExpression(openingElementName)) {\n return classifyJSXMemberExpressionAsAncestor(path, openingElementName);\n }\n\n return 'unknown';\n}\n\nfunction classifyJSXIdentifierAsAncestor(\n path: NodePath<t.JSXElement>,\n identifierName: string,\n context: AncestorAnalysisContext\n): AncestorClassification {\n if (identifierName === 'Fragment') return 'safe';\n\n const binding = path.scope.getBinding(identifierName);\n if (!binding) return 'unknown';\n\n return classifyBindingAsAncestor(binding, context);\n}\n\nfunction classifyJSXMemberExpressionAsAncestor(\n path: NodePath<t.JSXElement>,\n expression: t.JSXMemberExpression\n): AncestorClassification {\n if (!t.isJSXIdentifier(expression.object) || !t.isJSXIdentifier(expression.property)) {\n return 'unknown';\n }\n\n const binding = path.scope.getBinding(expression.object.name);\n if (!binding || binding.kind !== 'module' || !t.isImportNamespaceSpecifier(binding.path.node)) {\n return 'unknown';\n }\n\n const importDeclaration = binding.path.parent;\n if (!t.isImportDeclaration(importDeclaration)) return 'unknown';\n\n if (importDeclaration.source.value === 'react-native') {\n return expression.property.name === 'Text' ? 'text' : 'safe';\n }\n\n if (importDeclaration.source.value === 'react' && expression.property.name === 'Fragment') {\n return 'safe';\n }\n\n return 'unknown';\n}\n\nfunction classifyBindingAsAncestor(binding: ScopeBinding, context: AncestorAnalysisContext): AncestorClassification {\n if (binding.kind === 'module') {\n return classifyModuleBindingAsAncestor(binding);\n }\n\n return classifyLocalBindingAsAncestor(binding, context);\n}\n\nfunction classifyModuleBindingAsAncestor(binding: ScopeBinding): AncestorClassification {\n const importDeclaration = binding.path.parent;\n if (!t.isImportDeclaration(importDeclaration)) return 'unknown';\n\n const source = importDeclaration.source.value;\n if (source === 'react-native') {\n if (t.isImportSpecifier(binding.path.node)) {\n const importedName = getImportSpecifierImportedName(binding.path.node);\n if (!importedName) return 'unknown';\n return importedName === 'Text' ? 'text' : 'safe';\n }\n\n if (t.isImportNamespaceSpecifier(binding.path.node)) {\n return 'safe';\n }\n\n return 'unknown';\n }\n\n if (source === 'react' && t.isImportSpecifier(binding.path.node)) {\n const importedName = getImportSpecifierImportedName(binding.path.node);\n if (importedName === 'Fragment') return 'safe';\n }\n\n return 'unknown';\n}\n\nfunction classifyLocalBindingAsAncestor(\n binding: ScopeBinding,\n context: AncestorAnalysisContext\n): AncestorClassification {\n const cacheKey = binding.path.node;\n const cached = context.componentCache.get(cacheKey);\n if (cached) return cached;\n\n if (context.componentInProgress.has(cacheKey)) {\n return 'unknown';\n }\n\n context.componentInProgress.add(cacheKey);\n\n let classification: AncestorClassification;\n if (binding.path.isFunctionDeclaration()) {\n classification = analyzeFunctionComponent(binding.path, context);\n } else if (binding.path.isVariableDeclarator()) {\n classification = analyzeVariableDeclaratorComponent(binding.path, context);\n } else {\n classification = 'unknown';\n }\n\n context.componentInProgress.delete(cacheKey);\n context.componentCache.set(cacheKey, classification);\n\n return classification;\n}\n\nfunction analyzeVariableDeclaratorComponent(\n path: NodePath<t.VariableDeclarator>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n const initPath = path.get('init');\n if (!initPath.node) return 'unknown';\n\n if (initPath.isArrowFunctionExpression() || initPath.isFunctionExpression()) {\n return analyzeFunctionComponent(initPath, context);\n }\n\n if (initPath.isCallExpression()) {\n return analyzeCallWrappedComponent(initPath, context);\n }\n\n if (initPath.isIdentifier()) {\n const aliasBinding = path.scope.getBinding(initPath.node.name);\n if (!aliasBinding) return 'unknown';\n\n return classifyBindingAsAncestor(aliasBinding, context);\n }\n\n return 'unknown';\n}\n\nfunction analyzeCallWrappedComponent(\n path: NodePath<t.CallExpression>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n if (!isReactMemoOrForwardRefCall(path)) return 'unknown';\n\n const [firstArgumentPath] = path.get('arguments');\n if (!firstArgumentPath?.node) return 'unknown';\n\n if (firstArgumentPath.isArrowFunctionExpression() || firstArgumentPath.isFunctionExpression()) {\n return analyzeFunctionComponent(firstArgumentPath, context);\n }\n\n if (firstArgumentPath.isIdentifier()) {\n const wrappedComponentBinding = path.scope.getBinding(firstArgumentPath.node.name);\n if (!wrappedComponentBinding) return 'unknown';\n\n return classifyBindingAsAncestor(wrappedComponentBinding, context);\n }\n\n if (firstArgumentPath.isCallExpression()) {\n return analyzeCallWrappedComponent(firstArgumentPath, context);\n }\n\n return 'unknown';\n}\n\nfunction isReactMemoOrForwardRefCall(path: NodePath<t.CallExpression>): boolean {\n const calleePath = path.get('callee');\n\n if (calleePath.isIdentifier()) {\n if (!isMemoOrForwardRefName(calleePath.node.name)) return false;\n\n const binding = path.scope.getBinding(calleePath.node.name);\n return isReactImportBinding(binding);\n }\n\n if (calleePath.isMemberExpression()) {\n const objectPath = calleePath.get('object');\n const propertyPath = calleePath.get('property');\n\n if (!objectPath.isIdentifier() || !propertyPath.isIdentifier()) return false;\n if (!isMemoOrForwardRefName(propertyPath.node.name)) return false;\n\n const objectBinding = path.scope.getBinding(objectPath.node.name);\n return isReactImportBinding(objectBinding);\n }\n\n return false;\n}\n\nfunction isMemoOrForwardRefName(name: string): boolean {\n return name === 'memo' || name === 'forwardRef';\n}\n\nfunction isReactImportBinding(binding: ScopeBinding | undefined): binding is ScopeBinding {\n if (!binding || binding.kind !== 'module') return false;\n\n const importDeclaration = binding.path.parent;\n return t.isImportDeclaration(importDeclaration) && importDeclaration.source.value === 'react';\n}\n\nfunction analyzeFunctionComponent(\n path: NodePath<t.FunctionDeclaration | t.FunctionExpression | t.ArrowFunctionExpression>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n const bodyPath = path.get('body');\n\n if (!bodyPath.isBlockStatement()) {\n return analyzeRenderExpression(bodyPath as NodePath<t.Node>, context);\n }\n\n let classification: AncestorClassification = 'safe';\n\n for (const statementPath of bodyPath.get('body')) {\n if (!statementPath.isReturnStatement()) continue;\n\n const argumentPath = statementPath.get('argument');\n if (!argumentPath.node) continue;\n\n const returnClassification = analyzeRenderExpression(argumentPath as NodePath<t.Node>, context);\n classification = mergeAncestorClassification(classification, returnClassification);\n\n if (classification === 'text') return classification;\n }\n\n return classification;\n}\n\nfunction analyzeRenderExpression(path: NodePath<t.Node>, context: AncestorAnalysisContext): AncestorClassification {\n if (path.isJSXFragment()) {\n return analyzeJSXChildren(path.get('children'), context);\n }\n\n let classification: AncestorClassification = 'safe';\n let hasJSX = false;\n\n path.traverse({\n JSXOpeningElement(jsxPath) {\n hasJSX = true;\n\n const jsxElementPath = jsxPath.parentPath;\n if (!jsxElementPath.isJSXElement()) {\n classification = mergeAncestorClassification(classification, 'unknown');\n return;\n }\n\n const jsxClassification = classifyJSXElementAsAncestor(jsxElementPath, context);\n classification = mergeAncestorClassification(classification, jsxClassification);\n\n if (classification === 'text') {\n jsxPath.stop();\n }\n },\n });\n\n if (hasJSX) return classification;\n\n if (path.isIdentifier()) {\n return analyzeIdentifierRenderExpression(path, context);\n }\n\n if (path.isMemberExpression() && isPropsChildrenMemberExpression(path.node)) {\n return 'safe';\n }\n\n if (\n path.isNullLiteral() ||\n path.isBooleanLiteral() ||\n path.isNumericLiteral() ||\n path.isStringLiteral() ||\n path.isBigIntLiteral()\n ) {\n return 'safe';\n }\n\n return 'unknown';\n}\n\nfunction analyzeJSXChildren(\n children: Array<NodePath<t.JSXText | t.JSXExpressionContainer | t.JSXSpreadChild | t.JSXElement | t.JSXFragment>>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n let classification: AncestorClassification = 'safe';\n\n for (const childPath of children) {\n if (childPath.isJSXElement()) {\n const childClassification = classifyJSXElementAsAncestor(childPath, context);\n classification = mergeAncestorClassification(classification, childClassification);\n } else if (childPath.isJSXFragment()) {\n const fragmentClassification = analyzeJSXChildren(childPath.get('children'), context);\n classification = mergeAncestorClassification(classification, fragmentClassification);\n } else if (childPath.isJSXExpressionContainer()) {\n const expressionPath = childPath.get('expression');\n if (!expressionPath.node || expressionPath.isJSXEmptyExpression()) continue;\n\n const expressionClassification = analyzeRenderExpression(expressionPath as NodePath<t.Node>, context);\n classification = mergeAncestorClassification(classification, expressionClassification);\n } else if (childPath.isJSXSpreadChild()) {\n classification = mergeAncestorClassification(classification, 'unknown');\n }\n\n if (classification === 'text') {\n return classification;\n }\n }\n\n return classification;\n}\n\nfunction analyzeIdentifierRenderExpression(\n path: NodePath<t.Identifier>,\n context: AncestorAnalysisContext\n): AncestorClassification {\n if (path.node.name === 'children') return 'safe';\n\n const binding = path.scope.getBinding(path.node.name);\n if (!binding) return 'unknown';\n\n if (binding.kind === 'param') {\n return binding.identifier.name === 'children' ? 'safe' : 'unknown';\n }\n\n if (!binding.path.isVariableDeclarator()) return 'unknown';\n\n const cacheKey = binding.path.node;\n if (context.renderExpressionInProgress.has(cacheKey)) {\n return 'unknown';\n }\n\n const initPath = binding.path.get('init');\n if (!initPath.node) return 'unknown';\n\n context.renderExpressionInProgress.add(cacheKey);\n const classification = analyzeRenderExpression(initPath as NodePath<t.Node>, context);\n context.renderExpressionInProgress.delete(cacheKey);\n\n return classification;\n}\n\nfunction isPropsChildrenMemberExpression(expression: t.MemberExpression): boolean {\n if (!t.isIdentifier(expression.object, { name: 'props' })) return false;\n if (!t.isIdentifier(expression.property, { name: 'children' })) return false;\n return !expression.computed;\n}\n\nfunction mergeAncestorClassification(\n current: AncestorClassification,\n next: AncestorClassification\n): AncestorClassification {\n if (current === 'text' || next === 'text') return 'text';\n if (current === 'unknown' || next === 'unknown') return 'unknown';\n return 'safe';\n}\n\nfunction getImportSpecifierImportedName(specifier: t.ImportSpecifier): string | undefined {\n if (t.isIdentifier(specifier.imported)) {\n return specifier.imported.name;\n }\n\n if (t.isStringLiteral(specifier.imported)) {\n return specifier.imported.value;\n }\n\n return undefined;\n}\n\n/**\n * Checks whether the closest JSX element ancestor is expo-router Link with a truthy asChild prop.\n *\n * We only bail on Text optimization when Link is effectively slotting that Text as the clickable child.\n */\nexport const hasExpoRouterLinkParentWithAsChild = (path: NodePath<t.JSXOpeningElement>): boolean => {\n const textElementPath = path.parentPath;\n if (!textElementPath.isJSXElement()) return false;\n\n let ancestorPath: NodePath<t.Node> | null = textElementPath.parentPath;\n\n while (ancestorPath) {\n if (ancestorPath.isJSXElement()) {\n if (!isExpoRouterLinkElement(ancestorPath)) return false;\n\n return hasTruthyAsChildAttribute(ancestorPath.node.openingElement.attributes);\n }\n\n ancestorPath = ancestorPath.parentPath;\n }\n\n return false;\n};\n\nfunction isExpoRouterLinkElement(path: NodePath<t.JSXElement>): boolean {\n const openingElementName = path.node.openingElement.name;\n\n if (t.isJSXIdentifier(openingElementName)) {\n const binding = path.scope.getBinding(openingElementName.name);\n if (!binding || binding.kind !== 'module') return false;\n if (!t.isImportSpecifier(binding.path.node)) return false;\n\n const importDeclaration = binding.path.parent;\n if (!t.isImportDeclaration(importDeclaration) || importDeclaration.source.value !== 'expo-router') return false;\n\n const imported = binding.path.node.imported;\n return t.isIdentifier(imported, { name: 'Link' }) || (t.isStringLiteral(imported) && imported.value === 'Link');\n }\n\n if (t.isJSXMemberExpression(openingElementName)) {\n if (!t.isJSXIdentifier(openingElementName.object)) return false;\n if (!t.isJSXIdentifier(openingElementName.property, { name: 'Link' })) return false;\n\n const namespaceBinding = path.scope.getBinding(openingElementName.object.name);\n if (!namespaceBinding || namespaceBinding.kind !== 'module') return false;\n if (!t.isImportNamespaceSpecifier(namespaceBinding.path.node)) return false;\n\n const importDeclaration = namespaceBinding.path.parent;\n return t.isImportDeclaration(importDeclaration) && importDeclaration.source.value === 'expo-router';\n }\n\n return false;\n}\n\nfunction hasTruthyAsChildAttribute(attributes: (t.JSXAttribute | t.JSXSpreadAttribute)[]): boolean {\n let asChildAttribute: t.JSXAttribute | undefined;\n\n for (const attribute of attributes) {\n if (t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name, { name: 'asChild' })) {\n asChildAttribute = attribute;\n }\n }\n\n if (!asChildAttribute) return false;\n\n return isJSXAttributeValueTruthy(asChildAttribute.value);\n}\n\nfunction isJSXAttributeValueTruthy(value: t.JSXAttribute['value']): boolean {\n if (!value) return true;\n if (t.isStringLiteral(value)) return value.value.length > 0;\n if (t.isJSXElement(value) || t.isJSXFragment(value)) return true;\n\n if (t.isJSXExpressionContainer(value)) {\n const staticTruthiness = getStaticExpressionTruthiness(value.expression);\n return staticTruthiness ?? true;\n }\n\n return true;\n}\n\nfunction getStaticExpressionTruthiness(expression: t.Expression | t.JSXEmptyExpression): boolean | undefined {\n if (t.isJSXEmptyExpression(expression)) return false;\n if (t.isBooleanLiteral(expression)) return expression.value;\n if (t.isNullLiteral(expression)) return false;\n if (t.isStringLiteral(expression)) return expression.value.length > 0;\n if (t.isNumericLiteral(expression)) return expression.value !== 0 && !Number.isNaN(expression.value);\n if (t.isBigIntLiteral(expression)) return expression.value !== '0';\n if (t.isIdentifier(expression, { name: 'undefined' })) return false;\n\n if (t.isTemplateLiteral(expression) && expression.expressions.length === 0) {\n return (expression.quasis[0]?.value.cooked ?? '').length > 0;\n }\n\n if (t.isUnaryExpression(expression, { operator: '!' })) {\n const staticTruthiness = getStaticExpressionTruthiness(expression.argument);\n return staticTruthiness === undefined ? undefined : !staticTruthiness;\n }\n\n return undefined;\n}\n","export const RUNTIME_MODULE_NAME = 'react-native-boost/runtime';\n\n/**\n * The set of accessibility properties that need to be normalized.\n */\nexport const ACCESSIBILITY_PROPERTIES = new Set([\n 'accessibilityLabel',\n 'aria-label',\n 'accessibilityState',\n 'aria-busy',\n 'aria-checked',\n 'aria-disabled',\n 'aria-expanded',\n 'aria-selected',\n 'accessible',\n]);\n\n// Maps the `userSelect` values to the corresponding boolean for the `selectable` prop\nexport const USER_SELECT_STYLE_TO_SELECTABLE_PROP: Record<string, boolean> = {\n auto: true,\n text: true,\n none: false,\n contain: true,\n all: true,\n};\n","import { NodePath, types as t } from '@babel/core';\nimport { ACCESSIBILITY_PROPERTIES } from '../constants';\nimport { USER_SELECT_STYLE_TO_SELECTABLE_PROP } from '../constants';\n\n/**\n * Checks if the JSX element has a blacklisted property.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param blacklist - The set of blacklisted properties.\n * @returns true if the JSX element has a blacklisted property.\n */\nexport const hasBlacklistedProperty = (path: NodePath<t.JSXOpeningElement>, blacklist: Set<string>): boolean => {\n return path.node.attributes.some((attribute) => {\n // Check direct attributes (e.g., onPress={handler})\n if (t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name) && blacklist.has(attribute.name.name)) {\n return true;\n }\n\n // Check spread attributes (e.g., {...props})\n if (t.isJSXSpreadAttribute(attribute)) {\n if (t.isIdentifier(attribute.argument)) {\n const binding = path.scope.getBinding(attribute.argument.name);\n let objectExpression: t.ObjectExpression | undefined;\n if (binding) {\n // If the binding node is a VariableDeclarator, use its initializer\n if (t.isVariableDeclarator(binding.path.node)) {\n objectExpression = binding.path.node.init as t.ObjectExpression;\n } else if (t.isObjectExpression(binding.path.node)) {\n objectExpression = binding.path.node;\n }\n }\n if (objectExpression && t.isObjectExpression(objectExpression)) {\n return objectExpression.properties.some((property) => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n return blacklist.has(property.key.name);\n }\n return false;\n });\n }\n }\n // Bail if we can't resolve the spread attribute\n return true;\n }\n\n // For other attribute types, assume no blacklisting\n return false;\n });\n};\n\n/**\n * Adds a default property to a JSX element if it's not already defined. It avoids adding a default\n * if it cannot statically determine whether the property is already set.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param key - The property key.\n * @param value - The default value expression.\n */\nexport const addDefaultProperty = (path: NodePath<t.JSXOpeningElement>, key: string, value: t.Expression) => {\n let propertyIsFound = false;\n let hasUnresolvableSpread = false;\n\n for (const attribute of path.node.attributes) {\n if (t.isJSXAttribute(attribute) && attribute.name.name === key) {\n propertyIsFound = true;\n break;\n }\n\n if (t.isJSXSpreadAttribute(attribute)) {\n if (t.isObjectExpression(attribute.argument)) {\n const propertyInSpread = attribute.argument.properties.some(\n (p) =>\n (t.isObjectProperty(p) && t.isIdentifier(p.key) && p.key.name === key) ||\n (t.isObjectProperty(p) && t.isStringLiteral(p.key) && p.key.value === key)\n );\n if (propertyInSpread) {\n propertyIsFound = true;\n break;\n }\n } else if (t.isIdentifier(attribute.argument)) {\n const binding = path.scope.getBinding(attribute.argument.name);\n if (\n binding?.path.node &&\n t.isVariableDeclarator(binding.path.node) &&\n t.isObjectExpression(binding.path.node.init)\n ) {\n const propertyInSpread = binding.path.node.init.properties.some(\n (p) =>\n (t.isObjectProperty(p) && t.isIdentifier(p.key) && p.key.name === key) ||\n (t.isObjectProperty(p) && t.isStringLiteral(p.key) && p.key.value === key)\n );\n if (propertyInSpread) {\n propertyIsFound = true;\n break;\n }\n } else {\n hasUnresolvableSpread = true;\n break;\n }\n } else {\n hasUnresolvableSpread = true;\n break;\n }\n }\n }\n\n if (!propertyIsFound && !hasUnresolvableSpread) {\n path.node.attributes.push(t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(value)));\n }\n};\n\n/**\n * Helper that builds an Object.assign expression out of the existing JSX attributes.\n * It handles both plain JSXAttributes and spread attributes.\n *\n * @param attributes - The attributes to build the expression from.\n * @returns The Object.assign expression.\n */\nexport const buildPropertiesFromAttributes = (attributes: (t.JSXAttribute | t.JSXSpreadAttribute)[]): t.Expression => {\n const arguments_: t.Expression[] = [];\n for (const attribute of attributes) {\n if (t.isJSXSpreadAttribute(attribute)) {\n arguments_.push(attribute.argument);\n } else if (t.isJSXAttribute(attribute)) {\n const key = attribute.name.name;\n let value: t.Expression;\n if (!attribute.value) {\n value = t.booleanLiteral(true);\n } else if (t.isStringLiteral(attribute.value)) {\n value = attribute.value;\n } else if (t.isJSXExpressionContainer(attribute.value)) {\n value = t.isJSXEmptyExpression(attribute.value.expression)\n ? t.booleanLiteral(true)\n : attribute.value.expression;\n } else {\n value = t.nullLiteral();\n }\n // If the key is not a valid JavaScript identifier (e.g. \"aria-label\"), use a string literal.\n const validIdentifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n const keyNode =\n typeof key === 'string' && validIdentifierRegex.test(key) ? t.identifier(key) : t.stringLiteral(key.toString());\n\n arguments_.push(t.objectExpression([t.objectProperty(keyNode, value)]));\n }\n }\n if (arguments_.length === 0) {\n return t.objectExpression([]);\n }\n return t.callExpression(t.memberExpression(t.identifier('Object'), t.identifier('assign')), [\n t.objectExpression([]),\n ...arguments_,\n ]);\n};\n\n/**\n * Checks if the JSX element has an accessibility property.\n *\n * @param path - The NodePath for the JSXOpeningElement, used for scope lookup.\n * @param attributes - The attributes to check.\n * @returns true if the JSX element has an accessibility property.\n */\nexport const hasAccessibilityProperty = (\n path: NodePath<t.JSXOpeningElement>,\n attributes: (t.JSXAttribute | t.JSXSpreadAttribute)[]\n): boolean => {\n for (const attribute of attributes) {\n if (t.isJSXAttribute(attribute)) {\n const key = attribute.name.name;\n if (typeof key === 'string' && ACCESSIBILITY_PROPERTIES.has(key)) {\n return true;\n }\n } else if (t.isJSXSpreadAttribute(attribute)) {\n if (t.isObjectExpression(attribute.argument)) {\n for (const property of attribute.argument.properties) {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n ACCESSIBILITY_PROPERTIES.has(property.key.name)\n ) {\n return true;\n }\n }\n } else if (t.isIdentifier(attribute.argument)) {\n const binding = path.scope.getBinding(attribute.argument.name);\n if (binding && t.isVariableDeclarator(binding.path.node)) {\n const declarator = binding.path.node as t.VariableDeclarator;\n if (declarator.init && t.isObjectExpression(declarator.init)) {\n for (const property of declarator.init.properties) {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n ACCESSIBILITY_PROPERTIES.has(property.key.name)\n ) {\n return true;\n }\n }\n continue;\n }\n }\n return true;\n } else {\n return true;\n }\n }\n }\n return false;\n};\n\n/**\n * Extracts the `style` attribute from a JSX attributes list.\n *\n * @returns An object containing the attribute node itself (if found) and the expression inside\n */\nexport function extractStyleAttribute(attributes: Array<t.JSXAttribute | t.JSXSpreadAttribute>): {\n styleAttribute?: t.JSXAttribute;\n styleExpr?: t.Expression;\n} {\n for (const attribute of attributes) {\n if (t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name, { name: 'style' })) {\n if (\n attribute.value &&\n t.isJSXExpressionContainer(attribute.value) &&\n !t.isJSXEmptyExpression(attribute.value.expression)\n ) {\n return {\n styleAttribute: attribute,\n styleExpr: attribute.value.expression,\n };\n }\n return { styleAttribute: attribute };\n }\n }\n return {};\n}\n\n/**\n * Attempts to statically extract the `userSelect` style property from a style expression.\n *\n * If the `userSelect` value can be resolved at compile-time, the property is removed from the\n * object literal (or array element) and its mapped boolean value for the native `selectable`\n * prop is returned. When the value is unknown or the expression is not statically analysable,\n * `undefined` is returned and no modification is made.\n */\nexport function extractSelectableAndUpdateStyle(styleExpr: t.Expression): boolean | undefined {\n // Helper to process a single ObjectExpression\n const handleObjectExpression = (objectExpr: t.ObjectExpression): boolean | undefined => {\n let selectableValue: boolean | undefined;\n\n objectExpr.properties = objectExpr.properties.filter((property) => {\n if (\n !t.isObjectProperty(property) ||\n (!t.isIdentifier(property.key, { name: 'userSelect' }) &&\n !(t.isStringLiteral(property.key) && property.key.value === 'userSelect'))\n ) {\n return true; // keep property\n }\n\n if (t.isStringLiteral(property.value)) {\n const mapped = USER_SELECT_STYLE_TO_SELECTABLE_PROP[property.value.value];\n if (mapped !== undefined) {\n selectableValue = mapped;\n }\n }\n\n // Remove the `userSelect` property\n return false;\n });\n\n return selectableValue;\n };\n\n if (t.isObjectExpression(styleExpr)) {\n return handleObjectExpression(styleExpr);\n }\n\n if (t.isArrayExpression(styleExpr)) {\n let selectableValue: boolean | undefined;\n for (const element of styleExpr.elements) {\n if (element && t.isObjectExpression(element)) {\n const value = handleObjectExpression(element);\n if (value !== undefined) {\n selectableValue = value; // prefer last defined value\n }\n }\n }\n return selectableValue;\n }\n\n return undefined; // not statically analysable\n}\n\n/**\n * Determines whether an expression is statically provable to evaluate to a `string` or `number`\n * primitive — and therefore can never be a React element.\n */\nconst isPrimitiveExpression = (\n path: NodePath<t.JSXOpeningElement>,\n expression: t.Expression,\n // Identifier names already resolved along this chain, to break circular `const` references\n // (`const a = b; const b = a;`) that would otherwise recurse forever.\n resolved: Set<string> = new Set()\n): boolean => {\n // Unambiguous primitives — these can never be a React element.\n if (t.isStringLiteral(expression) || t.isNumericLiteral(expression)) return true;\n\n // A template literal ALWAYS coerces its interpolations to string, regardless of their types.\n if (t.isTemplateLiteral(expression)) return true;\n\n // `a + b` (and numeric `-`, `*`, ...) is primitive only when BOTH operands are themselves\n // provably primitive. `in`/`instanceof` have a non-Expression `left` (a `PrivateName`), so the\n // `isExpression` guard rejects them.\n if (t.isBinaryExpression(expression)) {\n const { left, right } = expression;\n return (\n t.isExpression(left) &&\n isPrimitiveExpression(path, left, resolved) &&\n isPrimitiveExpression(path, right, resolved)\n );\n }\n\n // `c ? a : b` — only the reachable results (`a`, `b`) are rendered; the test is irrelevant.\n if (t.isConditionalExpression(expression)) {\n return (\n isPrimitiveExpression(path, expression.consequent, resolved) &&\n isPrimitiveExpression(path, expression.alternate, resolved)\n );\n }\n\n // `a && b` / `a || b` / `a ?? b` — short-circuiting makes the result one of the operands, so both\n // must be primitive (unlike the conditional, the left operand is itself a reachable result).\n if (t.isLogicalExpression(expression)) {\n return (\n isPrimitiveExpression(path, expression.left, resolved) && isPrimitiveExpression(path, expression.right, resolved)\n );\n }\n\n // Identifier resolving to a non-reassigned `const` whose initializer is itself provably primitive.\n // `binding.constant` excludes reassigned bindings (`let x = 'a'; x = <Foo/>`).\n if (t.isIdentifier(expression)) {\n if (resolved.has(expression.name)) return false; // circular reference — give up\n const binding = path.scope.getBinding(expression.name);\n if (binding && binding.constant && binding.path.node && t.isVariableDeclarator(binding.path.node)) {\n const init = binding.path.node.init;\n return (\n !!init && t.isExpression(init) && isPrimitiveExpression(path, init, new Set(resolved).add(expression.name))\n );\n }\n return false;\n }\n\n return false;\n};\n\n/**\n * Checks whether a Text child node is statically provable to render as a string/number primitive.\n * Used to gate the Text optimizer: only such children are safe to keep when rewriting `<Text>` to\n * its native host. See {@link isPrimitiveExpression} for the underlying expression rules.\n */\nexport const isPrimitiveChild = (path: NodePath<t.JSXOpeningElement>, child: t.Node): boolean => {\n if (t.isJSXText(child)) return true; // raw text between tags\n if (t.isStringLiteral(child)) return true; // explicit `children=\"...\"` attribute value\n\n if (t.isJSXExpressionContainer(child)) {\n const { expression } = child;\n if (t.isJSXEmptyExpression(expression)) return false; // `{/* comment */}` is not a primitive\n return isPrimitiveExpression(path, expression);\n }\n return false;\n};\n","import { NodePath, types as t } from '@babel/core';\nimport { addDefault, addNamed } from '@babel/helper-module-imports';\nimport { FileImportOptions, HubFile } from '../../types';\nimport { RUNTIME_MODULE_NAME } from '../constants';\n\n/**\n * Adds a hint to the file object to ensure that a specific import is added only once and cached on the file object.\n *\n * @param opts - Object containing the function arguments:\n * - file: The Babel file object (e.g. HubFile)\n * - nameHint: The name hint which also acts as the cache key to ensure the import is only added once (e.g. 'processAccessibilityProps')\n * - path: The current Babel NodePath\n * - importName: The named import string (e.g. 'processAccessibilityProps'), used when importType is 'named'\n * - moduleName: The module to import from (e.g. 'react-native-boost/runtime')\n * - importType: Either 'named' (default) or 'default' to determine the type of import to use.\n *\n * @returns The identifier returned by addNamed or addDefault.\n */\nexport function addFileImportHint({\n file,\n nameHint,\n path,\n importName,\n moduleName,\n importType = 'named',\n}: FileImportOptions): t.Identifier {\n if (!file.__hasImports?.[nameHint]) {\n file.__hasImports = file.__hasImports || {};\n file.__hasImports[nameHint] =\n importType === 'default'\n ? addDefault(path, moduleName, { nameHint })\n : addNamed(path, importName, moduleName, { nameHint });\n }\n return file.__hasImports[nameHint];\n}\n\n/**\n * Replaces a component with its native counterpart.\n * This function handles both the opening and closing tags.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param parent - The parent JSX element.\n * @param file - The Babel file object.\n * @param nativeComponentName - The name of the native component to import.\n * @param moduleName - The module to import the native component from.\n * @returns The identifier for the imported native component.\n */\nexport const replaceWithNativeComponent = (\n path: NodePath<t.JSXOpeningElement>,\n parent: t.JSXElement,\n file: HubFile,\n nativeComponentName: string\n): t.Identifier => {\n // Add native component import (cached on file) to prevent duplicate imports\n const nativeIdentifier = addFileImportHint({\n file,\n nameHint: nativeComponentName,\n path,\n importName: nativeComponentName,\n moduleName: RUNTIME_MODULE_NAME,\n importType: 'named',\n });\n\n // Get the current name of the component, which may be aliased (i.e. Text -> RNText)\n const currentName = (path.node.name as t.JSXIdentifier).name;\n\n // Replace the component with its native counterpart\n const jsxName = path.node.name as t.JSXIdentifier;\n jsxName.name = nativeIdentifier.name;\n\n // If the element is not self-closing, update the closing element as well\n if (\n !path.node.selfClosing &&\n parent.closingElement &&\n t.isJSXIdentifier(parent.closingElement.name) &&\n parent.closingElement.name.name === currentName\n ) {\n parent.closingElement.name.name = nativeIdentifier.name;\n }\n\n return nativeIdentifier;\n};\n","import { NodePath, types as t } from '@babel/core';\nimport { HubFile, Optimizer, PluginLogger } from '../../types';\nimport PluginError from '../../utils/plugin-error';\nimport { BailoutCheck, getFirstBailoutReason } from '../../utils/helpers';\nimport {\n addDefaultProperty,\n addFileImportHint,\n buildPropertiesFromAttributes,\n hasAccessibilityProperty,\n hasBlacklistedProperty,\n isForcedLine,\n isIgnoredLine,\n isValidJSXComponent,\n isReactNativeImport,\n replaceWithNativeComponent,\n isPrimitiveChild,\n hasExpoRouterLinkParentWithAsChild,\n extractStyleAttribute,\n extractSelectableAndUpdateStyle,\n ancestorBailoutChecks,\n} from '../../utils/common';\nimport { ACCESSIBILITY_PROPERTIES, RUNTIME_MODULE_NAME } from '../../utils/constants';\n\nexport const textBlacklistedProperties = new Set([\n // The `Text` wrapper translates `aria-hidden` into `accessibilityElementsHidden` /\n // `importantForAccessibility`, which `processAccessibilityProps` does not yet handle. Passing it\n // through would drop it, so bail. TODO: handle this in the runtime helper instead.\n 'aria-hidden',\n 'id',\n 'nativeID',\n 'onLongPress',\n 'onPress',\n 'onPressIn',\n 'onPressOut',\n 'onResponderGrant',\n 'onResponderMove',\n 'onResponderRelease',\n 'onResponderTerminate',\n 'onResponderTerminationRequest',\n 'onStartShouldSetResponder',\n 'pressRetentionOffset',\n 'suppressHighlighting',\n 'selectionColor', // TODO: we can use react-native's internal `processColor` to process this at runtime\n]);\n\n/**\n * Props handed off to `processAccessibilityProps` at runtime: the accessibility props plus `disabled`,\n * which `Text` reconciles against `accessibilityState.disabled`. They are collected into a single\n * helper call and stripped from the element so they are not also emitted verbatim.\n */\nconst NORMALIZED_PROPERTIES = new Set([...ACCESSIBILITY_PROPERTIES, 'disabled']);\n\n/**\n * Type guard for a direct JSX attribute whose name is in {@link NORMALIZED_PROPERTIES}.\n */\nconst isNormalizedProperty = (attribute: t.JSXAttribute | t.JSXSpreadAttribute): attribute is t.JSXAttribute =>\n t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name) && NORMALIZED_PROPERTIES.has(attribute.name.name);\n\nexport const textOptimizer: Optimizer = (path, logger, options, platform) => {\n if (!isValidJSXComponent(path, 'Text')) return;\n if (!isReactNativeImport(path, 'Text')) return;\n\n const parent = path.parent as t.JSXElement;\n const forced = isForcedLine(path);\n\n const overridableChecks: BailoutCheck[] = [\n {\n reason: 'contains blacklisted props',\n shouldBail: () => hasBlacklistedProperty(path, textBlacklistedProperties),\n },\n {\n reason: 'is a direct child of expo-router Link with asChild',\n shouldBail: () => hasExpoRouterLinkParentWithAsChild(path),\n },\n // The local children check runs before the ancestor checks because it is cheap and prunes the\n // common nested-element `Text` before the unbounded ancestor walk those checks trigger.\n {\n reason: 'contains non-primitive children',\n shouldBail: () => hasInvalidChildren(path, parent),\n },\n ...ancestorBailoutChecks(path, options?.dangerouslyOptimizeTextWithUnknownAncestors === true),\n ];\n\n if (forced) {\n const overriddenReason = getFirstBailoutReason(overridableChecks);\n\n if (overriddenReason) {\n logger.forced({ component: 'Text', path, reason: overriddenReason });\n }\n } else {\n const skipReason = getFirstBailoutReason([\n {\n reason: 'line is marked with @boost-ignore',\n shouldBail: () => isIgnoredLine(path),\n },\n ...overridableChecks,\n ]);\n\n if (skipReason) {\n logger.skipped({ component: 'Text', path, reason: skipReason });\n return;\n }\n }\n\n const hub = path.hub as unknown;\n const file = typeof hub === 'object' && hub !== null && 'file' in hub ? (hub.file as HubFile) : undefined;\n\n if (!file) {\n throw new PluginError('No file found in Babel hub');\n }\n\n logger.optimized({\n component: 'Text',\n path,\n });\n\n // Process props\n fixNegativeNumberOfLines({ path, logger });\n addDefaultProperty(path, 'allowFontScaling', t.booleanLiteral(true));\n addDefaultProperty(path, 'ellipsizeMode', t.stringLiteral('tail'));\n processProps(path, file, platform);\n\n // Replace the Text component with NativeText\n replaceWithNativeComponent(path, parent, file, 'NativeText');\n};\n\n/**\n * Checks if the Text component has any invalid children or blacklisted properties.\n * This function combines the checks for both attribute-based children and JSX children.\n *\n * @param path - The path to the JSXOpeningElement.\n * @param parent - The parent JSX element.\n * @returns true if the component has invalid children or blacklisted properties.\n */\nfunction hasInvalidChildren(path: NodePath<t.JSXOpeningElement>, parent: t.JSXElement): boolean {\n for (const attribute of path.node.attributes) {\n if (t.isJSXSpreadAttribute(attribute)) continue; // Spread attributes are handled in hasBlacklistedProperty\n\n if (\n t.isJSXIdentifier(attribute.name) &&\n attribute.value &&\n // For a \"children\" attribute, optimization is allowed only if it is a provable primitive\n attribute.name.name === 'children' &&\n !isPrimitiveChild(path, attribute.value)\n ) {\n return true;\n }\n }\n\n // Return true if any child is not a provably-primitive node\n return !parent.children.every((child) => isPrimitiveChild(path, child));\n}\n\n/**\n * Fixes negative numberOfLines values by setting them to 0.\n */\nfunction fixNegativeNumberOfLines({ path, logger }: { path: NodePath<t.JSXOpeningElement>; logger: PluginLogger }) {\n for (const attribute of path.node.attributes) {\n if (\n t.isJSXAttribute(attribute) &&\n t.isJSXIdentifier(attribute.name, { name: 'numberOfLines' }) &&\n attribute.value &&\n t.isJSXExpressionContainer(attribute.value)\n ) {\n let originalValue: number | undefined;\n if (t.isNumericLiteral(attribute.value.expression)) {\n originalValue = attribute.value.expression.value;\n } else if (\n t.isUnaryExpression(attribute.value.expression) &&\n attribute.value.expression.operator === '-' &&\n t.isNumericLiteral(attribute.value.expression.argument)\n ) {\n originalValue = -attribute.value.expression.argument.value;\n }\n if (originalValue !== undefined && originalValue < 0) {\n logger.warning({\n component: 'Text',\n path,\n message: `'numberOfLines' must be a non-negative number, received: ${originalValue}. The value will be set to 0.`,\n });\n attribute.value.expression = t.numericLiteral(0);\n }\n }\n }\n}\n\n/**\n * Processes style and accessibility attributes, replacing them with optimized versions.\n */\nfunction processProps(path: NodePath<t.JSXOpeningElement>, file: HubFile, platform?: string) {\n // Grab the up-to-date list of attributes\n const currentAttributes = [...path.node.attributes];\n\n const { styleExpr, styleAttribute } = extractStyleAttribute(currentAttributes);\n\n // `Text` always resolves a platform-specific `accessible` default and reconciles `disabled` with\n // `accessibilityState.disabled`. When any accessibility prop or `disabled` is present we hand the\n // element off to `processAccessibilityProps` (which also performs the aria/label merges); otherwise\n // only the `accessible` default is needed, so we inject it directly to keep the common path cheap.\n const shouldNormalize =\n hasAccessibilityProperty(path, currentAttributes) ||\n currentAttributes.some(\n (attribute) => t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name, { name: 'disabled' })\n );\n\n // ============================================\n // 1. Prepare spread attributes (a11y / style)\n // ============================================\n\n const spreadAttributes: t.JSXSpreadAttribute[] = [];\n\n // --- Accessibility & `disabled` ---\n if (shouldNormalize) {\n const normalizedAttributes = currentAttributes.filter((attribute) => isNormalizedProperty(attribute));\n\n const normalizeIdentifier = addFileImportHint({\n file,\n nameHint: 'processAccessibilityProps',\n path,\n importName: 'processAccessibilityProps',\n moduleName: RUNTIME_MODULE_NAME,\n });\n\n const accessibilityObject = buildPropertiesFromAttributes(normalizedAttributes);\n const accessibilityExpr = t.callExpression(t.identifier(normalizeIdentifier.name), [accessibilityObject]);\n spreadAttributes.push(t.jsxSpreadAttribute(accessibilityExpr));\n }\n\n // --- Style ---\n let selectableAttribute: t.JSXAttribute | undefined;\n if (styleExpr) {\n // Attempt a compile-time extraction of `userSelect`\n const selectableValue = extractSelectableAndUpdateStyle(styleExpr);\n\n if (selectableValue != null) {\n selectableAttribute = t.jsxAttribute(\n t.jsxIdentifier('selectable'),\n t.jsxExpressionContainer(t.booleanLiteral(selectableValue))\n );\n }\n\n const flattenIdentifier = addFileImportHint({\n file,\n nameHint: 'processTextStyle',\n path,\n importName: 'processTextStyle',\n moduleName: RUNTIME_MODULE_NAME,\n });\n const flattenedStyleExpr = t.callExpression(t.identifier(flattenIdentifier.name), [styleExpr]);\n spreadAttributes.push(t.jsxSpreadAttribute(flattenedStyleExpr));\n }\n\n // ============================================\n // 2. Collect the remaining (non-processed) attributes\n // ============================================\n const remainingAttributes: (t.JSXAttribute | t.JSXSpreadAttribute)[] = [];\n\n for (const attribute of currentAttributes) {\n // Skip the style attribute (we have replaced it with a spread)\n if (styleAttribute && attribute === styleAttribute) continue;\n\n // Skip the props we routed through `processAccessibilityProps`\n if (shouldNormalize && isNormalizedProperty(attribute)) continue;\n\n remainingAttributes.push(attribute);\n }\n\n // ============================================\n // 3. `accessible` default for the common path\n // ============================================\n // With no accessibility/`disabled` prop the helper is skipped, but `Text` still applies a\n // platform-specific `accessible` default. We build it explicitly (rather than via `addDefaultProperty`,\n // which gives up when it hits the unresolvable `{...processTextStyle(...)}` spread and would silently\n // drop the default on styled text). The cheap path guarantees no `accessible` is already set — any\n // such prop would have set `shouldNormalize`, and unresolvable spreads bail before this point — so\n // appending it unconditionally is safe.\n const accessibleAttribute = shouldNormalize ? undefined : buildAccessibleDefault(path, file, platform);\n\n path.node.attributes = [...spreadAttributes, selectableAttribute, ...remainingAttributes, accessibleAttribute].filter(\n (attribute): attribute is t.JSXAttribute | t.JSXSpreadAttribute => attribute !== undefined\n );\n}\n\n/**\n * Builds the `accessible` default attribute `Text` applies when the prop is omitted: `true` on iOS,\n * `false` on Android, omitted on web. Metro bundles per platform and reports the target on the Babel\n * caller, so a known platform is inlined as a literal; an unknown platform (non-Metro bundlers,\n * fixture tests) defers to the lightweight runtime resolver. Returns `undefined` when nothing should\n * be emitted.\n */\nfunction buildAccessibleDefault(\n path: NodePath<t.JSXOpeningElement>,\n file: HubFile,\n platform?: string\n): t.JSXAttribute | undefined {\n if (platform === 'web') return undefined;\n\n let value: t.Expression;\n if (platform === 'ios' || platform === 'android') {\n value = t.booleanLiteral(platform === 'ios');\n } else {\n const accessibleIdentifier = addFileImportHint({\n file,\n nameHint: 'getDefaultTextAccessible',\n path,\n importName: 'getDefaultTextAccessible',\n moduleName: RUNTIME_MODULE_NAME,\n });\n value = t.callExpression(t.identifier(accessibleIdentifier.name), []);\n }\n\n return t.jsxAttribute(t.jsxIdentifier('accessible'), t.jsxExpressionContainer(value));\n}\n","import {\n HubFile,\n OptimizationLogPayload,\n PluginLogger,\n SkippedOptimizationLogPayload,\n WarningLogPayload,\n} from '../types';\n\nconst LOG_PREFIX = '[react-native-boost]';\n\nconst ANSI_RESET = '\\u001B[0m';\nconst ANSI_GREEN = '\\u001B[32m';\nconst ANSI_YELLOW = '\\u001B[33m';\nconst ANSI_MAGENTA = '\\u001B[35m';\nconst ANSI_RED = '\\u001B[31m';\n\nexport const noopLogger: PluginLogger = {\n optimized() {},\n skipped() {},\n forced() {},\n warning() {},\n};\n\nexport const createLogger = ({ verbose, silent }: { verbose: boolean; silent: boolean }): PluginLogger => {\n if (silent) return noopLogger;\n\n return {\n optimized(payload) {\n writeLog('optimized', `Optimized ${payload.component} in ${formatPathLocation(payload.path)}`);\n },\n skipped(payload) {\n if (!verbose) return;\n writeLog('skipped', `Skipped ${payload.component} in ${formatPathLocation(payload.path)} (${payload.reason})`);\n },\n forced(payload) {\n writeLog(\n 'forced',\n `Force-optimized ${payload.component} in ${formatPathLocation(payload.path)} (skipped bailout: ${payload.reason})`\n );\n },\n warning(payload) {\n const context = formatWarningContext(payload);\n const message = context.length > 0 ? `${context}: ${payload.message}` : payload.message;\n writeLog('warning', message);\n },\n };\n};\n\nfunction formatWarningContext(payload: WarningLogPayload): string {\n const location = formatPathLocation(payload.path);\n\n if (payload.component && location.length > 0) {\n return `${payload.component} in ${location}`;\n }\n\n if (payload.component) {\n return payload.component;\n }\n\n return location;\n}\n\ntype LogLevel = 'optimized' | 'skipped' | 'forced' | 'warning';\n\nfunction writeLog(level: LogLevel, message: string): void {\n const levelTag = formatLevel(level);\n console.log(`${LOG_PREFIX} ${levelTag} ${message}`);\n}\n\nfunction formatLevel(level: LogLevel): string {\n if (level === 'optimized') {\n return colorize('[optimized]', ANSI_GREEN);\n }\n\n if (level === 'skipped') {\n return colorize('[skipped]', ANSI_YELLOW);\n }\n\n if (level === 'forced') {\n return colorize('[forced]', ANSI_RED);\n }\n\n return colorize('[warning]', ANSI_MAGENTA);\n}\n\nfunction colorize(value: string, colorCode: string): string {\n if (!shouldUseColor()) return value;\n return `${colorCode}${value}${ANSI_RESET}`;\n}\n\nfunction shouldUseColor(): boolean {\n if (process.env.NO_COLOR != null) return false;\n\n if (process.env.FORCE_COLOR === '0') return false;\n if (process.env.FORCE_COLOR != null) return true;\n\n if (process.env.CLICOLOR === '0') return false;\n if (process.env.CLICOLOR_FORCE != null && process.env.CLICOLOR_FORCE !== '0') return true;\n\n if (process.stdout?.isTTY === true || process.stderr?.isTTY === true) {\n return true;\n }\n\n const colorTerm = process.env.COLORTERM;\n if (colorTerm != null && colorTerm !== '') {\n return true;\n }\n\n const term = process.env.TERM;\n return term != null && term !== '' && term.toLowerCase() !== 'dumb';\n}\n\nfunction formatPathLocation(\n payloadPath: OptimizationLogPayload['path'] | SkippedOptimizationLogPayload['path'] | undefined\n): string {\n if (!payloadPath) return 'unknown file:unknown line';\n\n const hub = payloadPath.hub as unknown;\n const file = typeof hub === 'object' && hub !== null && 'file' in hub ? (hub.file as HubFile) : undefined;\n const filename = file?.opts?.filename ?? 'unknown file';\n const lineNumber = payloadPath.node.loc?.start.line ?? 'unknown line';\n\n return `${filename}:${lineNumber}`;\n}\n","import { types as t } from '@babel/core';\nimport { HubFile, Optimizer } from '../../types';\nimport PluginError from '../../utils/plugin-error';\nimport { BailoutCheck, getFirstBailoutReason } from '../../utils/helpers';\nimport {\n hasBlacklistedProperty,\n isForcedLine,\n isIgnoredLine,\n isValidJSXComponent,\n isReactNativeImport,\n replaceWithNativeComponent,\n ancestorBailoutChecks,\n} from '../../utils/common';\n\nexport const viewBlacklistedProperties = new Set([\n // The `View` wrapper translates these into native props (e.g. `aria-*` → `accessibility*`,\n // `tabIndex` → `focusable`). The native host does not understand them, so passing them through\n // would silently drop them. TODO: process these at runtime instead of bailing.\n 'accessible',\n 'accessibilityLabel',\n 'accessibilityState',\n 'aria-busy',\n 'aria-checked',\n 'aria-disabled',\n 'aria-expanded',\n 'aria-hidden',\n 'aria-label',\n 'aria-labelledby',\n 'aria-live',\n 'aria-selected',\n 'aria-valuemax',\n 'aria-valuemin',\n 'aria-valuenow',\n 'aria-valuetext',\n 'id',\n 'nativeID',\n 'tabIndex',\n]);\n\nexport const viewOptimizer: Optimizer = (path, logger, options) => {\n if (!isValidJSXComponent(path, 'View')) return;\n if (!isReactNativeImport(path, 'View')) return;\n\n const forced = isForcedLine(path);\n\n const overridableChecks: BailoutCheck[] = [\n {\n reason: 'contains blacklisted props',\n shouldBail: () => hasBlacklistedProperty(path, viewBlacklistedProperties),\n },\n ...ancestorBailoutChecks(path, options?.dangerouslyOptimizeViewWithUnknownAncestors === true),\n ];\n\n if (forced) {\n const overriddenReason = getFirstBailoutReason(overridableChecks);\n\n if (overriddenReason) {\n logger.forced({ component: 'View', path, reason: overriddenReason });\n }\n } else {\n const skipReason = getFirstBailoutReason([\n {\n reason: 'line is marked with @boost-ignore',\n shouldBail: () => isIgnoredLine(path),\n },\n ...overridableChecks,\n ]);\n\n if (skipReason) {\n logger.skipped({ component: 'View', path, reason: skipReason });\n return;\n }\n }\n\n const hub = path.hub as unknown;\n const file = typeof hub === 'object' && hub !== null && 'file' in hub ? (hub.file as HubFile) : undefined;\n\n if (!file) {\n throw new PluginError('No file found in Babel hub');\n }\n\n logger.optimized({\n component: 'View',\n path,\n });\n\n const parent = path.parent as t.JSXElement;\n\n replaceWithNativeComponent(path, parent, file, 'NativeView');\n};\n","import { declare } from '@babel/helper-plugin-utils';\nimport { textOptimizer } from './optimizers/text';\nimport { PluginLogger, PluginOptions } from './types';\nimport { createLogger } from './utils/logger';\nimport { viewOptimizer } from './optimizers/view';\nimport { isIgnoredFile } from './utils/common';\n\nexport type { PluginOptimizationOptions, PluginOptions } from './types';\n\ntype PluginState = {\n opts?: PluginOptions;\n __reactNativeBoostLogger?: PluginLogger;\n};\n\nexport default declare((api) => {\n api.assertVersion(7);\n\n // Target platform, resolved at build time. Metro sets this on the Babel caller per platform bundle,\n // letting optimizers inline platform-specific defaults instead of deferring them to the runtime.\n const platform = api.caller((caller) => (caller as { platform?: string } | undefined)?.platform);\n\n return {\n name: 'react-native-boost',\n visitor: {\n JSXOpeningElement(path, state) {\n const pluginState = state as PluginState;\n const options = (pluginState.opts ?? {}) as PluginOptions;\n const logger = getOrCreateLogger(pluginState, options);\n\n if (isIgnoredFile(path, options.ignores ?? [])) return;\n if (options.optimizations?.text !== false) textOptimizer(path, logger, options, platform);\n if (options.optimizations?.view !== false) viewOptimizer(path, logger, options);\n },\n },\n };\n});\n\nfunction getOrCreateLogger(state: PluginState, options: PluginOptions): PluginLogger {\n if (state.__reactNativeBoostLogger) {\n return state.__reactNativeBoostLogger;\n }\n\n state.__reactNativeBoostLogger = createLogger({\n verbose: options.verbose === true,\n silent: options.silent === true,\n });\n\n return state.__reactNativeBoostLogger;\n}\n"],"names":["t"],"mappings":"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"}
|
package/dist/plugin/index.d.ts
CHANGED
|
@@ -53,6 +53,16 @@ interface PluginOptions {
|
|
|
53
53
|
* @default false
|
|
54
54
|
*/
|
|
55
55
|
dangerouslyOptimizeViewWithUnknownAncestors?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Opt-in flag that allows Text optimization when ancestor components cannot be statically resolved.
|
|
58
|
+
*
|
|
59
|
+
* This increases optimization coverage, but may introduce behavioral differences when an unresolved
|
|
60
|
+
* ancestor renders a React Native `Text` wrapper: a nested `Text` must render as the inline
|
|
61
|
+
* `NativeVirtualText` host rather than `NativeText`, and optimizing it would emit the wrong host.
|
|
62
|
+
* Prefer targeted `@boost-force` first, and enable this only after verifying affected screens.
|
|
63
|
+
* @default false
|
|
64
|
+
*/
|
|
65
|
+
dangerouslyOptimizeTextWithUnknownAncestors?: boolean;
|
|
56
66
|
}
|
|
57
67
|
|
|
58
68
|
declare const _default: (api: object, options: Record<string, any> | null | undefined, dirname: string) => {
|