@tamagui/static 1.0.1-beta.172 → 1.0.1-beta.174

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.
@@ -36,6 +36,7 @@ var import_createEvaluator = require("./createEvaluator.js");
36
36
  var import_evaluateAstNode = require("./evaluateAstNode.js");
37
37
  var import_extractHelpers = require("./extractHelpers.js");
38
38
  var import_findTopmostFunction = require("./findTopmostFunction.js");
39
+ var import_getPrefixLogs = require("./getPrefixLogs.js");
39
40
  var import_getStaticBindingsForScope = require("./getStaticBindingsForScope.js");
40
41
  var import_literalToAst = require("./literalToAst.js");
41
42
  var import_loadTamagui = require("./loadTamagui.js");
@@ -111,26 +112,28 @@ function createExtractor({ logger = console } = { logger: console }) {
111
112
  }
112
113
  return !!(!!((_a = staticConfig.validStyles) == null ? void 0 : _a[name]) || !!import_core_node.pseudoDescriptors[name] || ((_b = staticConfig.variants) == null ? void 0 : _b[name]) || (projectInfo == null ? void 0 : projectInfo.tamaguiConfig.shorthands[name]) || (name[0] === "$" ? !!import_core_node.mediaQueryConfig[name.slice(1)] : false));
113
114
  }
114
- function parseWithConfig({ components, tamaguiConfig }, fileOrPath, {
115
- config = "tamagui.config.ts",
116
- importsWhitelist = ["constants.js"],
117
- evaluateVars = true,
118
- shouldPrintDebug = false,
119
- sourcePath = "",
120
- onExtractTag,
121
- onStyleRule,
122
- getFlattenedNode,
123
- disable,
124
- disableExtraction,
125
- disableExtractInlineMedia,
126
- disableExtractVariables,
127
- disableDebugAttr,
128
- extractStyledDefinitions = false,
129
- prefixLogs,
130
- excludeProps,
131
- target,
132
- ...props
133
- }) {
115
+ function parseWithConfig({ components, tamaguiConfig }, fileOrPath, options) {
116
+ const {
117
+ config = "tamagui.config.ts",
118
+ importsWhitelist = ["constants.js"],
119
+ evaluateVars = true,
120
+ sourcePath = "",
121
+ onExtractTag,
122
+ onStyleRule,
123
+ getFlattenedNode,
124
+ disable,
125
+ disableExtraction,
126
+ disableExtractInlineMedia,
127
+ disableExtractVariables,
128
+ disableDebugAttr,
129
+ disableExtractFoundComponents,
130
+ extractStyledDefinitions = false,
131
+ prefixLogs,
132
+ excludeProps,
133
+ target,
134
+ ...props
135
+ } = options;
136
+ let shouldPrintDebug = options.shouldPrintDebug || false;
134
137
  if (disable) {
135
138
  return null;
136
139
  }
@@ -251,20 +254,35 @@ function createExtractor({ logger = console } = { logger: console }) {
251
254
  }
252
255
  let Component = validComponents[name];
253
256
  if (!Component) {
254
- if (shouldPrintDebug) {
257
+ if (disableExtractFoundComponents) {
258
+ return;
259
+ }
260
+ try {
261
+ const out2 = (0, import_loadTamagui.loadTamaguiSync)({
262
+ forceExports: true,
263
+ bubbleErrors: true,
264
+ components: [sourcePath]
265
+ });
266
+ if ((_a = out2.components) == null ? void 0 : _a[name]) {
267
+ Object.assign(validComponents, out2.components);
268
+ }
269
+ Component = validComponents[name];
270
+ if (shouldPrintDebug) {
271
+ logger.info([`Loaded`, Object.keys(out2.components).join(", "), !!Component].join(" "));
272
+ }
273
+ } catch (err) {
255
274
  logger.info(
256
- `Didn't recognize styled(${name}), ${name} isn't in design system provided to tamagui.config.ts. Will attempt to build isolated and analyze.. ${programPath}`
275
+ `${(0, import_getPrefixLogs.getPrefixLogs)(
276
+ options
277
+ )} skip optimize styled(${name}), unable to pre-process (DEBUG=tamagui for more)`
257
278
  );
258
- }
259
- const out2 = (0, import_loadTamagui.loadTamaguiSync)({
260
- components: [sourcePath]
261
- });
262
- if ((_a = out2.components) == null ? void 0 : _a[name]) {
263
- Object.assign(validComponents, out2.components);
264
- }
265
- Component = validComponents[name];
266
- if (shouldPrintDebug) {
267
- logger.info([`Loaded`, Object.keys(out2.components).join(", "), !!Component].join(" "));
279
+ if (process.env.DEBUG === "tamagui") {
280
+ logger.info(
281
+ ` Disable this with "disableExtractFoundComponents" in your build-time configuration.
282
+
283
+ ${err.message} ${err.stack}`
284
+ );
285
+ }
268
286
  }
269
287
  }
270
288
  if (!Component) {
@@ -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, Visitor } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport {\n PseudoStyles,\n StaticConfigParsed,\n createDOMProps,\n expandStyles,\n getSplitStyles,\n getStylesAtomic,\n mediaQueryConfig,\n proxyThemeVariables,\n pseudoDescriptors,\n} from '@tamagui/core-node'\nimport type { ViewStyle } from 'react-native'\n\nimport { FAILED_EVAL } from '../constants.js'\nimport type {\n ExtractedAttr,\n ExtractedAttrAttr,\n ExtractedAttrStyle,\n ExtractorOptions,\n ExtractorParseProps,\n TamaguiOptions,\n Ternary,\n} from '../types.js'\nimport { createEvaluator, createSafeEvaluator } from './createEvaluator.js'\nimport { evaluateAstNode } from './evaluateAstNode.js'\nimport {\n attrStr,\n findComponentName,\n isInsideTamagui,\n isPresent,\n objToStr,\n} from './extractHelpers.js'\nimport { findTopmostFunction } from './findTopmostFunction.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\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 isValidStyleKey(name: string, staticConfig: StaticConfigParsed) {\n if (!projectInfo) {\n throw new Error(`Tamagui extractor not loaded yet`)\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 function parseWithConfig(\n { components, tamaguiConfig }: TamaguiProjectInfo,\n fileOrPath: FileOrPath,\n {\n config = 'tamagui.config.ts',\n importsWhitelist = ['constants.js'],\n evaluateVars = true,\n shouldPrintDebug = false,\n sourcePath = '',\n onExtractTag,\n onStyleRule,\n getFlattenedNode,\n disable,\n disableExtraction,\n disableExtractInlineMedia,\n disableExtractVariables,\n disableDebugAttr,\n extractStyledDefinitions = false,\n prefixLogs,\n excludeProps,\n target,\n ...props\n }: ExtractorParseProps\n ) {\n if (disable) {\n return null\n }\n if (sourcePath === '') {\n throw new Error(`Must provide a source file name`)\n }\n if (!components) {\n throw new Error(`Must provide components`)\n }\n\n const isTargetingHTML = target === 'html'\n const ogDebug = shouldPrintDebug\n const tm = timer()\n\n if (shouldPrintDebug === 'verbose') {\n console.log('tamagui.config.ts:', { components, config })\n }\n\n tm.mark('load-tamagui', !!shouldPrintDebug)\n\n const proxiedTheme = proxyThemeVariables(\n tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]]\n )\n\n type AccessListener = (key: string) => void\n const themeAccessListeners = new Set<AccessListener>()\n const defaultTheme = new Proxy(proxiedTheme, {\n get(target, key) {\n themeAccessListeners.forEach((cb) => cb(String(key)))\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 /**\n * Step 1: Determine if importing any statically extractable components\n */\n const isInternalImport = (importStr: string) => {\n return isInsideTamagui(sourcePath) && importStr[0] === '.'\n }\n\n const validComponents: { [key: string]: any } = Object.keys(components)\n // check if uppercase to avoid hitting media query proxy before init\n .filter((key) => key[0].toUpperCase() === key[0] && !!components[key]?.staticConfig)\n .reduce((obj, name) => {\n obj[name] = components[name]\n return obj\n }, {})\n\n if (Object.keys(validComponents).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(`validComponents ${Object.keys(validComponents).join(', ')}`)\n }\n\n let doesUseValidImport = false\n let hasImportedTheme = false\n\n for (const bodyPath of body) {\n if (bodyPath.type !== 'ImportDeclaration') continue\n const node = ('node' in bodyPath ? bodyPath.node : bodyPath) as t.ImportDeclaration\n const from = node.source.value\n // if importing styled()\n const isValidImport =\n props.components.includes(from) ||\n isInternalImport(from) ||\n from === '@tamagui/core' ||\n from === 'tamagui'\n\n if (extractStyledDefinitions) {\n if (isValidImport) {\n if (\n node.specifiers.some((specifier) => {\n return specifier.local.name === 'styled'\n })\n ) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (isValidImport) {\n const names = node.specifiers.map((specifier) => specifier.local.name)\n const isValidComponent = names.some((name) => !!(validComponents[name] || validHooks[name]))\n if (shouldPrintDebug === 'verbose') {\n logger.info(\n `import ${names.join(', ')} from ${from} isValidComponent ${isValidComponent}`\n )\n }\n if (isValidComponent) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (shouldPrintDebug) {\n logger.info(`source: ${sourcePath} doesUseValidImport ${doesUseValidImport}`)\n }\n\n if (!doesUseValidImport) {\n return null\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: Visitor<{}>) => {\n return fileOrPath.type === 'File' ? traverse(fileOrPath, a) : fileOrPath.traverse(a)\n }\n\n /**\n * Step 2: Statically extract from JSX < /> nodes\n */\n let programPath: NodePath<t.Program> | 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 Program: {\n enter(path) {\n programPath = path\n },\n },\n\n // styled() calls\n CallExpression(path) {\n if (disable || disableExtraction || 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 const definition = path.node.arguments[1]\n\n if (!name || !definition || !t.isObjectExpression(definition)) {\n return\n }\n\n let Component = validComponents[name] as { staticConfig: StaticConfigParsed } | undefined\n\n if (!Component) {\n if (shouldPrintDebug) {\n logger.info(\n `Didn't recognize styled(${name}), ${name} isn't in design system provided to tamagui.config.ts. Will attempt to build isolated and analyze.. ${programPath}`\n )\n }\n\n const out = loadTamaguiSync({\n components: [sourcePath],\n })\n\n if (out.components?.[name]) {\n // add new components\n // TODO dont Clobber, do by file\n Object.assign(validComponents, out.components)\n }\n\n Component = validComponents[name]\n\n if (shouldPrintDebug) {\n logger.info([`Loaded`, Object.keys(out.components).join(', '), !!Component].join(' '))\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 tamaguiConfig,\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 mounted: false,\n press: false,\n pressIn: false,\n resolveVariablesAs: 'variable',\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\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=>\\n', 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 tm.mark('jsx-element', !!shouldPrintDebug)\n\n const node = traversePath.node.openingElement\n const ogAttributes = node.attributes\n const componentName = findComponentName(traversePath.scope)\n const closingElement = traversePath.node.closingElement\n\n // skip non-identifier opening elements (member expressions, etc.)\n if (t.isJSXMemberExpression(closingElement?.name) || !t.isJSXIdentifier(node.name)) {\n return\n }\n\n // validate its a proper import from tamagui (or internally inside tamagui)\n const binding = traversePath.scope.getBinding(node.name.name)\n\n if (binding) {\n if (!t.isImportDeclaration(binding.path.parent)) {\n return\n }\n const source = binding.path.parent.source\n if (!props.components.includes(source.value) && !isInternalImport(source.value)) {\n return\n }\n if (!validComponents[binding.identifier.name]) {\n return\n }\n }\n\n const component = validComponents[node.name.name] as { staticConfig?: StaticConfigParsed }\n if (!component || !component.staticConfig) {\n return\n }\n\n const originalNodeName = node.name.name\n\n // found a valid tag\n res.found++\n\n const filePath = `./${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 .map((n) => {\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 ...(props.inlineProps || []),\n ...(staticConfig.inlineProps || []),\n ])\n\n const deoptProps = new Set([\n // always de-opt animation\n 'animation',\n ...(props.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 tamaguiConfig,\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 // allow disabling this extraction\n if (disableExtractInlineMedia) {\n return attr\n }\n\n const shortname = name.slice(1)\n if (mediaQueryConfig[shortname]) {\n const expression = attribute.value.expression\n if (!t.isJSXEmptyExpression(expression)) {\n const ternaries = createTernariesFromObjectProperties(\n t.stringLiteral(shortname),\n expression,\n {\n inlineMediaQuery: shortname,\n }\n )\n if (ternaries) {\n return ternaries.map((value) => ({\n type: 'ternary',\n value,\n }))\n }\n }\n }\n }\n\n const [value, valuePath] = (() => {\n if (t.isJSXExpressionContainer(attribute?.value)) {\n return [attribute.value.expression!, path.get('value')!] as const\n } else {\n return [attribute.value!, path.get('value')!] as const\n }\n })()\n\n const remove = () => {\n Array.isArray(valuePath) ? valuePath.map((p) => p.remove()) : valuePath.remove()\n }\n\n if (name === 'ref') {\n if (shouldPrintDebug) {\n 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) {\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 ) {\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 // now update to new values\n node.attributes = attrs.filter(isAttr).map((x) => x.value)\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 // 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 inlined.delete('theme')\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 =\n flatNode &&\n !shouldDeopt &&\n canFlattenProps &&\n !hasSpread &&\n staticConfig.neverFlatten !== true &&\n (staticConfig.neverFlatten === 'jsx' ? hasOnlyStringChildren : true)\n\n const shouldWrapTheme = shouldFlatten && themeVal\n\n if (disableExtractVariables) {\n // if it accesses any theme values during evaluation\n themeAccessListeners.add((key) => {\n shouldFlatten = false\n if (shouldPrintDebug) {\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 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 mounted: true, // TODO match logic in createComponent\n press: false,\n pressIn: false,\n }\n\n // evaluates all static attributes into a simple object\n 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] === '$') {\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 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 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 node\n }\n\n // final lazy extra loop:\n const existingStyleKeys = new Set()\n for (let i = attrs.length - 1; i >= 0; i--) {\n const attr = attrs[i]\n\n // if flattening map inline props to proper flattened names\n if (shouldFlatten) {\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 node.name.name = flatNode\n res.flattened++\n if (closingElement) {\n closingElement.name.name = flatNode\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n 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 attrs,\n node,\n lineNumbers,\n filePath,\n attemptEval,\n jsxPath: traversePath,\n originalNodeName,\n isFlattened: shouldFlatten,\n 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, Visitor } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport {\n PseudoStyles,\n StaticConfigParsed,\n createDOMProps,\n expandStyles,\n getSplitStyles,\n getStylesAtomic,\n mediaQueryConfig,\n proxyThemeVariables,\n pseudoDescriptors,\n} from '@tamagui/core-node'\nimport type { ViewStyle } from 'react-native'\n\nimport { FAILED_EVAL } from '../constants.js'\nimport type {\n ExtractedAttr,\n ExtractedAttrAttr,\n ExtractedAttrStyle,\n ExtractorOptions,\n ExtractorParseProps,\n TamaguiOptions,\n Ternary,\n} from '../types.js'\nimport { createEvaluator, createSafeEvaluator } from './createEvaluator.js'\nimport { evaluateAstNode } from './evaluateAstNode.js'\nimport {\n attrStr,\n findComponentName,\n isInsideTamagui,\n isPresent,\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\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 isValidStyleKey(name: string, staticConfig: StaticConfigParsed) {\n if (!projectInfo) {\n throw new Error(`Tamagui extractor not loaded yet`)\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 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 extractStyledDefinitions = false,\n prefixLogs,\n excludeProps,\n target,\n ...props\n } = options\n\n let shouldPrintDebug = options.shouldPrintDebug || false\n\n if (disable) {\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\n const isTargetingHTML = target === 'html'\n const ogDebug = shouldPrintDebug\n const tm = timer()\n\n if (shouldPrintDebug === 'verbose') {\n console.log('tamagui.config.ts:', { components, config })\n }\n\n tm.mark('load-tamagui', !!shouldPrintDebug)\n\n const proxiedTheme = proxyThemeVariables(\n tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]]\n )\n\n type AccessListener = (key: string) => void\n const themeAccessListeners = new Set<AccessListener>()\n const defaultTheme = new Proxy(proxiedTheme, {\n get(target, key) {\n themeAccessListeners.forEach((cb) => cb(String(key)))\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 /**\n * Step 1: Determine if importing any statically extractable components\n */\n const isInternalImport = (importStr: string) => {\n return isInsideTamagui(sourcePath) && importStr[0] === '.'\n }\n\n const validComponents: { [key: string]: any } = Object.keys(components)\n // check if uppercase to avoid hitting media query proxy before init\n .filter((key) => key[0].toUpperCase() === key[0] && !!components[key]?.staticConfig)\n .reduce((obj, name) => {\n obj[name] = components[name]\n return obj\n }, {})\n\n if (Object.keys(validComponents).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(`validComponents ${Object.keys(validComponents).join(', ')}`)\n }\n\n let doesUseValidImport = false\n let hasImportedTheme = false\n\n for (const bodyPath of body) {\n if (bodyPath.type !== 'ImportDeclaration') continue\n const node = ('node' in bodyPath ? bodyPath.node : bodyPath) as t.ImportDeclaration\n const from = node.source.value\n // if importing styled()\n const isValidImport =\n props.components.includes(from) ||\n isInternalImport(from) ||\n from === '@tamagui/core' ||\n from === 'tamagui'\n\n if (extractStyledDefinitions) {\n if (isValidImport) {\n if (\n node.specifiers.some((specifier) => {\n return specifier.local.name === 'styled'\n })\n ) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (isValidImport) {\n const names = node.specifiers.map((specifier) => specifier.local.name)\n const isValidComponent = names.some((name) => !!(validComponents[name] || validHooks[name]))\n if (shouldPrintDebug === 'verbose') {\n logger.info(\n `import ${names.join(', ')} from ${from} isValidComponent ${isValidComponent}`\n )\n }\n if (isValidComponent) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (shouldPrintDebug) {\n logger.info(`source: ${sourcePath} doesUseValidImport ${doesUseValidImport}`)\n }\n\n if (!doesUseValidImport) {\n return null\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: Visitor<{}>) => {\n return fileOrPath.type === 'File' ? traverse(fileOrPath, a) : fileOrPath.traverse(a)\n }\n\n /**\n * Step 2: Statically extract from JSX < /> nodes\n */\n let programPath: NodePath<t.Program> | 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 Program: {\n enter(path) {\n programPath = path\n },\n },\n\n // styled() calls\n CallExpression(path) {\n if (disable || disableExtraction || 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 const definition = path.node.arguments[1]\n\n if (!name || !definition || !t.isObjectExpression(definition)) {\n return\n }\n\n let Component = validComponents[name] as { staticConfig: StaticConfigParsed } | undefined\n\n if (!Component) {\n if (disableExtractFoundComponents) {\n return\n }\n\n try {\n const out = loadTamaguiSync({\n // TODO would extract more, is NO-OP for now..\n forceExports: true,\n bubbleErrors: true,\n components: [sourcePath],\n })\n\n if (out.components?.[name]) {\n // add new components\n // TODO dont Clobber, do by file\n Object.assign(validComponents, out.components)\n }\n\n Component = validComponents[name]\n\n if (shouldPrintDebug) {\n logger.info([`Loaded`, Object.keys(out.components).join(', '), !!Component].join(' '))\n }\n } catch (err: any) {\n logger.info(\n `${getPrefixLogs(\n options\n )} skip optimize styled(${name}), unable to pre-process (DEBUG=tamagui for more)`\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 tamaguiConfig,\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 mounted: false,\n press: false,\n pressIn: false,\n resolveVariablesAs: 'variable',\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\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=>\\n', 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 tm.mark('jsx-element', !!shouldPrintDebug)\n\n const node = traversePath.node.openingElement\n const ogAttributes = node.attributes\n const componentName = findComponentName(traversePath.scope)\n const closingElement = traversePath.node.closingElement\n\n // skip non-identifier opening elements (member expressions, etc.)\n if (t.isJSXMemberExpression(closingElement?.name) || !t.isJSXIdentifier(node.name)) {\n return\n }\n\n // validate its a proper import from tamagui (or internally inside tamagui)\n const binding = traversePath.scope.getBinding(node.name.name)\n\n if (binding) {\n if (!t.isImportDeclaration(binding.path.parent)) {\n return\n }\n const source = binding.path.parent.source\n if (!props.components.includes(source.value) && !isInternalImport(source.value)) {\n return\n }\n if (!validComponents[binding.identifier.name]) {\n return\n }\n }\n\n const component = validComponents[node.name.name] as { staticConfig?: StaticConfigParsed }\n if (!component || !component.staticConfig) {\n return\n }\n\n const originalNodeName = node.name.name\n\n // found a valid tag\n res.found++\n\n const filePath = `./${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 .map((n) => {\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 ...(props.inlineProps || []),\n ...(staticConfig.inlineProps || []),\n ])\n\n const deoptProps = new Set([\n // always de-opt animation\n 'animation',\n ...(props.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 tamaguiConfig,\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 // allow disabling this extraction\n if (disableExtractInlineMedia) {\n return attr\n }\n\n const shortname = name.slice(1)\n if (mediaQueryConfig[shortname]) {\n const expression = attribute.value.expression\n if (!t.isJSXEmptyExpression(expression)) {\n const ternaries = createTernariesFromObjectProperties(\n t.stringLiteral(shortname),\n expression,\n {\n inlineMediaQuery: shortname,\n }\n )\n if (ternaries) {\n return ternaries.map((value) => ({\n type: 'ternary',\n value,\n }))\n }\n }\n }\n }\n\n const [value, valuePath] = (() => {\n if (t.isJSXExpressionContainer(attribute?.value)) {\n return [attribute.value.expression!, path.get('value')!] as const\n } else {\n return [attribute.value!, path.get('value')!] as const\n }\n })()\n\n const remove = () => {\n Array.isArray(valuePath) ? valuePath.map((p) => p.remove()) : valuePath.remove()\n }\n\n if (name === 'ref') {\n if (shouldPrintDebug) {\n 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) {\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 ) {\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 // now update to new values\n node.attributes = attrs.filter(isAttr).map((x) => x.value)\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 // 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 inlined.delete('theme')\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 =\n flatNode &&\n !shouldDeopt &&\n canFlattenProps &&\n !hasSpread &&\n staticConfig.neverFlatten !== true &&\n (staticConfig.neverFlatten === 'jsx' ? hasOnlyStringChildren : true)\n\n const shouldWrapTheme = shouldFlatten && themeVal\n\n if (disableExtractVariables) {\n // if it accesses any theme values during evaluation\n themeAccessListeners.add((key) => {\n shouldFlatten = false\n if (shouldPrintDebug) {\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 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 mounted: true, // TODO match logic in createComponent\n press: false,\n pressIn: false,\n }\n\n // evaluates all static attributes into a simple object\n 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] === '$') {\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 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 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 node\n }\n\n // final lazy extra loop:\n const existingStyleKeys = new Set()\n for (let i = attrs.length - 1; i >= 0; i--) {\n const attr = attrs[i]\n\n // if flattening map inline props to proper flattened names\n if (shouldFlatten) {\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 node.name.name = flatNode\n res.flattened++\n if (closingElement) {\n closingElement.name.name = flatNode\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n 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 attrs,\n node,\n lineNumbers,\n filePath,\n attemptEval,\n jsxPath: traversePath,\n originalNodeName,\n isFlattened: shouldFlatten,\n 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", "target", "traverse", "out", "evaluateAttribute", "isStaticObject", "createTernariesFromObjectProperties", "ternaries", "value", "splitVariants", "_a", "variants", "expandStylesWithoutVariants", "mergeStyles", "prev", "res", "key", "props"]
7
7
  }
@@ -78,8 +78,8 @@ Tamagui built config and components:`
78
78
  (0, import_cli_color.colorLog)(
79
79
  import_cli_color.Color.Dim,
80
80
  `
81
- - Config: ${(0, import_path.relative)(process.cwd(), configOutPath)}
82
- - Components: ${(0, import_path.relative)(process.cwd(), componentOutPaths.join(", "))}
81
+ - Config: .${import_path.sep}${(0, import_path.relative)(process.cwd(), configOutPath)}
82
+ - Components: .${import_path.sep}${(0, import_path.relative)(process.cwd(), componentOutPaths.join(", "))}
83
83
  `
84
84
  );
85
85
  await Promise.all([
@@ -100,11 +100,14 @@ Tamagui built config and components:`
100
100
  console.log(`Built configs`);
101
101
  }
102
102
  const coreNode = require("@tamagui/core-node");
103
- (0, import_require.registerRequire)();
103
+ (0, import_require.registerRequire)(props.bubbleErrors);
104
104
  const config = require(configOutPath).default;
105
105
  (0, import_require.unregisterRequire)();
106
106
  const components = {
107
- ...loadComponents(componentOutPaths),
107
+ ...loadComponents({
108
+ ...props,
109
+ components: componentOutPaths
110
+ }),
108
111
  ...includesCore && gatherTamaguiComponentInfo([coreNode])
109
112
  };
110
113
  cache[key] = {
@@ -184,17 +187,19 @@ async function buildTamaguiConfig(props, options, aliases) {
184
187
  ]
185
188
  });
186
189
  }
190
+ const esbuildOptions = {
191
+ target: "es2019",
192
+ format: "cjs",
193
+ jsx: "transform"
194
+ };
187
195
  function loadTamaguiSync(props) {
188
196
  const key = JSON.stringify(props);
189
197
  if (cache[key]) {
190
198
  return cache[key];
191
199
  }
192
- const { unregister } = require("esbuild-register/dist/node").register({
193
- target: "es2019",
194
- format: "cjs"
195
- });
200
+ const { unregister } = require("esbuild-register/dist/node").register(esbuildOptions);
196
201
  try {
197
- (0, import_require.registerRequire)();
202
+ (0, import_require.registerRequire)(props.bubbleErrors);
198
203
  process.env.IS_STATIC = "is_static";
199
204
  if (typeof globalThis["__DEV__"] === "undefined") {
200
205
  globalThis["__DEV__"] = process.env.NODE_ENV === "development";
@@ -210,7 +215,7 @@ function loadTamaguiSync(props) {
210
215
  throw new Error(`Can't find valid config in ${confPath}`);
211
216
  }
212
217
  }
213
- const components = loadComponents(props.components);
218
+ const components = loadComponents(props);
214
219
  if (process.env.DEBUG === "tamagui") {
215
220
  console.log(`components`, components);
216
221
  }
@@ -224,6 +229,9 @@ function loadTamaguiSync(props) {
224
229
  nameToPaths: (0, import_require.getNameToPaths)()
225
230
  };
226
231
  } catch (err) {
232
+ if (props.bubbleErrors) {
233
+ throw err;
234
+ }
227
235
  if (err instanceof Error) {
228
236
  console.warn(
229
237
  `Error loading tamagui.config.ts (set DEBUG=tamagui to see full stack), running tamagui without custom config`
@@ -247,7 +255,9 @@ function loadTamaguiSync(props) {
247
255
  }
248
256
  return cache[key];
249
257
  } catch (err) {
250
- console.log("Error loading Tamagui", err);
258
+ if (!props.bubbleErrors) {
259
+ console.log("Error loading Tamagui", err);
260
+ }
251
261
  throw err;
252
262
  } finally {
253
263
  unregister();
@@ -258,7 +268,8 @@ function interopDefaultExport(mod) {
258
268
  return (mod == null ? void 0 : mod.default) ?? mod;
259
269
  }
260
270
  const cacheComponents = {};
261
- function loadComponents(componentsModules) {
271
+ function loadComponents(props) {
272
+ const componentsModules = props.components;
262
273
  const key = componentsModules.join("");
263
274
  if (cacheComponents[key]) {
264
275
  return cacheComponents[key];
@@ -271,6 +282,9 @@ function loadComponents(componentsModules) {
271
282
  cacheComponents[key] = res;
272
283
  return res;
273
284
  } catch (err) {
285
+ if (props.bubbleErrors) {
286
+ throw err;
287
+ }
274
288
  console.log(`Tamagui error bundling components`, err.message, err.stack);
275
289
  }
276
290
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/extractor/loadTamagui.ts"],
4
- "sourcesContent": ["/* eslint-disable no-console */\nimport { basename, dirname, join, relative, sep } from 'path'\n\nimport { Color, colorLog } from '@tamagui/cli-color'\nimport { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport type { StaticConfig, TamaguiComponent, TamaguiInternalConfig } from '@tamagui/core-node'\nimport { createTamagui } from '@tamagui/core-node'\nimport esbuild from 'esbuild'\nimport { ensureDir, pathExists, stat, writeFile } from 'fs-extra'\n\nimport { SHOULD_DEBUG } from '../constants.js'\nimport { getNameToPaths, registerRequire, unregisterRequire } from '../require.js'\n\ntype NameToPaths = {\n [key: string]: Set<string>\n}\n\nexport type TamaguiProjectInfo = {\n components: Record<string, TamaguiComponent>\n tamaguiConfig: TamaguiInternalConfig\n nameToPaths: NameToPaths\n}\n\ntype Props = { components: string[]; config?: string }\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(), 'dist', 'tamagui-node')\n const configOutPath = join(tmpDir, `tamagui.config.js`)\n const includesCore = props.components.includes('@tamagui/core')\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']\n const configEntry = props.config ? join(process.cwd(), props.config) : ''\n\n if (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: ${relative(process.cwd(), configOutPath)}\n - Components: ${relative(process.cwd(), componentOutPaths.join(', '))}\n`\n )\n\n await Promise.all([\n props.config\n ? buildTamaguiConfig(props, {\n entryPoints: [configEntry],\n external,\n outfile: configOutPath,\n })\n : null,\n ...baseComponents.map((componentModule, i) => {\n return buildTamaguiConfig(props, {\n entryPoints: [componentModule],\n external,\n outfile: componentOutPaths[i],\n })\n }),\n ])\n\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Built configs`)\n }\n\n const coreNode = require('@tamagui/core-node')\n\n registerRequire()\n const config = require(configOutPath).default\n unregisterRequire()\n\n const components = {\n ...loadComponents(componentOutPaths),\n ...(includesCore && gatherTamaguiComponentInfo([coreNode])),\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}\n\nasync function buildTamaguiConfig(\n props: Props,\n options: Partial<esbuild.BuildOptions> & { outfile: string },\n aliases?: Record<string, string>\n) {\n const alias = require('@tamagui/core-node').aliasPlugin\n // until i do fancier things w plugins:\n const lockFile = join(dirname(options.outfile), basename(options.outfile, '.lock'))\n const lockStat = await stat(lockFile).catch(() => {\n // ok\n })\n const lockedMsAgo = !lockStat\n ? Infinity\n : new Date().getTime() - new Date(lockStat.mtime).getTime()\n if (lockedMsAgo < 500) {\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Waiting for existing build`, options.entryPoints)\n }\n let tries = 5\n while (tries--) {\n if (await pathExists(options.outfile)) {\n return\n } else {\n await new Promise((res) => setTimeout(res, 50))\n }\n }\n }\n\n void writeFile(lockFile, '')\n\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Building`, options.entryPoints)\n }\n\n const tsconfig = join(__dirname, '..', '..', 'tamagui.tsconfig.json')\n\n return esbuild.build({\n bundle: true,\n ...options,\n format: 'cjs',\n target: 'node18',\n jsx: 'transform',\n jsxFactory: 'react',\n allowOverwrite: true,\n keepNames: true,\n platform: 'node',\n tsconfig,\n loader: {\n '.js': 'jsx',\n },\n logLevel: 'warning',\n plugins: [\n {\n name: 'external',\n setup(build) {\n build.onResolve({ filter: /@tamagui\\/core/ }, (args) => {\n return {\n path: '@tamagui/core-node',\n external: true,\n }\n })\n\n build.onResolve({ filter: /^(react-native|react-native\\/.*)$/ }, (args) => {\n return {\n path: 'react-native-web-lite',\n external: true,\n }\n })\n },\n },\n alias({\n 'react-native-svg': require.resolve('@tamagui/react-native-svg'),\n 'react-native-safe-area-context': require.resolve('@tamagui/fake-react-native'),\n 'react-native-gesture-handler': require.resolve('@tamagui/proxy-worm'),\n 'react-native-reanimated': require.resolve('@tamagui/proxy-worm'),\n ...aliases,\n }),\n ],\n })\n}\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({\n target: 'es2019',\n format: 'cjs',\n })\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 // @ts-ignore\n if (typeof globalThis['__DEV__'] === 'undefined') {\n // @ts-ignore\n globalThis['__DEV__'] = process.env.NODE_ENV === 'development'\n }\n\n try {\n // import config\n let tamaguiConfig: TamaguiInternalConfig | null = null\n\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 }\n\n const components = loadComponents(props.components)\n\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, components)\n }\n\n // undo shims\n process.env.IS_STATIC = undefined\n\n // set up core-node\n if (tamaguiConfig) {\n createTamagui(tamaguiConfig)\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 } catch (err) {\n console.log('Error loading Tamagui', err)\n throw err\n } finally {\n unregister()\n unregisterRequire()\n }\n}\n\nfunction interopDefaultExport(mod: any) {\n return mod?.default ?? mod\n}\n\nconst cacheComponents = {}\n\nfunction loadComponents(componentsModules: string[]) {\n const key = componentsModules.join('')\n if (cacheComponents[key]) {\n return cacheComponents[key]\n }\n try {\n const requiredModules = componentsModules.map((name) => {\n return interopDefaultExport(require(name))\n })\n const res = gatherTamaguiComponentInfo(requiredModules)\n cacheComponents[key] = res\n return res\n } catch (err: any) {\n console.log(`Tamagui error bundling components`, err.message, err.stack)\n }\n}\n\nfunction gatherTamaguiComponentInfo(packages: any[]) {\n const components = {}\n for (const exported of packages) {\n try {\n for (const componentName in exported) {\n const found = getTamaguiComponent(componentName, exported[componentName])\n if (found) {\n // remove non-stringifyable\n const { Component, reactNativeWebComponent, ...sc } = found.staticConfig\n Object.assign(components, { [componentName]: { staticConfig: sc } })\n }\n }\n } catch (err) {\n console.error(`Tamagui failed getting components`)\n if (err instanceof Error) {\n console.error(err.message, err.stack)\n } else {\n console.error(err)\n }\n }\n }\n return components\n}\n\nfunction getTamaguiComponent(\n name: string,\n Component: any\n): undefined | { staticConfig: StaticConfig } {\n if (name[0].toUpperCase() !== name[0]) {\n return\n }\n const staticConfig = Component?.staticConfig as StaticConfig | undefined\n if (staticConfig) {\n return Component\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable no-console */\nimport { basename, dirname, join, relative, sep } from 'path'\n\nimport { Color, colorLog } from '@tamagui/cli-color'\nimport { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport type { StaticConfig, TamaguiComponent, TamaguiInternalConfig } from '@tamagui/core-node'\nimport { createTamagui } from '@tamagui/core-node'\nimport esbuild from 'esbuild'\nimport { ensureDir, pathExists, stat, writeFile } from 'fs-extra'\n\nimport { SHOULD_DEBUG } from '../constants.js'\nimport { getNameToPaths, registerRequire, unregisterRequire } from '../require.js'\n\ntype NameToPaths = {\n [key: string]: Set<string>\n}\n\nexport type TamaguiProjectInfo = {\n components: Record<string, TamaguiComponent>\n tamaguiConfig: TamaguiInternalConfig\n nameToPaths: NameToPaths\n}\n\ntype Props = {\n components: string[]\n config?: string\n forceExports?: boolean\n bubbleErrors?: 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(), 'dist', 'tamagui-node')\n const configOutPath = join(tmpDir, `tamagui.config.js`)\n const includesCore = props.components.includes('@tamagui/core')\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']\n const configEntry = props.config ? join(process.cwd(), props.config) : ''\n\n if (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: .${sep}${relative(process.cwd(), componentOutPaths.join(', '))}\n`\n )\n\n await Promise.all([\n props.config\n ? buildTamaguiConfig(props, {\n entryPoints: [configEntry],\n external,\n outfile: configOutPath,\n })\n : null,\n ...baseComponents.map((componentModule, i) => {\n return buildTamaguiConfig(props, {\n entryPoints: [componentModule],\n external,\n outfile: componentOutPaths[i],\n })\n }),\n ])\n\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Built configs`)\n }\n\n const coreNode = require('@tamagui/core-node')\n\n registerRequire(props.bubbleErrors)\n const config = require(configOutPath).default\n unregisterRequire()\n\n const components = {\n ...loadComponents({\n ...props,\n components: componentOutPaths,\n }),\n ...(includesCore && gatherTamaguiComponentInfo([coreNode])),\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}\n\nasync function buildTamaguiConfig(\n props: Props,\n options: Partial<esbuild.BuildOptions> & { outfile: string },\n aliases?: Record<string, string>\n) {\n const alias = require('@tamagui/core-node').aliasPlugin\n // until i do fancier things w plugins:\n const lockFile = join(dirname(options.outfile), basename(options.outfile, '.lock'))\n const lockStat = await stat(lockFile).catch(() => {\n // ok\n })\n const lockedMsAgo = !lockStat\n ? Infinity\n : new Date().getTime() - new Date(lockStat.mtime).getTime()\n if (lockedMsAgo < 500) {\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Waiting for existing build`, options.entryPoints)\n }\n let tries = 5\n while (tries--) {\n if (await pathExists(options.outfile)) {\n return\n } else {\n await new Promise((res) => setTimeout(res, 50))\n }\n }\n }\n\n void writeFile(lockFile, '')\n\n if (process.env.DEBUG?.startsWith('tamagui')) {\n console.log(`Building`, options.entryPoints)\n }\n\n const tsconfig = join(__dirname, '..', '..', 'tamagui.tsconfig.json')\n\n return esbuild.build({\n bundle: true,\n ...options,\n format: 'cjs',\n target: 'node18',\n jsx: 'transform',\n jsxFactory: 'react',\n allowOverwrite: true,\n keepNames: true,\n platform: 'node',\n tsconfig,\n loader: {\n '.js': 'jsx',\n },\n logLevel: 'warning',\n plugins: [\n {\n name: 'external',\n setup(build) {\n build.onResolve({ filter: /@tamagui\\/core/ }, (args) => {\n return {\n path: '@tamagui/core-node',\n external: true,\n }\n })\n\n build.onResolve({ filter: /^(react-native|react-native\\/.*)$/ }, (args) => {\n return {\n path: 'react-native-web-lite',\n external: true,\n }\n })\n },\n },\n alias({\n 'react-native-svg': require.resolve('@tamagui/react-native-svg'),\n 'react-native-safe-area-context': require.resolve('@tamagui/fake-react-native'),\n 'react-native-gesture-handler': require.resolve('@tamagui/proxy-worm'),\n 'react-native-reanimated': require.resolve('@tamagui/proxy-worm'),\n ...aliases,\n }),\n ],\n })\n}\n\nconst esbuildOptions: esbuild.BuildOptions = {\n target: 'es2019',\n format: 'cjs',\n jsx: 'transform',\n}\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(props.bubbleErrors)\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 // @ts-ignore\n if (typeof globalThis['__DEV__'] === 'undefined') {\n // @ts-ignore\n globalThis['__DEV__'] = process.env.NODE_ENV === 'development'\n }\n\n try {\n // import config\n let tamaguiConfig: TamaguiInternalConfig | null = null\n\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 }\n\n const components = loadComponents(props)\n\n if (process.env.DEBUG === 'tamagui') {\n console.log(`components`, components)\n }\n\n // undo shims\n process.env.IS_STATIC = undefined\n\n // set up core-node\n if (tamaguiConfig) {\n createTamagui(tamaguiConfig)\n }\n\n cache[key] = {\n components,\n tamaguiConfig,\n nameToPaths: getNameToPaths(),\n }\n } catch (err) {\n if (props.bubbleErrors) {\n throw err\n }\n\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 } catch (err) {\n if (!props.bubbleErrors) {\n console.log('Error loading Tamagui', err)\n }\n throw err\n } finally {\n unregister()\n unregisterRequire()\n }\n}\n\nfunction interopDefaultExport(mod: any) {\n return mod?.default ?? mod\n}\n\nconst cacheComponents = {}\n\nfunction loadComponents(props: Props) {\n const componentsModules = props.components\n const key = componentsModules.join('')\n if (cacheComponents[key]) {\n return cacheComponents[key]\n }\n try {\n const requiredModules = componentsModules.map((name) => {\n return interopDefaultExport(require(name))\n })\n const res = gatherTamaguiComponentInfo(requiredModules)\n cacheComponents[key] = res\n return res\n } catch (err: any) {\n if (props.bubbleErrors) {\n throw err\n }\n console.log(`Tamagui error bundling components`, err.message, err.stack)\n }\n}\n\nfunction gatherTamaguiComponentInfo(packages: any[]) {\n const components = {}\n for (const exported of packages) {\n try {\n for (const componentName in exported) {\n const found = getTamaguiComponent(componentName, exported[componentName])\n if (found) {\n // remove non-stringifyable\n const { Component, reactNativeWebComponent, ...sc } = found.staticConfig\n Object.assign(components, { [componentName]: { staticConfig: sc } })\n }\n }\n } catch (err) {\n console.error(`Tamagui failed getting components`)\n if (err instanceof Error) {\n console.error(err.message, err.stack)\n } else {\n console.error(err)\n }\n }\n }\n return components\n}\n\nfunction getTamaguiComponent(\n name: string,\n Component: any\n): undefined | { staticConfig: StaticConfig } {\n if (name[0].toUpperCase() !== name[0]) {\n return\n }\n const staticConfig = Component?.staticConfig as StaticConfig | undefined\n if (staticConfig) {\n return Component\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["esbuild"]
7
7
  }
package/dist/require.js CHANGED
@@ -34,7 +34,7 @@ let tries = 0;
34
34
  setInterval(() => {
35
35
  tries = 0;
36
36
  }, 50);
37
- function registerRequire() {
37
+ function registerRequire(bubbleErrors) {
38
38
  if (Module.prototype.require !== globalThis["ogRequire"]) {
39
39
  console.warn("didnt unregister before re-registering");
40
40
  process.exit(1);
@@ -62,6 +62,9 @@ function registerRequire() {
62
62
  const out = og.apply(this, arguments);
63
63
  return out;
64
64
  } catch (err) {
65
+ if (bubbleErrors) {
66
+ throw err;
67
+ }
65
68
  console.error(
66
69
  `Tamagui failed requiring ${path} from your tamagui.config.ts file, ignoring
67
70
  `,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/require.ts"],
4
- "sourcesContent": ["import { join, sep } from 'path'\n\nimport type { StaticConfig } from '@tamagui/core-node'\n\nimport { SHOULD_DEBUG } from './constants.js'\n\nconst nameToPaths = {}\nconst Module = require('module')\nconst og = Module.prototype.require\nglobalThis['ogRequire'] = og\n\nexport const getNameToPaths = () => nameToPaths\n\n// just for catching egregious amounts of errors in a tight loop\nlet tries = 0\nsetInterval(() => {\n tries = 0\n}, 50)\n\nexport function registerRequire() {\n if (Module.prototype.require !== globalThis['ogRequire']) {\n // eslint-disable-next-line no-console\n console.warn('didnt unregister before re-registering')\n process.exit(1)\n }\n\n const proxyWorm = require('@tamagui/proxy-worm')\n // TODO can swap with react-native-web-lite\n const rnw = require('react-native-web')\n const core = require('@tamagui/core-node')\n\n Module.prototype.require = function (path: string) {\n if (SHOULD_DEBUG) {\n // eslint-disable-next-line no-console\n console.log('tamagui:require', path)\n }\n if (path.endsWith('.css') || path.endsWith('.json') || path.endsWith('.ttf')) {\n return {}\n }\n if (\n path === '@gorhom/bottom-sheet' ||\n path.startsWith('react-native-reanimated') ||\n path === 'expo-linear-gradient' ||\n path === '@expo/vector-icons'\n ) {\n return proxyWorm\n }\n if (\n path.startsWith('react-native') &&\n // allow our rnw.tsx imports through\n !path.startsWith('react-native-web/dist/cjs/exports'.replace(/\\//g, sep))\n ) {\n return rnw\n }\n if (path === '@tamagui/core') {\n return core\n }\n try {\n const out = og.apply(this, arguments)\n // only for studio disable for now\n // if (!nameToPaths[path]) {\n // if (out && typeof out === 'object') {\n // for (const key in out) {\n // try {\n // const conf = out[key]?.staticConfig as StaticConfig\n // if (conf) {\n // if (conf.componentName) {\n // nameToPaths[conf.componentName] ??= new Set()\n // const fullName = path.startsWith('.')\n // ? join(`${this.path.replace(/dist(\\/cjs)?/, 'src')}`, path)\n // : path\n // nameToPaths[conf.componentName].add(fullName)\n // } else {\n // // console.log('no name component', path)\n // }\n // }\n // } catch {\n // // ok\n // }\n // }\n // }\n // }\n return out\n } catch (err: any) {\n // eslint-disable-next-line no-console\n console.error(\n `Tamagui failed requiring ${path} from your tamagui.config.ts file, ignoring\\n`,\n err.message,\n err.stack\n )\n const max = process.env.TAMAGUI_MAX_ERRORS ? +process.env.TAMAGUI_MAX_ERRORS : 200\n if (++tries > max) {\n // eslint-disable-next-line no-console\n console.log(\n `Too many errors loading design system, exiting (set TAMAGUI_MAX_ERRORS to override)..`\n )\n // avoid infinite loops\n process.exit(1)\n }\n // return proxyWorm by default\n return proxyWorm\n }\n }\n\n return Module.prototype.require\n}\n\nexport function unregisterRequire() {\n Module.prototype.require = og\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA0B;AAI1B,uBAA6B;AAE7B,MAAM,cAAc,CAAC;AACrB,MAAM,SAAS,QAAQ,QAAQ;AAC/B,MAAM,KAAK,OAAO,UAAU;AAC5B,WAAW,eAAe;AAEnB,MAAM,iBAAiB,MAAM;AAGpC,IAAI,QAAQ;AACZ,YAAY,MAAM;AAChB,UAAQ;AACV,GAAG,EAAE;AAEE,SAAS,kBAAkB;AAChC,MAAI,OAAO,UAAU,YAAY,WAAW,cAAc;AAExD,YAAQ,KAAK,wCAAwC;AACrD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,YAAY,QAAQ,qBAAqB;AAE/C,QAAM,MAAM,QAAQ,kBAAkB;AACtC,QAAM,OAAO,QAAQ,oBAAoB;AAEzC,SAAO,UAAU,UAAU,SAAU,MAAc;AACjD,QAAI,+BAAc;AAEhB,cAAQ,IAAI,mBAAmB,IAAI;AAAA,IACrC;AACA,QAAI,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,GAAG;AAC5E,aAAO,CAAC;AAAA,IACV;AACA,QACE,SAAS,0BACT,KAAK,WAAW,yBAAyB,KACzC,SAAS,0BACT,SAAS,sBACT;AACA,aAAO;AAAA,IACT;AACA,QACE,KAAK,WAAW,cAAc,KAE9B,CAAC,KAAK,WAAW,oCAAoC,QAAQ,OAAO,eAAG,CAAC,GACxE;AACA,aAAO;AAAA,IACT;AACA,QAAI,SAAS,iBAAiB;AAC5B,aAAO;AAAA,IACT;AACA,QAAI;AACF,YAAM,MAAM,GAAG,MAAM,MAAM,SAAS;AAwBpC,aAAO;AAAA,IACT,SAAS,KAAP;AAEA,cAAQ;AAAA,QACN,4BAA4B;AAAA;AAAA,QAC5B,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AACA,YAAM,MAAM,QAAQ,IAAI,qBAAqB,CAAC,QAAQ,IAAI,qBAAqB;AAC/E,UAAI,EAAE,QAAQ,KAAK;AAEjB,gBAAQ;AAAA,UACN;AAAA,QACF;AAEA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO,OAAO,UAAU;AAC1B;AAEO,SAAS,oBAAoB;AAClC,SAAO,UAAU,UAAU;AAC7B;",
4
+ "sourcesContent": ["import { sep } from 'path'\n\nimport { SHOULD_DEBUG } from './constants.js'\n\nconst nameToPaths = {}\nconst Module = require('module')\nconst og = Module.prototype.require\nglobalThis['ogRequire'] = og\n\nexport const getNameToPaths = () => nameToPaths\n\n// just for catching egregious amounts of errors in a tight loop\nlet tries = 0\nsetInterval(() => {\n tries = 0\n}, 50)\n\nexport function registerRequire(bubbleErrors?: boolean) {\n if (Module.prototype.require !== globalThis['ogRequire']) {\n // eslint-disable-next-line no-console\n console.warn('didnt unregister before re-registering')\n process.exit(1)\n }\n\n const proxyWorm = require('@tamagui/proxy-worm')\n // TODO can swap with react-native-web-lite\n const rnw = require('react-native-web')\n const core = require('@tamagui/core-node')\n\n Module.prototype.require = function (path: string) {\n if (SHOULD_DEBUG) {\n // eslint-disable-next-line no-console\n console.log('tamagui:require', path)\n }\n if (path.endsWith('.css') || path.endsWith('.json') || path.endsWith('.ttf')) {\n return {}\n }\n if (\n path === '@gorhom/bottom-sheet' ||\n path.startsWith('react-native-reanimated') ||\n path === 'expo-linear-gradient' ||\n path === '@expo/vector-icons'\n ) {\n return proxyWorm\n }\n if (\n path.startsWith('react-native') &&\n // allow our rnw.tsx imports through\n !path.startsWith('react-native-web/dist/cjs/exports'.replace(/\\//g, sep))\n ) {\n return rnw\n }\n if (path === '@tamagui/core') {\n return core\n }\n try {\n const out = og.apply(this, arguments)\n // only for studio disable for now\n // if (!nameToPaths[path]) {\n // if (out && typeof out === 'object') {\n // for (const key in out) {\n // try {\n // const conf = out[key]?.staticConfig as StaticConfig\n // if (conf) {\n // if (conf.componentName) {\n // nameToPaths[conf.componentName] ??= new Set()\n // const fullName = path.startsWith('.')\n // ? join(`${this.path.replace(/dist(\\/cjs)?/, 'src')}`, path)\n // : path\n // nameToPaths[conf.componentName].add(fullName)\n // } else {\n // // console.log('no name component', path)\n // }\n // }\n // } catch {\n // // ok\n // }\n // }\n // }\n // }\n return out\n } catch (err: any) {\n if (bubbleErrors) {\n throw err\n }\n\n // eslint-disable-next-line no-console\n console.error(\n `Tamagui failed requiring ${path} from your tamagui.config.ts file, ignoring\\n`,\n err.message,\n err.stack\n )\n const max = process.env.TAMAGUI_MAX_ERRORS ? +process.env.TAMAGUI_MAX_ERRORS : 200\n if (++tries > max) {\n // eslint-disable-next-line no-console\n console.log(\n `Too many errors loading design system, exiting (set TAMAGUI_MAX_ERRORS to override)..`\n )\n // avoid infinite loops\n process.exit(1)\n }\n // return proxyWorm by default\n return proxyWorm\n }\n }\n\n return Module.prototype.require\n}\n\nexport function unregisterRequire() {\n Module.prototype.require = og\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAoB;AAEpB,uBAA6B;AAE7B,MAAM,cAAc,CAAC;AACrB,MAAM,SAAS,QAAQ,QAAQ;AAC/B,MAAM,KAAK,OAAO,UAAU;AAC5B,WAAW,eAAe;AAEnB,MAAM,iBAAiB,MAAM;AAGpC,IAAI,QAAQ;AACZ,YAAY,MAAM;AAChB,UAAQ;AACV,GAAG,EAAE;AAEE,SAAS,gBAAgB,cAAwB;AACtD,MAAI,OAAO,UAAU,YAAY,WAAW,cAAc;AAExD,YAAQ,KAAK,wCAAwC;AACrD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,YAAY,QAAQ,qBAAqB;AAE/C,QAAM,MAAM,QAAQ,kBAAkB;AACtC,QAAM,OAAO,QAAQ,oBAAoB;AAEzC,SAAO,UAAU,UAAU,SAAU,MAAc;AACjD,QAAI,+BAAc;AAEhB,cAAQ,IAAI,mBAAmB,IAAI;AAAA,IACrC;AACA,QAAI,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,GAAG;AAC5E,aAAO,CAAC;AAAA,IACV;AACA,QACE,SAAS,0BACT,KAAK,WAAW,yBAAyB,KACzC,SAAS,0BACT,SAAS,sBACT;AACA,aAAO;AAAA,IACT;AACA,QACE,KAAK,WAAW,cAAc,KAE9B,CAAC,KAAK,WAAW,oCAAoC,QAAQ,OAAO,eAAG,CAAC,GACxE;AACA,aAAO;AAAA,IACT;AACA,QAAI,SAAS,iBAAiB;AAC5B,aAAO;AAAA,IACT;AACA,QAAI;AACF,YAAM,MAAM,GAAG,MAAM,MAAM,SAAS;AAwBpC,aAAO;AAAA,IACT,SAAS,KAAP;AACA,UAAI,cAAc;AAChB,cAAM;AAAA,MACR;AAGA,cAAQ;AAAA,QACN,4BAA4B;AAAA;AAAA,QAC5B,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AACA,YAAM,MAAM,QAAQ,IAAI,qBAAqB,CAAC,QAAQ,IAAI,qBAAqB;AAC/E,UAAI,EAAE,QAAQ,KAAK;AAEjB,gBAAQ;AAAA,UACN;AAAA,QACF;AAEA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO,OAAO,UAAU;AAC1B;AAEO,SAAS,oBAAoB;AAClC,SAAO,UAAU,UAAU;AAC7B;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/static",
3
- "version": "1.0.1-beta.172",
3
+ "version": "1.0.1-beta.174",
4
4
  "source": "src/index.ts",
5
5
  "types": "./types/index.d.ts",
6
6
  "main": "dist",
@@ -37,17 +37,17 @@
37
37
  "@babel/runtime": "^7.18.9",
38
38
  "@babel/traverse": "^7.18.11",
39
39
  "@expo/match-media": "^0.3.0",
40
- "@tamagui/build": "^1.0.1-beta.172",
41
- "@tamagui/cli-color": "^1.0.1-beta.172",
42
- "@tamagui/config-default-node": "^1.0.1-beta.172",
43
- "@tamagui/core-node": "^1.0.1-beta.172",
44
- "@tamagui/fake-react-native": "^1.0.1-beta.172",
45
- "@tamagui/helpers": "^1.0.1-beta.172",
46
- "@tamagui/helpers-node": "^1.0.1-beta.172",
47
- "@tamagui/patch-rnw": "^1.0.1-beta.172",
48
- "@tamagui/proxy-worm": "^1.0.1-beta.172",
49
- "@tamagui/react-native-svg": "^1.0.1-beta.172",
50
- "@tamagui/shorthands": "^1.0.1-beta.172",
40
+ "@tamagui/build": "^1.0.1-beta.174",
41
+ "@tamagui/cli-color": "^1.0.1-beta.174",
42
+ "@tamagui/config-default-node": "^1.0.1-beta.174",
43
+ "@tamagui/core-node": "^1.0.1-beta.174",
44
+ "@tamagui/fake-react-native": "^1.0.1-beta.174",
45
+ "@tamagui/helpers": "^1.0.1-beta.174",
46
+ "@tamagui/helpers-node": "^1.0.1-beta.174",
47
+ "@tamagui/patch-rnw": "^1.0.1-beta.174",
48
+ "@tamagui/proxy-worm": "^1.0.1-beta.174",
49
+ "@tamagui/react-native-svg": "^1.0.1-beta.174",
50
+ "@tamagui/shorthands": "^1.0.1-beta.174",
51
51
  "babel-literal-to-ast": "^2.1.0",
52
52
  "esbuild": "^0.15.6",
53
53
  "esbuild-register": "^3.3.3",
@@ -55,8 +55,8 @@
55
55
  "fs-extra": "^10.1.0",
56
56
  "invariant": "^2.2.4",
57
57
  "lodash": "^4.17.21",
58
- "react-native-web-lite": "^1.0.1-beta.172",
59
- "tamagui": "^1.0.1-beta.172"
58
+ "react-native-web-lite": "^1.0.1-beta.174",
59
+ "tamagui": "^1.0.1-beta.174"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@babel/plugin-syntax-typescript": "^7.18.6",
@@ -36,6 +36,7 @@ import {
36
36
  objToStr,
37
37
  } from './extractHelpers.js'
38
38
  import { findTopmostFunction } from './findTopmostFunction.js'
39
+ import { getPrefixLogs } from './getPrefixLogs.js'
39
40
  import { cleanupBeforeExit, getStaticBindingsForScope } from './getStaticBindingsForScope.js'
40
41
  import { literalToAst } from './literalToAst.js'
41
42
  import { TamaguiProjectInfo, loadTamagui, loadTamaguiSync } from './loadTamagui.js'
@@ -144,11 +145,12 @@ export function createExtractor({ logger = console }: ExtractorOptions = { logge
144
145
  function parseWithConfig(
145
146
  { components, tamaguiConfig }: TamaguiProjectInfo,
146
147
  fileOrPath: FileOrPath,
147
- {
148
+ options: ExtractorParseProps
149
+ ) {
150
+ const {
148
151
  config = 'tamagui.config.ts',
149
152
  importsWhitelist = ['constants.js'],
150
153
  evaluateVars = true,
151
- shouldPrintDebug = false,
152
154
  sourcePath = '',
153
155
  onExtractTag,
154
156
  onStyleRule,
@@ -158,13 +160,16 @@ export function createExtractor({ logger = console }: ExtractorOptions = { logge
158
160
  disableExtractInlineMedia,
159
161
  disableExtractVariables,
160
162
  disableDebugAttr,
163
+ disableExtractFoundComponents,
161
164
  extractStyledDefinitions = false,
162
165
  prefixLogs,
163
166
  excludeProps,
164
167
  target,
165
168
  ...props
166
- }: ExtractorParseProps
167
- ) {
169
+ } = options
170
+
171
+ let shouldPrintDebug = options.shouldPrintDebug || false
172
+
168
173
  if (disable) {
169
174
  return null
170
175
  }
@@ -332,26 +337,40 @@ export function createExtractor({ logger = console }: ExtractorOptions = { logge
332
337
  let Component = validComponents[name] as { staticConfig: StaticConfigParsed } | undefined
333
338
 
334
339
  if (!Component) {
335
- if (shouldPrintDebug) {
336
- logger.info(
337
- `Didn't recognize styled(${name}), ${name} isn't in design system provided to tamagui.config.ts. Will attempt to build isolated and analyze.. ${programPath}`
338
- )
340
+ if (disableExtractFoundComponents) {
341
+ return
339
342
  }
340
343
 
341
- const out = loadTamaguiSync({
342
- components: [sourcePath],
343
- })
344
+ try {
345
+ const out = loadTamaguiSync({
346
+ // TODO would extract more, is NO-OP for now..
347
+ forceExports: true,
348
+ bubbleErrors: true,
349
+ components: [sourcePath],
350
+ })
344
351
 
345
- if (out.components?.[name]) {
346
- // add new components
347
- // TODO dont Clobber, do by file
348
- Object.assign(validComponents, out.components)
349
- }
352
+ if (out.components?.[name]) {
353
+ // add new components
354
+ // TODO dont Clobber, do by file
355
+ Object.assign(validComponents, out.components)
356
+ }
350
357
 
351
- Component = validComponents[name]
358
+ Component = validComponents[name]
352
359
 
353
- if (shouldPrintDebug) {
354
- logger.info([`Loaded`, Object.keys(out.components).join(', '), !!Component].join(' '))
360
+ if (shouldPrintDebug) {
361
+ logger.info([`Loaded`, Object.keys(out.components).join(', '), !!Component].join(' '))
362
+ }
363
+ } catch (err: any) {
364
+ logger.info(
365
+ `${getPrefixLogs(
366
+ options
367
+ )} skip optimize styled(${name}), unable to pre-process (DEBUG=tamagui for more)`
368
+ )
369
+ if (process.env.DEBUG === 'tamagui') {
370
+ logger.info(
371
+ ` Disable this with "disableExtractFoundComponents" in your build-time configuration. \n\n ${err.message} ${err.stack}`
372
+ )
373
+ }
355
374
  }
356
375
  }
357
376
 
@@ -21,7 +21,12 @@ export type TamaguiProjectInfo = {
21
21
  nameToPaths: NameToPaths
22
22
  }
23
23
 
24
- type Props = { components: string[]; config?: string }
24
+ type Props = {
25
+ components: string[]
26
+ config?: string
27
+ forceExports?: boolean
28
+ bubbleErrors?: boolean
29
+ }
25
30
 
26
31
  const cache = {}
27
32
 
@@ -77,8 +82,8 @@ Tamagui built config and components:`
77
82
  colorLog(
78
83
  Color.Dim,
79
84
  `
80
- - Config: ${relative(process.cwd(), configOutPath)}
81
- - Components: ${relative(process.cwd(), componentOutPaths.join(', '))}
85
+ - Config: .${sep}${relative(process.cwd(), configOutPath)}
86
+ - Components: .${sep}${relative(process.cwd(), componentOutPaths.join(', '))}
82
87
  `
83
88
  )
84
89
 
@@ -105,12 +110,15 @@ Tamagui built config and components:`
105
110
 
106
111
  const coreNode = require('@tamagui/core-node')
107
112
 
108
- registerRequire()
113
+ registerRequire(props.bubbleErrors)
109
114
  const config = require(configOutPath).default
110
115
  unregisterRequire()
111
116
 
112
117
  const components = {
113
- ...loadComponents(componentOutPaths),
118
+ ...loadComponents({
119
+ ...props,
120
+ components: componentOutPaths,
121
+ }),
114
122
  ...(includesCore && gatherTamaguiComponentInfo([coreNode])),
115
123
  }
116
124
 
@@ -209,6 +217,12 @@ async function buildTamaguiConfig(
209
217
  })
210
218
  }
211
219
 
220
+ const esbuildOptions: esbuild.BuildOptions = {
221
+ target: 'es2019',
222
+ format: 'cjs',
223
+ jsx: 'transform',
224
+ }
225
+
212
226
  // loads in-process using esbuild-register
213
227
  export function loadTamaguiSync(props: Props): TamaguiProjectInfo {
214
228
  const key = JSON.stringify(props)
@@ -216,13 +230,10 @@ export function loadTamaguiSync(props: Props): TamaguiProjectInfo {
216
230
  return cache[key]
217
231
  }
218
232
 
219
- const { unregister } = require('esbuild-register/dist/node').register({
220
- target: 'es2019',
221
- format: 'cjs',
222
- })
233
+ const { unregister } = require('esbuild-register/dist/node').register(esbuildOptions)
223
234
 
224
235
  try {
225
- registerRequire()
236
+ registerRequire(props.bubbleErrors)
226
237
 
227
238
  // lets shim require and avoid importing react-native + react-native-web
228
239
  // we just need to read the config around them
@@ -247,7 +258,7 @@ export function loadTamaguiSync(props: Props): TamaguiProjectInfo {
247
258
  }
248
259
  }
249
260
 
250
- const components = loadComponents(props.components)
261
+ const components = loadComponents(props)
251
262
 
252
263
  if (process.env.DEBUG === 'tamagui') {
253
264
  console.log(`components`, components)
@@ -267,6 +278,10 @@ export function loadTamaguiSync(props: Props): TamaguiProjectInfo {
267
278
  nameToPaths: getNameToPaths(),
268
279
  }
269
280
  } catch (err) {
281
+ if (props.bubbleErrors) {
282
+ throw err
283
+ }
284
+
270
285
  if (err instanceof Error) {
271
286
  console.warn(
272
287
  `Error loading tamagui.config.ts (set DEBUG=tamagui to see full stack), running tamagui without custom config`
@@ -287,7 +302,9 @@ export function loadTamaguiSync(props: Props): TamaguiProjectInfo {
287
302
 
288
303
  return cache[key]
289
304
  } catch (err) {
290
- console.log('Error loading Tamagui', err)
305
+ if (!props.bubbleErrors) {
306
+ console.log('Error loading Tamagui', err)
307
+ }
291
308
  throw err
292
309
  } finally {
293
310
  unregister()
@@ -301,7 +318,8 @@ function interopDefaultExport(mod: any) {
301
318
 
302
319
  const cacheComponents = {}
303
320
 
304
- function loadComponents(componentsModules: string[]) {
321
+ function loadComponents(props: Props) {
322
+ const componentsModules = props.components
305
323
  const key = componentsModules.join('')
306
324
  if (cacheComponents[key]) {
307
325
  return cacheComponents[key]
@@ -314,6 +332,9 @@ function loadComponents(componentsModules: string[]) {
314
332
  cacheComponents[key] = res
315
333
  return res
316
334
  } catch (err: any) {
335
+ if (props.bubbleErrors) {
336
+ throw err
337
+ }
317
338
  console.log(`Tamagui error bundling components`, err.message, err.stack)
318
339
  }
319
340
  }
package/src/require.ts CHANGED
@@ -1,6 +1,4 @@
1
- import { join, sep } from 'path'
2
-
3
- import type { StaticConfig } from '@tamagui/core-node'
1
+ import { sep } from 'path'
4
2
 
5
3
  import { SHOULD_DEBUG } from './constants.js'
6
4
 
@@ -17,7 +15,7 @@ setInterval(() => {
17
15
  tries = 0
18
16
  }, 50)
19
17
 
20
- export function registerRequire() {
18
+ export function registerRequire(bubbleErrors?: boolean) {
21
19
  if (Module.prototype.require !== globalThis['ogRequire']) {
22
20
  // eslint-disable-next-line no-console
23
21
  console.warn('didnt unregister before re-registering')
@@ -82,6 +80,10 @@ export function registerRequire() {
82
80
  // }
83
81
  return out
84
82
  } catch (err: any) {
83
+ if (bubbleErrors) {
84
+ throw err
85
+ }
86
+
85
87
  // eslint-disable-next-line no-console
86
88
  console.error(
87
89
  `Tamagui failed requiring ${path} from your tamagui.config.ts file, ignoring\n`,
@@ -10,6 +10,8 @@ export declare type TamaguiProjectInfo = {
10
10
  declare type Props = {
11
11
  components: string[];
12
12
  config?: string;
13
+ forceExports?: boolean;
14
+ bubbleErrors?: boolean;
13
15
  };
14
16
  export declare function loadTamagui(props: Props): Promise<TamaguiProjectInfo>;
15
17
  export declare function loadTamaguiSync(props: Props): TamaguiProjectInfo;
@@ -1,4 +1,4 @@
1
1
  export declare const getNameToPaths: () => {};
2
- export declare function registerRequire(): any;
2
+ export declare function registerRequire(bubbleErrors?: boolean): any;
3
3
  export declare function unregisterRequire(): void;
4
4
  //# sourceMappingURL=require.d.ts.map