@tamagui/static 1.0.0-beta.179 → 1.0.0-beta.181

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.
Files changed (65) hide show
  1. package/dist/cjs/constants.js +8 -0
  2. package/dist/cjs/extractor/accessSafe.js +4 -0
  3. package/dist/cjs/extractor/babelParse.js +5 -0
  4. package/dist/cjs/extractor/babelParse.js.map +2 -2
  5. package/dist/cjs/extractor/buildClassName.js +4 -0
  6. package/dist/cjs/extractor/createEvaluator.js +5 -0
  7. package/dist/cjs/extractor/createExtractor.js +857 -730
  8. package/dist/cjs/extractor/createExtractor.js.map +2 -2
  9. package/dist/cjs/extractor/ensureImportingConcat.js +4 -0
  10. package/dist/cjs/extractor/evaluateAstNode.js +4 -0
  11. package/dist/cjs/extractor/extractHelpers.js +11 -0
  12. package/dist/cjs/extractor/extractMediaStyle.js +7 -2
  13. package/dist/cjs/extractor/extractMediaStyle.js.map +2 -2
  14. package/dist/cjs/extractor/extractToClassNames.js +12 -6
  15. package/dist/cjs/extractor/extractToClassNames.js.map +2 -2
  16. package/dist/cjs/extractor/findTopmostFunction.js +4 -0
  17. package/dist/cjs/extractor/generatedUid.js +4 -0
  18. package/dist/cjs/extractor/getPrefixLogs.js +4 -0
  19. package/dist/cjs/extractor/getPropValueFromAttributes.js +4 -0
  20. package/dist/cjs/extractor/getSourceModule.js +4 -0
  21. package/dist/cjs/extractor/getStaticBindingsForScope.js +4 -0
  22. package/dist/cjs/extractor/hoistClassNames.js +4 -0
  23. package/dist/cjs/extractor/literalToAst.js +5 -0
  24. package/dist/cjs/extractor/loadTamagui.js +67 -47
  25. package/dist/cjs/extractor/loadTamagui.js.map +2 -2
  26. package/dist/cjs/extractor/logLines.js +4 -0
  27. package/dist/cjs/extractor/normalizeTernaries.js +4 -0
  28. package/dist/cjs/extractor/removeUnusedHooks.js +4 -0
  29. package/dist/cjs/extractor/timer.js +46 -0
  30. package/dist/cjs/extractor/timer.js.map +7 -0
  31. package/dist/cjs/extractor/validHTMLAttributes.js +4 -0
  32. package/dist/cjs/index.js +6 -0
  33. package/dist/cjs/patchReactNativeWeb.js +23 -7
  34. package/dist/cjs/patchReactNativeWeb.js.map +2 -2
  35. package/dist/esm/extractor/babelParse.js.map +2 -2
  36. package/dist/esm/extractor/createExtractor.js +863 -740
  37. package/dist/esm/extractor/createExtractor.js.map +2 -2
  38. package/dist/esm/extractor/extractMediaStyle.js +2 -2
  39. package/dist/esm/extractor/extractMediaStyle.js.map +2 -2
  40. package/dist/esm/extractor/extractToClassNames.js +8 -6
  41. package/dist/esm/extractor/extractToClassNames.js.map +2 -2
  42. package/dist/esm/extractor/loadTamagui.js +63 -47
  43. package/dist/esm/extractor/loadTamagui.js.map +2 -2
  44. package/dist/esm/extractor/timer.js +24 -0
  45. package/dist/esm/extractor/timer.js.map +7 -0
  46. package/dist/esm/patchReactNativeWeb.js +19 -7
  47. package/dist/esm/patchReactNativeWeb.js.map +2 -2
  48. package/dist/jsx/extractor/createExtractor.js +863 -740
  49. package/dist/jsx/extractor/extractMediaStyle.js +2 -2
  50. package/dist/jsx/extractor/extractToClassNames.js +8 -6
  51. package/dist/jsx/extractor/loadTamagui.js +63 -47
  52. package/dist/jsx/extractor/timer.js +23 -0
  53. package/dist/jsx/patchReactNativeWeb.js +19 -7
  54. package/package.json +23 -23
  55. package/types/extractor/babelParse.d.ts.map +1 -1
  56. package/types/extractor/createExtractor.d.ts.map +1 -1
  57. package/types/extractor/extractMediaStyle.d.ts +1 -1
  58. package/types/extractor/extractMediaStyle.d.ts.map +1 -1
  59. package/types/extractor/extractToClassNames.d.ts +2 -1
  60. package/types/extractor/extractToClassNames.d.ts.map +1 -1
  61. package/types/extractor/loadTamagui.d.ts +2 -2
  62. package/types/extractor/loadTamagui.d.ts.map +1 -1
  63. package/types/extractor/timer.d.ts +5 -0
  64. package/types/extractor/timer.d.ts.map +1 -0
  65. package/types/patchReactNativeWeb.d.ts.map +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/extractor/createExtractor.ts"],
4
- "sourcesContent": ["import traverse, { NodePath, Visitor } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport {\n StackProps,\n StaticConfigParsed,\n TamaguiInternalConfig,\n getSplitStyles,\n mediaQueryConfig,\n pseudos,\n rnw,\n} from '@tamagui/core-node'\nimport { stylePropsTransform } from '@tamagui/helpers'\nimport { difference, pick } from 'lodash'\n\nimport { FAILED_EVAL } from '../constants'\nimport {\n ExtractedAttr,\n ExtractedAttrAttr,\n ExtractedAttrStyle,\n ExtractorParseProps,\n Ternary,\n} from '../types'\nimport { createEvaluator, createSafeEvaluator } from './createEvaluator'\nimport { evaluateAstNode } from './evaluateAstNode'\nimport { attrStr, findComponentName, isInsideTamagui, isPresent, objToStr } from './extractHelpers'\nimport { findTopmostFunction } from './findTopmostFunction'\nimport { getStaticBindingsForScope } from './getStaticBindingsForScope'\nimport { literalToAst } from './literalToAst'\nimport { loadTamagui } from './loadTamagui'\nimport { logLines } from './logLines'\nimport { normalizeTernaries } from './normalizeTernaries'\nimport { removeUnusedHooks } from './removeUnusedHooks'\nimport { validHTMLAttributes } from './validHTMLAttributes'\n\nconst UNTOUCHED_PROPS = {\n key: true,\n style: true,\n className: true,\n}\n\nconst isAttr = (x: ExtractedAttr): x is ExtractedAttrAttr => x.type === 'attr'\n\nconst validHooks = {\n useMedia: true,\n useTheme: true,\n}\n\nexport type Extractor = ReturnType<typeof createExtractor>\n\nconst createTernary = (x: Ternary) => x\n\nexport function createExtractor() {\n const shouldAddDebugProp =\n // really basic disable this for next.js because it messes with ssr\n !process.env.npm_package_dependencies_next &&\n process.env.TAMAGUI_TARGET !== 'native' &&\n process.env.IDENTIFY_TAGS !== 'false' &&\n (process.env.NODE_ENV === 'development' || process.env.DEBUG || process.env.IDENTIFY_TAGS)\n\n // ts imports\n require('esbuild-register/dist/node').register({\n target: 'es2019',\n format: 'cjs',\n })\n\n let loadedTamaguiConfig: TamaguiInternalConfig\n let hasLogged = false\n\n return {\n getTamagui() {\n return loadedTamaguiConfig\n },\n parse: (\n fileOrPath: NodePath<t.Program> | t.File,\n {\n config = 'tamagui.config.ts',\n importsWhitelist = ['constants.js'],\n evaluateVars = true,\n shouldPrintDebug = false,\n sourcePath = '',\n onExtractTag,\n getFlattenedNode,\n disable,\n disableExtraction,\n disableExtractInlineMedia,\n disableExtractVariables,\n disableDebugAttr,\n prefixLogs,\n excludeProps,\n ...props\n }: ExtractorParseProps\n ) => {\n if (disable) {\n return null\n }\n\n if (sourcePath === '') {\n throw new Error(`Must provide a source file name`)\n }\n if (!Array.isArray(props.components)) {\n throw new Error(`Must provide components array with list of Tamagui component modules`)\n }\n\n // we require it after parse because we need to set some global/env stuff before importing\n // otherwise we'd import `rnw` and cause it to evaluate react-native-web which causes errors\n const { components, tamaguiConfig } = loadTamagui({\n config,\n components: props.components || ['tamagui'],\n })\n\n loadedTamaguiConfig = tamaguiConfig\n\n const defaultTheme = tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]]\n const body = fileOrPath.type === 'Program' ? fileOrPath.get('body') : fileOrPath.program.body\n\n /**\n * Step 1: Determine if importing any statically extractable components\n */\n const isInternalImport = (importStr: string) => {\n return isInsideTamagui(sourcePath) && importStr[0] === '.'\n }\n\n const validComponents: { [key: string]: any } = Object.keys(components)\n // check if uppercase to avoid hitting media query proxy before init\n .filter((key) => key[0].toUpperCase() === key[0] && !!components[key]?.staticConfig)\n .reduce((obj, name) => {\n obj[name] = components[name]\n return obj\n }, {})\n\n let doesUseValidImport = false\n\n for (const bodyPath of body) {\n if (bodyPath.type !== 'ImportDeclaration') continue\n const node = ('node' in bodyPath ? bodyPath.node : bodyPath) as any\n const from = node.source.value\n if (props.components.includes(from) || isInternalImport(from)) {\n if (\n node.specifiers.some((specifier) => {\n const name = specifier.local.name\n return validComponents[name] || validHooks[name]\n })\n ) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(sourcePath, { doesUseValidImport })\n }\n\n if (!doesUseValidImport) {\n return null\n }\n\n let couldntParse = false\n const modifiedComponents = new Set<NodePath<any>>()\n\n // only keeping a cache around per-file, reset it if it changes\n const bindingCache: Record<string, string | null> = {}\n\n const callTraverse = (a: Visitor<{}>) => {\n return fileOrPath.type === 'File' ? traverse(fileOrPath, a) : fileOrPath.traverse(a)\n }\n\n /**\n * Step 2: Statically extract from JSX < /> nodes\n */\n let programPath: NodePath<t.Program>\n\n const res = {\n flattened: 0,\n optimized: 0,\n modified: 0,\n found: 0,\n }\n\n callTraverse({\n Program: {\n enter(path) {\n programPath = path\n },\n },\n JSXElement(traversePath) {\n const node = traversePath.node.openingElement\n const ogAttributes = node.attributes\n const componentName = findComponentName(traversePath.scope)\n const closingElement = traversePath.node.closingElement\n\n // skip non-identifier opening elements (member expressions, etc.)\n if (t.isJSXMemberExpression(closingElement?.name) || !t.isJSXIdentifier(node.name)) {\n return\n }\n\n // validate its a proper import from tamagui (or internally inside tamagui)\n const binding = traversePath.scope.getBinding(node.name.name)\n\n if (binding) {\n if (!t.isImportDeclaration(binding.path.parent)) {\n return\n }\n const source = binding.path.parent.source\n if (!props.components.includes(source.value) && !isInternalImport(source.value)) {\n return\n }\n if (!validComponents[binding.identifier.name]) {\n return\n }\n }\n\n const component = validComponents[node.name.name] as { staticConfig?: StaticConfigParsed }\n if (!component || !component.staticConfig) {\n return\n }\n\n const originalNodeName = node.name.name\n\n // found a valid tag\n res.found++\n\n if (shouldPrintDebug) {\n console.log(`\\n<${originalNodeName} />`)\n }\n\n const filePath = sourcePath.replace(process.cwd(), '.')\n const lineNumbers = node.loc\n ? node.loc.start.line +\n (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : '')\n : ''\n\n // add data-is\n if (shouldAddDebugProp && !disableDebugAttr) {\n const preName = componentName ? `${componentName}.` : ''\n res.modified++\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier('data-is'),\n t.stringLiteral(\n `${preName}${node.name.name}@${filePath.replace('./', '')}:${lineNumbers}`\n )\n )\n )\n }\n\n const shouldLog = !hasLogged\n if (shouldLog) {\n const prefix = ' |'\n console.log(\n prefixLogs || prefix,\n ' total \u00B7 optimized \u00B7 flattened '\n )\n hasLogged = true\n }\n if (disableExtraction) {\n return\n }\n\n const { staticConfig } = component\n const isTextView = staticConfig.isText || false\n const validStyles = staticConfig?.validStyles ?? {}\n\n function isValidStyleKey(name: string) {\n return !!(\n !!validStyles[name] ||\n !!pseudos[name] ||\n staticConfig.variants?.[name] ||\n tamaguiConfig.shorthands[name] ||\n (name[0] === '$' ? !!mediaQueryConfig[name.slice(1)] : false)\n )\n }\n\n // find tag=\"a\" tag=\"main\" etc dom indicators\n let tagName = staticConfig.defaultProps?.tag ?? (isTextView ? 'span' : 'div')\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (t.isJSXSpreadAttribute(attr)) return\n if (attr.name.name !== 'tag') return\n const val = attr.value\n if (!t.isStringLiteral(val)) return\n tagName = val.value\n })\n\n const flatNode = getFlattenedNode({ isTextView, tag: tagName })\n\n const inlineProps = new Set([\n ...(props.inlineProps || []),\n ...(staticConfig.inlineProps || []),\n ])\n const deoptProps = new Set([\n ...(props.deoptProps || []),\n ...(staticConfig.deoptProps || []),\n ])\n\n // Generate scope object at this level\n const staticNamespace = getStaticBindingsForScope(\n traversePath.scope,\n importsWhitelist,\n sourcePath,\n bindingCache,\n shouldPrintDebug\n )\n\n const attemptEval = !evaluateVars\n ? evaluateAstNode\n : createEvaluator({\n // @ts-ignore\n tamaguiConfig,\n staticNamespace,\n sourcePath,\n traversePath,\n shouldPrintDebug,\n })\n const attemptEvalSafe = createSafeEvaluator(attemptEval)\n\n if (shouldPrintDebug) {\n console.log(' staticNamespace', Object.keys(staticNamespace).join(', '))\n }\n\n //\n // SPREADS SETUP\n //\n\n // TODO restore\n // const hasDeopt = (obj: Object) => {\n // return Object.keys(obj).some(isDeoptedProp)\n // }\n\n // flatten any easily evaluatable spreads\n const flattenedAttrs: (t.JSXAttribute | t.JSXSpreadAttribute)[] = []\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (!t.isJSXSpreadAttribute(attr)) {\n flattenedAttrs.push(attr)\n return\n }\n let arg: any\n try {\n arg = attemptEval(attr.argument)\n } catch (e: any) {\n if (shouldPrintDebug) {\n console.log(' couldnt parse spread', e.message)\n }\n flattenedAttrs.push(attr)\n return\n }\n if (arg !== undefined) {\n try {\n if (typeof arg !== 'object' || arg == null) {\n if (shouldPrintDebug) {\n console.log(' non object or null arg', arg)\n }\n flattenedAttrs.push(attr)\n } else {\n for (const k in arg) {\n const value = arg[k]\n // this is a null prop:\n if (!value && typeof value === 'object') {\n console.log('shouldnt we handle this?', k, value, arg)\n continue\n }\n flattenedAttrs.push(\n t.jsxAttribute(\n t.jsxIdentifier(k),\n t.jsxExpressionContainer(literalToAst(value))\n )\n )\n }\n }\n } catch (err) {\n console.warn('cant parse spread, caught err', err)\n couldntParse = true\n }\n }\n })\n\n if (couldntParse) {\n return\n }\n\n // set flattened\n node.attributes = flattenedAttrs\n\n // add in NON-STYLE default props\n if (staticConfig.defaultProps) {\n for (const key in staticConfig.defaultProps) {\n if (isValidStyleKey(key)) {\n continue\n }\n const serialize = require('babel-literal-to-ast')\n const val = staticConfig.defaultProps[key]\n try {\n const serializedDefaultProp = serialize(val)\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier(key),\n typeof val === 'string'\n ? t.stringLiteral(val)\n : t.jsxExpressionContainer(serializedDefaultProp)\n )\n )\n } catch (err) {\n console.warn(\n `\u26A0\uFE0F Error evaluating default prop for component ${node.name.name}, prop ${key}\\n error: ${err}\\n value:`,\n val,\n '\\n defaultProps:',\n staticConfig.defaultProps\n )\n }\n }\n }\n\n let attrs: ExtractedAttr[] = []\n let shouldDeopt = false\n let inlinePropCount = 0\n let hasSetOptimized = false\n\n // RUN first pass\n\n // normalize all conditionals so we can evaluate away easier later\n // at the same time lets normalize shorthand media queries into spreads:\n // that way we can parse them with the same logic later on\n //\n // {...media.sm && { color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n //\n // $sm={{ color: 'red' }}\n // => {...media.sm && { color: 'red' }}\n //\n // $sm={{ color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n\n attrs = traversePath\n .get('openingElement')\n .get('attributes')\n .flatMap((path) => {\n try {\n const res = evaluateAttribute(path)\n if (!res) {\n path.remove()\n }\n return res\n } catch (err: any) {\n if (shouldPrintDebug) {\n console.log('Error extracting attribute', err.message, err.stack)\n console.log('node', path.node)\n }\n return {\n type: 'attr',\n value: path.node,\n } as const\n }\n })\n .flat(4)\n .filter(isPresent)\n\n if (shouldPrintDebug) {\n console.log(' - attrs (before):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // START function evaluateAttribute\n function evaluateAttribute(\n path: NodePath<t.JSXAttribute | t.JSXSpreadAttribute>\n ): ExtractedAttr | ExtractedAttr[] | null {\n const attribute = path.node\n const attr: ExtractedAttr = { type: 'attr', value: attribute }\n // ...spreads\n if (t.isJSXSpreadAttribute(attribute)) {\n const arg = attribute.argument\n const conditional = t.isConditionalExpression(arg)\n ? // <YStack {...isSmall ? { color: 'red } : { color: 'blue }}\n ([arg.test, arg.consequent, arg.alternate] as const)\n : t.isLogicalExpression(arg) && arg.operator === '&&'\n ? // <YStack {...isSmall && { color: 'red }}\n ([arg.left, arg.right, null] as const)\n : null\n\n if (conditional) {\n const [test, alt, cons] = conditional\n if (!test) throw new Error(`no test`)\n if ([alt, cons].some((side) => side && !isExtractable(side))) {\n if (shouldPrintDebug) {\n console.log('not extractable', alt, cons)\n }\n return attr\n }\n // split into individual ternaries per object property\n return [\n ...(createTernariesFromObjectProperties(test, alt) || []),\n ...((cons &&\n createTernariesFromObjectProperties(t.unaryExpression('!', test), cons)) ||\n []),\n ].map((ternary) => ({\n type: 'ternary',\n value: ternary,\n }))\n }\n }\n // END ...spreads\n\n // directly keep these\n // couldn't evaluate spread, undefined name, or name is not string\n if (\n t.isJSXSpreadAttribute(attribute) ||\n !attribute.name ||\n typeof attribute.name.name !== 'string'\n ) {\n if (shouldPrintDebug) {\n console.log(' ! inlining, spread attr')\n }\n inlinePropCount++\n return attr\n }\n\n const name = attribute.name.name\n\n if (excludeProps?.has(name)) {\n if (shouldPrintDebug) {\n console.log(' excluding prop', name)\n }\n return null\n }\n\n if (inlineProps.has(name)) {\n inlinePropCount++\n if (shouldPrintDebug) {\n console.log(' ! inlining, inline prop', name)\n }\n return attr\n }\n\n // can still optimize the object... see hoverStyle on native\n if (deoptProps.has(name)) {\n shouldDeopt = true\n inlinePropCount++\n if (shouldPrintDebug) {\n console.log(' ! inlining, deopted prop', name)\n }\n return attr\n }\n\n // pass className, key, and style props through untouched\n if (UNTOUCHED_PROPS[name]) {\n return attr\n }\n\n if (name.startsWith('data-')) {\n return attr\n }\n\n // shorthand media queries\n if (name[0] === '$' && t.isJSXExpressionContainer(attribute?.value)) {\n // allow disabling this extraction\n if (disableExtractInlineMedia) {\n return attr\n }\n\n const shortname = name.slice(1)\n if (mediaQueryConfig[shortname]) {\n const expression = attribute.value.expression\n if (!t.isJSXEmptyExpression(expression)) {\n const ternaries = createTernariesFromObjectProperties(\n t.stringLiteral(shortname),\n expression,\n {\n inlineMediaQuery: shortname,\n }\n )\n if (ternaries) {\n return ternaries.map((value) => ({\n type: 'ternary',\n value,\n }))\n }\n }\n }\n }\n\n const [value, valuePath] = (() => {\n if (t.isJSXExpressionContainer(attribute?.value)) {\n return [attribute.value.expression!, path.get('value')!] as const\n } else {\n return [attribute.value!, path.get('value')!] as const\n }\n })()\n\n const remove = () => {\n Array.isArray(valuePath) ? valuePath.map((p) => p.remove()) : valuePath.remove()\n }\n\n if (name === 'ref') {\n if (shouldPrintDebug) {\n console.log(' ! inlining, ref', name)\n }\n inlinePropCount++\n return attr\n }\n\n if (name === 'tag') {\n return {\n type: 'attr',\n value: path.node,\n }\n }\n\n // native shouldn't extract variables\n if (disableExtractVariables) {\n if (value) {\n if (value.type === 'StringLiteral' && value.value[0] === '$') {\n if (shouldPrintDebug) {\n console.log(` ! inlining, native disable extract: ${name} =`, value.value)\n }\n inlinePropCount++\n return attr\n }\n }\n }\n\n // if value can be evaluated, extract it and filter it out\n const styleValue = attemptEvalSafe(value)\n\n // never flatten if a prop isn't a valid static attribute\n // only post prop-mapping\n if (!isValidStyleKey(name)) {\n let keys = [name]\n let out: any = null\n if (staticConfig.propMapper) {\n // for now passing empty props {}, a bit odd, need to at least document\n // for now we don't expose custom components so just noting behavior\n out = staticConfig.propMapper(\n name,\n styleValue,\n defaultTheme,\n staticConfig.defaultProps,\n staticConfig\n )\n if (out) {\n // translate to DOM-compat\n out = rnw.createDOMProps(isTextView ? 'span' : 'div', out)\n // remove className - we dont use rnw styling\n delete out.className\n\n keys = Object.keys(out)\n }\n }\n\n const attributes = keys.map((key) => {\n const val = out[key]\n if (!isValidStyleKey(key)) {\n if (validHTMLAttributes[key]) {\n return {\n type: 'attr',\n value: t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(literalToAst(val))\n ),\n } as const\n }\n if (shouldPrintDebug) {\n console.log(' ! inlining, non-static', key)\n }\n inlinePropCount++\n }\n return {\n type: 'style',\n value: { [name]: styleValue },\n name,\n attr: path.node,\n } as const\n })\n\n if (inlinePropCount) {\n // bail\n return attr\n }\n\n // return evaluated attributes\n return attributes\n }\n\n // FAILED = dynamic or ternary, keep going\n if (styleValue !== FAILED_EVAL) {\n if (shouldPrintDebug) {\n console.log(` style: ${name} =`, styleValue)\n }\n if (!(name in staticConfig.defaultProps)) {\n if (!hasSetOptimized) {\n res.optimized++\n hasSetOptimized = true\n }\n }\n return {\n type: 'style',\n value: { [name]: styleValue },\n name,\n attr: path.node,\n }\n }\n\n // ternaries!\n\n // binary ternary, we can eventually make this smarter but step 1\n // basically for the common use case of:\n // opacity={(conditional ? 0 : 1) * scale}\n if (t.isBinaryExpression(value)) {\n if (shouldPrintDebug) {\n console.log(` binary expression ${name} = `, value)\n }\n const { operator, left, right } = value\n // if one side is a ternary, and the other side is evaluatable, we can maybe extract\n const lVal = attemptEvalSafe(left)\n const rVal = attemptEvalSafe(right)\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression lVal ${String(lVal)}, rVal ${String(rVal)}`)\n }\n if (lVal !== FAILED_EVAL && t.isConditionalExpression(right)) {\n const ternary = addBinaryConditional(operator, left, right)\n if (ternary) return ternary\n }\n if (rVal !== FAILED_EVAL && t.isConditionalExpression(left)) {\n const ternary = addBinaryConditional(operator, right, left)\n if (ternary) return ternary\n }\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression cant extract`)\n }\n inlinePropCount++\n return attr\n }\n\n const staticConditional = getStaticConditional(value)\n if (staticConditional) {\n if (shouldPrintDebug) {\n console.log(` static conditional ${name} = `, value)\n }\n return { type: 'ternary', value: staticConditional }\n }\n\n const staticLogical = getStaticLogical(value)\n if (staticLogical) {\n if (shouldPrintDebug) {\n console.log(` static ternary ${name} = `, value)\n }\n return { type: 'ternary', value: staticLogical }\n }\n\n if (shouldPrintDebug) {\n console.log(' ! inline prop via no match', name, value.type)\n }\n // if we've made it this far, the prop stays inline\n inlinePropCount++\n\n if (shouldPrintDebug) {\n console.log(` inlining ${name} = `, value)\n }\n\n //\n // RETURN ATTR\n //\n return attr\n\n // attr helpers:\n function addBinaryConditional(\n operator: any,\n staticExpr: any,\n cond: t.ConditionalExpression\n ): ExtractedAttr | null {\n if (getStaticConditional(cond)) {\n const alt = attemptEval(t.binaryExpression(operator, staticExpr, cond.alternate))\n const cons = attemptEval(t.binaryExpression(operator, staticExpr, cond.consequent))\n if (shouldPrintDebug) {\n console.log(' binaryConditional', cond.test, cons, alt)\n }\n return {\n type: 'ternary',\n value: {\n test: cond.test,\n remove,\n alternate: { [name]: alt },\n consequent: { [name]: cons },\n },\n }\n }\n return null\n }\n\n function getStaticConditional(value: t.Node): Ternary | null {\n if (t.isConditionalExpression(value)) {\n try {\n if (shouldPrintDebug) {\n console.log('attempt', value.alternate, value.consequent)\n }\n const aVal = attemptEval(value.alternate)\n const cVal = attemptEval(value.consequent)\n if (shouldPrintDebug) {\n const type = value.test.type\n console.log(' static ternary', type, cVal, aVal)\n }\n return {\n test: value.test,\n remove,\n consequent: { [name]: cVal },\n alternate: { [name]: aVal },\n }\n } catch (err: any) {\n if (shouldPrintDebug) {\n console.log(' cant eval ternary', err.message)\n }\n }\n }\n return null\n }\n\n function getStaticLogical(value: t.Node): Ternary | null {\n if (t.isLogicalExpression(value)) {\n if (value.operator === '&&') {\n try {\n const val = attemptEval(value.right)\n if (shouldPrintDebug) {\n console.log(' staticLogical', value.left, name, val)\n }\n return {\n test: value.left,\n remove,\n consequent: { [name]: val },\n alternate: null,\n }\n } catch (err) {\n if (shouldPrintDebug) {\n console.log(' cant static eval logical', err)\n }\n }\n }\n }\n return null\n }\n } // END function evaluateAttribute\n\n function isExtractable(obj: t.Node): obj is t.ObjectExpression {\n return (\n t.isObjectExpression(obj) &&\n obj.properties.every((prop) => {\n if (!t.isObjectProperty(prop)) {\n console.log('not object prop', prop)\n return false\n }\n const propName = prop.key['name']\n if (!isValidStyleKey(propName) && propName !== 'tag') {\n if (shouldPrintDebug) {\n console.log(' not a valid style prop!', propName)\n }\n return false\n }\n return true\n })\n )\n }\n\n // side = {\n // color: 'red',\n // background: x ? 'red' : 'green',\n // $gtSm: { color: 'green' }\n // }\n // => Ternary<test, { color: 'red' }, null>\n // => Ternary<test && x, { background: 'red' }, null>\n // => Ternary<test && !x, { background: 'green' }, null>\n // => Ternary<test && '$gtSm', { color: 'green' }, null>\n function createTernariesFromObjectProperties(\n test: t.Expression,\n side: t.Expression | null,\n ternaryPartial: Partial<Ternary> = {}\n ): null | Ternary[] {\n if (!side) {\n return null\n }\n if (!isExtractable(side)) {\n throw new Error('not extractable')\n }\n return side.properties.flatMap((property) => {\n if (!t.isObjectProperty(property)) {\n throw new Error('expected object property')\n }\n // handle media queries inside spread/conditional objects\n if (t.isIdentifier(property.key)) {\n const key = property.key.name\n const mediaQueryKey = key.slice(1)\n const isMediaQuery = key[0] === '$' && mediaQueryConfig[mediaQueryKey]\n if (isMediaQuery) {\n if (t.isExpression(property.value)) {\n const ternaries = createTernariesFromObjectProperties(\n t.stringLiteral(mediaQueryKey),\n property.value,\n {\n inlineMediaQuery: mediaQueryKey,\n }\n )\n if (ternaries) {\n return ternaries.map((value) => ({\n ...ternaryPartial,\n ...value,\n // ensure media query test stays on left side (see getMediaQueryTernary)\n test: t.logicalExpression('&&', value.test, test),\n }))\n } else {\n console.log('\u26A0\uFE0F no ternaries?', property)\n }\n } else {\n console.log('\u26A0\uFE0F not expression', property)\n }\n }\n }\n // this could be a recurse here if we want to get fancy\n if (t.isConditionalExpression(property.value)) {\n // merge up into the parent conditional, split into two\n const [truthy, falsy] = [\n t.objectExpression([t.objectProperty(property.key, property.value.consequent)]),\n t.objectExpression([t.objectProperty(property.key, property.value.alternate)]),\n ].map((x) => attemptEval(x))\n return [\n createTernary({\n remove() {},\n ...ternaryPartial,\n test: t.logicalExpression('&&', test, property.value.test),\n consequent: truthy,\n alternate: null,\n }),\n createTernary({\n ...ternaryPartial,\n test: t.logicalExpression(\n '&&',\n test,\n t.unaryExpression('!', property.value.test)\n ),\n consequent: falsy,\n alternate: null,\n remove() {},\n }),\n ]\n }\n const obj = t.objectExpression([t.objectProperty(property.key, property.value)])\n const consequent = attemptEval(obj)\n return createTernary({\n remove() {},\n ...ternaryPartial,\n test,\n consequent,\n alternate: null,\n })\n })\n }\n\n // now update to new values\n node.attributes = attrs.filter(isAttr).map((x) => x.value)\n\n if (couldntParse || shouldDeopt) {\n if (shouldPrintDebug) {\n console.log(` avoid optimizing:`, { couldntParse, shouldDeopt })\n }\n node.attributes = ogAttributes\n return\n }\n\n // before deopt, can still optimize\n const parentFn = findTopmostFunction(traversePath)\n if (parentFn) {\n modifiedComponents.add(parentFn)\n }\n\n // combine ternaries\n let ternaries: Ternary[] = []\n attrs = attrs\n .reduce<(ExtractedAttr | ExtractedAttr[])[]>((out, cur) => {\n const next = attrs[attrs.indexOf(cur) + 1]\n if (cur.type === 'ternary') {\n ternaries.push(cur.value)\n }\n if ((!next || next.type !== 'ternary') && ternaries.length) {\n // finish, process\n const normalized = normalizeTernaries(ternaries).map(\n ({ alternate, consequent, ...rest }) => {\n return {\n type: 'ternary' as const,\n value: {\n ...rest,\n alternate: alternate || null,\n consequent: consequent || null,\n },\n }\n }\n )\n try {\n return [...out, ...normalized]\n } finally {\n if (shouldPrintDebug) {\n console.log(\n ` normalizeTernaries (${ternaries.length} => ${normalized.length})`\n )\n }\n ternaries = []\n }\n }\n if (cur.type === 'ternary') {\n return out\n }\n out.push(cur)\n return out\n }, [])\n .flat()\n\n // evaluates all static attributes into a simple object\n const completeStaticProps = {\n ...Object.keys(attrs).reduce((acc, index) => {\n const cur = attrs[index] as ExtractedAttr\n if (cur.type === 'style') {\n Object.assign(acc, cur.value)\n }\n if (cur.type === 'attr') {\n if (t.isJSXSpreadAttribute(cur.value)) {\n return acc\n }\n if (!t.isJSXIdentifier(cur.value.name)) {\n return acc\n }\n const key = cur.value.name.name\n // undefined = boolean true\n const value = attemptEvalSafe(cur.value.value || t.booleanLiteral(true))\n if (value === FAILED_EVAL) {\n return acc\n }\n acc[key] = value\n }\n return acc\n }, {}),\n }\n\n // flatten logic!\n // fairly simple check to see if all children are text\n const hasSpread = node.attributes.some((x) => t.isJSXSpreadAttribute(x))\n const hasOnlyStringChildren =\n !hasSpread &&\n (node.selfClosing ||\n (traversePath.node.children &&\n traversePath.node.children.every((x) => x.type === 'JSXText')))\n const shouldFlatten =\n !shouldDeopt &&\n inlinePropCount === 0 &&\n !hasSpread &&\n staticConfig.neverFlatten !== true &&\n (staticConfig.neverFlatten === 'jsx' ? hasOnlyStringChildren : true)\n\n // only if we flatten, ensure the default styles are there\n if (shouldFlatten && staticConfig.defaultProps) {\n const defaultStyleAttrs = Object.keys(staticConfig.defaultProps).flatMap((key) => {\n if (!isValidStyleKey(key)) {\n return\n }\n try {\n const serialize = require('babel-literal-to-ast')\n const val = staticConfig.defaultProps[key]\n const value = serialize(val)\n const name = tamaguiConfig.shorthands[key] || key\n return {\n type: 'style',\n name,\n value,\n } as ExtractedAttrStyle\n } catch (err) {\n console.warn(\n `\u26A0\uFE0F Error evaluating default style for component, prop ${key}\\n error: ${err}`\n )\n shouldDeopt = true\n }\n }) as ExtractedAttr[]\n\n if (defaultStyleAttrs.length) {\n attrs = [...defaultStyleAttrs, ...attrs]\n }\n }\n\n if (shouldDeopt) {\n node.attributes = ogAttributes\n return\n }\n\n // insert overrides - this inserts null props for things that are set in classNames\n // only when not flattening, so the downstream component can skip applying those styles\n const ensureOverridden = {}\n if (!shouldFlatten) {\n for (const cur of attrs) {\n if (cur.type === 'style') {\n // TODO need to loop over initial props not just style props\n for (const key in cur.value) {\n const shouldEnsureOverridden = !!staticConfig.ensureOverriddenProp?.[key]\n const isSetInAttrsAlready = attrs.some(\n (x) =>\n x.type === 'attr' &&\n x.value.type === 'JSXAttribute' &&\n x.value.name.name === key\n )\n\n if (!isSetInAttrsAlready) {\n const isVariant = !!staticConfig.variants?.[cur.name || '']\n if (isVariant || shouldEnsureOverridden) {\n ensureOverridden[key] = true\n }\n }\n }\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (flattened): \\n', logLines(attrs.map(attrStr).join(', ')))\n console.log(' - ensureOverriden:', Object.keys(ensureOverridden).join(', '))\n }\n\n // expand shorthands, de-opt variables\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (!cur) {\n return acc\n }\n\n if (\n shouldFlatten &&\n cur.type === 'attr' &&\n !t.isJSXSpreadAttribute(cur.value) &&\n cur.value.name.name === 'tag'\n ) {\n // remove tag=\"\"\n return acc\n }\n\n if (cur.type !== 'style') {\n acc.push(cur)\n return acc\n }\n\n let key = Object.keys(cur.value)[0]\n const value = cur.value[key]\n const fullKey = tamaguiConfig.shorthands[key]\n\n // expand shorthands\n if (fullKey) {\n cur.value = { [fullKey]: value }\n key = fullKey\n }\n\n // finally we have all styles + expansions, lets see if we need to skip\n // any and keep them as attrs\n if (disableExtractVariables) {\n if (value[0] === '$') {\n if (shouldPrintDebug) {\n console.log(` keeping variable inline: ${key} =`, value)\n }\n acc.push({\n type: 'attr',\n value: t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(t.stringLiteral(value))\n ),\n })\n return acc\n }\n }\n\n acc.push(cur)\n return acc\n }, [])\n\n if (shouldPrintDebug) {\n console.log(' - attrs (expanded): \\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // merge styles, leave undefined values\n let prev: ExtractedAttr | null = null\n\n function mergeStyles(prev: StackProps, next: StackProps) {\n for (const key in next) {\n // merge pseudos\n if (pseudos[key]) {\n prev[key] = prev[key] || {}\n Object.assign(prev[key], next[key])\n } else {\n prev[key] = next[key]\n }\n }\n }\n\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (cur.type === 'style') {\n const key = Object.keys(cur.value)[0]\n const value = cur.value[key]\n\n const shouldKeepOriginalAttr =\n // !isStyleAndAttr[key] &&\n !shouldFlatten &&\n // de-opt transform styles so it merges properly if not flattened\n // we handle this later on\n // (stylePropsTransform[key] ||\n // de-opt if non-style\n !validStyles[key] &&\n !pseudos[key] &&\n !key.startsWith('data-')\n\n if (shouldKeepOriginalAttr) {\n if (shouldPrintDebug) {\n console.log(' - keeping as non-style', key)\n }\n prev = cur\n acc.push({\n type: 'attr',\n value: t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(\n typeof value === 'string' ? t.stringLiteral(value) : literalToAst(value)\n )\n ),\n })\n acc.push(cur)\n return acc\n }\n\n if (ensureOverridden[key]) {\n acc.push({\n type: 'attr',\n value:\n cur.attr ||\n t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral())),\n })\n }\n\n if (prev?.type === 'style') {\n mergeStyles(prev.value as StackProps, cur.value as StackProps)\n return acc\n }\n }\n\n prev = cur\n acc.push(cur)\n return acc\n }, [])\n\n if (shouldPrintDebug) {\n console.log(' - attrs (combined \uD83D\uDD00): \\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // post process\n const getStyles = (props: Object | null, debugName = '') => {\n if (!props) return\n if (!Object.keys(props).length) return\n if (excludeProps && !!excludeProps.size) {\n for (const key in props) {\n if (excludeProps.has(key)) {\n delete props[key]\n }\n }\n }\n const out = getSplitStyles(\n props,\n staticConfig,\n defaultTheme,\n {\n noClassNames: true,\n }\n // , {\n // noClassNames: process.env.TAMAGUI_TARGET !== 'web',\n // }\n )\n const outStyle = {\n ...out.style,\n ...out.pseudos,\n }\n if (shouldPrintDebug === 'verbose') {\n // // prettier-ignore\n console.log(` getStyles ${debugName} (props):\\n`, logLines(objToStr(props)))\n // // prettier-ignore\n console.log(\n ` getStyles ${debugName} (out.viewProps):\\n`,\n logLines(objToStr(out.viewProps))\n )\n // prettier-ignore\n console.log(` getStyles ${debugName} (out.style):\\n`, logLines(objToStr(outStyle || {}), true))\n }\n for (const key in outStyle) {\n if (staticConfig.validStyles) {\n if (!staticConfig.validStyles[key] && !pseudos[key]) {\n delete outStyle[key]\n }\n }\n }\n return outStyle\n }\n\n // used to ensure we pass the entire prop bundle to getStyles\n const completeStylesProcessed = getStyles(\n {\n ...staticConfig.defaultProps,\n ...completeStaticProps,\n },\n 'completeStylesProcessed'\n )\n\n if (!completeStylesProcessed) {\n throw new Error(`Impossible, no styles`)\n }\n\n // any extra styles added in postprocess should be added to first group as they wont be overriden\n const stylesToAddToInitialGroup = shouldFlatten\n ? difference(Object.keys(completeStylesProcessed), Object.keys(completeStaticProps))\n : []\n\n if (stylesToAddToInitialGroup.length) {\n const toAdd = pick(completeStylesProcessed, ...stylesToAddToInitialGroup)\n const firstGroup = attrs.find((x) => x.type === 'style')\n if (shouldPrintDebug) {\n console.log(' toAdd', objToStr(toAdd))\n }\n if (!firstGroup) {\n attrs.unshift({ type: 'style', value: toAdd })\n } else {\n Object.assign(firstGroup.value, toAdd)\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' -- stylesToAddToInitialGroup', stylesToAddToInitialGroup.join(', '), { shouldFlatten })\n // prettier-ignore\n console.log(' -- completeStaticProps:\\n', logLines(objToStr(completeStaticProps)))\n // prettier-ignore\n console.log(' -- completeStylesProcessed:\\n', logLines(objToStr(completeStylesProcessed)))\n }\n\n let getStyleError: any = null\n\n // fix up ternaries, combine final style values\n for (const attr of attrs) {\n try {\n if (shouldPrintDebug) console.log(' *', attrStr(attr))\n switch (attr.type) {\n case 'ternary':\n const a = getStyles(attr.value.alternate, 'ternary.alternate')\n const c = getStyles(attr.value.consequent, 'ternary.consequent')\n if (a) attr.value.alternate = a\n if (c) attr.value.consequent = c\n if (shouldPrintDebug) console.log(' => tern ', attrStr(attr))\n continue\n case 'style':\n // expand variants and such\n // get the keys we need\n const styles = getStyles(attr.value, 'style')\n if (styles) {\n // but actually resolve them to the full object\n // TODO media/psuedo merging\n attr.value = Object.fromEntries(\n Object.keys(styles).map((k) => [k, completeStylesProcessed[k]])\n )\n } else {\n console.warn('?????????')\n }\n // for (const keyIn in attr.value) {\n // const [key, value] = (() => {\n // if (keyIn in stylePropsTransform) {\n // // TODO this logic needs to be a bit more right, because could have spread in between transforms...\n // // could just output flat transforms as webkit now supports on recent versions\n // return ['transform', completeStylesProcessed['transform']] as const\n // } else {\n // return [keyIn, completeStylesProcessed[keyIn] ?? attr.value[keyIn]] as const\n // }\n // })()\n // // if (shouldPrintDebug) console.log('style', { keyIn, key, value })\n // delete attr.value[keyIn]\n // attr.value[key] = value\n // }\n continue\n }\n } catch (err) {\n // any error de-opt\n getStyleError = err\n }\n }\n\n if (getStyleError) {\n console.log(' \u26A0\uFE0F postprocessing error, deopt', getStyleError)\n node.attributes = ogAttributes\n return node\n }\n\n // final lazy extra loop: remove duplicate styles\n // so if you have:\n // style({ color: 'red' }), ...someProps, style({ color: 'green' })\n // this will mutate:\n // style({}), ...someProps, style({ color: 'green' })\n const existingStyleKeys = new Set()\n for (let i = attrs.length - 1; i >= 0; i--) {\n const attr = attrs[i]\n if (attr.type === 'style') {\n for (const key in attr.value) {\n if (existingStyleKeys.has(key)) {\n delete attr.value[key]\n } else {\n existingStyleKeys.add(key)\n }\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (after):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n if (shouldFlatten) {\n // DO FLATTEN\n if (shouldPrintDebug) {\n console.log(' [\u2705] flattening', originalNodeName, flatNode)\n }\n node.name.name = flatNode\n res.flattened++\n if (closingElement) {\n closingElement.name.name = flatNode\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(` \u274A\u274A inline props (${inlinePropCount}):`, shouldDeopt ? ' deopted' : '', hasSpread ? ' has spread' : '', staticConfig.neverFlatten ? 'neverFlatten' : '')\n console.log(' - attrs (end):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n onExtractTag({\n attrs,\n node,\n lineNumbers,\n filePath,\n attemptEval,\n jsxPath: traversePath,\n originalNodeName,\n isFlattened: shouldFlatten,\n programPath,\n })\n },\n })\n\n /**\n * Step 3: Remove dead code from removed media query / theme hooks\n */\n if (modifiedComponents.size) {\n const all = Array.from(modifiedComponents)\n if (shouldPrintDebug) {\n console.log(' [\uD83E\uDE9D] hook check', all.length)\n }\n for (const comp of all) {\n removeUnusedHooks(comp, shouldPrintDebug)\n }\n }\n\n return res\n },\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import traverse, { NodePath, Visitor } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport {\n PseudoStyles,\n StaticConfigParsed,\n TamaguiInternalConfig,\n getSplitStyles,\n getSubStyle,\n mediaQueryConfig,\n normalizeStyleObject,\n pseudos,\n rnw,\n} from '@tamagui/core-node'\nimport { difference, pick } from 'lodash'\nimport type { ViewStyle } from 'react-native'\n\nimport { FAILED_EVAL } from '../constants'\nimport {\n ExtractedAttr,\n ExtractedAttrAttr,\n ExtractedAttrStyle,\n ExtractorParseProps,\n Ternary,\n} from '../types'\nimport { createEvaluator, createSafeEvaluator } from './createEvaluator'\nimport { evaluateAstNode } from './evaluateAstNode'\nimport { attrStr, findComponentName, isInsideTamagui, isPresent, objToStr } from './extractHelpers'\nimport { findTopmostFunction } from './findTopmostFunction'\nimport { getStaticBindingsForScope } from './getStaticBindingsForScope'\nimport { literalToAst } from './literalToAst'\nimport { loadTamagui } from './loadTamagui'\nimport { logLines } from './logLines'\nimport { normalizeTernaries } from './normalizeTernaries'\nimport { removeUnusedHooks } from './removeUnusedHooks'\nimport { timer } from './timer'\nimport { validHTMLAttributes } from './validHTMLAttributes'\n\nconst UNTOUCHED_PROPS = {\n key: true,\n style: true,\n className: true,\n}\n\nconst INLINE_EXTRACTABLE = {\n ref: 'ref',\n key: 'key',\n onPress: 'onClick',\n onHoverIn: 'onMouseEnter',\n onHoverOut: 'onMouseLeave',\n onPressIn: 'onMouseDown',\n onPressOut: 'onMouseUp',\n}\n\nconst isAttr = (x: ExtractedAttr): x is ExtractedAttrAttr => x.type === 'attr'\n\nconst validHooks = {\n useMedia: true,\n useTheme: true,\n}\n\nexport type Extractor = ReturnType<typeof createExtractor>\n\nconst createTernary = (x: Ternary) => x\n\nexport function createExtractor() {\n if (!process.env.TAMAGUI_TARGET) {\n console.log('\u26A0\uFE0F Please set process.env.TAMAGUI_TARGET to either \"web\" or \"native\"')\n process.exit(1)\n }\n\n const shouldAddDebugProp =\n // really basic disable this for next.js because it messes with ssr\n !process.env.npm_package_dependencies_next &&\n process.env.TAMAGUI_TARGET !== 'native' &&\n process.env.IDENTIFY_TAGS !== 'false' &&\n (process.env.NODE_ENV === 'development' || process.env.DEBUG || process.env.IDENTIFY_TAGS)\n\n let loadedTamaguiConfig: TamaguiInternalConfig\n let hasLogged = false\n\n return {\n getTamagui() {\n return loadedTamaguiConfig\n },\n parse: (\n fileOrPath: NodePath<t.Program> | t.File,\n {\n config = 'tamagui.config.ts',\n importsWhitelist = ['constants.js'],\n evaluateVars = true,\n shouldPrintDebug = false,\n sourcePath = '',\n onExtractTag,\n getFlattenedNode,\n disable,\n disableExtraction,\n disableExtractInlineMedia,\n disableExtractVariables,\n disableDebugAttr,\n prefixLogs,\n excludeProps,\n ...props\n }: ExtractorParseProps\n ) => {\n if (disable) {\n return null\n }\n if (sourcePath === '') {\n throw new Error(`Must provide a source file name`)\n }\n if (!Array.isArray(props.components)) {\n throw new Error(`Must provide components array with list of Tamagui component modules`)\n }\n\n const tm = timer()\n\n // we require it after parse because we need to set some global/env stuff before importing\n // otherwise we'd import `rnw` and cause it to evaluate react-native-web which causes errors\n const { components, tamaguiConfig } = loadTamagui({\n config,\n components: props.components || ['tamagui'],\n })\n\n if (shouldPrintDebug === 'verbose') {\n console.log('tamagui.config.ts:', { components, config })\n }\n\n tm.mark('load-tamagui', shouldPrintDebug === 'verbose')\n\n loadedTamaguiConfig = tamaguiConfig as any\n\n const defaultTheme = tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]]\n const body = fileOrPath.type === 'Program' ? fileOrPath.get('body') : fileOrPath.program.body\n\n /**\n * Step 1: Determine if importing any statically extractable components\n */\n const isInternalImport = (importStr: string) => {\n return isInsideTamagui(sourcePath) && importStr[0] === '.'\n }\n\n const validComponents: { [key: string]: any } = Object.keys(components)\n // check if uppercase to avoid hitting media query proxy before init\n .filter((key) => key[0].toUpperCase() === key[0] && !!components[key]?.staticConfig)\n .reduce((obj, name) => {\n obj[name] = components[name]\n return obj\n }, {})\n\n if (shouldPrintDebug === 'verbose') {\n console.log('validComponents', Object.keys(validComponents))\n }\n\n let doesUseValidImport = false\n let hasImportedTheme = false\n\n for (const bodyPath of body) {\n if (bodyPath.type !== 'ImportDeclaration') continue\n const node = ('node' in bodyPath ? bodyPath.node : bodyPath) as any\n const from = node.source.value\n const isValidImport = props.components.includes(from) || isInternalImport(from)\n if (isValidImport) {\n const isValidComponent = node.specifiers.some((specifier) => {\n const name = specifier.local.name\n return validComponents[name] || validHooks[name]\n })\n if (shouldPrintDebug === 'verbose') {\n console.log('import from', from, { isValidComponent })\n }\n if (isValidComponent) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(sourcePath, { doesUseValidImport })\n }\n\n if (!doesUseValidImport) {\n return null\n }\n\n tm.mark('import-check', shouldPrintDebug === 'verbose')\n\n let couldntParse = false\n const modifiedComponents = new Set<NodePath<any>>()\n\n // only keeping a cache around per-file, reset it if it changes\n const bindingCache: Record<string, string | null> = {}\n\n const callTraverse = (a: Visitor<{}>) => {\n return fileOrPath.type === 'File' ? traverse(fileOrPath, a) : fileOrPath.traverse(a)\n }\n\n /**\n * Step 2: Statically extract from JSX < /> nodes\n */\n let programPath: NodePath<t.Program>\n\n const res = {\n flattened: 0,\n optimized: 0,\n modified: 0,\n found: 0,\n }\n\n callTraverse({\n Program: {\n enter(path) {\n programPath = path\n },\n },\n JSXElement(traversePath) {\n tm.mark('jsx-element', shouldPrintDebug === 'verbose')\n\n const node = traversePath.node.openingElement\n const ogAttributes = node.attributes\n const componentName = findComponentName(traversePath.scope)\n const closingElement = traversePath.node.closingElement\n\n // skip non-identifier opening elements (member expressions, etc.)\n if (t.isJSXMemberExpression(closingElement?.name) || !t.isJSXIdentifier(node.name)) {\n return\n }\n\n // validate its a proper import from tamagui (or internally inside tamagui)\n const binding = traversePath.scope.getBinding(node.name.name)\n\n if (binding) {\n if (!t.isImportDeclaration(binding.path.parent)) {\n return\n }\n const source = binding.path.parent.source\n if (!props.components.includes(source.value) && !isInternalImport(source.value)) {\n return\n }\n if (!validComponents[binding.identifier.name]) {\n return\n }\n }\n\n const component = validComponents[node.name.name] as { staticConfig?: StaticConfigParsed }\n if (!component || !component.staticConfig) {\n return\n }\n\n const originalNodeName = node.name.name\n\n // found a valid tag\n res.found++\n\n const filePath = sourcePath.replace(process.cwd(), '.')\n const lineNumbers = node.loc\n ? node.loc.start.line +\n (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : '')\n : ''\n const preName = componentName ? `${componentName}.` : ''\n const tagId = `${preName}${node.name.name}@${filePath.replace('./', '')}:${lineNumbers}`\n\n // debug just one\n const hasBooleanDebugTrue = node.attributes.some(\n (n) =>\n t.isJSXAttribute(n) &&\n t.isJSXIdentifier(n.name) &&\n n.name.name === 'debug' &&\n n.value === null\n )\n if (hasBooleanDebugTrue) {\n shouldPrintDebug = true\n }\n\n try {\n node.attributes.find(\n (n) =>\n t.isJSXAttribute(n) &&\n t.isJSXIdentifier(n.name) &&\n n.name.name === 'debug' &&\n n.value === null\n )\n\n if (shouldPrintDebug) {\n console.log(`\\n<${originalNodeName} /> (${tagId})`)\n }\n\n // add data-is\n if (shouldAddDebugProp && !disableDebugAttr) {\n res.modified++\n node.attributes.unshift(\n t.jsxAttribute(t.jsxIdentifier('data-is'), t.stringLiteral(tagId))\n )\n }\n\n const shouldLog = !hasLogged\n if (shouldLog) {\n const prefix = ' |'\n console.log(\n prefixLogs || prefix,\n ' total \u00B7 optimized \u00B7 flattened '\n )\n hasLogged = true\n }\n if (disableExtraction) {\n return\n }\n\n const { staticConfig } = component\n const isTextView = staticConfig.isText || false\n const validStyles = staticConfig?.validStyles ?? {}\n\n function isValidStyleKey(name: string) {\n return !!(\n !!validStyles[name] ||\n !!pseudos[name] ||\n staticConfig.variants?.[name] ||\n tamaguiConfig.shorthands[name] ||\n (name[0] === '$' ? !!mediaQueryConfig[name.slice(1)] : false)\n )\n }\n\n // find tag=\"a\" tag=\"main\" etc dom indicators\n let tagName = staticConfig.defaultProps?.tag ?? (isTextView ? 'span' : 'div')\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (t.isJSXSpreadAttribute(attr)) return\n if (attr.name.name !== 'tag') return\n const val = attr.value\n if (!t.isStringLiteral(val)) return\n tagName = val.value\n })\n\n const flatNode = getFlattenedNode({ isTextView, tag: tagName })\n\n const inlineProps = new Set([\n ...(props.inlineProps || []),\n ...(staticConfig.inlineProps || []),\n ])\n const deoptProps = new Set([\n // always de-opt animation\n 'animation',\n ...(props.deoptProps || []),\n ...(staticConfig.deoptProps || []),\n ])\n\n // Generate scope object at this level\n const staticNamespace = getStaticBindingsForScope(\n traversePath.scope,\n importsWhitelist,\n sourcePath,\n bindingCache,\n shouldPrintDebug\n )\n\n const attemptEval = !evaluateVars\n ? evaluateAstNode\n : createEvaluator({\n // @ts-ignore\n tamaguiConfig,\n staticNamespace,\n sourcePath,\n traversePath,\n shouldPrintDebug,\n })\n const attemptEvalSafe = createSafeEvaluator(attemptEval)\n\n if (shouldPrintDebug) {\n console.log(' staticNamespace', Object.keys(staticNamespace).join(', '))\n }\n\n //\n // SPREADS SETUP\n //\n\n // TODO restore\n // const hasDeopt = (obj: Object) => {\n // return Object.keys(obj).some(isDeoptedProp)\n // }\n\n // flatten any easily evaluatable spreads\n const flattenedAttrs: (t.JSXAttribute | t.JSXSpreadAttribute)[] = []\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (!t.isJSXSpreadAttribute(attr)) {\n flattenedAttrs.push(attr)\n return\n }\n let arg: any\n try {\n arg = attemptEval(attr.argument)\n } catch (e: any) {\n if (shouldPrintDebug) {\n console.log(' couldnt parse spread', e.message)\n }\n flattenedAttrs.push(attr)\n return\n }\n if (arg !== undefined) {\n try {\n if (typeof arg !== 'object' || arg == null) {\n if (shouldPrintDebug) {\n console.log(' non object or null arg', arg)\n }\n flattenedAttrs.push(attr)\n } else {\n for (const k in arg) {\n const value = arg[k]\n // this is a null prop:\n if (!value && typeof value === 'object') {\n console.log('shouldnt we handle this?', k, value, arg)\n continue\n }\n flattenedAttrs.push(\n t.jsxAttribute(\n t.jsxIdentifier(k),\n t.jsxExpressionContainer(literalToAst(value))\n )\n )\n }\n }\n } catch (err) {\n console.warn('cant parse spread, caught err', err)\n couldntParse = true\n }\n }\n })\n\n if (couldntParse) {\n return\n }\n\n tm.mark('jsx-element-flattened', shouldPrintDebug === 'verbose')\n\n // set flattened\n node.attributes = flattenedAttrs\n\n // add in NON-STYLE default props\n if (staticConfig.defaultProps) {\n for (const key in staticConfig.defaultProps) {\n if (isValidStyleKey(key)) {\n continue\n }\n const serialize = require('babel-literal-to-ast')\n const val = staticConfig.defaultProps[key]\n try {\n const serializedDefaultProp = serialize(val)\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier(key),\n typeof val === 'string'\n ? t.stringLiteral(val)\n : t.jsxExpressionContainer(serializedDefaultProp)\n )\n )\n } catch (err) {\n console.warn(\n `\u26A0\uFE0F Error evaluating default prop for component ${node.name.name}, prop ${key}\\n error: ${err}\\n value:`,\n val,\n '\\n defaultProps:',\n staticConfig.defaultProps\n )\n }\n }\n }\n\n let attrs: ExtractedAttr[] = []\n let shouldDeopt = false\n const inlined = new Map<string, boolean | string>()\n let hasSetOptimized = false\n\n // RUN first pass\n\n // normalize all conditionals so we can evaluate away easier later\n // at the same time lets normalize shorthand media queries into spreads:\n // that way we can parse them with the same logic later on\n //\n // {...media.sm && { color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n //\n // $sm={{ color: 'red' }}\n // => {...media.sm && { color: 'red' }}\n //\n // $sm={{ color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n\n attrs = traversePath\n .get('openingElement')\n .get('attributes')\n .flatMap((path) => {\n try {\n const res = evaluateAttribute(path)\n tm.mark('jsx-element-evaluate-attr', shouldPrintDebug === 'verbose')\n if (!res) {\n path.remove()\n }\n return res\n } catch (err: any) {\n if (shouldPrintDebug) {\n console.log('Error extracting attribute', err.message, err.stack)\n console.log('node', path.node)\n }\n return {\n type: 'attr',\n value: path.node,\n } as const\n }\n })\n .flat(4)\n .filter(isPresent)\n\n if (shouldPrintDebug) {\n console.log(' - attrs (before):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // START function evaluateAttribute\n function evaluateAttribute(\n path: NodePath<t.JSXAttribute | t.JSXSpreadAttribute>\n ): ExtractedAttr | ExtractedAttr[] | null {\n const attribute = path.node\n const attr: ExtractedAttr = { type: 'attr', value: attribute }\n // ...spreads\n if (t.isJSXSpreadAttribute(attribute)) {\n const arg = attribute.argument\n const conditional = t.isConditionalExpression(arg)\n ? // <YStack {...isSmall ? { color: 'red } : { color: 'blue }}\n ([arg.test, arg.consequent, arg.alternate] as const)\n : t.isLogicalExpression(arg) && arg.operator === '&&'\n ? // <YStack {...isSmall && { color: 'red }}\n ([arg.left, arg.right, null] as const)\n : null\n\n if (conditional) {\n const [test, alt, cons] = conditional\n if (!test) throw new Error(`no test`)\n if ([alt, cons].some((side) => side && !isExtractable(side))) {\n if (shouldPrintDebug) {\n console.log('not extractable', alt, cons)\n }\n return attr\n }\n // split into individual ternaries per object property\n return [\n ...(createTernariesFromObjectProperties(test, alt) || []),\n ...((cons &&\n createTernariesFromObjectProperties(t.unaryExpression('!', test), cons)) ||\n []),\n ].map((ternary) => ({\n type: 'ternary',\n value: ternary,\n }))\n }\n }\n // END ...spreads\n\n // directly keep these\n // couldn't evaluate spread, undefined name, or name is not string\n if (\n t.isJSXSpreadAttribute(attribute) ||\n !attribute.name ||\n typeof attribute.name.name !== 'string'\n ) {\n if (shouldPrintDebug) {\n console.log(' ! inlining, spread attr')\n }\n inlined.set(`${Math.random()}`, 'spread')\n return attr\n }\n\n const name = attribute.name.name\n\n if (excludeProps?.has(name)) {\n if (shouldPrintDebug) {\n console.log(' excluding prop', name)\n }\n return null\n }\n\n if (inlineProps.has(name)) {\n inlined.set(name, name)\n if (shouldPrintDebug) {\n console.log(' ! inlining, inline prop', name)\n }\n return attr\n }\n\n // can still optimize the object... see hoverStyle on native\n if (deoptProps.has(name)) {\n shouldDeopt = true\n inlined.set(name, name)\n if (shouldPrintDebug) {\n console.log(' ! inlining, deopted prop', name)\n }\n return attr\n }\n\n // pass className, key, and style props through untouched\n if (UNTOUCHED_PROPS[name]) {\n return attr\n }\n\n if (INLINE_EXTRACTABLE[name]) {\n inlined.set(name, INLINE_EXTRACTABLE[name])\n return attr\n }\n\n if (name.startsWith('data-')) {\n return attr\n }\n\n // shorthand media queries\n if (name[0] === '$' && t.isJSXExpressionContainer(attribute?.value)) {\n // allow disabling this extraction\n if (disableExtractInlineMedia) {\n return attr\n }\n\n const shortname = name.slice(1)\n if (mediaQueryConfig[shortname]) {\n const expression = attribute.value.expression\n if (!t.isJSXEmptyExpression(expression)) {\n const ternaries = createTernariesFromObjectProperties(\n t.stringLiteral(shortname),\n expression,\n {\n inlineMediaQuery: shortname,\n }\n )\n if (ternaries) {\n return ternaries.map((value) => ({\n type: 'ternary',\n value,\n }))\n }\n }\n }\n }\n\n const [value, valuePath] = (() => {\n if (t.isJSXExpressionContainer(attribute?.value)) {\n return [attribute.value.expression!, path.get('value')!] as const\n } else {\n return [attribute.value!, path.get('value')!] as const\n }\n })()\n\n const remove = () => {\n Array.isArray(valuePath) ? valuePath.map((p) => p.remove()) : valuePath.remove()\n }\n\n if (name === 'ref') {\n if (shouldPrintDebug) {\n console.log(' ! inlining, ref', name)\n }\n inlined.set('ref', 'ref')\n return attr\n }\n\n if (name === 'tag') {\n return {\n type: 'attr',\n value: path.node,\n }\n }\n\n // native shouldn't extract variables\n if (disableExtractVariables) {\n if (value) {\n if (value.type === 'StringLiteral' && value.value[0] === '$') {\n if (shouldPrintDebug) {\n console.log(` ! inlining, native disable extract: ${name} =`, value.value)\n }\n inlined.set(name, true)\n return attr\n }\n }\n }\n\n // if value can be evaluated, extract it and filter it out\n const styleValue = attemptEvalSafe(value)\n\n // never flatten if a prop isn't a valid static attribute\n // only post prop-mapping\n if (!isValidStyleKey(name)) {\n let keys = [name]\n let out: any = null\n if (staticConfig.propMapper) {\n // for now passing empty props {}, a bit odd, need to at least document\n // for now we don't expose custom components so just noting behavior\n out = staticConfig.propMapper(\n name,\n styleValue,\n defaultTheme,\n staticConfig.defaultProps,\n 'auto'\n )\n if (out) {\n // translate to DOM-compat\n out = rnw.createDOMProps(isTextView ? 'span' : 'div', out)\n // remove className - we dont use rnw styling\n delete out.className\n\n keys = Object.keys(out)\n }\n }\n\n let didInline = false\n const attributes = keys.map((key) => {\n const val = out[key]\n if (key === 'theme') {\n inlined.set(key, val)\n return attr\n }\n if (isValidStyleKey(key)) {\n return {\n type: 'style',\n value: { [name]: styleValue },\n name,\n attr: path.node,\n } as const\n }\n if (validHTMLAttributes[key]) {\n return attr\n }\n if (shouldPrintDebug) {\n console.log(' ! inlining, non-static', key)\n }\n didInline = true\n inlined.set(key, val)\n return val\n })\n\n // weird logic whats going on here\n if (didInline) {\n if (shouldPrintDebug) {\n console.log(' bailing flattening due to attributes', attributes)\n }\n // bail\n return attr\n }\n\n // return evaluated attributes\n return attributes\n }\n\n // FAILED = dynamic or ternary, keep going\n if (styleValue !== FAILED_EVAL) {\n if (isValidStyleKey(name)) {\n if (shouldPrintDebug) {\n console.log(` style: ${name} =`, styleValue)\n }\n if (!(name in staticConfig.defaultProps)) {\n if (!hasSetOptimized) {\n res.optimized++\n hasSetOptimized = true\n }\n }\n return {\n type: 'style',\n value: { [name]: styleValue },\n name,\n attr: path.node,\n }\n } else {\n inlined.set(name, true)\n return attr\n }\n }\n\n // ternaries!\n\n // binary ternary, we can eventually make this smarter but step 1\n // basically for the common use case of:\n // opacity={(conditional ? 0 : 1) * scale}\n if (t.isBinaryExpression(value)) {\n if (shouldPrintDebug) {\n console.log(` binary expression ${name} = `, value)\n }\n const { operator, left, right } = value\n // if one side is a ternary, and the other side is evaluatable, we can maybe extract\n const lVal = attemptEvalSafe(left)\n const rVal = attemptEvalSafe(right)\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression lVal ${String(lVal)}, rVal ${String(rVal)}`)\n }\n if (lVal !== FAILED_EVAL && t.isConditionalExpression(right)) {\n const ternary = addBinaryConditional(operator, left, right)\n if (ternary) return ternary\n }\n if (rVal !== FAILED_EVAL && t.isConditionalExpression(left)) {\n const ternary = addBinaryConditional(operator, right, left)\n if (ternary) return ternary\n }\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression cant extract`)\n }\n inlined.set(name, true)\n return attr\n }\n\n const staticConditional = getStaticConditional(value)\n if (staticConditional) {\n if (shouldPrintDebug) {\n console.log(` static conditional ${name} = `, value)\n }\n return { type: 'ternary', value: staticConditional }\n }\n\n const staticLogical = getStaticLogical(value)\n if (staticLogical) {\n if (shouldPrintDebug) {\n console.log(` static ternary ${name} = `, value)\n }\n return { type: 'ternary', value: staticLogical }\n }\n\n // if we've made it this far, the prop stays inline\n inlined.set(name, true)\n if (shouldPrintDebug) {\n console.log(` ! inline no match ${name}`, value)\n }\n\n //\n // RETURN ATTR\n //\n return attr\n\n // attr helpers:\n function addBinaryConditional(\n operator: any,\n staticExpr: any,\n cond: t.ConditionalExpression\n ): ExtractedAttr | null {\n if (getStaticConditional(cond)) {\n const alt = attemptEval(t.binaryExpression(operator, staticExpr, cond.alternate))\n const cons = attemptEval(\n t.binaryExpression(operator, staticExpr, cond.consequent)\n )\n if (shouldPrintDebug) {\n console.log(' binaryConditional', cond.test, cons, alt)\n }\n return {\n type: 'ternary',\n value: {\n test: cond.test,\n remove,\n alternate: { [name]: alt },\n consequent: { [name]: cons },\n },\n }\n }\n return null\n }\n\n function getStaticConditional(value: t.Node): Ternary | null {\n if (t.isConditionalExpression(value)) {\n try {\n if (shouldPrintDebug) {\n console.log('attempt', value.alternate, value.consequent)\n }\n const aVal = attemptEval(value.alternate)\n const cVal = attemptEval(value.consequent)\n if (shouldPrintDebug) {\n const type = value.test.type\n console.log(' static ternary', type, cVal, aVal)\n }\n return {\n test: value.test,\n remove,\n consequent: { [name]: cVal },\n alternate: { [name]: aVal },\n }\n } catch (err: any) {\n if (shouldPrintDebug) {\n console.log(' cant eval ternary', err.message)\n }\n }\n }\n return null\n }\n\n function getStaticLogical(value: t.Node): Ternary | null {\n if (t.isLogicalExpression(value)) {\n if (value.operator === '&&') {\n try {\n const val = attemptEval(value.right)\n if (shouldPrintDebug) {\n console.log(' staticLogical', value.left, name, val)\n }\n return {\n test: value.left,\n remove,\n consequent: { [name]: val },\n alternate: null,\n }\n } catch (err) {\n if (shouldPrintDebug) {\n console.log(' cant static eval logical', err)\n }\n }\n }\n }\n return null\n }\n } // END function evaluateAttribute\n\n function isExtractable(obj: t.Node): obj is t.ObjectExpression {\n return (\n t.isObjectExpression(obj) &&\n obj.properties.every((prop) => {\n if (!t.isObjectProperty(prop)) {\n console.log('not object prop', prop)\n return false\n }\n const propName = prop.key['name']\n if (!isValidStyleKey(propName) && propName !== 'tag') {\n if (shouldPrintDebug) {\n console.log(' not a valid style prop!', propName)\n }\n return false\n }\n return true\n })\n )\n }\n\n // side = {\n // color: 'red',\n // background: x ? 'red' : 'green',\n // $gtSm: { color: 'green' }\n // }\n // => Ternary<test, { color: 'red' }, null>\n // => Ternary<test && x, { background: 'red' }, null>\n // => Ternary<test && !x, { background: 'green' }, null>\n // => Ternary<test && '$gtSm', { color: 'green' }, null>\n function createTernariesFromObjectProperties(\n test: t.Expression,\n side: t.Expression | null,\n ternaryPartial: Partial<Ternary> = {}\n ): null | Ternary[] {\n if (!side) {\n return null\n }\n if (!isExtractable(side)) {\n throw new Error('not extractable')\n }\n return side.properties.flatMap((property) => {\n if (!t.isObjectProperty(property)) {\n throw new Error('expected object property')\n }\n // handle media queries inside spread/conditional objects\n if (t.isIdentifier(property.key)) {\n const key = property.key.name\n const mediaQueryKey = key.slice(1)\n const isMediaQuery = key[0] === '$' && mediaQueryConfig[mediaQueryKey]\n if (isMediaQuery) {\n if (t.isExpression(property.value)) {\n const ternaries = createTernariesFromObjectProperties(\n t.stringLiteral(mediaQueryKey),\n property.value,\n {\n inlineMediaQuery: mediaQueryKey,\n }\n )\n if (ternaries) {\n return ternaries.map((value) => ({\n ...ternaryPartial,\n ...value,\n // ensure media query test stays on left side (see getMediaQueryTernary)\n test: t.logicalExpression('&&', value.test, test),\n }))\n } else {\n console.log('\u26A0\uFE0F no ternaries?', property)\n }\n } else {\n console.log('\u26A0\uFE0F not expression', property)\n }\n }\n }\n // this could be a recurse here if we want to get fancy\n if (t.isConditionalExpression(property.value)) {\n // merge up into the parent conditional, split into two\n const [truthy, falsy] = [\n t.objectExpression([t.objectProperty(property.key, property.value.consequent)]),\n t.objectExpression([t.objectProperty(property.key, property.value.alternate)]),\n ].map((x) => attemptEval(x))\n return [\n createTernary({\n remove() {},\n ...ternaryPartial,\n test: t.logicalExpression('&&', test, property.value.test),\n consequent: truthy,\n alternate: null,\n }),\n createTernary({\n ...ternaryPartial,\n test: t.logicalExpression(\n '&&',\n test,\n t.unaryExpression('!', property.value.test)\n ),\n consequent: falsy,\n alternate: null,\n remove() {},\n }),\n ]\n }\n const obj = t.objectExpression([t.objectProperty(property.key, property.value)])\n const consequent = attemptEval(obj)\n return createTernary({\n remove() {},\n ...ternaryPartial,\n test,\n consequent,\n alternate: null,\n })\n })\n }\n\n // now update to new values\n node.attributes = attrs.filter(isAttr).map((x) => x.value)\n\n if (couldntParse || shouldDeopt) {\n if (shouldPrintDebug) {\n console.log(` avoid optimizing:`, { couldntParse, shouldDeopt })\n }\n node.attributes = ogAttributes\n return\n }\n\n // before deopt, can still optimize\n const parentFn = findTopmostFunction(traversePath)\n if (parentFn) {\n modifiedComponents.add(parentFn)\n }\n\n // combine ternaries\n let ternaries: Ternary[] = []\n attrs = attrs\n .reduce<(ExtractedAttr | ExtractedAttr[])[]>((out, cur) => {\n const next = attrs[attrs.indexOf(cur) + 1]\n if (cur.type === 'ternary') {\n ternaries.push(cur.value)\n }\n if ((!next || next.type !== 'ternary') && ternaries.length) {\n // finish, process\n const normalized = normalizeTernaries(ternaries).map(\n ({ alternate, consequent, ...rest }) => {\n return {\n type: 'ternary' as const,\n value: {\n ...rest,\n alternate: alternate || null,\n consequent: consequent || null,\n },\n }\n }\n )\n try {\n return [...out, ...normalized]\n } finally {\n if (shouldPrintDebug) {\n console.log(\n ` normalizeTernaries (${ternaries.length} => ${normalized.length})`\n )\n }\n ternaries = []\n }\n }\n if (cur.type === 'ternary') {\n return out\n }\n out.push(cur)\n return out\n }, [])\n .flat()\n\n // flatten logic!\n // fairly simple check to see if all children are text\n const hasSpread = node.attributes.some((x) => t.isJSXSpreadAttribute(x))\n\n const hasOnlyStringChildren =\n !hasSpread &&\n (node.selfClosing ||\n (traversePath.node.children &&\n traversePath.node.children.every((x) => x.type === 'JSXText')))\n\n const themeVal = inlined.get('theme')\n inlined.delete('theme')\n const allOtherPropsExtractable = [...inlined].every(([k, v]) => INLINE_EXTRACTABLE[k])\n const shouldWrapThme = allOtherPropsExtractable && !!themeVal\n const canFlattenProps = inlined.size === 0 || shouldWrapThme || allOtherPropsExtractable\n\n let shouldFlatten =\n !shouldDeopt &&\n canFlattenProps &&\n !hasSpread &&\n staticConfig.neverFlatten !== true &&\n (staticConfig.neverFlatten === 'jsx' ? hasOnlyStringChildren : true)\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' >>', { hasSpread, shouldDeopt, shouldFlatten, canFlattenProps, shouldWrapThme, allOtherPropsExtractable, hasOnlyStringChildren })\n }\n\n // wrap theme around children on flatten\n if (shouldFlatten && shouldWrapThme) {\n if (typeof themeVal !== 'string') {\n // failed eval\n return\n }\n\n if (shouldPrintDebug) {\n console.log(' - wrapping theme', allOtherPropsExtractable, themeVal)\n }\n\n // remove theme attribute from flattened node\n attrs = attrs.filter((x) =>\n x.type === 'attr' && t.isJSXAttribute(x.value) && x.value.name.name === 'theme'\n ? false\n : true\n )\n\n // add import\n if (!hasImportedTheme) {\n hasImportedTheme = true\n programPath.node.body.push(\n t.importDeclaration(\n [t.importSpecifier(t.identifier('_TamaguiTheme'), t.identifier('Theme'))],\n t.stringLiteral('@tamagui/core')\n )\n )\n }\n\n traversePath.replaceWith(\n t.jsxElement(\n t.jsxOpeningElement(t.jsxIdentifier('_TamaguiTheme'), [\n t.jsxAttribute(t.jsxIdentifier('name'), t.stringLiteral(`${themeVal}`)),\n ]),\n t.jsxClosingElement(t.jsxIdentifier('_TamaguiTheme')),\n [traversePath.node]\n )\n )\n }\n\n // only if we flatten, ensure the default styles are there\n if (shouldFlatten && staticConfig.defaultProps) {\n const defaultStyleAttrs = Object.keys(staticConfig.defaultProps).flatMap((key) => {\n if (!isValidStyleKey(key)) {\n return []\n }\n const value = staticConfig.defaultProps[key]\n const name = tamaguiConfig.shorthands[key] || key\n if (value === undefined) {\n console.warn(\n `\u26A0\uFE0F Error evaluating default style for component, prop ${key} ${value}`\n )\n shouldDeopt = true\n return\n }\n const attr: ExtractedAttrStyle = {\n type: 'style',\n name,\n value: { [name]: value },\n }\n return attr\n }) as ExtractedAttr[]\n\n if (defaultStyleAttrs.length) {\n attrs = [...defaultStyleAttrs, ...attrs]\n }\n }\n\n if (shouldDeopt) {\n node.attributes = ogAttributes\n return\n }\n\n // insert overrides - this inserts null props for things that are set in classNames\n // only when not flattening, so the downstream component can skip applying those styles\n const ensureOverridden = {}\n if (!shouldFlatten) {\n for (const cur of attrs) {\n if (cur.type === 'style') {\n // TODO need to loop over initial props not just style props\n for (const key in cur.value) {\n const shouldEnsureOverridden = !!staticConfig.ensureOverriddenProp?.[key]\n const isSetInAttrsAlready = attrs.some(\n (x) =>\n x.type === 'attr' &&\n x.value.type === 'JSXAttribute' &&\n x.value.name.name === key\n )\n\n if (!isSetInAttrsAlready) {\n const isVariant = !!staticConfig.variants?.[cur.name || '']\n if (isVariant || shouldEnsureOverridden) {\n ensureOverridden[key] = true\n }\n }\n }\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (flattened): \\n', logLines(attrs.map(attrStr).join(', ')))\n console.log(' - ensureOverriden:', Object.keys(ensureOverridden).join(', '))\n }\n\n // expand shorthands, de-opt variables\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (!cur) {\n return acc\n }\n\n if (cur.type === 'attr' && !t.isJSXSpreadAttribute(cur.value)) {\n if (shouldFlatten) {\n if (cur.value.name.name === 'tag') {\n // remove tag=\"\"\n return acc\n }\n }\n }\n\n if (cur.type !== 'style') {\n acc.push(cur)\n return acc\n }\n\n let key = Object.keys(cur.value)[0]\n const value = cur.value[key]\n const fullKey = tamaguiConfig.shorthands[key]\n\n // expand shorthands\n if (fullKey) {\n cur.value = { [fullKey]: value }\n key = fullKey\n }\n\n // finally we have all styles + expansions, lets see if we need to skip\n // any and keep them as attrs\n if (disableExtractVariables) {\n if (value[0] === '$') {\n if (shouldPrintDebug) {\n console.log(` keeping variable inline: ${key} =`, value)\n }\n acc.push({\n type: 'attr',\n value: t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(t.stringLiteral(value))\n ),\n })\n return acc\n }\n }\n\n acc.push(cur)\n return acc\n }, [])\n\n tm.mark('jsx-element-expanded', shouldPrintDebug === 'verbose')\n if (shouldPrintDebug) {\n console.log(' - attrs (expanded): \\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // merge styles, leave undefined values\n let prev: ExtractedAttr | null = null\n\n function mergeStyles(prev: ViewStyle & PseudoStyles, next: ViewStyle & PseudoStyles) {\n for (const key in next) {\n // merge pseudos\n if (pseudos[key]) {\n prev[key] = prev[key] || {}\n if (shouldPrintDebug) {\n if (!next[key] || !prev[key]) {\n console.log('warn: missing', key, prev, next)\n }\n }\n Object.assign(prev[key], next[key])\n } else {\n prev[key] = next[key]\n }\n }\n }\n\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (cur.type === 'style') {\n const key = Object.keys(cur.value)[0]\n const value = cur.value[key]\n\n const shouldKeepOriginalAttr =\n // !isStyleAndAttr[key] &&\n !shouldFlatten &&\n // de-opt transform styles so it merges properly if not flattened\n // we handle this later on\n // (stylePropsTransform[key] ||\n // de-opt if non-style\n !validStyles[key] &&\n !pseudos[key] &&\n !key.startsWith('data-')\n\n if (shouldKeepOriginalAttr) {\n if (shouldPrintDebug) {\n console.log(' - keeping as non-style', key)\n }\n prev = cur\n acc.push({\n type: 'attr',\n value: t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(\n typeof value === 'string' ? t.stringLiteral(value) : literalToAst(value)\n )\n ),\n })\n acc.push(cur)\n return acc\n }\n\n if (ensureOverridden[key]) {\n acc.push({\n type: 'attr',\n value:\n cur.attr ||\n t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(t.nullLiteral())\n ),\n })\n }\n\n if (prev?.type === 'style') {\n mergeStyles(prev.value, cur.value)\n return acc\n }\n }\n\n prev = cur\n acc.push(cur)\n return acc\n }, [])\n\n const state = {\n noClassNames: true,\n focus: false,\n hover: false,\n mounted: true, // TODO match logic in createComponent\n press: false,\n pressIn: false,\n }\n\n // evaluates all static attributes into a simple object\n const completeStaticProps = Object.keys(attrs).reduce((acc, index) => {\n const cur = attrs[index] as ExtractedAttr\n if (cur.type === 'style') {\n normalizeStyleObject(cur.value)\n Object.assign(acc, cur.value)\n }\n if (cur.type === 'attr') {\n if (t.isJSXSpreadAttribute(cur.value)) {\n return acc\n }\n if (!t.isJSXIdentifier(cur.value.name)) {\n return acc\n }\n const key = cur.value.name.name\n // undefined = boolean true\n const value = attemptEvalSafe(cur.value.value || t.booleanLiteral(true))\n if (value === FAILED_EVAL) {\n return acc\n }\n acc[key] = value\n }\n return acc\n }, {})\n\n const completeProps = {\n ...staticConfig.defaultProps,\n ...completeStaticProps,\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (combined \uD83D\uDD00): \\n', logLines(attrs.map(attrStr).join(', ')))\n console.log(' - defaultProps: \\n', logLines(objToStr(staticConfig.defaultProps)))\n console.log(' - completeStaticProps: \\n', logLines(objToStr(completeStaticProps)))\n }\n\n // post process\n const getStyles = (props: Object | null, debugName = '') => {\n if (!props || !Object.keys(props).length) {\n if (shouldPrintDebug) console.log(' getStyles() no props')\n return {}\n }\n if (excludeProps && !!excludeProps.size) {\n for (const key in props) {\n if (excludeProps.has(key)) {\n if (shouldPrintDebug) console.log(' delete excluded', key)\n delete props[key]\n }\n }\n }\n try {\n const out = getSplitStyles(props, staticConfig, defaultTheme, {\n ...state,\n fallbackProps: completeProps,\n })\n const outStyle = {\n ...out.style,\n ...out.pseudos,\n }\n if (staticConfig.validStyles) {\n for (const key in outStyle) {\n if (\n !staticConfig.validStyles[key] &&\n !pseudos[key] &&\n !/(hover|focus|press)Style$/.test(key)\n ) {\n if (shouldPrintDebug) console.log(' delete invalid style', key)\n delete outStyle[key]\n }\n }\n }\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(` getStyles ${debugName} (props):\\n`, logLines(objToStr(props)))\n // prettier-ignore\n console.log(` getStyles ${debugName} (out.viewProps):\\n`, logLines(objToStr(out.viewProps)))\n // prettier-ignore\n console.log(` getStyles ${debugName} (out.style):\\n`, logLines(objToStr(outStyle || {}), true))\n }\n return outStyle\n } catch (err: any) {\n console.log('error', err.message, err.stack)\n return {}\n }\n }\n\n // used to ensure we pass the entire prop bundle to getStyles\n const completeStylesProcessed = getStyles(completeProps, 'completeStylesProcessed')\n\n if (!completeStylesProcessed) {\n throw new Error(`Impossible, no styles`)\n }\n\n // any extra styles added in postprocess should be added to first group as they wont be overriden\n const stylesToAddToInitialGroup = shouldFlatten\n ? difference(Object.keys(completeStylesProcessed), Object.keys(completeStaticProps))\n : []\n // difference(\n // Object.keys(completeStylesProcessed),\n // Object.keys(completeStaticProps)\n // )\n\n if (stylesToAddToInitialGroup.length) {\n const toAdd = pick(completeStylesProcessed, ...stylesToAddToInitialGroup)\n const firstGroup = attrs.find((x) => x.type === 'style')\n if (shouldPrintDebug) {\n console.log(' toAdd', objToStr(toAdd))\n }\n if (!firstGroup) {\n attrs.unshift({ type: 'style', value: toAdd })\n } else {\n Object.assign(firstGroup.value, toAdd)\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' -- stylesToAddToInitialGroup', stylesToAddToInitialGroup.join(', '), { shouldFlatten })\n // prettier-ignore\n console.log(' -- completeStaticProps:\\n', logLines(objToStr(completeStaticProps)))\n // prettier-ignore\n console.log(' -- completeStylesProcessed:\\n', logLines(objToStr(completeStylesProcessed)))\n }\n\n let getStyleError: any = null\n\n // fix up ternaries, combine final style values\n for (const attr of attrs) {\n try {\n if (shouldPrintDebug) console.log(' *', attrStr(attr))\n switch (attr.type) {\n case 'ternary':\n const a = getStyles(attr.value.alternate, 'ternary.alternate')\n const c = getStyles(attr.value.consequent, 'ternary.consequent')\n if (a) attr.value.alternate = a\n if (c) attr.value.consequent = c\n if (shouldPrintDebug) console.log(' => tern ', attrStr(attr))\n continue\n case 'style':\n // prettier-ignore\n if (shouldPrintDebug) console.log(' * styles in', logLines(objToStr(attr.value)))\n // expand variants and such\n // get the keys we need\n const styles = getStyles(attr.value, 'style')\n // prettier-ignore\n if (shouldPrintDebug) console.log(' * styles out', logLines(objToStr(styles)))\n if (styles) {\n // but actually resolve them to the full object\n // TODO media/psuedo merging\n attr.value = Object.fromEntries(\n Object.keys(styles).map((k) => [k, completeStylesProcessed[k]])\n )\n }\n continue\n }\n } catch (err) {\n // any error de-opt\n getStyleError = err\n }\n }\n\n tm.mark('jsx-element-styles', shouldPrintDebug === 'verbose')\n\n if (getStyleError) {\n console.log(' \u26A0\uFE0F postprocessing error, deopt', getStyleError)\n node.attributes = ogAttributes\n return node\n }\n\n // final lazy extra loop:\n const existingStyleKeys = new Set()\n for (let i = attrs.length - 1; i >= 0; i--) {\n const attr = attrs[i]\n\n // if flattening map inline props to proper flattened names\n if (shouldFlatten && canFlattenProps) {\n if (attr.type === 'attr') {\n if (t.isJSXAttribute(attr.value)) {\n if (t.isJSXIdentifier(attr.value.name)) {\n const name = attr.value.name.name\n if (INLINE_EXTRACTABLE[name]) {\n // map to HTML only name\n attr.value.name.name = INLINE_EXTRACTABLE[name]\n }\n }\n }\n }\n }\n\n // remove duplicate styles\n // so if you have:\n // style({ color: 'red' }), ...someProps, style({ color: 'green' })\n // this will mutate:\n // style({}), ...someProps, style({ color: 'green' })\n if (attr.type === 'style') {\n for (const key in attr.value) {\n if (existingStyleKeys.has(key)) {\n if (shouldPrintDebug) {\n console.log(' >> delete existing', key)\n }\n delete attr.value[key]\n } else {\n existingStyleKeys.add(key)\n }\n }\n }\n }\n\n if (shouldFlatten) {\n // DO FLATTEN\n if (shouldPrintDebug) {\n console.log(' [\u2705] flattening', originalNodeName, flatNode)\n }\n node.name.name = flatNode\n res.flattened++\n if (closingElement) {\n closingElement.name.name = flatNode\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(` \u274A\u274A inline props (${inlined.size}):`, shouldDeopt ? ' deopted' : '', hasSpread ? ' has spread' : '', staticConfig.neverFlatten ? 'neverFlatten' : '')\n console.log(' - attrs (end):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n onExtractTag({\n attrs,\n node,\n lineNumbers,\n filePath,\n attemptEval,\n jsxPath: traversePath,\n originalNodeName,\n isFlattened: shouldFlatten,\n programPath,\n })\n } catch (err) {\n throw err\n } finally {\n if (hasBooleanDebugTrue) {\n shouldPrintDebug = false\n }\n }\n },\n })\n\n tm.mark('jsx-done', shouldPrintDebug === 'verbose')\n\n /**\n * Step 3: Remove dead code from removed media query / theme hooks\n */\n if (modifiedComponents.size) {\n const all = Array.from(modifiedComponents)\n if (shouldPrintDebug) {\n console.log(' [\uD83E\uDE9D] hook check', all.length)\n }\n for (const comp of all) {\n removeUnusedHooks(comp, shouldPrintDebug)\n }\n }\n\n tm.done(shouldPrintDebug === 'verbose')\n\n return res\n },\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -42,4 +42,8 @@ function ensureImportingConcat(path) {
42
42
  }
43
43
  }
44
44
  __name(ensureImportingConcat, "ensureImportingConcat");
45
+ // Annotate the CommonJS export names for ESM import in node:
46
+ 0 && (module.exports = {
47
+ ensureImportingConcat
48
+ });
45
49
  //# sourceMappingURL=ensureImportingConcat.js.map
@@ -112,4 +112,8 @@ function evaluateAstNode(exprNode, evalFn, shouldPrintDebug) {
112
112
  return evalFn(exprNode);
113
113
  }
114
114
  __name(evaluateAstNode, "evaluateAstNode");
115
+ // Annotate the CommonJS export names for ESM import in node:
116
+ 0 && (module.exports = {
117
+ evaluateAstNode
118
+ });
115
119
  //# sourceMappingURL=evaluateAstNode.js.map
@@ -121,4 +121,15 @@ __name(isValidThemeHook, "isValidThemeHook");
121
121
  const isInsideTamagui = /* @__PURE__ */ __name((srcName) => {
122
122
  return srcName.includes("/dist/jsx") || srcName.includes("/core/src");
123
123
  }, "isInsideTamagui");
124
+ // Annotate the CommonJS export names for ESM import in node:
125
+ 0 && (module.exports = {
126
+ attrStr,
127
+ findComponentName,
128
+ isInsideTamagui,
129
+ isPresent,
130
+ isSimpleSpread,
131
+ isValidThemeHook,
132
+ objToStr,
133
+ ternaryStr
134
+ });
124
135
  //# sourceMappingURL=extractHelpers.js.map
@@ -98,8 +98,8 @@ function extractMediaStyle(ternary, jsxPath, tamaguiConfig, sourcePath, importan
98
98
  rules: [styleRule]
99
99
  });
100
100
  });
101
- if (shouldPrintDebug) {
102
- console.log(" media styles:", importance, singleMediaStyles.map((x) => x.identifier).join(", "));
101
+ if (shouldPrintDebug === "verbose") {
102
+ console.log(" media styles:", importance, styleObj, singleMediaStyles.map((x) => x.identifier).join(", "));
103
103
  }
104
104
  mediaStyles = [...mediaStyles, ...singleMediaStyles];
105
105
  }
@@ -183,4 +183,9 @@ function isValidMediaCall(jsxPath, init, sourcePath) {
183
183
  return true;
184
184
  }
185
185
  __name(isValidMediaCall, "isValidMediaCall");
186
+ // Annotate the CommonJS export names for ESM import in node:
187
+ 0 && (module.exports = {
188
+ extractMediaStyle,
189
+ isValidMediaCall
190
+ });
186
191
  //# sourceMappingURL=extractMediaStyle.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/extractor/extractMediaStyle.ts"],
4
- "sourcesContent": ["import { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport type { TamaguiInternalConfig } from '@tamagui/core'\nimport { getStylesAtomic, mediaObjectToString } from '@tamagui/core-node'\nimport { ViewStyle } from 'react-native'\n\nimport { MEDIA_SEP } from '../constants'\nimport { StyleObject, Ternary } from '../types'\nimport { isInsideTamagui, isPresent } from './extractHelpers'\n\nexport function extractMediaStyle(\n ternary: Ternary,\n jsxPath: NodePath<t.JSXElement>,\n tamaguiConfig: TamaguiInternalConfig,\n sourcePath: string,\n importance = 0,\n shouldPrintDebug: boolean | 'verbose' = false\n) {\n const mt = getMediaQueryTernary(ternary, jsxPath, sourcePath)\n if (!mt) {\n return null\n }\n const { key } = mt\n const mq = tamaguiConfig.media[key]\n if (!mq) {\n console.error(`Media query \"${key}\" not found: ${Object.keys(tamaguiConfig.media)}`)\n return null\n }\n const getStyleObj = (styleObj: ViewStyle | null, negate = false) => {\n return styleObj ? { styleObj, negate } : null\n }\n const styleOpts = [\n getStyleObj(ternary.consequent, false),\n getStyleObj(ternary.alternate, true),\n ].filter(isPresent)\n if (shouldPrintDebug && !styleOpts.length) {\n console.log(' media query, no styles?')\n return null\n }\n // for now order first strongest\n const mediaKeys = Object.keys(tamaguiConfig.media)\n const mediaKeyPrecendence = mediaKeys.reduce((acc, cur, i) => {\n acc[cur] = new Array(importance + 1).fill(':root').join('')\n return acc\n }, {})\n let mediaStyles: StyleObject[] = []\n for (const { styleObj, negate } of styleOpts) {\n const styles = getStylesAtomic(styleObj)\n const singleMediaStyles = styles.map((style) => {\n const negKey = negate ? '0' : ''\n const ogPrefix = style.identifier.slice(0, style.identifier.indexOf('-') + 1)\n // adds an extra separator before and after to detect later in concatClassName\n // so it goes from: \"_f-[hash]\"\n // to: \"_f-_sm0_[hash]\" or \"_f-_sm_[hash]\"\n const identifier = `${style.identifier.replace(\n ogPrefix,\n `${ogPrefix}${MEDIA_SEP}${key}${negKey}${MEDIA_SEP}`\n )}`\n const className = `.${identifier}`\n const mediaSelector = mediaObjectToString(tamaguiConfig.media[key])\n const screenStr = negate ? 'not all' : 'screen'\n const mediaQuery = `${screenStr} and ${mediaSelector}`\n const precendencePrefix = mediaKeyPrecendence[key]\n const styleInner = style.rules[0].replace(style.identifier, identifier)\n // combines media queries if they already exist\n let styleRule = ''\n if (styleInner.includes('@media')) {\n // combine\n styleRule = styleInner.replace('{', ` and ${mediaQuery} {`)\n } else {\n styleRule = `@media ${mediaQuery} { ${precendencePrefix} ${styleInner} }`\n }\n return {\n ...style,\n identifier,\n className,\n rules: [styleRule],\n }\n })\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' media styles:', importance, singleMediaStyles.map(x => x.identifier).join(', '))\n }\n // add to output\n mediaStyles = [...mediaStyles, ...singleMediaStyles]\n }\n // filter out\n ternary.remove()\n return { mediaStyles, ternaryWithoutMedia: mt.ternaryWithoutMedia }\n}\n\nfunction getMediaQueryTernary(\n ternary: Ternary,\n jsxPath: NodePath<t.JSXElement>,\n sourcePath: string\n): null | {\n key: string\n bindingName: string\n ternaryWithoutMedia: Ternary | null\n} {\n // this handles unwrapping logical && media query ternarys\n // first, unwrap if it has media logicalExpression\n if (t.isLogicalExpression(ternary.test) && ternary.test.operator === '&&') {\n // *should* be normalized to always be on left side\n const mediaLeft = getMediaInfoFromExpression(\n ternary.test.left,\n jsxPath,\n sourcePath,\n ternary.inlineMediaQuery\n )\n if (mediaLeft) {\n return {\n ...mediaLeft,\n ternaryWithoutMedia: {\n ...ternary,\n test: ternary.test.right,\n },\n }\n }\n }\n // const media = useMedia()\n // ... media.sm\n const result = getMediaInfoFromExpression(\n ternary.test,\n jsxPath,\n sourcePath,\n ternary.inlineMediaQuery\n )\n if (result) {\n return {\n ...result,\n ternaryWithoutMedia: null,\n }\n }\n return null\n}\n\nfunction getMediaInfoFromExpression(\n test: t.Expression,\n jsxPath: NodePath<t.JSXElement>,\n sourcePath: string,\n inlineMediaQuery?: string\n) {\n if (inlineMediaQuery) {\n return {\n key: inlineMediaQuery,\n bindingName: inlineMediaQuery,\n }\n }\n if (t.isMemberExpression(test) && t.isIdentifier(test.object) && t.isIdentifier(test.property)) {\n const name = test.object['name']\n const key = test.property['name']\n const bindings = jsxPath.scope.getAllBindings()\n const binding = bindings[name]\n if (!binding) return false\n const bindingNode = binding.path?.node\n if (!t.isVariableDeclarator(bindingNode) || !bindingNode.init) return false\n if (!isValidMediaCall(jsxPath, bindingNode.init, sourcePath)) return false\n return { key, bindingName: name }\n }\n if (t.isIdentifier(test)) {\n const key = test.name\n const node = jsxPath.scope.getBinding(test.name)?.path?.node\n if (!t.isVariableDeclarator(node)) return false\n if (!node.init || !isValidMediaCall(jsxPath, node.init, sourcePath)) return false\n return { key, bindingName: key }\n }\n return null\n}\n\nexport function isValidMediaCall(\n jsxPath: NodePath<t.JSXElement>,\n init: t.Expression,\n sourcePath: string\n) {\n if (!t.isCallExpression(init)) return false\n if (!t.isIdentifier(init.callee)) return false\n // TODO could support renaming useMedia by looking up import first\n if (init.callee.name !== 'useMedia') return false\n const bindings = jsxPath.scope.getAllBindings()\n const mediaBinding = bindings['useMedia']\n if (!mediaBinding) return false\n const useMediaImport = mediaBinding.path.parent\n if (!t.isImportDeclaration(useMediaImport)) return false\n if (useMediaImport.source.value !== 'tamagui') {\n if (!isInsideTamagui(sourcePath)) {\n return false\n }\n }\n return true\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport { TamaguiInternalConfig, getStylesAtomic, mediaObjectToString } from '@tamagui/core-node'\nimport { ViewStyle } from 'react-native'\n\nimport { MEDIA_SEP } from '../constants'\nimport { StyleObject, Ternary } from '../types'\nimport { isInsideTamagui, isPresent } from './extractHelpers'\n\nexport function extractMediaStyle(\n ternary: Ternary,\n jsxPath: NodePath<t.JSXElement>,\n tamaguiConfig: TamaguiInternalConfig,\n sourcePath: string,\n importance = 0,\n shouldPrintDebug: boolean | 'verbose' = false\n) {\n const mt = getMediaQueryTernary(ternary, jsxPath, sourcePath)\n if (!mt) {\n return null\n }\n const { key } = mt\n const mq = tamaguiConfig.media[key]\n if (!mq) {\n console.error(`Media query \"${key}\" not found: ${Object.keys(tamaguiConfig.media)}`)\n return null\n }\n const getStyleObj = (styleObj: ViewStyle | null, negate = false) => {\n return styleObj ? { styleObj, negate } : null\n }\n const styleOpts = [\n getStyleObj(ternary.consequent, false),\n getStyleObj(ternary.alternate, true),\n ].filter(isPresent)\n if (shouldPrintDebug && !styleOpts.length) {\n console.log(' media query, no styles?')\n return null\n }\n // for now order first strongest\n const mediaKeys = Object.keys(tamaguiConfig.media)\n const mediaKeyPrecendence = mediaKeys.reduce((acc, cur, i) => {\n acc[cur] = new Array(importance + 1).fill(':root').join('')\n return acc\n }, {})\n let mediaStyles: StyleObject[] = []\n for (const { styleObj, negate } of styleOpts) {\n const styles = getStylesAtomic(styleObj)\n const singleMediaStyles = styles.map((style) => {\n const negKey = negate ? '0' : ''\n const ogPrefix = style.identifier.slice(0, style.identifier.indexOf('-') + 1)\n // adds an extra separator before and after to detect later in concatClassName\n // so it goes from: \"_f-[hash]\"\n // to: \"_f-_sm0_[hash]\" or \"_f-_sm_[hash]\"\n const identifier = `${style.identifier.replace(\n ogPrefix,\n `${ogPrefix}${MEDIA_SEP}${key}${negKey}${MEDIA_SEP}`\n )}`\n const className = `.${identifier}`\n const mediaSelector = mediaObjectToString(tamaguiConfig.media[key])\n const screenStr = negate ? 'not all' : 'screen'\n const mediaQuery = `${screenStr} and ${mediaSelector}`\n const precendencePrefix = mediaKeyPrecendence[key]\n const styleInner = style.rules[0].replace(style.identifier, identifier)\n // combines media queries if they already exist\n let styleRule = ''\n if (styleInner.includes('@media')) {\n // combine\n styleRule = styleInner.replace('{', ` and ${mediaQuery} {`)\n } else {\n styleRule = `@media ${mediaQuery} { ${precendencePrefix} ${styleInner} }`\n }\n return {\n ...style,\n identifier,\n className,\n rules: [styleRule],\n }\n })\n if (shouldPrintDebug === 'verbose') {\n // prettier-ignore\n console.log(' media styles:', importance, styleObj, singleMediaStyles.map(x => x.identifier).join(', '))\n }\n // add to output\n mediaStyles = [...mediaStyles, ...singleMediaStyles]\n }\n // filter out\n ternary.remove()\n return { mediaStyles, ternaryWithoutMedia: mt.ternaryWithoutMedia }\n}\n\nfunction getMediaQueryTernary(\n ternary: Ternary,\n jsxPath: NodePath<t.JSXElement>,\n sourcePath: string\n): null | {\n key: string\n bindingName: string\n ternaryWithoutMedia: Ternary | null\n} {\n // this handles unwrapping logical && media query ternarys\n // first, unwrap if it has media logicalExpression\n if (t.isLogicalExpression(ternary.test) && ternary.test.operator === '&&') {\n // *should* be normalized to always be on left side\n const mediaLeft = getMediaInfoFromExpression(\n ternary.test.left,\n jsxPath,\n sourcePath,\n ternary.inlineMediaQuery\n )\n if (mediaLeft) {\n return {\n ...mediaLeft,\n ternaryWithoutMedia: {\n ...ternary,\n test: ternary.test.right,\n },\n }\n }\n }\n // const media = useMedia()\n // ... media.sm\n const result = getMediaInfoFromExpression(\n ternary.test,\n jsxPath,\n sourcePath,\n ternary.inlineMediaQuery\n )\n if (result) {\n return {\n ...result,\n ternaryWithoutMedia: null,\n }\n }\n return null\n}\n\nfunction getMediaInfoFromExpression(\n test: t.Expression,\n jsxPath: NodePath<t.JSXElement>,\n sourcePath: string,\n inlineMediaQuery?: string\n) {\n if (inlineMediaQuery) {\n return {\n key: inlineMediaQuery,\n bindingName: inlineMediaQuery,\n }\n }\n if (t.isMemberExpression(test) && t.isIdentifier(test.object) && t.isIdentifier(test.property)) {\n const name = test.object['name']\n const key = test.property['name']\n const bindings = jsxPath.scope.getAllBindings()\n const binding = bindings[name]\n if (!binding) return false\n const bindingNode = binding.path?.node\n if (!t.isVariableDeclarator(bindingNode) || !bindingNode.init) return false\n if (!isValidMediaCall(jsxPath, bindingNode.init, sourcePath)) return false\n return { key, bindingName: name }\n }\n if (t.isIdentifier(test)) {\n const key = test.name\n const node = jsxPath.scope.getBinding(test.name)?.path?.node\n if (!t.isVariableDeclarator(node)) return false\n if (!node.init || !isValidMediaCall(jsxPath, node.init, sourcePath)) return false\n return { key, bindingName: key }\n }\n return null\n}\n\nexport function isValidMediaCall(\n jsxPath: NodePath<t.JSXElement>,\n init: t.Expression,\n sourcePath: string\n) {\n if (!t.isCallExpression(init)) return false\n if (!t.isIdentifier(init.callee)) return false\n // TODO could support renaming useMedia by looking up import first\n if (init.callee.name !== 'useMedia') return false\n const bindings = jsxPath.scope.getAllBindings()\n const mediaBinding = bindings['useMedia']\n if (!mediaBinding) return false\n const useMediaImport = mediaBinding.path.parent\n if (!t.isImportDeclaration(useMediaImport)) return false\n if (useMediaImport.source.value !== 'tamagui') {\n if (!isInsideTamagui(sourcePath)) {\n return false\n }\n }\n return true\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -59,6 +59,7 @@ var import_getPrefixLogs = require("./getPrefixLogs");
59
59
  var import_hoistClassNames = require("./hoistClassNames");
60
60
  var import_literalToAst = require("./literalToAst");
61
61
  var import_logLines = require("./logLines");
62
+ var import_timer = require("./timer");
62
63
  const mergeStyleGroups = {
63
64
  shadowOpacity: true,
64
65
  shadowRadius: true,
@@ -72,9 +73,11 @@ function extractToClassNames({
72
73
  sourcePath,
73
74
  options,
74
75
  shouldPrintDebug,
76
+ cssLoaderPath,
75
77
  threaded,
76
78
  cssPath
77
79
  }) {
80
+ const tm = (0, import_timer.timer)();
78
81
  if (typeof source !== "string") {
79
82
  throw new Error("`source` must be a string of javascript");
80
83
  }
@@ -89,6 +92,7 @@ function extractToClassNames({
89
92
  console.error("babel parse error:", sourcePath);
90
93
  throw err;
91
94
  }
95
+ tm.mark(`babel-parse`, shouldPrintDebug === "verbose");
92
96
  const cssMap = /* @__PURE__ */ new Map();
93
97
  const existingHoists = {};
94
98
  let hasFlattened = false;
@@ -148,9 +152,6 @@ function extractToClassNames({
148
152
  switch (attr.type) {
149
153
  case "style":
150
154
  if (!isFlattened) {
151
- if (!attr.name) {
152
- throw new Error(`No name`);
153
- }
154
155
  const { hoverStyle, pressStyle, focusStyle } = attr.value;
155
156
  const pseudos = [
156
157
  ["hoverStyle", hoverStyle],
@@ -288,7 +289,7 @@ function extractToClassNames({
288
289
  if (styles) {
289
290
  const cssQuery = threaded ? `cssData=${Buffer.from(styles).toString("base64")}` : `cssPath=${cssPath}`;
290
291
  const remReq = loader.remainingRequest;
291
- const importPath = `${cssPath}!=!tamagui-loader?${cssQuery}!${remReq}`;
292
+ const importPath = `${cssPath}!=!${cssLoaderPath}?${cssQuery}!${remReq}`;
292
293
  ast.program.body.unshift(t.importDeclaration([], t.stringLiteral(importPath)));
293
294
  }
294
295
  const result = (0, import_generator.default)(ast, {
@@ -304,13 +305,14 @@ function extractToClassNames({
304
305
  }
305
306
  if (shouldLogTiming) {
306
307
  const memUsed = mem ? Math.round((process.memoryUsage().heapUsed - mem.heapUsed) / 1024 / 1204 * 10) / 10 : 0;
307
- const timing = `${Date.now() - start}`.padStart(3);
308
308
  const path2 = (0, import_path.basename)(sourcePath).replace(/\.[jt]sx?$/, "").slice(0, 22).trim().padStart(24);
309
309
  const numOptimized = `${res.optimized}`.padStart(3);
310
310
  const numFound = `${res.found}`.padStart(3);
311
311
  const numFlattened = `${res.flattened}`.padStart(3);
312
312
  const memory = process.env.DEBUG && memUsed > 10 ? ` ${memUsed}MB` : "";
313
- const timingStr = `${timing}ms`.padStart(6);
313
+ const timing = Date.now() - start;
314
+ const timingWarning = timing > 50 ? "\u26A0\uFE0F" : timing > 150 ? "\u2622\uFE0F" : "";
315
+ const timingStr = `${timing}ms${timingWarning}`.padStart(6);
314
316
  console.log(`${(0, import_getPrefixLogs.getPrefixLogs)(options)} ${path2} ${numFound} \xB7 ${numOptimized} \xB7 ${numFlattened} ${timingStr} ${memory ? `(${memory})` : ""}`);
315
317
  }
316
318
  return {
@@ -321,4 +323,8 @@ function extractToClassNames({
321
323
  };
322
324
  }
323
325
  __name(extractToClassNames, "extractToClassNames");
326
+ // Annotate the CommonJS export names for ESM import in node:
327
+ 0 && (module.exports = {
328
+ extractToClassNames
329
+ });
324
330
  //# sourceMappingURL=extractToClassNames.js.map