@tamagui/static 1.0.1-beta.226 → 1.0.1-beta.228
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extractor/createExtractor.js +2 -30
- package/dist/extractor/createExtractor.js.map +2 -2
- package/dist/extractor/extractHelpers.js +2 -0
- package/dist/extractor/extractHelpers.js.map +2 -2
- package/dist/extractor/loadTamagui.js +23 -17
- package/dist/extractor/loadTamagui.js.map +2 -2
- package/package.json +14 -14
- package/src/extractor/createExtractor.ts +1 -43
- package/src/extractor/extractHelpers.ts +1 -0
- package/src/extractor/loadTamagui.ts +29 -19
|
@@ -428,7 +428,7 @@ function createExtractor({ logger = console } = { logger: console }) {
|
|
|
428
428
|
}
|
|
429
429
|
},
|
|
430
430
|
JSXElement(traversePath) {
|
|
431
|
-
var _a2
|
|
431
|
+
var _a2;
|
|
432
432
|
if (shouldDisableExtraction) {
|
|
433
433
|
return;
|
|
434
434
|
}
|
|
@@ -1239,39 +1239,17 @@ function createExtractor({ logger = console } = { logger: console }) {
|
|
|
1239
1239
|
attrs = [...defaultStyleAttrs, ...attrs];
|
|
1240
1240
|
}
|
|
1241
1241
|
}
|
|
1242
|
-
if (shouldDeopt) {
|
|
1242
|
+
if (shouldDeopt || !shouldFlatten) {
|
|
1243
1243
|
if (shouldPrintDebug) {
|
|
1244
1244
|
logger.info(`Deopting`);
|
|
1245
1245
|
}
|
|
1246
1246
|
node.attributes = ogAttributes;
|
|
1247
1247
|
return;
|
|
1248
1248
|
}
|
|
1249
|
-
const ensureOverridden = {};
|
|
1250
|
-
if (!shouldFlatten) {
|
|
1251
|
-
for (const cur of attrs) {
|
|
1252
|
-
if (cur.type === "style") {
|
|
1253
|
-
for (const key in cur.value) {
|
|
1254
|
-
const shouldEnsureOverridden = !!((_b = staticConfig.ensureOverriddenProp) == null ? void 0 : _b[key]);
|
|
1255
|
-
const isSetInAttrsAlready = attrs.some(
|
|
1256
|
-
(x) => x.type === "attr" && x.value.type === "JSXAttribute" && x.value.name.name === key
|
|
1257
|
-
);
|
|
1258
|
-
if (!isSetInAttrsAlready) {
|
|
1259
|
-
const isVariant = !!((_c = staticConfig.variants) == null ? void 0 : _c[cur.name || ""]);
|
|
1260
|
-
if (isVariant || shouldEnsureOverridden) {
|
|
1261
|
-
ensureOverridden[key] = true;
|
|
1262
|
-
}
|
|
1263
|
-
}
|
|
1264
|
-
}
|
|
1265
|
-
}
|
|
1266
|
-
}
|
|
1267
|
-
}
|
|
1268
1249
|
if (shouldPrintDebug) {
|
|
1269
1250
|
logger.info(
|
|
1270
1251
|
[" - attrs (flattened): \n", (0, import_logLines.logLines)(attrs.map(import_extractHelpers.attrStr).join(", "))].join(" ")
|
|
1271
1252
|
);
|
|
1272
|
-
logger.info(
|
|
1273
|
-
[" - ensureOverriden:", Object.keys(ensureOverridden).join(", ")].join(" ")
|
|
1274
|
-
);
|
|
1275
1253
|
}
|
|
1276
1254
|
const state = {
|
|
1277
1255
|
noClassNames: false,
|
|
@@ -1431,12 +1409,6 @@ function createExtractor({ logger = console } = { logger: console }) {
|
|
|
1431
1409
|
acc.push(cur);
|
|
1432
1410
|
return acc;
|
|
1433
1411
|
}
|
|
1434
|
-
if (ensureOverridden[key]) {
|
|
1435
|
-
acc.push({
|
|
1436
|
-
type: "attr",
|
|
1437
|
-
value: cur.attr || t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral()))
|
|
1438
|
-
});
|
|
1439
|
-
}
|
|
1440
1412
|
if ((prev == null ? void 0 : prev.type) === "style") {
|
|
1441
1413
|
mergeStyles2(prev.value, cur.value);
|
|
1442
1414
|
return acc;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extractor/createExtractor.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-console */\nimport { basename, relative } from 'path'\n\nimport traverse, { NodePath, TraverseOptions } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport {\n PseudoStyles,\n StaticConfigParsed,\n expandStyles,\n getSplitStyles,\n getStylesAtomic,\n mediaQueryConfig,\n proxyThemeVariables,\n pseudoDescriptors,\n} from '@tamagui/core-node'\nimport type { ViewStyle } from 'react-native'\nimport { createDOMProps } from 'react-native-web-internals'\n\nimport { FAILED_EVAL } from '../constants.js'\nimport type {\n ExtractedAttr,\n ExtractedAttrAttr,\n ExtractedAttrStyle,\n ExtractorOptions,\n ExtractorParseProps,\n TamaguiOptions,\n TamaguiOptionsWithFileInfo,\n Ternary,\n} from '../types.js'\nimport { createEvaluator, createSafeEvaluator } from './createEvaluator.js'\nimport { evaluateAstNode } from './evaluateAstNode.js'\nimport {\n attrStr,\n findComponentName,\n getValidComponent,\n getValidImport,\n isPresent,\n isValidImport,\n objToStr,\n} from './extractHelpers.js'\nimport { findTopmostFunction } from './findTopmostFunction.js'\nimport { getPrefixLogs } from './getPrefixLogs.js'\nimport { cleanupBeforeExit, getStaticBindingsForScope } from './getStaticBindingsForScope.js'\nimport { literalToAst } from './literalToAst.js'\nimport { TamaguiProjectInfo, loadTamagui, loadTamaguiSync } from './loadTamagui.js'\nimport { logLines } from './logLines.js'\nimport { normalizeTernaries } from './normalizeTernaries.js'\nimport { removeUnusedHooks } from './removeUnusedHooks.js'\nimport { timer } from './timer.js'\nimport { validHTMLAttributes } from './validHTMLAttributes.js'\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 ...(process.env.TAMAGUI_TARGET === 'web' && {\n onPress: 'onClick',\n onHoverIn: 'onMouseEnter',\n onHoverOut: 'onMouseLeave',\n onPressIn: 'onMouseDown',\n onPressOut: 'onMouseUp',\n }),\n}\n\nconst validHooks = {\n useMedia: true,\n useTheme: true,\n}\n\nconst isAttr = (x: ExtractedAttr): x is ExtractedAttrAttr => x.type === 'attr'\nconst createTernary = (x: Ternary) => x\n\nexport type Extractor = ReturnType<typeof createExtractor>\n\ntype FileOrPath = NodePath<t.Program> | t.File\n\nlet hasLoggedBaseInfo = false\n\nexport function createExtractor({ logger = console }: ExtractorOptions = { logger: console }) {\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 projectInfo: TamaguiProjectInfo | null = null\n\n // we load tamagui delayed 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\n function loadSync(props: TamaguiOptions) {\n return (projectInfo ||= loadTamaguiSync({\n config: props.config || 'tamagui.config.ts',\n components: props.components || ['tamagui'],\n }))\n }\n\n async function load(props: TamaguiOptions) {\n return (projectInfo ||= await loadTamagui({\n config: props.config || 'tamagui.config.ts',\n components: props.components || ['tamagui'],\n }))\n }\n\n return {\n options: {\n logger,\n },\n cleanupBeforeExit,\n loadTamagui: load,\n loadTamaguiSync: loadSync,\n getTamagui() {\n return projectInfo?.tamaguiConfig\n },\n parseSync: (f: FileOrPath, props: ExtractorParseProps) => {\n const projectInfo = loadSync(props)\n return parseWithConfig(projectInfo, f, props)\n },\n parse: async (f: FileOrPath, props: ExtractorParseProps) => {\n const projectInfo = await load(props)\n return parseWithConfig(projectInfo, f, props)\n },\n }\n\n function parseWithConfig(\n { components, tamaguiConfig }: TamaguiProjectInfo,\n fileOrPath: FileOrPath,\n options: ExtractorParseProps\n ) {\n const {\n config = 'tamagui.config.ts',\n importsWhitelist = ['constants.js'],\n evaluateVars = true,\n sourcePath = '',\n onExtractTag,\n onStyleRule,\n getFlattenedNode,\n disable,\n disableExtraction,\n disableExtractInlineMedia,\n disableExtractVariables,\n disableDebugAttr,\n disableExtractFoundComponents,\n includeExtensions = ['.tsx', '.jsx', '.js'],\n extractStyledDefinitions = false,\n prefixLogs,\n excludeProps,\n target,\n ...restProps\n } = options\n\n let shouldPrintDebug = options.shouldPrintDebug || false\n\n if (disable === true || (Array.isArray(disable) && disable.includes(sourcePath))) {\n return null\n }\n if (sourcePath === '') {\n throw new Error(`Must provide a source file name`)\n }\n if (!components) {\n throw new Error(`Must provide components`)\n }\n if (includeExtensions && !includeExtensions.some((ext) => sourcePath.endsWith(ext))) {\n if (shouldPrintDebug) {\n logger.info(\n `Ignoring file due to includeExtensions: ${sourcePath}, includeExtensions: ${includeExtensions.join(\n ', '\n )}`\n )\n }\n return null\n }\n\n function isValidStyleKey(name: string, staticConfig: StaticConfigParsed) {\n if (!projectInfo) {\n throw new Error(`Tamagui extractor not loaded yet`)\n }\n if (target === 'native' && name[0] === '$' && mediaQueryConfig[name.slice(1)]) {\n return false\n }\n return !!(\n !!staticConfig.validStyles?.[name] ||\n !!pseudoDescriptors[name] ||\n // dont disable variants or else you lose many things flattening\n staticConfig.variants?.[name] ||\n projectInfo?.tamaguiConfig.shorthands[name] ||\n (name[0] === '$' ? !!mediaQueryConfig[name.slice(1)] : false)\n )\n }\n\n /**\n * Step 1: Determine if importing any statically extractable components\n */\n\n const isTargetingHTML = target === 'html'\n const ogDebug = shouldPrintDebug\n const tm = timer()\n const propsWithFileInfo: TamaguiOptionsWithFileInfo = {\n ...options,\n sourcePath,\n allLoadedComponents: [...components],\n }\n\n if (!hasLoggedBaseInfo) {\n hasLoggedBaseInfo = true\n if (shouldPrintDebug) {\n logger.info(\n [\n 'loaded components:',\n propsWithFileInfo.allLoadedComponents\n .map((comp) => Object.keys(comp.nameToInfo).join(', '))\n .join(', '),\n ].join(' ')\n )\n }\n if (process.env.DEBUG?.startsWith('tamagui')) {\n const next = [...propsWithFileInfo.allLoadedComponents].map((info) => {\n const nameToInfo = { ...info.nameToInfo }\n for (const key in nameToInfo) {\n delete nameToInfo[key].staticConfig.validStyles\n }\n return { ...info, nameToInfo }\n })\n logger.info(['loaded:', JSON.stringify(next, null, 2)].join('\\n'))\n }\n }\n\n tm.mark('load-tamagui', !!shouldPrintDebug)\n\n const firstThemeName = Object.keys(tamaguiConfig.themes)[0]\n const firstTheme = tamaguiConfig.themes[firstThemeName]\n\n if (!firstTheme || typeof firstTheme !== 'object') {\n console.error(`Missing theme, an error occurred when importing your config`)\n console.log(`Got config:`, tamaguiConfig)\n console.log(`Looking for theme:`, firstThemeName)\n process.exit(0)\n }\n\n const proxiedTheme = proxyThemeVariables(firstTheme)\n type AccessListener = (key: string) => void\n const themeAccessListeners = new Set<AccessListener>()\n const defaultTheme = new Proxy(proxiedTheme, {\n get(target, key) {\n if (Reflect.has(target, key)) {\n themeAccessListeners.forEach((cb) => cb(String(key)))\n }\n return Reflect.get(target, key)\n },\n })\n\n // @ts-ignore\n const body = fileOrPath.type === 'Program' ? fileOrPath.get('body') : fileOrPath.program.body\n\n if (Object.keys(components).length === 0) {\n console.warn(`Warning: Tamagui didn't find any valid components (DEBUG=tamagui for more)`)\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, Object.keys(components), components)\n }\n }\n\n if (shouldPrintDebug === 'verbose') {\n logger.info(\n `allLoadedComponent modules ${propsWithFileInfo.allLoadedComponents\n .map((k) => k.moduleName)\n .join(', ')}`\n )\n }\n\n let doesUseValidImport = false\n let hasImportedTheme = false\n\n const importDeclarations: t.ImportDeclaration[] = []\n\n for (const bodyPath of body) {\n if (bodyPath.type !== 'ImportDeclaration') continue\n const node = ('node' in bodyPath ? bodyPath.node : bodyPath) as t.ImportDeclaration\n const moduleName = node.source.value\n\n // if importing valid module\n const valid = isValidImport(propsWithFileInfo, moduleName)\n\n if (valid) {\n importDeclarations.push(node)\n }\n\n if (extractStyledDefinitions) {\n if (valid) {\n if (node.specifiers.some((specifier) => specifier.local.name === 'styled')) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (valid) {\n const names = node.specifiers.map((specifier) => specifier.local.name)\n const isValidComponent = names.some((name) =>\n Boolean(isValidImport(propsWithFileInfo, moduleName, name) || validHooks[name])\n )\n if (shouldPrintDebug === 'verbose') {\n logger.info(\n `import ${names.join(', ')} from ${moduleName} isValidComponent ${isValidComponent}`\n )\n }\n if (isValidComponent) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (shouldPrintDebug) {\n logger.info(`file: ${sourcePath} ${JSON.stringify({ doesUseValidImport, hasImportedTheme })}`)\n }\n\n if (!doesUseValidImport) {\n return null\n }\n\n function getValidImportedComponent(componentName: string) {\n const importDeclaration = importDeclarations.find((dec) =>\n dec.specifiers.some((spec) => spec.local.name === componentName)\n )\n if (!importDeclaration) {\n return null\n }\n return getValidImport(propsWithFileInfo, importDeclaration.source.value, componentName)\n }\n\n tm.mark('import-check', !!shouldPrintDebug)\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: TraverseOptions<any>) => {\n return fileOrPath.type === 'File' ? traverse(fileOrPath, a) : fileOrPath.traverse(a)\n }\n\n const shouldDisableExtraction =\n disableExtraction === true ||\n (Array.isArray(disableExtraction) && disableExtraction.includes(sourcePath))\n\n /**\n * Step 2: Statically extract from JSX < /> nodes\n */\n let programPath: NodePath<t.Program> | null = null\n\n const res = {\n styled: 0,\n flattened: 0,\n optimized: 0,\n modified: 0,\n found: 0,\n }\n\n callTraverse({\n // @ts-ignore\n Program: {\n enter(path) {\n programPath = path\n },\n },\n\n // styled() calls\n CallExpression(path) {\n if (disable || shouldDisableExtraction || extractStyledDefinitions === false) {\n return\n }\n\n if (!t.isIdentifier(path.node.callee) || path.node.callee.name !== 'styled') {\n return\n }\n\n const name =\n t.isVariableDeclarator(path.parent) && t.isIdentifier(path.parent.id)\n ? path.parent.id.name\n : 'unknown'\n\n const definition = path.node.arguments[1]\n\n if (!name || !definition || !t.isObjectExpression(definition)) {\n return\n }\n\n let Component = getValidImportedComponent(name)\n\n if (!Component) {\n if (disableExtractFoundComponents === true) {\n return\n }\n if (\n Array.isArray(disableExtractFoundComponents) &&\n disableExtractFoundComponents.includes(name)\n ) {\n return\n }\n\n try {\n if (shouldPrintDebug) {\n logger.info(`Unknown component ${name}, attempting dynamic load: ${sourcePath}`)\n }\n\n const out = loadTamaguiSync({\n forceExports: true,\n components: [sourcePath],\n })\n\n if (!out?.components) {\n if (shouldPrintDebug) {\n logger.info(`Couldn't load, got ${out}`)\n }\n return\n }\n\n propsWithFileInfo.allLoadedComponents = [\n ...propsWithFileInfo.allLoadedComponents,\n ...out.components,\n ]\n\n Component = out.components.flatMap((x) => x.nameToInfo[name] ?? [])[0]\n\n if (shouldPrintDebug === 'verbose') {\n logger.info([`Tamagui Loaded`, JSON.stringify(out.components), !!Component].join(' '))\n }\n } catch (err: any) {\n if (shouldPrintDebug) {\n logger.info(\n `${getPrefixLogs(\n options\n )} skip optimize styled(${name}), unable to pre-process (DEBUG=tamagui for more)`\n )\n }\n if (process.env.DEBUG === 'tamagui') {\n logger.info(\n ` Disable this with \"disableExtractFoundComponents\" in your build-time configuration. \\n\\n ${err.message} ${err.stack}`\n )\n }\n }\n }\n\n if (!Component) {\n return\n }\n\n const componentSkipProps = new Set([\n ...(Component.staticConfig.inlineWhenUnflattened || []),\n ...(Component.staticConfig.inlineProps || []),\n ...(Component.staticConfig.deoptProps || []),\n // for now skip variants, will return to them\n 'variants',\n 'defaultVariants',\n // skip fontFamily its basically a \"variant\", important for theme use to be value always\n 'fontFamily',\n 'name',\n ])\n\n // for now dont parse variants, spreads, etc\n const skipped: (t.ObjectProperty | t.SpreadElement | t.ObjectMethod)[] = []\n const styles = {}\n\n // Generate scope object at this level\n const staticNamespace = getStaticBindingsForScope(\n path.scope,\n importsWhitelist,\n sourcePath,\n bindingCache,\n shouldPrintDebug\n )\n\n const attemptEval = !evaluateVars\n ? evaluateAstNode\n : createEvaluator({\n props: propsWithFileInfo,\n staticNamespace,\n sourcePath,\n shouldPrintDebug,\n })\n const attemptEvalSafe = createSafeEvaluator(attemptEval)\n\n for (const property of definition.properties) {\n if (\n !t.isObjectProperty(property) ||\n !t.isIdentifier(property.key) ||\n !isValidStyleKey(property.key.name, Component.staticConfig) ||\n // skip variants\n Component.staticConfig.variants?.[property.key.name] ||\n componentSkipProps.has(property.key.name)\n ) {\n skipped.push(property)\n continue\n }\n // attempt eval\n const out = attemptEvalSafe(property.value)\n if (out === FAILED_EVAL) {\n skipped.push(property)\n } else {\n styles[property.key.name] = out\n }\n }\n\n const out = getSplitStyles(styles, Component.staticConfig, defaultTheme, {\n focus: false,\n hover: false,\n unmounted: true,\n press: false,\n pressIn: false,\n resolveVariablesAs: 'variable',\n noClassNames: false,\n })\n\n const classNames = {\n ...out.classNames,\n }\n\n // // add in the style object as classnames\n // const atomics = getStylesAtomic(out.style)\n // for (const atomic of atomics) {\n // out.rulesToInsert = out.rulesToInsert || []\n // out.rulesToInsert.push(atomic)\n // classNames[atomic.property] = atomic.identifier\n // }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n logger.info([`Extracted styled(${name})\\n`, JSON.stringify(styles, null, 2), '\\n rulesToInsert:', out.rulesToInsert.flatMap((rule) => rule.rules).join('\\n')].join(' '))\n }\n\n // leave only un-parsed props...\n definition.properties = skipped\n\n // ... + key: className\n for (const cn in classNames) {\n if (componentSkipProps.has(cn)) {\n continue\n }\n const val = classNames[cn]\n definition.properties.push(t.objectProperty(t.stringLiteral(cn), t.stringLiteral(val)))\n }\n\n if (out.rulesToInsert) {\n for (const { identifier, rules } of out.rulesToInsert) {\n onStyleRule?.(identifier, rules)\n }\n }\n\n res.styled++\n\n if (shouldPrintDebug) {\n logger.info(`Extracted styled(${name})`)\n }\n },\n\n JSXElement(traversePath) {\n if (shouldDisableExtraction) {\n return\n }\n\n tm.mark('jsx-element', !!shouldPrintDebug)\n\n const node = traversePath.node.openingElement\n const ogAttributes = node.attributes.map((attr) => ({ ...attr }))\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 let modulePath = ''\n\n if (binding) {\n if (!t.isImportDeclaration(binding.path.parent)) {\n if (shouldPrintDebug) {\n logger.info(` - Binding not import declaration, skip`)\n }\n return\n }\n modulePath = binding.path.parent.source.value\n if (!isValidImport(propsWithFileInfo, modulePath, binding.identifier.name)) {\n if (shouldPrintDebug) {\n logger.info(` - Binding not internal import or from components ${modulePath}`)\n }\n return\n }\n }\n\n const component = getValidComponent(propsWithFileInfo, modulePath, node.name.name)\n if (!component || !component.staticConfig) {\n if (shouldPrintDebug) {\n logger.info(` - No Tamagui conf on this: ${node.name.name}`)\n }\n return\n }\n\n const originalNodeName = node.name.name\n\n // found a valid tag\n res.found++\n\n const filePath = `./${relative(process.cwd(), sourcePath)}`\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 const codePosition = `${filePath}:${lineNumbers}`\n\n // debug just one\n const debugPropValue = node.attributes\n .filter(\n (n) => t.isJSXAttribute(n) && t.isJSXIdentifier(n.name) && n.name.name === 'debug'\n )\n // @ts-ignore\n .map((n: t.JSXAttribute) => {\n if (n.value === null) return true\n if (t.isStringLiteral(n.value)) return n.value.value as 'verbose'\n return false\n })[0] as boolean | 'verbose' | undefined\n\n if (debugPropValue) {\n shouldPrintDebug = debugPropValue\n }\n\n if (shouldPrintDebug) {\n logger.info('\\n')\n logger.info(\n `\\x1b[33m%s\\x1b[0m ` + `${componentName} | ${codePosition} -------------------`\n )\n // prettier-ignore\n logger.info(['\\x1b[1m', '\\x1b[32m', `<${originalNodeName} />`, disableDebugAttr ? '' : '\uD83D\uDC1B'].join(' '))\n }\n\n // add data-* debug attributes\n if (shouldAddDebugProp && !disableDebugAttr) {\n res.modified++\n node.attributes.unshift(\n t.jsxAttribute(t.jsxIdentifier('data-is'), t.stringLiteral(node.name.name))\n )\n if (componentName) {\n node.attributes.unshift(\n t.jsxAttribute(t.jsxIdentifier('data-in'), t.stringLiteral(componentName))\n )\n }\n\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier('data-at'),\n t.stringLiteral(`${basename(filePath)}:${lineNumbers}`)\n )\n )\n }\n\n // disable as it gets messy\n // const shouldLog = !hasLogged\n // if (shouldLog) {\n // logger.info(` 1\uFE0F\u20E3 Inline optimized 2\uFE0F\u20E3 Inline flattened 3\uFE0F\u20E3 styled() extracted`)\n // const prefix = ' |'\n // // prettier-ignore\n // logger.info([prefixLogs || prefix, ' total \u00B7 1\uFE0F\u20E3 \u00B7 2\uFE0F\u20E3 \u00B7 3\uFE0F\u20E3'].join(' '))\n // hasLogged = true\n // }\n\n if (disableExtraction) {\n return\n }\n\n try {\n const { staticConfig } = component\n const variants = staticConfig.variants || {}\n const isTextView = staticConfig.isText || false\n const validStyles = staticConfig?.validStyles ?? {}\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 ...(restProps.inlineProps || []),\n ...(staticConfig.inlineProps || []),\n ])\n\n const deoptProps = new Set([\n // always de-opt animation\n 'animation',\n ...(restProps.deoptProps || []),\n ...(staticConfig.deoptProps || []),\n ])\n\n const inlineWhenUnflattened = new Set([...(staticConfig.inlineWhenUnflattened || [])])\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 props: propsWithFileInfo,\n staticNamespace,\n sourcePath,\n traversePath,\n shouldPrintDebug,\n })\n const attemptEvalSafe = createSafeEvaluator(attemptEval)\n\n if (shouldPrintDebug) {\n logger.info(` 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 logger.info([' couldnt parse spread', e.message].join(' '))\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 logger.info([' non object or null arg', arg].join(' '))\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 logger.error(['Unhandled null prop', k, value, arg].join(' '))\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 logger.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)\n\n // set flattened\n node.attributes = flattenedAttrs\n\n let attrs: ExtractedAttr[] = []\n let shouldDeopt = false\n const inlined = new Map<string, any>()\n const variantValues = new Map<string, any>()\n let hasSetOptimized = false\n const inlineWhenUnflattenedOGVals = {}\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)\n if (!res) {\n path.remove()\n }\n return res\n } catch (err: any) {\n if (shouldPrintDebug) {\n logger.info(\n [\n 'Recoverable error extracting attribute',\n err.message,\n shouldPrintDebug === 'verbose' ? err.stack : '',\n ].join(' ')\n )\n if (shouldPrintDebug === 'verbose') {\n logger.info(`node ${path.node?.type}`)\n }\n }\n // dont flatten if we run into error\n inlined.set(`${Math.random()}`, 'spread')\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 logger.info(\n [' - attrs (before):\\n', logLines(attrs.map(attrStr).join(', '))].join(' ')\n )\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 && !isStaticObject(side))) {\n if (shouldPrintDebug) {\n logger.info(`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 logger.info(' ! 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 logger.info([' excluding prop', name].join(' '))\n }\n return null\n }\n\n if (inlineProps.has(name)) {\n inlined.set(name, name)\n if (shouldPrintDebug) {\n logger.info([' ! inlining, inline prop', name].join(' '))\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 logger.info([' ! inlining, deopted prop', name].join(' '))\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 const shortname = name.slice(1)\n if (mediaQueryConfig[shortname]) {\n if (target === 'native') {\n shouldDeopt = true\n }\n\n // allow disabling this extraction\n if (disableExtractInlineMedia) {\n return attr\n }\n\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 logger.info([' ! inlining, ref', name].join(' '))\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 === true) {\n if (value) {\n if (value.type === 'StringLiteral' && value.value[0] === '$') {\n if (shouldPrintDebug) {\n logger.info(\n [` ! inlining, native disable extract: ${name} =`, value.value].join(' ')\n )\n }\n inlined.set(name, true)\n return attr\n }\n }\n }\n\n if (name === 'theme') {\n inlined.set('theme', attr.value)\n return attr\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 (!variants[name] && !isValidStyleKey(name, staticConfig)) {\n let keys = [name]\n let out: any = null\n\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 { resolveVariablesAs: 'auto' },\n undefined,\n undefined,\n shouldPrintDebug\n )\n\n if (out) {\n if (!Array.isArray(out)) {\n logger.warn(`Error expected array but got`, out)\n couldntParse = true\n shouldDeopt = true\n } else {\n out = Object.fromEntries(out)\n keys = Object.keys(out)\n }\n }\n if (out) {\n if (isTargetingHTML) {\n // translate to DOM-compat\n out = createDOMProps(isTextView ? 'span' : 'div', out)\n // remove className - we dont use rnw styling\n delete out.className\n }\n\n keys = Object.keys(out)\n }\n\n let didInline = false\n const attributes = keys.map((key) => {\n const val = out[key]\n if (isValidStyleKey(key, staticConfig)) {\n return {\n type: 'style',\n value: { [key]: styleValue },\n name: key,\n attr: path.node,\n } as const\n }\n if (\n validHTMLAttributes[key] ||\n key.startsWith('aria-') ||\n key.startsWith('data-') ||\n // this is debug stuff added by vite / new jsx transform\n key === '__source' ||\n key === '__self'\n ) {\n return attr\n }\n if (shouldPrintDebug) {\n logger.info(' ! 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 logger.info(` 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 (inlineWhenUnflattened.has(name)) {\n // preserve original value for restoration\n inlineWhenUnflattenedOGVals[name] = { styleValue, attr }\n }\n\n if (isValidStyleKey(name, staticConfig)) {\n if (shouldPrintDebug) {\n logger.info(` 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 if (variants[name]) {\n variantValues.set(name, styleValue)\n }\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 logger.info(` 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 logger.info(` 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 logger.info(` 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 === 'verbose') {\n logger.info(` static conditional ${name} ${value}`)\n }\n return { type: 'ternary', value: staticConditional }\n }\n\n const staticLogical = getStaticLogical(value)\n if (staticLogical) {\n if (shouldPrintDebug === 'verbose') {\n logger.info(` 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 logger.info(` ! 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(t.binaryExpression(operator, staticExpr, cond.consequent))\n if (shouldPrintDebug) {\n logger.info([' binaryConditional', cond.test, cons, alt].join(' '))\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 const aVal = attemptEval(value.alternate)\n const cVal = attemptEval(value.consequent)\n if (shouldPrintDebug) {\n const type = value.test.type\n logger.info([' static ternary', type, cVal, aVal].join(' '))\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 logger.info([' cant eval ternary', err.message].join(' '))\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 logger.info([' staticLogical', value.left, name, val].join(' '))\n }\n return {\n test: value.left,\n remove,\n consequent: { [name]: val },\n alternate: null,\n }\n } catch (err) {\n if (shouldPrintDebug) {\n logger.info([' cant static eval logical', err].join(' '))\n }\n }\n }\n }\n return null\n }\n } // END function evaluateAttribute\n\n function isStaticObject(obj: t.Node): obj is t.ObjectExpression {\n return (\n t.isObjectExpression(obj) &&\n obj.properties.every((prop) => {\n if (!t.isObjectProperty(prop)) {\n logger.info(['not object prop', prop].join(' '))\n return false\n }\n const propName = prop.key['name']\n if (!isValidStyleKey(propName, staticConfig) && propName !== 'tag') {\n if (shouldPrintDebug) {\n logger.info([' not a valid style prop!', propName].join(' '))\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 (!isStaticObject(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 logger.info(['\u26A0\uFE0F no ternaries?', property].join(' '))\n }\n } else {\n logger.info(['\u26A0\uFE0F not expression', property].join(' '))\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 if (couldntParse || shouldDeopt) {\n if (shouldPrintDebug) {\n logger.info([` avoid optimizing:`, { couldntParse, shouldDeopt }].join(' '))\n }\n node.attributes = ogAttributes\n return\n }\n\n // now update to new values\n node.attributes = attrs.filter(isAttr).map((x) => x.value)\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 logger.info(\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\n // on native we can't flatten when theme prop is set\n if (target !== 'native') {\n inlined.delete('theme')\n }\n\n for (const [key] of [...inlined]) {\n const isStaticObjectVariant = staticConfig.variants?.[key] && variantValues.has(key)\n if (INLINE_EXTRACTABLE[key] || isStaticObjectVariant) {\n inlined.delete(key)\n }\n }\n\n const canFlattenProps = inlined.size === 0\n\n let shouldFlatten = Boolean(\n flatNode &&\n !shouldDeopt &&\n canFlattenProps &&\n !hasSpread &&\n staticConfig.neverFlatten !== true &&\n (staticConfig.neverFlatten === 'jsx' ? hasOnlyStringChildren : true)\n )\n\n const shouldWrapTheme = shouldFlatten && themeVal\n const usedThemeKeys = new Set<string>()\n\n if (disableExtractVariables) {\n // if it accesses any theme values during evaluation\n themeAccessListeners.add((key) => {\n shouldFlatten = false\n usedThemeKeys.add(key)\n if (shouldPrintDebug === 'verbose') {\n logger.info([' ! accessing theme key, avoid flatten', key].join(' '))\n }\n })\n }\n\n if (shouldPrintDebug) {\n try {\n // prettier-ignore\n logger.info([' flatten?', objToStr({ hasSpread, shouldDeopt, shouldFlatten, canFlattenProps, shouldWrapTheme, hasOnlyStringChildren }), 'inlined', [...inlined]].join(' '))\n } catch {\n // ok\n }\n }\n\n // wrap theme around children on flatten\n // TODO move this to bottom and re-check shouldFlatten\n // account for shouldFlatten could change w the above block \"if (disableExtractVariables)\"\n if (shouldFlatten && shouldWrapTheme) {\n if (!programPath) {\n console.warn(\n `No program path found, avoiding importing flattening / importing theme in ${sourcePath}`\n )\n } else {\n if (shouldPrintDebug) {\n logger.info([' - wrapping theme', themeVal].join(' '))\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'), themeVal.value),\n ]),\n t.jsxClosingElement(t.jsxIdentifier('_TamaguiTheme')),\n [traversePath.node]\n )\n )\n }\n }\n\n // only if we flatten, ensure the default styles are there\n if (shouldFlatten) {\n const defaultStyleAttrs = Object.keys(staticConfig.defaultProps).flatMap((key) => {\n if (!isValidStyleKey(key, staticConfig)) {\n return []\n }\n const value = staticConfig.defaultProps[key]\n const name = tamaguiConfig.shorthands[key] || key\n if (value === undefined) {\n logger.warn(`\u26A0\uFE0F Error evaluating default style for component, prop ${key} ${value}`)\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 if (shouldPrintDebug) {\n logger.info(`Deopting`)\n }\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 logger.info(\n [' - attrs (flattened): \\n', logLines(attrs.map(attrStr).join(', '))].join(' ')\n )\n logger.info(\n [' - ensureOverriden:', Object.keys(ensureOverridden).join(', ')].join(' ')\n )\n }\n\n const state = {\n noClassNames: false,\n focus: false,\n hover: false,\n unmounted: false, // TODO match logic in createComponent\n press: false,\n pressIn: false,\n }\n\n // evaluates all static attributes into a simple object\n let foundStaticProps = {}\n for (const key in attrs) {\n const cur = attrs[key]\n if (cur.type === 'style') {\n // remove variants because they are processed later, and can lead to invalid values here\n // see <Spacer flex /> where flex looks like a valid style, but is a variant\n foundStaticProps = {\n ...foundStaticProps,\n ...expandStylesWithoutVariants(cur.value),\n }\n continue\n }\n if (cur.type === 'attr') {\n if (t.isJSXSpreadAttribute(cur.value)) {\n continue\n }\n if (!t.isJSXIdentifier(cur.value.name)) {\n continue\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 foundStaticProps = {\n ...foundStaticProps,\n [key]: value,\n }\n }\n }\n }\n\n // must preserve exact order\n const completeProps = {}\n for (const key in staticConfig.defaultProps) {\n if (!(key in foundStaticProps)) {\n completeProps[key] = staticConfig.defaultProps[key]\n }\n }\n for (const key in foundStaticProps) {\n completeProps[key] = foundStaticProps[key]\n }\n\n // expand shorthands, de-opt variables\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (!cur) return acc\n if (cur.type === 'attr' && !t.isJSXSpreadAttribute(cur.value)) {\n if (shouldFlatten) {\n const name = cur.value.name.name\n if (typeof name === 'string') {\n if (name === 'tag') {\n // remove tag=\"\"\n return acc\n }\n\n // if flattening, expand variants\n if (variants[name] && variantValues.has(name)) {\n let out = Object.fromEntries(\n staticConfig.propMapper(\n name,\n variantValues.get(name),\n defaultTheme,\n completeProps,\n { ...state, resolveVariablesAs: 'auto' },\n undefined,\n undefined,\n shouldPrintDebug\n ) || []\n )\n if (out && isTargetingHTML) {\n const cn = out.className\n // translate to DOM-compat\n out = createDOMProps(isTextView ? 'span' : 'div', out)\n // remove rnw className use ours\n out.className = cn\n }\n if (shouldPrintDebug) {\n logger.info([' - expanded variant', name, out].join(' '))\n }\n for (const key in out) {\n const value = out[key]\n if (isValidStyleKey(key, staticConfig)) {\n acc.push({\n type: 'style',\n value: { [key]: value },\n name: key,\n attr: cur.value,\n } as const)\n } else {\n acc.push({\n type: 'attr',\n value: t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(\n typeof value === 'string'\n ? t.stringLiteral(value)\n : literalToAst(value)\n )\n ),\n })\n }\n }\n }\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 // 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] === '$' && (usedThemeKeys.has(key) || usedThemeKeys.has(fullKey))) {\n if (shouldPrintDebug) {\n logger.info([` keeping variable inline: ${key} =`, value].join(' '))\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)\n if (shouldPrintDebug) {\n logger.info(\n [' - attrs (expanded): \\n', logLines(attrs.map(attrStr).join(', '))].join(' ')\n )\n }\n\n // merge styles, leave undefined values\n let prev: ExtractedAttr | null = null\n\n function splitVariants(style: any) {\n const variants = {}\n const styles = {}\n for (const key in style) {\n if (staticConfig.variants?.[key]) {\n variants[key] = style[key]\n } else {\n styles[key] = style[key]\n }\n }\n return {\n variants,\n styles,\n }\n }\n\n function expandStylesWithoutVariants(style: any) {\n const { variants, styles } = splitVariants(style)\n return {\n ...expandStyles(styles),\n ...variants,\n }\n }\n\n function mergeStyles(prev: ViewStyle & PseudoStyles, nextIn: ViewStyle & PseudoStyles) {\n const next = expandStylesWithoutVariants(nextIn)\n for (const key in next) {\n // merge pseudos\n if (pseudoDescriptors[key]) {\n prev[key] = prev[key] || {}\n if (shouldPrintDebug) {\n if (!next[key] || !prev[key]) {\n logger.info(['warn: missing', key, prev, next].join(' '))\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 !pseudoDescriptors[key] &&\n !key.startsWith('data-')\n\n if (shouldKeepOriginalAttr) {\n if (shouldPrintDebug) {\n logger.info([' - keeping as non-style', key].join(' '))\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, cur.value)\n return acc\n }\n }\n\n prev = cur\n acc.push(cur)\n return acc\n }, [])\n\n if (shouldPrintDebug) {\n logger.info(\n [' - attrs (combined \uD83D\uDD00): \\n', logLines(attrs.map(attrStr).join(', '))].join(' ')\n )\n logger.info(\n [' - defaultProps: \\n', logLines(objToStr(staticConfig.defaultProps))].join(' ')\n )\n // prettier-ignore\n logger.info([' - foundStaticProps: \\n', logLines(objToStr(foundStaticProps))].join(' '))\n logger.info([' - completeProps: \\n', logLines(objToStr(completeProps))].join(' '))\n }\n\n // post process\n const getStyles = (props: Object | null, debugName = '') => {\n if (!props || !Object.keys(props).length) {\n if (shouldPrintDebug) logger.info([' getStyles() no props'].join(' '))\n return {}\n }\n if (excludeProps && !!excludeProps.size) {\n for (const key in props) {\n if (excludeProps.has(key)) {\n if (shouldPrintDebug) logger.info([' delete excluded', key].join(' '))\n delete props[key]\n }\n }\n }\n try {\n const out = getSplitStyles(\n props,\n staticConfig,\n defaultTheme,\n {\n ...state,\n fallbackProps: completeProps,\n },\n undefined,\n undefined,\n undefined,\n debugPropValue\n )\n\n const outStyle = {\n ...out.style,\n ...out.pseudos,\n }\n // omitInvalidStyles(outStyle)\n // if (shouldPrintDebug) {\n // // prettier-ignore\n // logger.info(` getStyles ${debugName} (props):\\n`, logLines(objToStr(props)))\n // // prettier-ignore\n // logger.info(` getStyles ${debugName} (out.viewProps):\\n`, logLines(objToStr(out.viewProps)))\n // // prettier-ignore\n // logger.info(` getStyles ${debugName} (out.style):\\n`, logLines(objToStr(outStyle || {}), true))\n // }\n return outStyle\n } catch (err: any) {\n logger.info(['error', err.message, err.stack].join(' '))\n return {}\n }\n }\n\n // used to ensure we pass the entire prop bundle to getStyles\n const completeStyles = getStyles(completeProps, 'completeStyles')\n\n if (!completeStyles) {\n throw new Error(`Impossible, no styles`)\n }\n\n const isNativeNotFlat = !shouldFlatten && target === 'native'\n if (isNativeNotFlat) {\n if (shouldPrintDebug) {\n logger.info(`Disabled flattening except for simple cases on native for now`)\n }\n node.attributes = ogAttributes\n return null\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 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) logger.info([' => tern ', attrStr(attr)].join(' '))\n continue\n }\n case 'style': {\n // expand variants and such\n const styles = getStyles(attr.value, 'style')\n if (styles) {\n attr.value = styles\n }\n // prettier-ignore\n if (shouldPrintDebug) logger.info([' * styles (in)', logLines(objToStr(attr.value))].join(' '))\n // prettier-ignore\n if (shouldPrintDebug) logger.info([' * styles (out)', logLines(objToStr(styles))].join(' '))\n continue\n }\n }\n } catch (err) {\n // any error de-opt\n getStyleError = err\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n logger.info([' - attrs (ternaries/combined):\\n', logLines(attrs.map(attrStr).join(', '))].join(' '))\n }\n\n tm.mark('jsx-element-styles', !!shouldPrintDebug)\n\n if (getStyleError) {\n logger.info([' \u26A0\uFE0F postprocessing error, deopt', getStyleError].join(' '))\n node.attributes = ogAttributes\n return null\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) {\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 logger.info([` >> delete existing ${key}`].join(' '))\n }\n delete attr.value[key]\n } else {\n existingStyleKeys.add(key)\n }\n }\n }\n }\n\n // inlineWhenUnflattened\n if (!shouldFlatten) {\n if (inlineWhenUnflattened.size) {\n for (const [index, attr] of attrs.entries()) {\n if (attr.type === 'style') {\n for (const key in attr.value) {\n if (!inlineWhenUnflattened.has(key)) continue\n const val = inlineWhenUnflattenedOGVals[key]\n if (val) {\n // delete the style\n delete attr.value[key]\n\n // and insert it before\n attrs.splice(index - 1, 0, val.attr)\n } else {\n // just delete it, it was added during expansion but should be left inline\n delete attr.value[key]\n }\n }\n }\n }\n }\n }\n\n if (shouldFlatten) {\n // DO FLATTEN\n if (shouldPrintDebug) {\n logger.info([' [\u2705] flattening', originalNodeName, flatNode].join(' '))\n }\n // @ts-ignore\n node.name.name = flatNode\n res.flattened++\n if (closingElement) {\n // @ts-ignore\n closingElement.name.name = flatNode\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n logger.info([` \u274A\u274A inline props (${inlined.size}):`, shouldDeopt ? ' deopted' : '', hasSpread ? ' has spread' : '', staticConfig.neverFlatten ? 'neverFlatten' : ''].join(' '))\n logger.info(` - attrs (end):\\n ${logLines(attrs.map(attrStr).join(', '))}`)\n }\n\n onExtractTag({\n parserProps: propsWithFileInfo,\n attrs,\n node,\n lineNumbers,\n filePath,\n attemptEval,\n jsxPath: traversePath,\n originalNodeName,\n isFlattened: shouldFlatten,\n programPath: programPath!,\n completeProps,\n staticConfig,\n })\n } finally {\n if (debugPropValue) {\n shouldPrintDebug = ogDebug\n }\n }\n },\n })\n\n tm.mark('jsx-done', !!shouldPrintDebug)\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 logger.info(` [\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"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-console */\nimport { basename, relative } from 'path'\n\nimport traverse, { NodePath, TraverseOptions } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport {\n PseudoStyles,\n StaticConfigParsed,\n expandStyles,\n getSplitStyles,\n getStylesAtomic,\n mediaQueryConfig,\n proxyThemeVariables,\n pseudoDescriptors,\n} from '@tamagui/core-node'\nimport type { ViewStyle } from 'react-native'\nimport { createDOMProps } from 'react-native-web-internals'\n\nimport { FAILED_EVAL } from '../constants.js'\nimport type {\n ExtractedAttr,\n ExtractedAttrAttr,\n ExtractedAttrStyle,\n ExtractorOptions,\n ExtractorParseProps,\n TamaguiOptions,\n TamaguiOptionsWithFileInfo,\n Ternary,\n} from '../types.js'\nimport { createEvaluator, createSafeEvaluator } from './createEvaluator.js'\nimport { evaluateAstNode } from './evaluateAstNode.js'\nimport {\n attrStr,\n findComponentName,\n getValidComponent,\n getValidImport,\n isPresent,\n isValidImport,\n objToStr,\n} from './extractHelpers.js'\nimport { findTopmostFunction } from './findTopmostFunction.js'\nimport { getPrefixLogs } from './getPrefixLogs.js'\nimport { cleanupBeforeExit, getStaticBindingsForScope } from './getStaticBindingsForScope.js'\nimport { literalToAst } from './literalToAst.js'\nimport { TamaguiProjectInfo, loadTamagui, loadTamaguiSync } from './loadTamagui.js'\nimport { logLines } from './logLines.js'\nimport { normalizeTernaries } from './normalizeTernaries.js'\nimport { removeUnusedHooks } from './removeUnusedHooks.js'\nimport { timer } from './timer.js'\nimport { validHTMLAttributes } from './validHTMLAttributes.js'\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 ...(process.env.TAMAGUI_TARGET === 'web' && {\n onPress: 'onClick',\n onHoverIn: 'onMouseEnter',\n onHoverOut: 'onMouseLeave',\n onPressIn: 'onMouseDown',\n onPressOut: 'onMouseUp',\n }),\n}\n\nconst validHooks = {\n useMedia: true,\n useTheme: true,\n}\n\nconst isAttr = (x: ExtractedAttr): x is ExtractedAttrAttr => x.type === 'attr'\nconst createTernary = (x: Ternary) => x\n\nexport type Extractor = ReturnType<typeof createExtractor>\n\ntype FileOrPath = NodePath<t.Program> | t.File\n\nlet hasLoggedBaseInfo = false\n\nexport function createExtractor({ logger = console }: ExtractorOptions = { logger: console }) {\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 projectInfo: TamaguiProjectInfo | null = null\n\n // we load tamagui delayed 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\n function loadSync(props: TamaguiOptions) {\n return (projectInfo ||= loadTamaguiSync({\n config: props.config || 'tamagui.config.ts',\n components: props.components || ['tamagui'],\n }))\n }\n\n async function load(props: TamaguiOptions) {\n return (projectInfo ||= await loadTamagui({\n config: props.config || 'tamagui.config.ts',\n components: props.components || ['tamagui'],\n }))\n }\n\n return {\n options: {\n logger,\n },\n cleanupBeforeExit,\n loadTamagui: load,\n loadTamaguiSync: loadSync,\n getTamagui() {\n return projectInfo?.tamaguiConfig\n },\n parseSync: (f: FileOrPath, props: ExtractorParseProps) => {\n const projectInfo = loadSync(props)\n return parseWithConfig(projectInfo, f, props)\n },\n parse: async (f: FileOrPath, props: ExtractorParseProps) => {\n const projectInfo = await load(props)\n return parseWithConfig(projectInfo, f, props)\n },\n }\n\n function parseWithConfig(\n { components, tamaguiConfig }: TamaguiProjectInfo,\n fileOrPath: FileOrPath,\n options: ExtractorParseProps\n ) {\n const {\n config = 'tamagui.config.ts',\n importsWhitelist = ['constants.js'],\n evaluateVars = true,\n sourcePath = '',\n onExtractTag,\n onStyleRule,\n getFlattenedNode,\n disable,\n disableExtraction,\n disableExtractInlineMedia,\n disableExtractVariables,\n disableDebugAttr,\n disableExtractFoundComponents,\n includeExtensions = ['.tsx', '.jsx', '.js'],\n extractStyledDefinitions = false,\n prefixLogs,\n excludeProps,\n target,\n ...restProps\n } = options\n\n let shouldPrintDebug = options.shouldPrintDebug || false\n\n if (disable === true || (Array.isArray(disable) && disable.includes(sourcePath))) {\n return null\n }\n if (sourcePath === '') {\n throw new Error(`Must provide a source file name`)\n }\n if (!components) {\n throw new Error(`Must provide components`)\n }\n if (includeExtensions && !includeExtensions.some((ext) => sourcePath.endsWith(ext))) {\n if (shouldPrintDebug) {\n logger.info(\n `Ignoring file due to includeExtensions: ${sourcePath}, includeExtensions: ${includeExtensions.join(\n ', '\n )}`\n )\n }\n return null\n }\n\n function isValidStyleKey(name: string, staticConfig: StaticConfigParsed) {\n if (!projectInfo) {\n throw new Error(`Tamagui extractor not loaded yet`)\n }\n if (target === 'native' && name[0] === '$' && mediaQueryConfig[name.slice(1)]) {\n return false\n }\n return !!(\n !!staticConfig.validStyles?.[name] ||\n !!pseudoDescriptors[name] ||\n // dont disable variants or else you lose many things flattening\n staticConfig.variants?.[name] ||\n projectInfo?.tamaguiConfig.shorthands[name] ||\n (name[0] === '$' ? !!mediaQueryConfig[name.slice(1)] : false)\n )\n }\n\n /**\n * Step 1: Determine if importing any statically extractable components\n */\n\n const isTargetingHTML = target === 'html'\n const ogDebug = shouldPrintDebug\n const tm = timer()\n const propsWithFileInfo: TamaguiOptionsWithFileInfo = {\n ...options,\n sourcePath,\n allLoadedComponents: [...components],\n }\n\n if (!hasLoggedBaseInfo) {\n hasLoggedBaseInfo = true\n if (shouldPrintDebug) {\n logger.info(\n [\n 'loaded components:',\n propsWithFileInfo.allLoadedComponents\n .map((comp) => Object.keys(comp.nameToInfo).join(', '))\n .join(', '),\n ].join(' ')\n )\n }\n if (process.env.DEBUG?.startsWith('tamagui')) {\n const next = [...propsWithFileInfo.allLoadedComponents].map((info) => {\n const nameToInfo = { ...info.nameToInfo }\n for (const key in nameToInfo) {\n delete nameToInfo[key].staticConfig.validStyles\n }\n return { ...info, nameToInfo }\n })\n logger.info(['loaded:', JSON.stringify(next, null, 2)].join('\\n'))\n }\n }\n\n tm.mark('load-tamagui', !!shouldPrintDebug)\n\n const firstThemeName = Object.keys(tamaguiConfig.themes)[0]\n const firstTheme = tamaguiConfig.themes[firstThemeName]\n\n if (!firstTheme || typeof firstTheme !== 'object') {\n console.error(`Missing theme, an error occurred when importing your config`)\n console.log(`Got config:`, tamaguiConfig)\n console.log(`Looking for theme:`, firstThemeName)\n process.exit(0)\n }\n\n const proxiedTheme = proxyThemeVariables(firstTheme)\n type AccessListener = (key: string) => void\n const themeAccessListeners = new Set<AccessListener>()\n const defaultTheme = new Proxy(proxiedTheme, {\n get(target, key) {\n if (Reflect.has(target, key)) {\n themeAccessListeners.forEach((cb) => cb(String(key)))\n }\n return Reflect.get(target, key)\n },\n })\n\n // @ts-ignore\n const body = fileOrPath.type === 'Program' ? fileOrPath.get('body') : fileOrPath.program.body\n\n if (Object.keys(components).length === 0) {\n console.warn(`Warning: Tamagui didn't find any valid components (DEBUG=tamagui for more)`)\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, Object.keys(components), components)\n }\n }\n\n if (shouldPrintDebug === 'verbose') {\n logger.info(\n `allLoadedComponent modules ${propsWithFileInfo.allLoadedComponents\n .map((k) => k.moduleName)\n .join(', ')}`\n )\n }\n\n let doesUseValidImport = false\n let hasImportedTheme = false\n\n const importDeclarations: t.ImportDeclaration[] = []\n\n for (const bodyPath of body) {\n if (bodyPath.type !== 'ImportDeclaration') continue\n const node = ('node' in bodyPath ? bodyPath.node : bodyPath) as t.ImportDeclaration\n const moduleName = node.source.value\n\n // if importing valid module\n const valid = isValidImport(propsWithFileInfo, moduleName)\n\n if (valid) {\n importDeclarations.push(node)\n }\n\n if (extractStyledDefinitions) {\n if (valid) {\n if (node.specifiers.some((specifier) => specifier.local.name === 'styled')) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (valid) {\n const names = node.specifiers.map((specifier) => specifier.local.name)\n const isValidComponent = names.some((name) =>\n Boolean(isValidImport(propsWithFileInfo, moduleName, name) || validHooks[name])\n )\n if (shouldPrintDebug === 'verbose') {\n logger.info(\n `import ${names.join(', ')} from ${moduleName} isValidComponent ${isValidComponent}`\n )\n }\n if (isValidComponent) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (shouldPrintDebug) {\n logger.info(`file: ${sourcePath} ${JSON.stringify({ doesUseValidImport, hasImportedTheme })}`)\n }\n\n if (!doesUseValidImport) {\n return null\n }\n\n function getValidImportedComponent(componentName: string) {\n const importDeclaration = importDeclarations.find((dec) =>\n dec.specifiers.some((spec) => spec.local.name === componentName)\n )\n if (!importDeclaration) {\n return null\n }\n return getValidImport(propsWithFileInfo, importDeclaration.source.value, componentName)\n }\n\n tm.mark('import-check', !!shouldPrintDebug)\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: TraverseOptions<any>) => {\n return fileOrPath.type === 'File' ? traverse(fileOrPath, a) : fileOrPath.traverse(a)\n }\n\n const shouldDisableExtraction =\n disableExtraction === true ||\n (Array.isArray(disableExtraction) && disableExtraction.includes(sourcePath))\n\n /**\n * Step 2: Statically extract from JSX < /> nodes\n */\n let programPath: NodePath<t.Program> | null = null\n\n const res = {\n styled: 0,\n flattened: 0,\n optimized: 0,\n modified: 0,\n found: 0,\n }\n\n callTraverse({\n // @ts-ignore\n Program: {\n enter(path) {\n programPath = path\n },\n },\n\n // styled() calls\n CallExpression(path) {\n if (disable || shouldDisableExtraction || extractStyledDefinitions === false) {\n return\n }\n\n if (!t.isIdentifier(path.node.callee) || path.node.callee.name !== 'styled') {\n return\n }\n\n const name =\n t.isVariableDeclarator(path.parent) && t.isIdentifier(path.parent.id)\n ? path.parent.id.name\n : 'unknown'\n\n const definition = path.node.arguments[1]\n\n if (!name || !definition || !t.isObjectExpression(definition)) {\n return\n }\n\n let Component = getValidImportedComponent(name)\n\n if (!Component) {\n if (disableExtractFoundComponents === true) {\n return\n }\n if (\n Array.isArray(disableExtractFoundComponents) &&\n disableExtractFoundComponents.includes(name)\n ) {\n return\n }\n\n try {\n if (shouldPrintDebug) {\n logger.info(`Unknown component ${name}, attempting dynamic load: ${sourcePath}`)\n }\n\n const out = loadTamaguiSync({\n forceExports: true,\n components: [sourcePath],\n })\n\n if (!out?.components) {\n if (shouldPrintDebug) {\n logger.info(`Couldn't load, got ${out}`)\n }\n return\n }\n\n propsWithFileInfo.allLoadedComponents = [\n ...propsWithFileInfo.allLoadedComponents,\n ...out.components,\n ]\n\n Component = out.components.flatMap((x) => x.nameToInfo[name] ?? [])[0]\n\n if (shouldPrintDebug === 'verbose') {\n logger.info([`Tamagui Loaded`, JSON.stringify(out.components), !!Component].join(' '))\n }\n } catch (err: any) {\n if (shouldPrintDebug) {\n logger.info(\n `${getPrefixLogs(\n options\n )} skip optimize styled(${name}), unable to pre-process (DEBUG=tamagui for more)`\n )\n }\n if (process.env.DEBUG === 'tamagui') {\n logger.info(\n ` Disable this with \"disableExtractFoundComponents\" in your build-time configuration. \\n\\n ${err.message} ${err.stack}`\n )\n }\n }\n }\n\n if (!Component) {\n return\n }\n\n const componentSkipProps = new Set([\n ...(Component.staticConfig.inlineWhenUnflattened || []),\n ...(Component.staticConfig.inlineProps || []),\n ...(Component.staticConfig.deoptProps || []),\n // for now skip variants, will return to them\n 'variants',\n 'defaultVariants',\n // skip fontFamily its basically a \"variant\", important for theme use to be value always\n 'fontFamily',\n 'name',\n ])\n\n // for now dont parse variants, spreads, etc\n const skipped: (t.ObjectProperty | t.SpreadElement | t.ObjectMethod)[] = []\n const styles = {}\n\n // Generate scope object at this level\n const staticNamespace = getStaticBindingsForScope(\n path.scope,\n importsWhitelist,\n sourcePath,\n bindingCache,\n shouldPrintDebug\n )\n\n const attemptEval = !evaluateVars\n ? evaluateAstNode\n : createEvaluator({\n props: propsWithFileInfo,\n staticNamespace,\n sourcePath,\n shouldPrintDebug,\n })\n const attemptEvalSafe = createSafeEvaluator(attemptEval)\n\n for (const property of definition.properties) {\n if (\n !t.isObjectProperty(property) ||\n !t.isIdentifier(property.key) ||\n !isValidStyleKey(property.key.name, Component.staticConfig) ||\n // skip variants\n Component.staticConfig.variants?.[property.key.name] ||\n componentSkipProps.has(property.key.name)\n ) {\n skipped.push(property)\n continue\n }\n // attempt eval\n const out = attemptEvalSafe(property.value)\n if (out === FAILED_EVAL) {\n skipped.push(property)\n } else {\n styles[property.key.name] = out\n }\n }\n\n const out = getSplitStyles(styles, Component.staticConfig, defaultTheme, {\n focus: false,\n hover: false,\n unmounted: true,\n press: false,\n pressIn: false,\n resolveVariablesAs: 'variable',\n noClassNames: false,\n })\n\n const classNames = {\n ...out.classNames,\n }\n\n // // add in the style object as classnames\n // const atomics = getStylesAtomic(out.style)\n // for (const atomic of atomics) {\n // out.rulesToInsert = out.rulesToInsert || []\n // out.rulesToInsert.push(atomic)\n // classNames[atomic.property] = atomic.identifier\n // }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n logger.info([`Extracted styled(${name})\\n`, JSON.stringify(styles, null, 2), '\\n rulesToInsert:', out.rulesToInsert.flatMap((rule) => rule.rules).join('\\n')].join(' '))\n }\n\n // leave only un-parsed props...\n definition.properties = skipped\n\n // ... + key: className\n for (const cn in classNames) {\n if (componentSkipProps.has(cn)) {\n continue\n }\n const val = classNames[cn]\n definition.properties.push(t.objectProperty(t.stringLiteral(cn), t.stringLiteral(val)))\n }\n\n if (out.rulesToInsert) {\n for (const { identifier, rules } of out.rulesToInsert) {\n onStyleRule?.(identifier, rules)\n }\n }\n\n res.styled++\n\n if (shouldPrintDebug) {\n logger.info(`Extracted styled(${name})`)\n }\n },\n\n JSXElement(traversePath) {\n if (shouldDisableExtraction) {\n return\n }\n\n tm.mark('jsx-element', !!shouldPrintDebug)\n\n const node = traversePath.node.openingElement\n const ogAttributes = node.attributes.map((attr) => ({ ...attr }))\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 let modulePath = ''\n\n if (binding) {\n if (!t.isImportDeclaration(binding.path.parent)) {\n if (shouldPrintDebug) {\n logger.info(` - Binding not import declaration, skip`)\n }\n return\n }\n modulePath = binding.path.parent.source.value\n if (!isValidImport(propsWithFileInfo, modulePath, binding.identifier.name)) {\n if (shouldPrintDebug) {\n logger.info(` - Binding not internal import or from components ${modulePath}`)\n }\n return\n }\n }\n\n const component = getValidComponent(propsWithFileInfo, modulePath, node.name.name)\n if (!component || !component.staticConfig) {\n if (shouldPrintDebug) {\n logger.info(` - No Tamagui conf on this: ${node.name.name}`)\n }\n return\n }\n\n const originalNodeName = node.name.name\n\n // found a valid tag\n res.found++\n\n const filePath = `./${relative(process.cwd(), sourcePath)}`\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 const codePosition = `${filePath}:${lineNumbers}`\n\n // debug just one\n const debugPropValue = node.attributes\n .filter(\n (n) => t.isJSXAttribute(n) && t.isJSXIdentifier(n.name) && n.name.name === 'debug'\n )\n // @ts-ignore\n .map((n: t.JSXAttribute) => {\n if (n.value === null) return true\n if (t.isStringLiteral(n.value)) return n.value.value as 'verbose'\n return false\n })[0] as boolean | 'verbose' | undefined\n\n if (debugPropValue) {\n shouldPrintDebug = debugPropValue\n }\n\n if (shouldPrintDebug) {\n logger.info('\\n')\n logger.info(\n `\\x1b[33m%s\\x1b[0m ` + `${componentName} | ${codePosition} -------------------`\n )\n // prettier-ignore\n logger.info(['\\x1b[1m', '\\x1b[32m', `<${originalNodeName} />`, disableDebugAttr ? '' : '\uD83D\uDC1B'].join(' '))\n }\n\n // add data-* debug attributes\n if (shouldAddDebugProp && !disableDebugAttr) {\n res.modified++\n node.attributes.unshift(\n t.jsxAttribute(t.jsxIdentifier('data-is'), t.stringLiteral(node.name.name))\n )\n if (componentName) {\n node.attributes.unshift(\n t.jsxAttribute(t.jsxIdentifier('data-in'), t.stringLiteral(componentName))\n )\n }\n\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier('data-at'),\n t.stringLiteral(`${basename(filePath)}:${lineNumbers}`)\n )\n )\n }\n\n // disable as it gets messy\n // const shouldLog = !hasLogged\n // if (shouldLog) {\n // logger.info(` 1\uFE0F\u20E3 Inline optimized 2\uFE0F\u20E3 Inline flattened 3\uFE0F\u20E3 styled() extracted`)\n // const prefix = ' |'\n // // prettier-ignore\n // logger.info([prefixLogs || prefix, ' total \u00B7 1\uFE0F\u20E3 \u00B7 2\uFE0F\u20E3 \u00B7 3\uFE0F\u20E3'].join(' '))\n // hasLogged = true\n // }\n\n if (disableExtraction) {\n return\n }\n\n try {\n const { staticConfig } = component\n const variants = staticConfig.variants || {}\n const isTextView = staticConfig.isText || false\n const validStyles = staticConfig?.validStyles ?? {}\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 ...(restProps.inlineProps || []),\n ...(staticConfig.inlineProps || []),\n ])\n\n const deoptProps = new Set([\n // always de-opt animation\n 'animation',\n ...(restProps.deoptProps || []),\n ...(staticConfig.deoptProps || []),\n ])\n\n const inlineWhenUnflattened = new Set([...(staticConfig.inlineWhenUnflattened || [])])\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 props: propsWithFileInfo,\n staticNamespace,\n sourcePath,\n traversePath,\n shouldPrintDebug,\n })\n const attemptEvalSafe = createSafeEvaluator(attemptEval)\n\n if (shouldPrintDebug) {\n logger.info(` 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 logger.info([' couldnt parse spread', e.message].join(' '))\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 logger.info([' non object or null arg', arg].join(' '))\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 logger.error(['Unhandled null prop', k, value, arg].join(' '))\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 logger.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)\n\n // set flattened\n node.attributes = flattenedAttrs\n\n let attrs: ExtractedAttr[] = []\n let shouldDeopt = false\n const inlined = new Map<string, any>()\n const variantValues = new Map<string, any>()\n let hasSetOptimized = false\n const inlineWhenUnflattenedOGVals = {}\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)\n if (!res) {\n path.remove()\n }\n return res\n } catch (err: any) {\n if (shouldPrintDebug) {\n logger.info(\n [\n 'Recoverable error extracting attribute',\n err.message,\n shouldPrintDebug === 'verbose' ? err.stack : '',\n ].join(' ')\n )\n if (shouldPrintDebug === 'verbose') {\n logger.info(`node ${path.node?.type}`)\n }\n }\n // dont flatten if we run into error\n inlined.set(`${Math.random()}`, 'spread')\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 logger.info(\n [' - attrs (before):\\n', logLines(attrs.map(attrStr).join(', '))].join(' ')\n )\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 && !isStaticObject(side))) {\n if (shouldPrintDebug) {\n logger.info(`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 logger.info(' ! 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 logger.info([' excluding prop', name].join(' '))\n }\n return null\n }\n\n if (inlineProps.has(name)) {\n inlined.set(name, name)\n if (shouldPrintDebug) {\n logger.info([' ! inlining, inline prop', name].join(' '))\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 logger.info([' ! inlining, deopted prop', name].join(' '))\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 const shortname = name.slice(1)\n if (mediaQueryConfig[shortname]) {\n if (target === 'native') {\n shouldDeopt = true\n }\n\n // allow disabling this extraction\n if (disableExtractInlineMedia) {\n return attr\n }\n\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 logger.info([' ! inlining, ref', name].join(' '))\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 === true) {\n if (value) {\n if (value.type === 'StringLiteral' && value.value[0] === '$') {\n if (shouldPrintDebug) {\n logger.info(\n [` ! inlining, native disable extract: ${name} =`, value.value].join(' ')\n )\n }\n inlined.set(name, true)\n return attr\n }\n }\n }\n\n if (name === 'theme') {\n inlined.set('theme', attr.value)\n return attr\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 (!variants[name] && !isValidStyleKey(name, staticConfig)) {\n let keys = [name]\n let out: any = null\n\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 { resolveVariablesAs: 'auto' },\n undefined,\n undefined,\n shouldPrintDebug\n )\n\n if (out) {\n if (!Array.isArray(out)) {\n logger.warn(`Error expected array but got`, out)\n couldntParse = true\n shouldDeopt = true\n } else {\n out = Object.fromEntries(out)\n keys = Object.keys(out)\n }\n }\n if (out) {\n if (isTargetingHTML) {\n // translate to DOM-compat\n out = createDOMProps(isTextView ? 'span' : 'div', out)\n // remove className - we dont use rnw styling\n delete out.className\n }\n\n keys = Object.keys(out)\n }\n\n let didInline = false\n const attributes = keys.map((key) => {\n const val = out[key]\n if (isValidStyleKey(key, staticConfig)) {\n return {\n type: 'style',\n value: { [key]: styleValue },\n name: key,\n attr: path.node,\n } as const\n }\n if (\n validHTMLAttributes[key] ||\n key.startsWith('aria-') ||\n key.startsWith('data-') ||\n // this is debug stuff added by vite / new jsx transform\n key === '__source' ||\n key === '__self'\n ) {\n return attr\n }\n if (shouldPrintDebug) {\n logger.info(' ! 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 logger.info(` 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 (inlineWhenUnflattened.has(name)) {\n // preserve original value for restoration\n inlineWhenUnflattenedOGVals[name] = { styleValue, attr }\n }\n\n if (isValidStyleKey(name, staticConfig)) {\n if (shouldPrintDebug) {\n logger.info(` 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 if (variants[name]) {\n variantValues.set(name, styleValue)\n }\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 logger.info(` 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 logger.info(` 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 logger.info(` 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 === 'verbose') {\n logger.info(` static conditional ${name} ${value}`)\n }\n return { type: 'ternary', value: staticConditional }\n }\n\n const staticLogical = getStaticLogical(value)\n if (staticLogical) {\n if (shouldPrintDebug === 'verbose') {\n logger.info(` 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 logger.info(` ! 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(t.binaryExpression(operator, staticExpr, cond.consequent))\n if (shouldPrintDebug) {\n logger.info([' binaryConditional', cond.test, cons, alt].join(' '))\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 const aVal = attemptEval(value.alternate)\n const cVal = attemptEval(value.consequent)\n if (shouldPrintDebug) {\n const type = value.test.type\n logger.info([' static ternary', type, cVal, aVal].join(' '))\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 logger.info([' cant eval ternary', err.message].join(' '))\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 logger.info([' staticLogical', value.left, name, val].join(' '))\n }\n return {\n test: value.left,\n remove,\n consequent: { [name]: val },\n alternate: null,\n }\n } catch (err) {\n if (shouldPrintDebug) {\n logger.info([' cant static eval logical', err].join(' '))\n }\n }\n }\n }\n return null\n }\n } // END function evaluateAttribute\n\n function isStaticObject(obj: t.Node): obj is t.ObjectExpression {\n return (\n t.isObjectExpression(obj) &&\n obj.properties.every((prop) => {\n if (!t.isObjectProperty(prop)) {\n logger.info(['not object prop', prop].join(' '))\n return false\n }\n const propName = prop.key['name']\n if (!isValidStyleKey(propName, staticConfig) && propName !== 'tag') {\n if (shouldPrintDebug) {\n logger.info([' not a valid style prop!', propName].join(' '))\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 (!isStaticObject(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 logger.info(['\u26A0\uFE0F no ternaries?', property].join(' '))\n }\n } else {\n logger.info(['\u26A0\uFE0F not expression', property].join(' '))\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 if (couldntParse || shouldDeopt) {\n if (shouldPrintDebug) {\n logger.info([` avoid optimizing:`, { couldntParse, shouldDeopt }].join(' '))\n }\n node.attributes = ogAttributes\n return\n }\n\n // now update to new values\n node.attributes = attrs.filter(isAttr).map((x) => x.value)\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 logger.info(\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\n // on native we can't flatten when theme prop is set\n if (target !== 'native') {\n inlined.delete('theme')\n }\n\n for (const [key] of [...inlined]) {\n const isStaticObjectVariant = staticConfig.variants?.[key] && variantValues.has(key)\n if (INLINE_EXTRACTABLE[key] || isStaticObjectVariant) {\n inlined.delete(key)\n }\n }\n\n const canFlattenProps = inlined.size === 0\n\n let shouldFlatten = Boolean(\n flatNode &&\n !shouldDeopt &&\n canFlattenProps &&\n !hasSpread &&\n staticConfig.neverFlatten !== true &&\n (staticConfig.neverFlatten === 'jsx' ? hasOnlyStringChildren : true)\n )\n\n const shouldWrapTheme = shouldFlatten && themeVal\n const usedThemeKeys = new Set<string>()\n\n if (disableExtractVariables) {\n // if it accesses any theme values during evaluation\n themeAccessListeners.add((key) => {\n shouldFlatten = false\n usedThemeKeys.add(key)\n if (shouldPrintDebug === 'verbose') {\n logger.info([' ! accessing theme key, avoid flatten', key].join(' '))\n }\n })\n }\n\n if (shouldPrintDebug) {\n try {\n // prettier-ignore\n logger.info([' flatten?', objToStr({ hasSpread, shouldDeopt, shouldFlatten, canFlattenProps, shouldWrapTheme, hasOnlyStringChildren }), 'inlined', [...inlined]].join(' '))\n } catch {\n // ok\n }\n }\n\n // wrap theme around children on flatten\n // TODO move this to bottom and re-check shouldFlatten\n // account for shouldFlatten could change w the above block \"if (disableExtractVariables)\"\n if (shouldFlatten && shouldWrapTheme) {\n if (!programPath) {\n console.warn(\n `No program path found, avoiding importing flattening / importing theme in ${sourcePath}`\n )\n } else {\n if (shouldPrintDebug) {\n logger.info([' - wrapping theme', themeVal].join(' '))\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'), themeVal.value),\n ]),\n t.jsxClosingElement(t.jsxIdentifier('_TamaguiTheme')),\n [traversePath.node]\n )\n )\n }\n }\n\n // only if we flatten, ensure the default styles are there\n if (shouldFlatten) {\n const defaultStyleAttrs = Object.keys(staticConfig.defaultProps).flatMap((key) => {\n if (!isValidStyleKey(key, staticConfig)) {\n return []\n }\n const value = staticConfig.defaultProps[key]\n const name = tamaguiConfig.shorthands[key] || key\n if (value === undefined) {\n logger.warn(`\u26A0\uFE0F Error evaluating default style for component, prop ${key} ${value}`)\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 || !shouldFlatten) {\n if (shouldPrintDebug) {\n logger.info(`Deopting`)\n }\n node.attributes = ogAttributes\n return\n }\n\n if (shouldPrintDebug) {\n logger.info(\n [' - attrs (flattened): \\n', logLines(attrs.map(attrStr).join(', '))].join(' ')\n )\n }\n\n const state = {\n noClassNames: false,\n focus: false,\n hover: false,\n unmounted: false, // TODO match logic in createComponent\n press: false,\n pressIn: false,\n }\n\n // evaluates all static attributes into a simple object\n let foundStaticProps = {}\n for (const key in attrs) {\n const cur = attrs[key]\n if (cur.type === 'style') {\n // remove variants because they are processed later, and can lead to invalid values here\n // see <Spacer flex /> where flex looks like a valid style, but is a variant\n foundStaticProps = {\n ...foundStaticProps,\n ...expandStylesWithoutVariants(cur.value),\n }\n continue\n }\n if (cur.type === 'attr') {\n if (t.isJSXSpreadAttribute(cur.value)) {\n continue\n }\n if (!t.isJSXIdentifier(cur.value.name)) {\n continue\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 foundStaticProps = {\n ...foundStaticProps,\n [key]: value,\n }\n }\n }\n }\n\n // must preserve exact order\n const completeProps = {}\n for (const key in staticConfig.defaultProps) {\n if (!(key in foundStaticProps)) {\n completeProps[key] = staticConfig.defaultProps[key]\n }\n }\n for (const key in foundStaticProps) {\n completeProps[key] = foundStaticProps[key]\n }\n\n // expand shorthands, de-opt variables\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (!cur) return acc\n if (cur.type === 'attr' && !t.isJSXSpreadAttribute(cur.value)) {\n if (shouldFlatten) {\n const name = cur.value.name.name\n if (typeof name === 'string') {\n if (name === 'tag') {\n // remove tag=\"\"\n return acc\n }\n\n // if flattening, expand variants\n if (variants[name] && variantValues.has(name)) {\n let out = Object.fromEntries(\n staticConfig.propMapper(\n name,\n variantValues.get(name),\n defaultTheme,\n completeProps,\n { ...state, resolveVariablesAs: 'auto' },\n undefined,\n undefined,\n shouldPrintDebug\n ) || []\n )\n if (out && isTargetingHTML) {\n const cn = out.className\n // translate to DOM-compat\n out = createDOMProps(isTextView ? 'span' : 'div', out)\n // remove rnw className use ours\n out.className = cn\n }\n if (shouldPrintDebug) {\n logger.info([' - expanded variant', name, out].join(' '))\n }\n for (const key in out) {\n const value = out[key]\n if (isValidStyleKey(key, staticConfig)) {\n acc.push({\n type: 'style',\n value: { [key]: value },\n name: key,\n attr: cur.value,\n } as const)\n } else {\n acc.push({\n type: 'attr',\n value: t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(\n typeof value === 'string'\n ? t.stringLiteral(value)\n : literalToAst(value)\n )\n ),\n })\n }\n }\n }\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 // 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] === '$' && (usedThemeKeys.has(key) || usedThemeKeys.has(fullKey))) {\n if (shouldPrintDebug) {\n logger.info([` keeping variable inline: ${key} =`, value].join(' '))\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)\n if (shouldPrintDebug) {\n logger.info(\n [' - attrs (expanded): \\n', logLines(attrs.map(attrStr).join(', '))].join(' ')\n )\n }\n\n // merge styles, leave undefined values\n let prev: ExtractedAttr | null = null\n\n function splitVariants(style: any) {\n const variants = {}\n const styles = {}\n for (const key in style) {\n if (staticConfig.variants?.[key]) {\n variants[key] = style[key]\n } else {\n styles[key] = style[key]\n }\n }\n return {\n variants,\n styles,\n }\n }\n\n function expandStylesWithoutVariants(style: any) {\n const { variants, styles } = splitVariants(style)\n return {\n ...expandStyles(styles),\n ...variants,\n }\n }\n\n function mergeStyles(prev: ViewStyle & PseudoStyles, nextIn: ViewStyle & PseudoStyles) {\n const next = expandStylesWithoutVariants(nextIn)\n for (const key in next) {\n // merge pseudos\n if (pseudoDescriptors[key]) {\n prev[key] = prev[key] || {}\n if (shouldPrintDebug) {\n if (!next[key] || !prev[key]) {\n logger.info(['warn: missing', key, prev, next].join(' '))\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 if non-style\n !validStyles[key] &&\n !pseudoDescriptors[key] &&\n !key.startsWith('data-')\n\n if (shouldKeepOriginalAttr) {\n if (shouldPrintDebug) {\n logger.info([' - keeping as non-style', key].join(' '))\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 (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 if (shouldPrintDebug) {\n logger.info(\n [' - attrs (combined \uD83D\uDD00): \\n', logLines(attrs.map(attrStr).join(', '))].join(' ')\n )\n logger.info(\n [' - defaultProps: \\n', logLines(objToStr(staticConfig.defaultProps))].join(' ')\n )\n // prettier-ignore\n logger.info([' - foundStaticProps: \\n', logLines(objToStr(foundStaticProps))].join(' '))\n logger.info([' - completeProps: \\n', logLines(objToStr(completeProps))].join(' '))\n }\n\n // post process\n const getStyles = (props: Object | null, debugName = '') => {\n if (!props || !Object.keys(props).length) {\n if (shouldPrintDebug) logger.info([' getStyles() no props'].join(' '))\n return {}\n }\n if (excludeProps && !!excludeProps.size) {\n for (const key in props) {\n if (excludeProps.has(key)) {\n if (shouldPrintDebug) logger.info([' delete excluded', key].join(' '))\n delete props[key]\n }\n }\n }\n try {\n const out = getSplitStyles(\n props,\n staticConfig,\n defaultTheme,\n {\n ...state,\n fallbackProps: completeProps,\n },\n undefined,\n undefined,\n undefined,\n debugPropValue\n )\n\n const outStyle = {\n ...out.style,\n ...out.pseudos,\n }\n // omitInvalidStyles(outStyle)\n // if (shouldPrintDebug) {\n // // prettier-ignore\n // logger.info(` getStyles ${debugName} (props):\\n`, logLines(objToStr(props)))\n // // prettier-ignore\n // logger.info(` getStyles ${debugName} (out.viewProps):\\n`, logLines(objToStr(out.viewProps)))\n // // prettier-ignore\n // logger.info(` getStyles ${debugName} (out.style):\\n`, logLines(objToStr(outStyle || {}), true))\n // }\n return outStyle\n } catch (err: any) {\n logger.info(['error', err.message, err.stack].join(' '))\n return {}\n }\n }\n\n // used to ensure we pass the entire prop bundle to getStyles\n const completeStyles = getStyles(completeProps, 'completeStyles')\n\n if (!completeStyles) {\n throw new Error(`Impossible, no styles`)\n }\n\n const isNativeNotFlat = !shouldFlatten && target === 'native'\n if (isNativeNotFlat) {\n if (shouldPrintDebug) {\n logger.info(`Disabled flattening except for simple cases on native for now`)\n }\n node.attributes = ogAttributes\n return null\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 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) logger.info([' => tern ', attrStr(attr)].join(' '))\n continue\n }\n case 'style': {\n // expand variants and such\n const styles = getStyles(attr.value, 'style')\n if (styles) {\n attr.value = styles\n }\n // prettier-ignore\n if (shouldPrintDebug) logger.info([' * styles (in)', logLines(objToStr(attr.value))].join(' '))\n // prettier-ignore\n if (shouldPrintDebug) logger.info([' * styles (out)', logLines(objToStr(styles))].join(' '))\n continue\n }\n }\n } catch (err) {\n // any error de-opt\n getStyleError = err\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n logger.info([' - attrs (ternaries/combined):\\n', logLines(attrs.map(attrStr).join(', '))].join(' '))\n }\n\n tm.mark('jsx-element-styles', !!shouldPrintDebug)\n\n if (getStyleError) {\n logger.info([' \u26A0\uFE0F postprocessing error, deopt', getStyleError].join(' '))\n node.attributes = ogAttributes\n return null\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) {\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 logger.info([` >> delete existing ${key}`].join(' '))\n }\n delete attr.value[key]\n } else {\n existingStyleKeys.add(key)\n }\n }\n }\n }\n\n // inlineWhenUnflattened\n if (!shouldFlatten) {\n if (inlineWhenUnflattened.size) {\n for (const [index, attr] of attrs.entries()) {\n if (attr.type === 'style') {\n for (const key in attr.value) {\n if (!inlineWhenUnflattened.has(key)) continue\n const val = inlineWhenUnflattenedOGVals[key]\n if (val) {\n // delete the style\n delete attr.value[key]\n\n // and insert it before\n attrs.splice(index - 1, 0, val.attr)\n } else {\n // just delete it, it was added during expansion but should be left inline\n delete attr.value[key]\n }\n }\n }\n }\n }\n }\n\n if (shouldFlatten) {\n // DO FLATTEN\n if (shouldPrintDebug) {\n logger.info([' [\u2705] flattening', originalNodeName, flatNode].join(' '))\n }\n // @ts-ignore\n node.name.name = flatNode\n res.flattened++\n if (closingElement) {\n // @ts-ignore\n closingElement.name.name = flatNode\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n logger.info([` \u274A\u274A inline props (${inlined.size}):`, shouldDeopt ? ' deopted' : '', hasSpread ? ' has spread' : '', staticConfig.neverFlatten ? 'neverFlatten' : ''].join(' '))\n logger.info(` - attrs (end):\\n ${logLines(attrs.map(attrStr).join(', '))}`)\n }\n\n onExtractTag({\n parserProps: propsWithFileInfo,\n attrs,\n node,\n lineNumbers,\n filePath,\n attemptEval,\n jsxPath: traversePath,\n originalNodeName,\n isFlattened: shouldFlatten,\n programPath: programPath!,\n completeProps,\n staticConfig,\n })\n } finally {\n if (debugPropValue) {\n shouldPrintDebug = ogDebug\n }\n }\n },\n })\n\n tm.mark('jsx-done', !!shouldPrintDebug)\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 logger.info(` [\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"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["projectInfo", "_a", "target", "traverse", "out", "evaluateAttribute", "isStaticObject", "createTernariesFromObjectProperties", "ternaries", "value", "splitVariants", "variants", "expandStylesWithoutVariants", "mergeStyles", "prev", "res", "key"]
|
|
7
7
|
}
|
|
@@ -140,6 +140,8 @@ function getValidComponent(props, moduleName, componentName) {
|
|
|
140
140
|
return false;
|
|
141
141
|
}
|
|
142
142
|
for (const loaded of props.allLoadedComponents) {
|
|
143
|
+
if (!loaded)
|
|
144
|
+
continue;
|
|
143
145
|
const isInModule = moduleName === "*" || moduleName.startsWith(loaded.moduleName);
|
|
144
146
|
const foundComponent = loaded.nameToInfo[componentName];
|
|
145
147
|
if (isInModule && foundComponent) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extractor/extractHelpers.ts"],
|
|
4
|
-
"sourcesContent": ["import { basename, relative } from 'path'\n\nimport generate from '@babel/generator'\nimport type { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport findRoot from 'find-root'\n\nimport { memoize } from '../helpers/memoize.js'\nimport type { ExtractedAttr, TamaguiOptionsWithFileInfo, Ternary } from '../types.js'\n\n// import { astToLiteral } from './literalToAst'\n\nexport function isPresent<T extends Object>(input: null | void | undefined | T): input is T {\n return input != null\n}\n\nexport function isSimpleSpread(node: t.JSXSpreadAttribute) {\n return t.isIdentifier(node.argument) || t.isMemberExpression(node.argument)\n}\n\nexport const attrStr = (attr?: ExtractedAttr) => {\n return !attr\n ? ''\n : attr.type === 'attr'\n ? getNameAttr(attr.value)\n : attr.type === 'ternary'\n ? `...${ternaryStr(attr.value)}`\n : `${attr.type}(${objToStr(attr.value)})`\n}\n\nexport const objToStr = (obj: any, spacer = ', ') => {\n if (!obj) {\n return `${obj}`\n }\n return `{${Object.entries(obj)\n .map(\n ([k, v]) =>\n `${k}:${\n Array.isArray(v)\n ? `[...]`\n : v && typeof v === 'object'\n ? `${objToStr(v, ',')}`\n : JSON.stringify(v)\n }`\n )\n .join(spacer)}}`\n}\n\nconst getNameAttr = (attr: t.JSXAttribute | t.JSXSpreadAttribute) => {\n if (t.isJSXSpreadAttribute(attr)) {\n return `...${attr.argument['name']}`\n }\n return 'name' in attr ? attr.name.name : `unknown-${attr['type']}`\n}\n\nexport const ternaryStr = (x: Ternary) => {\n const conditional = t.isIdentifier(x.test)\n ? x.test.name\n : t.isMemberExpression(x.test)\n ? [x.test.object['name'], x.test.property['name']]\n : generate(x.test as any).code\n return [\n 'ternary(',\n conditional,\n isFilledObj(x.consequent) ? ` ? ${objToStr(x.consequent)}` : ' ? \uD83D\uDEAB',\n isFilledObj(x.alternate) ? ` : ${objToStr(x.alternate)}` : ' : \uD83D\uDEAB',\n ')',\n ]\n .flat()\n .join('')\n}\n\nconst isFilledObj = (obj: any) => obj && Object.keys(obj).length\n\nexport function findComponentName(scope) {\n const componentName = ''\n let cur = scope.path\n while (cur.parentPath && !t.isProgram(cur.parentPath.parent)) {\n cur = cur.parentPath\n }\n let node = cur.parent\n if (t.isExportNamedDeclaration(node)) {\n node = node.declaration\n }\n if (t.isVariableDeclaration(node)) {\n const [dec] = node.declarations\n if (t.isVariableDeclarator(dec) && t.isIdentifier(dec.id)) {\n return dec.id.name\n }\n }\n if (t.isFunctionDeclaration(node)) {\n return node.id?.name\n }\n return componentName\n}\n\nexport function isValidThemeHook(\n props: TamaguiOptionsWithFileInfo,\n jsxPath: NodePath<t.JSXElement>,\n n: t.MemberExpression,\n sourcePath: string\n) {\n if (!t.isIdentifier(n.object) || !t.isIdentifier(n.property)) return false\n const bindings = jsxPath.scope.getAllBindings()\n const binding = bindings[n.object.name]\n if (!binding?.path) return false\n if (!binding.path.isVariableDeclarator()) return false\n const init = binding.path.node.init\n if (!t.isCallExpression(init)) return false\n if (!t.isIdentifier(init.callee)) return false\n // TODO could support renaming useTheme by looking up import first\n if (init.callee.name !== 'useTheme') return false\n const importNode = binding.scope.getBinding('useTheme')?.path.parent\n if (!t.isImportDeclaration(importNode)) return false\n if (!isValidImport(props, sourcePath)) {\n return false\n }\n return true\n}\n\nexport const isInsideComponentPackage = (props: TamaguiOptionsWithFileInfo, moduleName: string) => {\n return getValidComponentsPaths(props).some((path) => {\n return moduleName.startsWith(path)\n })\n}\n\nexport const isComponentPackage = (props: TamaguiOptionsWithFileInfo, srcName: string) => {\n return getValidComponentsPaths(props).some((path) => {\n return srcName.startsWith(path)\n })\n}\n\nexport function getValidComponent(\n props: TamaguiOptionsWithFileInfo,\n moduleName: string,\n componentName: string\n) {\n // must be uppercase of course\n if (componentName[0].toUpperCase() !== componentName[0]) {\n return false\n }\n\n for (const loaded of props.allLoadedComponents) {\n const isInModule = moduleName === '*' || moduleName.startsWith(loaded.moduleName)\n const foundComponent = loaded.nameToInfo[componentName]\n // eslint-disable-next-line no-console\n if (isInModule && foundComponent) {\n return foundComponent\n }\n }\n\n return null\n}\n\nexport const isValidModule = (props: TamaguiOptionsWithFileInfo, moduleName: string) => {\n if (typeof moduleName !== 'string') {\n throw new Error(`No module name`)\n }\n const isLocal = moduleName.startsWith('.')\n return {\n isLocal,\n isValid: isLocal\n ? isInsideComponentPackage(props, moduleName)\n : isComponentPackage(props, moduleName),\n }\n}\n\nexport const getValidImport = (\n props: TamaguiOptionsWithFileInfo,\n moduleName: string,\n componentName?: string\n) => {\n const { isValid, isLocal } = isValidModule(props, moduleName)\n if (!isValid || !componentName) {\n return null\n }\n return getValidComponent(props, isLocal ? '*' : moduleName, componentName) || null\n}\n\nexport const isValidImport = (\n props: TamaguiOptionsWithFileInfo,\n moduleName: string,\n componentName?: string\n) => {\n if (!componentName) {\n return isValidModule(props, moduleName).isValid\n }\n return Boolean(getValidImport(props, moduleName, componentName))\n}\n\nconst getValidComponentPackages = memoize((props: TamaguiOptionsWithFileInfo) => {\n // just always look for `tamagui` and `@tamagui/core`\n return [...new Set(['@tamagui/core', 'tamagui', ...props.components])]\n})\n\nconst getValidComponentsPaths = memoize((props: TamaguiOptionsWithFileInfo) => {\n return getValidComponentPackages(props).map((pkg) => {\n const root = findRoot(pkg)\n return basename(root)\n })\n})\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { basename, relative } from 'path'\n\nimport generate from '@babel/generator'\nimport type { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport findRoot from 'find-root'\n\nimport { memoize } from '../helpers/memoize.js'\nimport type { ExtractedAttr, TamaguiOptionsWithFileInfo, Ternary } from '../types.js'\n\n// import { astToLiteral } from './literalToAst'\n\nexport function isPresent<T extends Object>(input: null | void | undefined | T): input is T {\n return input != null\n}\n\nexport function isSimpleSpread(node: t.JSXSpreadAttribute) {\n return t.isIdentifier(node.argument) || t.isMemberExpression(node.argument)\n}\n\nexport const attrStr = (attr?: ExtractedAttr) => {\n return !attr\n ? ''\n : attr.type === 'attr'\n ? getNameAttr(attr.value)\n : attr.type === 'ternary'\n ? `...${ternaryStr(attr.value)}`\n : `${attr.type}(${objToStr(attr.value)})`\n}\n\nexport const objToStr = (obj: any, spacer = ', ') => {\n if (!obj) {\n return `${obj}`\n }\n return `{${Object.entries(obj)\n .map(\n ([k, v]) =>\n `${k}:${\n Array.isArray(v)\n ? `[...]`\n : v && typeof v === 'object'\n ? `${objToStr(v, ',')}`\n : JSON.stringify(v)\n }`\n )\n .join(spacer)}}`\n}\n\nconst getNameAttr = (attr: t.JSXAttribute | t.JSXSpreadAttribute) => {\n if (t.isJSXSpreadAttribute(attr)) {\n return `...${attr.argument['name']}`\n }\n return 'name' in attr ? attr.name.name : `unknown-${attr['type']}`\n}\n\nexport const ternaryStr = (x: Ternary) => {\n const conditional = t.isIdentifier(x.test)\n ? x.test.name\n : t.isMemberExpression(x.test)\n ? [x.test.object['name'], x.test.property['name']]\n : generate(x.test as any).code\n return [\n 'ternary(',\n conditional,\n isFilledObj(x.consequent) ? ` ? ${objToStr(x.consequent)}` : ' ? \uD83D\uDEAB',\n isFilledObj(x.alternate) ? ` : ${objToStr(x.alternate)}` : ' : \uD83D\uDEAB',\n ')',\n ]\n .flat()\n .join('')\n}\n\nconst isFilledObj = (obj: any) => obj && Object.keys(obj).length\n\nexport function findComponentName(scope) {\n const componentName = ''\n let cur = scope.path\n while (cur.parentPath && !t.isProgram(cur.parentPath.parent)) {\n cur = cur.parentPath\n }\n let node = cur.parent\n if (t.isExportNamedDeclaration(node)) {\n node = node.declaration\n }\n if (t.isVariableDeclaration(node)) {\n const [dec] = node.declarations\n if (t.isVariableDeclarator(dec) && t.isIdentifier(dec.id)) {\n return dec.id.name\n }\n }\n if (t.isFunctionDeclaration(node)) {\n return node.id?.name\n }\n return componentName\n}\n\nexport function isValidThemeHook(\n props: TamaguiOptionsWithFileInfo,\n jsxPath: NodePath<t.JSXElement>,\n n: t.MemberExpression,\n sourcePath: string\n) {\n if (!t.isIdentifier(n.object) || !t.isIdentifier(n.property)) return false\n const bindings = jsxPath.scope.getAllBindings()\n const binding = bindings[n.object.name]\n if (!binding?.path) return false\n if (!binding.path.isVariableDeclarator()) return false\n const init = binding.path.node.init\n if (!t.isCallExpression(init)) return false\n if (!t.isIdentifier(init.callee)) return false\n // TODO could support renaming useTheme by looking up import first\n if (init.callee.name !== 'useTheme') return false\n const importNode = binding.scope.getBinding('useTheme')?.path.parent\n if (!t.isImportDeclaration(importNode)) return false\n if (!isValidImport(props, sourcePath)) {\n return false\n }\n return true\n}\n\nexport const isInsideComponentPackage = (props: TamaguiOptionsWithFileInfo, moduleName: string) => {\n return getValidComponentsPaths(props).some((path) => {\n return moduleName.startsWith(path)\n })\n}\n\nexport const isComponentPackage = (props: TamaguiOptionsWithFileInfo, srcName: string) => {\n return getValidComponentsPaths(props).some((path) => {\n return srcName.startsWith(path)\n })\n}\n\nexport function getValidComponent(\n props: TamaguiOptionsWithFileInfo,\n moduleName: string,\n componentName: string\n) {\n // must be uppercase of course\n if (componentName[0].toUpperCase() !== componentName[0]) {\n return false\n }\n\n for (const loaded of props.allLoadedComponents) {\n if (!loaded) continue\n const isInModule = moduleName === '*' || moduleName.startsWith(loaded.moduleName)\n const foundComponent = loaded.nameToInfo[componentName]\n // eslint-disable-next-line no-console\n if (isInModule && foundComponent) {\n return foundComponent\n }\n }\n\n return null\n}\n\nexport const isValidModule = (props: TamaguiOptionsWithFileInfo, moduleName: string) => {\n if (typeof moduleName !== 'string') {\n throw new Error(`No module name`)\n }\n const isLocal = moduleName.startsWith('.')\n return {\n isLocal,\n isValid: isLocal\n ? isInsideComponentPackage(props, moduleName)\n : isComponentPackage(props, moduleName),\n }\n}\n\nexport const getValidImport = (\n props: TamaguiOptionsWithFileInfo,\n moduleName: string,\n componentName?: string\n) => {\n const { isValid, isLocal } = isValidModule(props, moduleName)\n if (!isValid || !componentName) {\n return null\n }\n return getValidComponent(props, isLocal ? '*' : moduleName, componentName) || null\n}\n\nexport const isValidImport = (\n props: TamaguiOptionsWithFileInfo,\n moduleName: string,\n componentName?: string\n) => {\n if (!componentName) {\n return isValidModule(props, moduleName).isValid\n }\n return Boolean(getValidImport(props, moduleName, componentName))\n}\n\nconst getValidComponentPackages = memoize((props: TamaguiOptionsWithFileInfo) => {\n // just always look for `tamagui` and `@tamagui/core`\n return [...new Set(['@tamagui/core', 'tamagui', ...props.components])]\n})\n\nconst getValidComponentsPaths = memoize((props: TamaguiOptionsWithFileInfo) => {\n return getValidComponentPackages(props).map((pkg) => {\n const root = findRoot(pkg)\n return basename(root)\n })\n})\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["generate", "findRoot"]
|
|
7
7
|
}
|
|
@@ -277,6 +277,16 @@ function transformAddExports(ast) {
|
|
|
277
277
|
sourceMaps: false
|
|
278
278
|
}).code;
|
|
279
279
|
}
|
|
280
|
+
const esbuildit = (src, target) => import_esbuild.default.transformSync(src, {
|
|
281
|
+
...esbuildOptions,
|
|
282
|
+
...target === "modern" && {
|
|
283
|
+
target: "es2022",
|
|
284
|
+
jsx: "transform",
|
|
285
|
+
loader: "tsx",
|
|
286
|
+
platform: "neutral",
|
|
287
|
+
format: "esm"
|
|
288
|
+
}
|
|
289
|
+
}).code;
|
|
280
290
|
function loadComponents(props) {
|
|
281
291
|
const componentsModules = props.components;
|
|
282
292
|
const key = componentsModules.join("");
|
|
@@ -288,26 +298,22 @@ function loadComponents(props) {
|
|
|
288
298
|
var _a;
|
|
289
299
|
const extension = (0, import_path.extname)(name);
|
|
290
300
|
const isLocal = Boolean(extension);
|
|
291
|
-
const
|
|
292
|
-
|
|
293
|
-
|
|
301
|
+
const isDynamic = isLocal && !props.config;
|
|
302
|
+
if (isDynamic && !process.env.TAMAGUI_ENABLE_DYNAMIC_LOAD) {
|
|
303
|
+
return [];
|
|
304
|
+
}
|
|
305
|
+
const fileContents = isDynamic ? (0, import_fs.readFileSync)(name, "utf-8") : "";
|
|
306
|
+
const loadModule = isDynamic ? (0, import_path.join)((0, import_path.dirname)(name), `.tamagui-dynamic-eval-${(0, import_path.basename)(name)}.tsx`) : name;
|
|
294
307
|
let writtenContents = fileContents;
|
|
295
308
|
let didBabel = false;
|
|
296
|
-
const esbuildit = (src, target) => import_esbuild.default.transformSync(src, {
|
|
297
|
-
...esbuildOptions,
|
|
298
|
-
...target === "modern" && {
|
|
299
|
-
target: "es2022",
|
|
300
|
-
jsx: "transform",
|
|
301
|
-
loader: "tsx",
|
|
302
|
-
platform: "neutral",
|
|
303
|
-
format: "esm"
|
|
304
|
-
}
|
|
305
|
-
}).code;
|
|
306
309
|
function attemptLoad({ forceExports = false } = {}) {
|
|
307
|
-
if (
|
|
310
|
+
if (isDynamic) {
|
|
308
311
|
writtenContents = forceExports ? esbuildit(transformAddExports((0, import_babelParse.babelParse)(esbuildit(fileContents, "modern")))) : esbuildit(fileContents);
|
|
309
312
|
(0, import_fs_extra.writeFileSync)(loadModule, writtenContents);
|
|
310
313
|
}
|
|
314
|
+
if (process.env.DEBUG === "tamagui") {
|
|
315
|
+
console.log(`loadModule`, loadModule, require.resolve(loadModule));
|
|
316
|
+
}
|
|
311
317
|
return {
|
|
312
318
|
moduleName: name,
|
|
313
319
|
nameToInfo: getComponentStaticConfigByName(
|
|
@@ -317,7 +323,7 @@ function loadComponents(props) {
|
|
|
317
323
|
};
|
|
318
324
|
}
|
|
319
325
|
const dispose = () => {
|
|
320
|
-
|
|
326
|
+
isDynamic && (0, import_fs_extra.removeSync)(loadModule);
|
|
321
327
|
};
|
|
322
328
|
try {
|
|
323
329
|
const res = attemptLoad({
|
|
@@ -364,8 +370,8 @@ didBabel: ${didBabel}`,
|
|
|
364
370
|
In:`,
|
|
365
371
|
writtenContents,
|
|
366
372
|
`
|
|
367
|
-
|
|
368
|
-
|
|
373
|
+
isDynamic: `,
|
|
374
|
+
isDynamic
|
|
369
375
|
);
|
|
370
376
|
}
|
|
371
377
|
return [];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extractor/loadTamagui.ts"],
|
|
4
|
-
"sourcesContent": ["import { readFileSync } from 'fs'\n/* eslint-disable no-console */\nimport { basename, dirname, extname, join, relative, sep } from 'path'\n\nimport generate from '@babel/generator'\nimport traverse from '@babel/traverse'\nimport * as t from '@babel/types'\nimport { Color, colorLog } from '@tamagui/cli-color'\nimport { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport type { StaticConfigParsed, TamaguiInternalConfig } from '@tamagui/core-node'\nimport { createTamagui } from '@tamagui/core-node'\nimport esbuild from 'esbuild'\nimport { ensureDir, existsSync, removeSync, writeFileSync } from 'fs-extra'\n\nimport { SHOULD_DEBUG } from '../constants.js'\nimport { getNameToPaths, registerRequire, unregisterRequire } from '../require.js'\nimport { babelParse } from './babelParse'\nimport { bundle } from './bundle'\n\ntype NameToPaths = {\n [key: string]: Set<string>\n}\n\nexport type LoadedComponents = {\n moduleName: string\n nameToInfo: Record<\n string,\n {\n staticConfig: StaticConfigParsed\n }\n >\n}\n\nexport type TamaguiProjectInfo = {\n components: LoadedComponents[]\n tamaguiConfig: TamaguiInternalConfig\n nameToPaths: NameToPaths\n}\n\ntype Props = {\n components: string[]\n config?: string\n forceExports?: boolean\n}\n\nconst cache = {}\n\n// TODO needs a plugin for webpack / vite to run this once at startup and not again until changed...\n\nexport async function loadTamagui(props: Props): Promise<TamaguiProjectInfo> {\n const key = JSON.stringify(props)\n if (cache[key]) {\n if (cache[key] instanceof Promise) {\n return await cache[key]\n }\n return cache[key]\n }\n\n let resolver: Function = () => {}\n cache[key] = new Promise((res) => {\n resolver = res\n })\n\n const tmpDir = join(process.cwd(), '.tamagui')\n const configOutPath = join(tmpDir, `tamagui.config.js`)\n const baseComponents = props.components.filter((x) => x !== '@tamagui/core')\n const componentOutPaths = baseComponents.map((componentModule) =>\n join(\n tmpDir,\n `${componentModule\n .split(sep)\n .join('-')\n .replace(/[^a-z0-9]+/gi, '')}-components.config.js`\n )\n )\n\n const external = ['@tamagui/core', '@tamagui/core-node', 'react', 'react-dom', 'react-native-svg']\n const configEntry = props.config ? join(process.cwd(), props.config) : ''\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Building config entry`, configEntry)\n }\n\n // build them to node-compat versions\n try {\n await ensureDir(tmpDir)\n } catch {\n //\n }\n\n colorLog(\n Color.FgYellow,\n `\nTamagui built config and components:`\n )\n colorLog(\n Color.Dim,\n `\n Config .${sep}${relative(process.cwd(), configOutPath)}\n Components ${componentOutPaths\n .map((p) => `.${sep}${relative(process.cwd(), p)}`)\n .join('\\n ')}\n`\n )\n\n await Promise.all([\n props.config\n ? bundle({\n entryPoints: [configEntry],\n external,\n outfile: configOutPath,\n })\n : null,\n ...baseComponents.map((componentModule, i) => {\n return bundle({\n entryPoints: [componentModule],\n resolvePlatformSpecificEntries: true,\n external,\n outfile: componentOutPaths[i],\n })\n }),\n ])\n\n try {\n registerRequire()\n const out = require(configOutPath)\n const config = out.default || out\n\n if (!config) {\n throw new Error(`No config: ${config}`)\n }\n\n let components = loadComponents({\n ...props,\n components: componentOutPaths,\n })\n\n if (!components) {\n throw new Error(`No components found: ${componentOutPaths.join(', ')}`)\n }\n\n // map from built back to original module names\n for (const component of components) {\n component.moduleName = baseComponents[componentOutPaths.indexOf(component.moduleName)]\n if (!component.moduleName) {\n throw new Error(`Tamagui internal err`)\n }\n }\n\n // always load core so we can optimize if directly importing\n const coreComponents = loadComponents({\n ...props,\n components: ['@tamagui/core-node'],\n })\n if (coreComponents) {\n coreComponents[0].moduleName = '@tamagui/core'\n components = [...components, ...coreComponents]\n }\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG?.startsWith('tamagui')) {\n console.log('Loaded components', components)\n }\n\n cache[key] = {\n components,\n nameToPaths: {},\n tamaguiConfig: config,\n }\n\n // init core-node\n createTamagui(cache[key].tamaguiConfig)\n\n resolver(cache[key])\n\n return cache[key]\n } finally {\n unregisterRequire()\n }\n}\n\nexport function resolveWebOrNativeSpecificEntry(entry: string) {\n const resolved = require.resolve(entry)\n const ext = extname(resolved)\n const fileName = basename(resolved).replace(ext, '')\n const specificExt = process.env.TAMAGUI_TARGET === 'web' ? 'web' : 'native'\n const specificFile = join(dirname(resolved), fileName + '.' + specificExt + ext)\n if (existsSync(specificFile)) {\n return specificFile\n }\n return entry\n}\n\nconst esbuildOptions = {\n loader: 'tsx',\n target: 'es2018',\n format: 'cjs',\n jsx: 'transform',\n platform: 'node',\n} as const\n\n// loads in-process using esbuild-register\nexport function loadTamaguiSync(props: Props): TamaguiProjectInfo {\n const key = JSON.stringify(props)\n if (cache[key]) {\n return cache[key]\n }\n\n const { unregister } = require('esbuild-register/dist/node').register(esbuildOptions)\n\n try {\n registerRequire()\n\n // lets shim require and avoid importing react-native + react-native-web\n // we just need to read the config around them\n process.env.IS_STATIC = 'is_static'\n const devValueOG = globalThis['__DEV__' as any]\n globalThis['__DEV__' as any] = process.env.NODE_ENV === 'development'\n\n try {\n // config\n let tamaguiConfig: TamaguiInternalConfig | null = null\n if (props.config) {\n const configPath = join(process.cwd(), props.config)\n const exp = require(configPath)\n tamaguiConfig = (exp['default'] || exp) as TamaguiInternalConfig\n if (!tamaguiConfig || !tamaguiConfig.parsed) {\n const confPath = require.resolve(configPath)\n throw new Error(`Can't find valid config in ${confPath}:\n \n Be sure you \"export default\" the config.`)\n }\n }\n\n // components\n const components = loadComponents(props)\n if (!components) {\n throw new Error(`No components loaded`)\n }\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, components)\n }\n\n // undo shims\n process.env.IS_STATIC = undefined\n globalThis['__DEV__' as any] = devValueOG\n\n // set up core-node\n if (props.config && tamaguiConfig) {\n createTamagui(tamaguiConfig as any)\n }\n\n cache[key] = {\n components,\n tamaguiConfig,\n nameToPaths: getNameToPaths(),\n }\n } catch (err) {\n if (err instanceof Error) {\n console.warn(\n `Error loading tamagui.config.ts (set DEBUG=tamagui to see full stack), running tamagui without custom config`\n )\n console.log(`\\n\\n ${err.message}\\n\\n`)\n if (SHOULD_DEBUG) {\n console.log(err.stack)\n }\n } else {\n console.error(`Error loading tamagui.config.ts`, err)\n }\n return {\n components: [],\n tamaguiConfig: getDefaultTamaguiConfig(),\n nameToPaths: {},\n }\n }\n\n return cache[key]\n } finally {\n unregister()\n unregisterRequire()\n }\n}\n\nfunction interopDefaultExport(mod: any) {\n return mod?.default ?? mod\n}\n\nconst cacheComponents: Record<string, LoadedComponents[]> = {}\n\nfunction transformAddExports(ast: t.File) {\n const usedNames = new Set<string>()\n\n // avoid clobbering\n traverse(ast, {\n ExportNamedDeclaration(nodePath) {\n if (nodePath.node.specifiers) {\n for (const spec of nodePath.node.specifiers) {\n usedNames.add(t.isIdentifier(spec.exported) ? spec.exported.name : spec.exported.value)\n }\n }\n },\n })\n\n traverse(ast, {\n VariableDeclaration(nodePath) {\n // top level only\n if (!t.isProgram(nodePath.parent)) return\n const decs = nodePath.node.declarations\n if (decs.length > 1) return\n const [dec] = decs\n if (!t.isIdentifier(dec.id)) return\n if (!dec.init) return\n if (usedNames.has(dec.id.name)) return\n usedNames.add(dec.id.name)\n nodePath.replaceWith(\n t.exportNamedDeclaration(t.variableDeclaration('let', [dec]), [\n t.exportSpecifier(t.identifier(dec.id.name), t.identifier(dec.id.name)),\n ])\n )\n },\n })\n\n return generate(ast as any, {\n concise: false,\n filename: 'test.tsx',\n retainLines: false,\n sourceMaps: false,\n }).code\n}\n\nfunction loadComponents(props: Props): null | LoadedComponents[] {\n const componentsModules = props.components\n const key = componentsModules.join('')\n if (cacheComponents[key]) {\n return cacheComponents[key]\n }\n try {\n const info: LoadedComponents[] = componentsModules.flatMap((name) => {\n const extension = extname(name)\n const isLocal = Boolean(extension)\n // during props.config pass we are passing in pre-bundled stuff\n const writeTmp = isLocal && !props.config\n const fileContents = writeTmp ? readFileSync(name, 'utf-8') : ''\n const loadModule = writeTmp\n ? join(dirname(name), `.tamagui-dynamic-eval-${basename(name)}.tsx`)\n : name\n let writtenContents = fileContents\n let didBabel = false\n\n const esbuildit = (src: string, target?: 'modern') =>\n esbuild.transformSync(src, {\n ...esbuildOptions,\n ...(target === 'modern' && {\n target: 'es2022',\n jsx: 'transform',\n loader: 'tsx',\n platform: 'neutral',\n format: 'esm',\n }),\n }).code\n\n function attemptLoad({ forceExports = false } = {}) {\n // need to write to tsx to enable reading it properly (:/ esbuild-register)\n if (writeTmp) {\n writtenContents = forceExports\n ? esbuildit(transformAddExports(babelParse(esbuildit(fileContents, 'modern'))))\n : esbuildit(fileContents)\n\n writeFileSync(loadModule, writtenContents)\n }\n return {\n moduleName: name,\n nameToInfo: getComponentStaticConfigByName(\n name,\n interopDefaultExport(require(loadModule))\n ),\n }\n }\n\n const dispose = () => {\n writeTmp && removeSync(loadModule)\n }\n\n try {\n const res = attemptLoad({\n forceExports: true,\n })\n didBabel = true\n return res\n } catch (err) {\n console.log('babel err', err, writtenContents)\n // ok\n writtenContents = fileContents\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Error parsing babel likely`, err)\n }\n } finally {\n dispose()\n }\n\n try {\n return attemptLoad({\n forceExports: false,\n })\n } catch (err) {\n if (!process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD) {\n console.log(`\n\nTamagui attempted but failed to dynamically load components in:\n ${name}\n\nThis will leave some styled() tags unoptimized.\nDisable this file (or dynamic loading altogether):\n\n disableExtractFoundComponents: ['${name}'] | true\n\nQuiet this warning with environment variable:\n \n TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1\n\n`)\n console.log(err)\n console.log(\n `At: ${loadModule}`,\n `\\ndidBabel: ${didBabel}`,\n `\\nIn:`,\n writtenContents,\n `\\nwriteTmp: `,\n writeTmp\n )\n }\n return []\n } finally {\n dispose()\n }\n })\n cacheComponents[key] = info\n return info\n } catch (err: any) {\n console.log(`Tamagui error bundling components`, err.message, err.stack)\n return null\n }\n}\n\nfunction getComponentStaticConfigByName(name: string, exported: any) {\n const components: Record<string, { staticConfig: StaticConfigParsed }> = {}\n try {\n if (!exported || typeof exported !== 'object' || Array.isArray(exported)) {\n throw new Error(`Invalid export from package ${name}: ${typeof exported}`)\n }\n for (const key in exported) {\n const found = getTamaguiComponent(key, exported[key])\n if (found) {\n // remove non-stringifyable\n const { Component, ...sc } = found.staticConfig\n components[key] = { staticConfig: sc }\n }\n }\n } catch (err) {\n if (process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD !== '1') {\n console.error(\n `Tamagui failed getting from ${name} (Disable error by setting environment variable TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1)`\n )\n console.error(err)\n }\n }\n return components\n}\n\nfunction getTamaguiComponent(\n name: string,\n Component: any\n): undefined | { staticConfig: StaticConfigParsed } {\n if (name[0].toUpperCase() !== name[0]) {\n return\n }\n const staticConfig = Component?.staticConfig as StaticConfigParsed | undefined\n if (staticConfig) {\n return Component\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { readFileSync } from 'fs'\n/* eslint-disable no-console */\nimport { basename, dirname, extname, join, relative, sep } from 'path'\n\nimport generate from '@babel/generator'\nimport traverse from '@babel/traverse'\nimport * as t from '@babel/types'\nimport { Color, colorLog } from '@tamagui/cli-color'\nimport { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport type { StaticConfigParsed, TamaguiInternalConfig } from '@tamagui/core-node'\nimport { createTamagui } from '@tamagui/core-node'\nimport esbuild from 'esbuild'\nimport { ensureDir, existsSync, removeSync, writeFileSync } from 'fs-extra'\n\nimport { SHOULD_DEBUG } from '../constants.js'\nimport { getNameToPaths, registerRequire, unregisterRequire } from '../require.js'\nimport { babelParse } from './babelParse'\nimport { bundle } from './bundle'\n\ntype NameToPaths = {\n [key: string]: Set<string>\n}\n\nexport type LoadedComponents = {\n moduleName: string\n nameToInfo: Record<\n string,\n {\n staticConfig: StaticConfigParsed\n }\n >\n}\n\nexport type TamaguiProjectInfo = {\n components: LoadedComponents[]\n tamaguiConfig: TamaguiInternalConfig\n nameToPaths: NameToPaths\n}\n\ntype Props = {\n components: string[]\n config?: string\n forceExports?: boolean\n}\n\nconst cache = {}\n\n// TODO needs a plugin for webpack / vite to run this once at startup and not again until changed...\n\nexport async function loadTamagui(props: Props): Promise<TamaguiProjectInfo> {\n const key = JSON.stringify(props)\n if (cache[key]) {\n if (cache[key] instanceof Promise) {\n return await cache[key]\n }\n return cache[key]\n }\n\n let resolver: Function = () => {}\n cache[key] = new Promise((res) => {\n resolver = res\n })\n\n const tmpDir = join(process.cwd(), '.tamagui')\n const configOutPath = join(tmpDir, `tamagui.config.js`)\n const baseComponents = props.components.filter((x) => x !== '@tamagui/core')\n const componentOutPaths = baseComponents.map((componentModule) =>\n join(\n tmpDir,\n `${componentModule\n .split(sep)\n .join('-')\n .replace(/[^a-z0-9]+/gi, '')}-components.config.js`\n )\n )\n\n const external = ['@tamagui/core', '@tamagui/core-node', 'react', 'react-dom', 'react-native-svg']\n const configEntry = props.config ? join(process.cwd(), props.config) : ''\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Building config entry`, configEntry)\n }\n\n // build them to node-compat versions\n try {\n await ensureDir(tmpDir)\n } catch {\n //\n }\n\n colorLog(\n Color.FgYellow,\n `\nTamagui built config and components:`\n )\n colorLog(\n Color.Dim,\n `\n Config .${sep}${relative(process.cwd(), configOutPath)}\n Components ${componentOutPaths\n .map((p) => `.${sep}${relative(process.cwd(), p)}`)\n .join('\\n ')}\n`\n )\n\n await Promise.all([\n props.config\n ? bundle({\n entryPoints: [configEntry],\n external,\n outfile: configOutPath,\n })\n : null,\n ...baseComponents.map((componentModule, i) => {\n return bundle({\n entryPoints: [componentModule],\n resolvePlatformSpecificEntries: true,\n external,\n outfile: componentOutPaths[i],\n })\n }),\n ])\n\n try {\n registerRequire()\n const out = require(configOutPath)\n const config = out.default || out\n\n if (!config) {\n throw new Error(`No config: ${config}`)\n }\n\n let components = loadComponents({\n ...props,\n components: componentOutPaths,\n })\n\n if (!components) {\n throw new Error(`No components found: ${componentOutPaths.join(', ')}`)\n }\n\n // map from built back to original module names\n for (const component of components) {\n component.moduleName = baseComponents[componentOutPaths.indexOf(component.moduleName)]\n if (!component.moduleName) {\n throw new Error(`Tamagui internal err`)\n }\n }\n\n // always load core so we can optimize if directly importing\n const coreComponents = loadComponents({\n ...props,\n components: ['@tamagui/core-node'],\n })\n if (coreComponents) {\n coreComponents[0].moduleName = '@tamagui/core'\n components = [...components, ...coreComponents]\n }\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG?.startsWith('tamagui')) {\n console.log('Loaded components', components)\n }\n\n cache[key] = {\n components,\n nameToPaths: {},\n tamaguiConfig: config,\n }\n\n // init core-node\n createTamagui(cache[key].tamaguiConfig)\n\n resolver(cache[key])\n\n return cache[key]\n } finally {\n unregisterRequire()\n }\n}\n\nexport function resolveWebOrNativeSpecificEntry(entry: string) {\n const resolved = require.resolve(entry)\n const ext = extname(resolved)\n const fileName = basename(resolved).replace(ext, '')\n const specificExt = process.env.TAMAGUI_TARGET === 'web' ? 'web' : 'native'\n const specificFile = join(dirname(resolved), fileName + '.' + specificExt + ext)\n if (existsSync(specificFile)) {\n return specificFile\n }\n return entry\n}\n\nconst esbuildOptions = {\n loader: 'tsx',\n target: 'es2018',\n format: 'cjs',\n jsx: 'transform',\n platform: 'node',\n} as const\n\n// loads in-process using esbuild-register\nexport function loadTamaguiSync(props: Props): TamaguiProjectInfo {\n const key = JSON.stringify(props)\n if (cache[key]) {\n return cache[key]\n }\n\n const { unregister } = require('esbuild-register/dist/node').register(esbuildOptions)\n\n try {\n registerRequire()\n\n // lets shim require and avoid importing react-native + react-native-web\n // we just need to read the config around them\n process.env.IS_STATIC = 'is_static'\n const devValueOG = globalThis['__DEV__' as any]\n globalThis['__DEV__' as any] = process.env.NODE_ENV === 'development'\n\n try {\n // config\n let tamaguiConfig: TamaguiInternalConfig | null = null\n if (props.config) {\n const configPath = join(process.cwd(), props.config)\n const exp = require(configPath)\n tamaguiConfig = (exp['default'] || exp) as TamaguiInternalConfig\n if (!tamaguiConfig || !tamaguiConfig.parsed) {\n const confPath = require.resolve(configPath)\n throw new Error(`Can't find valid config in ${confPath}:\n \n Be sure you \"export default\" the config.`)\n }\n }\n\n // components\n const components = loadComponents(props)\n if (!components) {\n throw new Error(`No components loaded`)\n }\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, components)\n }\n\n // undo shims\n process.env.IS_STATIC = undefined\n globalThis['__DEV__' as any] = devValueOG\n\n // set up core-node\n if (props.config && tamaguiConfig) {\n createTamagui(tamaguiConfig as any)\n }\n\n cache[key] = {\n components,\n tamaguiConfig,\n nameToPaths: getNameToPaths(),\n }\n } catch (err) {\n if (err instanceof Error) {\n console.warn(\n `Error loading tamagui.config.ts (set DEBUG=tamagui to see full stack), running tamagui without custom config`\n )\n console.log(`\\n\\n ${err.message}\\n\\n`)\n if (SHOULD_DEBUG) {\n console.log(err.stack)\n }\n } else {\n console.error(`Error loading tamagui.config.ts`, err)\n }\n return {\n components: [],\n tamaguiConfig: getDefaultTamaguiConfig(),\n nameToPaths: {},\n }\n }\n\n return cache[key]\n } finally {\n unregister()\n unregisterRequire()\n }\n}\n\nfunction interopDefaultExport(mod: any) {\n return mod?.default ?? mod\n}\n\nconst cacheComponents: Record<string, LoadedComponents[]> = {}\n\nfunction transformAddExports(ast: t.File) {\n const usedNames = new Set<string>()\n\n // avoid clobbering\n traverse(ast, {\n ExportNamedDeclaration(nodePath) {\n if (nodePath.node.specifiers) {\n for (const spec of nodePath.node.specifiers) {\n usedNames.add(t.isIdentifier(spec.exported) ? spec.exported.name : spec.exported.value)\n }\n }\n },\n })\n\n traverse(ast, {\n VariableDeclaration(nodePath) {\n // top level only\n if (!t.isProgram(nodePath.parent)) return\n const decs = nodePath.node.declarations\n if (decs.length > 1) return\n const [dec] = decs\n if (!t.isIdentifier(dec.id)) return\n if (!dec.init) return\n if (usedNames.has(dec.id.name)) return\n usedNames.add(dec.id.name)\n nodePath.replaceWith(\n t.exportNamedDeclaration(t.variableDeclaration('let', [dec]), [\n t.exportSpecifier(t.identifier(dec.id.name), t.identifier(dec.id.name)),\n ])\n )\n },\n })\n\n return generate(ast as any, {\n concise: false,\n filename: 'test.tsx',\n retainLines: false,\n sourceMaps: false,\n }).code\n}\n\nconst esbuildit = (src: string, target?: 'modern') =>\n esbuild.transformSync(src, {\n ...esbuildOptions,\n ...(target === 'modern' && {\n target: 'es2022',\n jsx: 'transform',\n loader: 'tsx',\n platform: 'neutral',\n format: 'esm',\n }),\n }).code\n\nfunction loadComponents(props: Props): null | LoadedComponents[] {\n const componentsModules = props.components\n const key = componentsModules.join('')\n if (cacheComponents[key]) {\n return cacheComponents[key]\n }\n try {\n const info: LoadedComponents[] = componentsModules.flatMap((name) => {\n const extension = extname(name)\n const isLocal = Boolean(extension)\n // during props.config pass we are passing in pre-bundled stuff\n const isDynamic = isLocal && !props.config\n\n if (isDynamic && !process.env.TAMAGUI_ENABLE_DYNAMIC_LOAD) {\n return []\n }\n\n const fileContents = isDynamic ? readFileSync(name, 'utf-8') : ''\n const loadModule = isDynamic\n ? join(dirname(name), `.tamagui-dynamic-eval-${basename(name)}.tsx`)\n : name\n let writtenContents = fileContents\n let didBabel = false\n\n function attemptLoad({ forceExports = false } = {}) {\n // need to write to tsx to enable reading it properly (:/ esbuild-register)\n if (isDynamic) {\n writtenContents = forceExports\n ? esbuildit(transformAddExports(babelParse(esbuildit(fileContents, 'modern'))))\n : esbuildit(fileContents)\n\n writeFileSync(loadModule, writtenContents)\n }\n\n if (process.env.DEBUG === 'tamagui') {\n console.log(`loadModule`, loadModule, require.resolve(loadModule))\n }\n\n return {\n moduleName: name,\n nameToInfo: getComponentStaticConfigByName(\n name,\n interopDefaultExport(require(loadModule))\n ),\n }\n }\n\n const dispose = () => {\n isDynamic && removeSync(loadModule)\n }\n\n try {\n const res = attemptLoad({\n forceExports: true,\n })\n didBabel = true\n return res\n } catch (err) {\n console.log('babel err', err, writtenContents)\n // ok\n writtenContents = fileContents\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Error parsing babel likely`, err)\n }\n } finally {\n dispose()\n }\n\n try {\n return attemptLoad({\n forceExports: false,\n })\n } catch (err) {\n if (!process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD) {\n console.log(`\n\nTamagui attempted but failed to dynamically load components in:\n ${name}\n\nThis will leave some styled() tags unoptimized.\nDisable this file (or dynamic loading altogether):\n\n disableExtractFoundComponents: ['${name}'] | true\n\nQuiet this warning with environment variable:\n \n TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1\n\n`)\n console.log(err)\n console.log(\n `At: ${loadModule}`,\n `\\ndidBabel: ${didBabel}`,\n `\\nIn:`,\n writtenContents,\n `\\nisDynamic: `,\n isDynamic\n )\n }\n return []\n } finally {\n dispose()\n }\n })\n cacheComponents[key] = info\n return info\n } catch (err: any) {\n console.log(`Tamagui error bundling components`, err.message, err.stack)\n return null\n }\n}\n\nfunction getComponentStaticConfigByName(name: string, exported: any) {\n const components: Record<string, { staticConfig: StaticConfigParsed }> = {}\n try {\n if (!exported || typeof exported !== 'object' || Array.isArray(exported)) {\n throw new Error(`Invalid export from package ${name}: ${typeof exported}`)\n }\n for (const key in exported) {\n const found = getTamaguiComponent(key, exported[key])\n if (found) {\n // remove non-stringifyable\n const { Component, ...sc } = found.staticConfig\n components[key] = { staticConfig: sc }\n }\n }\n } catch (err) {\n if (process.env.TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD !== '1') {\n console.error(\n `Tamagui failed getting from ${name} (Disable error by setting environment variable TAMAGUI_DISABLE_WARN_DYNAMIC_LOAD=1)`\n )\n console.error(err)\n }\n }\n return components\n}\n\nfunction getTamaguiComponent(\n name: string,\n Component: any\n): undefined | { staticConfig: StaticConfigParsed } {\n if (name[0].toUpperCase() !== name[0]) {\n return\n }\n const staticConfig = Component?.staticConfig as StaticConfigParsed | undefined\n if (staticConfig) {\n return Component\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["traverse", "generate", "esbuild"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/static",
|
|
3
|
-
"version": "1.0.1-beta.
|
|
3
|
+
"version": "1.0.1-beta.228",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"types": "./types/index.d.ts",
|
|
6
6
|
"main": "dist",
|
|
@@ -36,15 +36,15 @@
|
|
|
36
36
|
"@babel/runtime": "^7.19.4",
|
|
37
37
|
"@babel/traverse": "^7.19.6",
|
|
38
38
|
"@expo/match-media": "^0.3.0",
|
|
39
|
-
"@tamagui/build": "^1.0.1-beta.
|
|
40
|
-
"@tamagui/cli-color": "^1.0.1-beta.
|
|
41
|
-
"@tamagui/config-default-node": "^1.0.1-beta.
|
|
42
|
-
"@tamagui/core-node": "^1.0.1-beta.
|
|
43
|
-
"@tamagui/fake-react-native": "^1.0.1-beta.
|
|
44
|
-
"@tamagui/helpers": "^1.0.1-beta.
|
|
45
|
-
"@tamagui/helpers-node": "^1.0.1-beta.
|
|
46
|
-
"@tamagui/proxy-worm": "^1.0.1-beta.
|
|
47
|
-
"@tamagui/shorthands": "^1.0.1-beta.
|
|
39
|
+
"@tamagui/build": "^1.0.1-beta.228",
|
|
40
|
+
"@tamagui/cli-color": "^1.0.1-beta.228",
|
|
41
|
+
"@tamagui/config-default-node": "^1.0.1-beta.228",
|
|
42
|
+
"@tamagui/core-node": "^1.0.1-beta.228",
|
|
43
|
+
"@tamagui/fake-react-native": "^1.0.1-beta.228",
|
|
44
|
+
"@tamagui/helpers": "^1.0.1-beta.228",
|
|
45
|
+
"@tamagui/helpers-node": "^1.0.1-beta.228",
|
|
46
|
+
"@tamagui/proxy-worm": "^1.0.1-beta.228",
|
|
47
|
+
"@tamagui/shorthands": "^1.0.1-beta.228",
|
|
48
48
|
"babel-literal-to-ast": "^2.1.0",
|
|
49
49
|
"esbuild": "^0.15.11",
|
|
50
50
|
"esbuild-register": "^3.3.3",
|
|
@@ -53,14 +53,14 @@
|
|
|
53
53
|
"fs-extra": "^10.1.0",
|
|
54
54
|
"invariant": "^2.2.4",
|
|
55
55
|
"lodash": "^4.17.21",
|
|
56
|
-
"react-native-web-internals": "^1.0.1-beta.
|
|
57
|
-
"react-native-web-lite": "^1.0.1-beta.
|
|
56
|
+
"react-native-web-internals": "^1.0.1-beta.228",
|
|
57
|
+
"react-native-web-lite": "^1.0.1-beta.228"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@babel/plugin-syntax-typescript": "^7.18.6",
|
|
61
61
|
"@babel/types": "^7.19.4",
|
|
62
62
|
"@dish/babel-preset": "^0.0.6",
|
|
63
|
-
"@tamagui/test-design-system": "^1.0.1-beta.
|
|
63
|
+
"@tamagui/test-design-system": "^1.0.1-beta.228",
|
|
64
64
|
"@testing-library/react": "^13.3.0",
|
|
65
65
|
"@types/babel__generator": "^7.6.4",
|
|
66
66
|
"@types/babel__traverse": "^7.18.2",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"react-test-renderer": "^18.2.0",
|
|
80
80
|
"style-loader": "^3.3.1",
|
|
81
81
|
"typescript": "^4.7.4",
|
|
82
|
-
"vitest": "^0.
|
|
82
|
+
"vitest": "^0.25.3",
|
|
83
83
|
"webpack": "^5.74.0"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
@@ -1597,7 +1597,7 @@ export function createExtractor({ logger = console }: ExtractorOptions = { logge
|
|
|
1597
1597
|
}
|
|
1598
1598
|
}
|
|
1599
1599
|
|
|
1600
|
-
if (shouldDeopt) {
|
|
1600
|
+
if (shouldDeopt || !shouldFlatten) {
|
|
1601
1601
|
if (shouldPrintDebug) {
|
|
1602
1602
|
logger.info(`Deopting`)
|
|
1603
1603
|
}
|
|
@@ -1605,40 +1605,10 @@ export function createExtractor({ logger = console }: ExtractorOptions = { logge
|
|
|
1605
1605
|
return
|
|
1606
1606
|
}
|
|
1607
1607
|
|
|
1608
|
-
// insert overrides - this inserts null props for things that are set in classNames
|
|
1609
|
-
// only when not flattening, so the downstream component can skip applying those styles
|
|
1610
|
-
const ensureOverridden = {}
|
|
1611
|
-
if (!shouldFlatten) {
|
|
1612
|
-
for (const cur of attrs) {
|
|
1613
|
-
if (cur.type === 'style') {
|
|
1614
|
-
// TODO need to loop over initial props not just style props
|
|
1615
|
-
for (const key in cur.value) {
|
|
1616
|
-
const shouldEnsureOverridden = !!staticConfig.ensureOverriddenProp?.[key]
|
|
1617
|
-
const isSetInAttrsAlready = attrs.some(
|
|
1618
|
-
(x) =>
|
|
1619
|
-
x.type === 'attr' &&
|
|
1620
|
-
x.value.type === 'JSXAttribute' &&
|
|
1621
|
-
x.value.name.name === key
|
|
1622
|
-
)
|
|
1623
|
-
|
|
1624
|
-
if (!isSetInAttrsAlready) {
|
|
1625
|
-
const isVariant = !!staticConfig.variants?.[cur.name || '']
|
|
1626
|
-
if (isVariant || shouldEnsureOverridden) {
|
|
1627
|
-
ensureOverridden[key] = true
|
|
1628
|
-
}
|
|
1629
|
-
}
|
|
1630
|
-
}
|
|
1631
|
-
}
|
|
1632
|
-
}
|
|
1633
|
-
}
|
|
1634
|
-
|
|
1635
1608
|
if (shouldPrintDebug) {
|
|
1636
1609
|
logger.info(
|
|
1637
1610
|
[' - attrs (flattened): \n', logLines(attrs.map(attrStr).join(', '))].join(' ')
|
|
1638
1611
|
)
|
|
1639
|
-
logger.info(
|
|
1640
|
-
[' - ensureOverriden:', Object.keys(ensureOverridden).join(', ')].join(' ')
|
|
1641
|
-
)
|
|
1642
1612
|
}
|
|
1643
1613
|
|
|
1644
1614
|
const state = {
|
|
@@ -1853,9 +1823,6 @@ export function createExtractor({ logger = console }: ExtractorOptions = { logge
|
|
|
1853
1823
|
const shouldKeepOriginalAttr =
|
|
1854
1824
|
// !isStyleAndAttr[key] &&
|
|
1855
1825
|
!shouldFlatten &&
|
|
1856
|
-
// de-opt transform styles so it merges properly if not flattened
|
|
1857
|
-
// we handle this later on
|
|
1858
|
-
// (stylePropsTransform[key] ||
|
|
1859
1826
|
// de-opt if non-style
|
|
1860
1827
|
!validStyles[key] &&
|
|
1861
1828
|
!pseudoDescriptors[key] &&
|
|
@@ -1879,15 +1846,6 @@ export function createExtractor({ logger = console }: ExtractorOptions = { logge
|
|
|
1879
1846
|
return acc
|
|
1880
1847
|
}
|
|
1881
1848
|
|
|
1882
|
-
if (ensureOverridden[key]) {
|
|
1883
|
-
acc.push({
|
|
1884
|
-
type: 'attr',
|
|
1885
|
-
value:
|
|
1886
|
-
cur.attr ||
|
|
1887
|
-
t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral())),
|
|
1888
|
-
})
|
|
1889
|
-
}
|
|
1890
|
-
|
|
1891
1849
|
if (prev?.type === 'style') {
|
|
1892
1850
|
mergeStyles(prev.value, cur.value)
|
|
1893
1851
|
return acc
|
|
@@ -141,6 +141,7 @@ export function getValidComponent(
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
for (const loaded of props.allLoadedComponents) {
|
|
144
|
+
if (!loaded) continue
|
|
144
145
|
const isInModule = moduleName === '*' || moduleName.startsWith(loaded.moduleName)
|
|
145
146
|
const foundComponent = loaded.nameToInfo[componentName]
|
|
146
147
|
// eslint-disable-next-line no-console
|
|
@@ -327,6 +327,18 @@ function transformAddExports(ast: t.File) {
|
|
|
327
327
|
}).code
|
|
328
328
|
}
|
|
329
329
|
|
|
330
|
+
const esbuildit = (src: string, target?: 'modern') =>
|
|
331
|
+
esbuild.transformSync(src, {
|
|
332
|
+
...esbuildOptions,
|
|
333
|
+
...(target === 'modern' && {
|
|
334
|
+
target: 'es2022',
|
|
335
|
+
jsx: 'transform',
|
|
336
|
+
loader: 'tsx',
|
|
337
|
+
platform: 'neutral',
|
|
338
|
+
format: 'esm',
|
|
339
|
+
}),
|
|
340
|
+
}).code
|
|
341
|
+
|
|
330
342
|
function loadComponents(props: Props): null | LoadedComponents[] {
|
|
331
343
|
const componentsModules = props.components
|
|
332
344
|
const key = componentsModules.join('')
|
|
@@ -338,35 +350,33 @@ function loadComponents(props: Props): null | LoadedComponents[] {
|
|
|
338
350
|
const extension = extname(name)
|
|
339
351
|
const isLocal = Boolean(extension)
|
|
340
352
|
// during props.config pass we are passing in pre-bundled stuff
|
|
341
|
-
const
|
|
342
|
-
|
|
343
|
-
|
|
353
|
+
const isDynamic = isLocal && !props.config
|
|
354
|
+
|
|
355
|
+
if (isDynamic && !process.env.TAMAGUI_ENABLE_DYNAMIC_LOAD) {
|
|
356
|
+
return []
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
const fileContents = isDynamic ? readFileSync(name, 'utf-8') : ''
|
|
360
|
+
const loadModule = isDynamic
|
|
344
361
|
? join(dirname(name), `.tamagui-dynamic-eval-${basename(name)}.tsx`)
|
|
345
362
|
: name
|
|
346
363
|
let writtenContents = fileContents
|
|
347
364
|
let didBabel = false
|
|
348
365
|
|
|
349
|
-
const esbuildit = (src: string, target?: 'modern') =>
|
|
350
|
-
esbuild.transformSync(src, {
|
|
351
|
-
...esbuildOptions,
|
|
352
|
-
...(target === 'modern' && {
|
|
353
|
-
target: 'es2022',
|
|
354
|
-
jsx: 'transform',
|
|
355
|
-
loader: 'tsx',
|
|
356
|
-
platform: 'neutral',
|
|
357
|
-
format: 'esm',
|
|
358
|
-
}),
|
|
359
|
-
}).code
|
|
360
|
-
|
|
361
366
|
function attemptLoad({ forceExports = false } = {}) {
|
|
362
367
|
// need to write to tsx to enable reading it properly (:/ esbuild-register)
|
|
363
|
-
if (
|
|
368
|
+
if (isDynamic) {
|
|
364
369
|
writtenContents = forceExports
|
|
365
370
|
? esbuildit(transformAddExports(babelParse(esbuildit(fileContents, 'modern'))))
|
|
366
371
|
: esbuildit(fileContents)
|
|
367
372
|
|
|
368
373
|
writeFileSync(loadModule, writtenContents)
|
|
369
374
|
}
|
|
375
|
+
|
|
376
|
+
if (process.env.DEBUG === 'tamagui') {
|
|
377
|
+
console.log(`loadModule`, loadModule, require.resolve(loadModule))
|
|
378
|
+
}
|
|
379
|
+
|
|
370
380
|
return {
|
|
371
381
|
moduleName: name,
|
|
372
382
|
nameToInfo: getComponentStaticConfigByName(
|
|
@@ -377,7 +387,7 @@ function loadComponents(props: Props): null | LoadedComponents[] {
|
|
|
377
387
|
}
|
|
378
388
|
|
|
379
389
|
const dispose = () => {
|
|
380
|
-
|
|
390
|
+
isDynamic && removeSync(loadModule)
|
|
381
391
|
}
|
|
382
392
|
|
|
383
393
|
try {
|
|
@@ -424,8 +434,8 @@ Quiet this warning with environment variable:
|
|
|
424
434
|
`\ndidBabel: ${didBabel}`,
|
|
425
435
|
`\nIn:`,
|
|
426
436
|
writtenContents,
|
|
427
|
-
`\
|
|
428
|
-
|
|
437
|
+
`\nisDynamic: `,
|
|
438
|
+
isDynamic
|
|
429
439
|
)
|
|
430
440
|
}
|
|
431
441
|
return []
|