@bamboocss/eslint-plugin 1.12.1 → 1.12.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["RULE_NAME","rule","RULE_NAME","rule","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isColorToken","originalIsColorToken","isColorAttribute","originalIsColorAttribute","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isInJSXProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","isBambooProperty","rule","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","isBambooProperty","FileNotIncluded","fileNotIncluded","NoConfigunctionInSource","noConfigunctionInSource","NoDebug","noDebug","NoDeprecatedTokens","noDeprecatedTokens","NoDynamicStyling","noDynamicStyling","NoEscapeHatch","noEscapeHatch","NoHardCodedColor","noHardCodedColor","NoImportant","noImportant","NoInvalidNesting","noInvalidNesting","NoInvalidTokenPaths","noInvalidTokenPaths","NoMarginProperties","noMarginProperties","NoPhysicalProperties","noPhysicalProperties","NoPropertyRenaming","noPropertyRenaming","NoUnsafeTokenUsage","noUnsafeTokenUsage","PreferAtomicProperties","preferAtomicProperties","PreferCompositeProperties","preferCompositeProperties","PreferLonghandProperties","preferLonghandProperties","PreferShorthandProperties","preferShorthandProperties","PreferUnifiedPropertyStyle","preferUnifiedPropertyStyle","FileNotIncluded","NoConfigFunctionInSource","NoInvalidTokenPaths"],"sources":["../package.json","../src/utils/nodes.ts","../src/utils/helpers.ts","../src/rules/file-not-included.ts","../src/rules/no-config-function-in-source.ts","../src/rules/no-debug.ts","../src/rules/no-deprecated-tokens.ts","../src/rules/no-dynamic-styling.ts","../src/rules/no-escape-hatch.ts","../src/rules/no-hardcoded-color.ts","../src/rules/no-important.ts","../src/rules/no-invalid-nesting.ts","../src/rules/no-invalid-token-paths.ts","../src/rules/no-margin-properties.ts","../src/utils/physical-properties.ts","../src/rules/no-physical-properties.ts","../src/rules/no-property-renaming.ts","../src/rules/no-unsafe-token-fn-usage.ts","../src/utils/composite-properties.ts","../src/rules/prefer-atomic-properties.ts","../src/rules/prefer-composite-properties.ts","../src/rules/prefer-longhand-properties.ts","../src/rules/prefer-shorthand-properties.ts","../src/rules/prefer-unified-property-style.ts","../src/rules/index.ts","../src/configs/all.ts","../src/configs/recommended.ts","../src/index.ts"],"sourcesContent":["","import { AST_NODE_TYPES, type TSESTree } from '@typescript-eslint/utils';\nimport { isNodeOfType } from '@typescript-eslint/utils/ast-utils';\n\nexport type Node = TSESTree.Node;\n\nexport const isIdentifier = isNodeOfType(AST_NODE_TYPES.Identifier);\nexport const isLiteral = isNodeOfType(AST_NODE_TYPES.Literal);\nexport const isTemplateLiteral = isNodeOfType(AST_NODE_TYPES.TemplateLiteral);\nexport const isArrayExpression = isNodeOfType(AST_NODE_TYPES.ArrayExpression);\nexport const isObjectExpression = isNodeOfType(AST_NODE_TYPES.ObjectExpression);\nexport const isMemberExpression = isNodeOfType(AST_NODE_TYPES.MemberExpression);\nexport const isVariableDeclarator = isNodeOfType(\n AST_NODE_TYPES.VariableDeclarator,\n);\nexport const isVariableDeclaration = isNodeOfType(\n AST_NODE_TYPES.VariableDeclaration,\n);\nexport const isJSXMemberExpression = isNodeOfType(\n AST_NODE_TYPES.JSXMemberExpression,\n);\nexport const isJSXOpeningElement = isNodeOfType(\n AST_NODE_TYPES.JSXOpeningElement,\n);\nexport const isJSXExpressionContainer = isNodeOfType(\n AST_NODE_TYPES.JSXExpressionContainer,\n);\nexport const isJSXAttribute = isNodeOfType(AST_NODE_TYPES.JSXAttribute);\nexport const isJSXIdentifier = isNodeOfType(AST_NODE_TYPES.JSXIdentifier);\nexport const isCallExpression = isNodeOfType(AST_NODE_TYPES.CallExpression);\nexport const isImportDeclaration = isNodeOfType(\n AST_NODE_TYPES.ImportDeclaration,\n);\nexport const isImportSpecifier = isNodeOfType(AST_NODE_TYPES.ImportSpecifier);\n","import { type ImportResult, syncAction } from '.';\nimport {\n isCallExpression,\n isIdentifier,\n isImportDeclaration,\n isImportSpecifier,\n isJSXAttribute,\n isJSXExpressionContainer,\n isJSXIdentifier,\n isJSXMemberExpression,\n isJSXOpeningElement,\n isLiteral,\n isMemberExpression,\n isTemplateLiteral,\n isVariableDeclarator,\n type Node,\n} from './nodes';\nimport { type DeprecatedToken } from './worker';\nimport { analyze, type ScopeManager } from '@typescript-eslint/scope-manager';\nimport { type TSESTree } from '@typescript-eslint/utils';\nimport { type RuleContext } from '@typescript-eslint/utils/ts-eslint';\n\nexport const getAncestor = <N extends Node>(\n ofType: (node: Node) => node is N,\n for_: Node,\n): N | undefined => {\n let current: Node | undefined = for_.parent;\n while (current) {\n if (ofType(current)) {\n return current;\n }\n\n current = current.parent;\n }\n};\n\nconst getSyncOptions = (context: RuleContext<any, any>) => {\n return {\n configPath: context.settings['@bamboocss/configPath'] as string | undefined,\n currentFile: context.filename,\n };\n};\n\nexport const getImportSpecifiers = (context: RuleContext<any, any>) => {\n const specifiers: Array<{\n mod: string;\n specifier: TSESTree.ImportSpecifier;\n }> = [];\n\n for (const node of context.sourceCode?.ast.body) {\n if (!isImportDeclaration(node)) {\n continue;\n }\n\n const module_ = node.source.value;\n if (!module_) {\n continue;\n }\n\n for (const specifier of node.specifiers) {\n if (!isImportSpecifier(specifier)) {\n continue;\n }\n\n specifiers.push({ mod: module_, specifier });\n }\n }\n\n return specifiers;\n};\n\nexport const hasPkgImport = (context: RuleContext<any, any>) => {\n const imports = _getImports(context);\n return imports.some(({ mod }) => mod === '@bamboocss/dev');\n};\n\nexport const isBambooConfigFunction = (\n context: RuleContext<any, any>,\n name: string,\n) => {\n const imports = _getImports(context);\n return imports.some(\n ({ alias, mod }) => alias === name && mod === '@bamboocss/dev',\n );\n};\n\n// Caching raw imports per context to avoid redundant AST traversal\nconst rawImportsCache = new WeakMap<RuleContext<any, any>, ImportResult[]>();\n\nconst _getImports = (context: RuleContext<any, any>) => {\n if (rawImportsCache.has(context)) {\n return rawImportsCache.get(context)!;\n }\n\n const specifiers = getImportSpecifiers(context);\n\n const imports: ImportResult[] = specifiers.map(({ mod, specifier }) => ({\n alias: specifier.local.name,\n mod,\n name: (specifier.imported as any).name,\n }));\n\n rawImportsCache.set(context, imports);\n return imports;\n};\n\n// Caching filtered imports per context to avoid redundant computations\nconst importsCache = new WeakMap<RuleContext<any, any>, ImportResult[]>();\n\nconst getImports = (context: RuleContext<any, any>): ImportResult[] => {\n if (importsCache.has(context)) {\n return importsCache.get(context)!;\n }\n\n const imports = _getImports(context);\n // Batch filter all imports in a single sync call to reduce worker thread crossings\n const filteredImports = syncAction(\n 'filterImports',\n getSyncOptions(context),\n imports,\n );\n // syncAction returns undefined when the worker fails (e.g. config loading error).\n // Fall back to an empty array to prevent downstream crashes.\n const result = filteredImports ?? [];\n importsCache.set(context, result);\n return result;\n};\n\nconst isValidStyledProperty = <T extends Node>(\n node: T,\n context: RuleContext<any, any>,\n) => {\n return isJSXIdentifier(node) && isValidProperty(node.name, context);\n};\n\nconst matchFile = (\n name: string,\n imports: ImportResult[],\n context: RuleContext<any, any>,\n) => {\n return syncAction('matchFile', getSyncOptions(context), name, imports);\n};\n\nconst isBambooIsh = (name: string, context: RuleContext<any, any>) => {\n const imports = getImports(context);\n if (imports.length === 0) {\n return false;\n }\n\n // Check if the name is the jsx factory\n const jsxFactory = syncAction('getJsxFactory', getSyncOptions(context));\n if (jsxFactory && name === jsxFactory) {\n // Check if the jsx factory is imported\n return imports.some((imp) => imp.name === name || imp.alias === name);\n }\n\n return matchFile(name, imports, context);\n};\n\n// Caching scope analysis per AST to avoid expensive re-computation\nconst scopeCache = new WeakMap<TSESTree.Program, ScopeManager>();\n\nconst findDeclaration = (name: string, context: RuleContext<any, any>) => {\n try {\n const source = context.sourceCode;\n\n if (!source) {\n console.warn(\n \"⚠️ ESLint's sourceCode is not available. Ensure that the rule is invoked with valid code.\",\n );\n return undefined;\n }\n\n let scope = scopeCache.get(source.ast);\n if (!scope) {\n scope = analyze(source.ast, {\n sourceType: 'module',\n });\n scopeCache.set(source.ast, scope);\n }\n\n const decl = scope.variables\n .find((v) => v.name === name)\n ?.defs.find((d) => isIdentifier(d.name) && d.name.name === name)?.node;\n if (isVariableDeclarator(decl)) {\n return decl;\n }\n } catch (error) {\n console.error('Error in findDeclaration:', error);\n return undefined;\n }\n};\n\nconst isLocalStyledFactory = (\n node: TSESTree.JSXOpeningElement,\n context: RuleContext<any, any>,\n) => {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n const decl = findDeclaration(node.name.name, context);\n\n if (!decl) {\n return;\n }\n\n if (!isCallExpression(decl.init)) {\n return;\n }\n\n if (!isIdentifier(decl.init.callee)) {\n return;\n }\n\n // Check if the callee is 'styled' from bamboo imports\n const calleeName = decl.init.callee.name;\n const rawImports = _getImports(context);\n const isStyledImport = rawImports.some(\n (imp) => imp.alias === calleeName && imp.mod.includes('bamboo'),\n );\n\n if (!isStyledImport && !isBambooIsh(calleeName, context)) {\n return;\n }\n\n return true;\n};\n\nexport const isValidFile = (context: RuleContext<any, any>) => {\n return syncAction('isValidFile', getSyncOptions(context));\n};\n\nexport const isValidProperty = (\n name: string,\n context: RuleContext<any, any>,\n calleName?: string,\n) => {\n return syncAction(\n 'isValidProperty',\n getSyncOptions(context),\n name,\n calleName,\n );\n};\n\nexport const isBambooImport = (\n node: TSESTree.ImportDeclaration,\n context: RuleContext<any, any>,\n) => {\n const imports = getImports(context);\n return imports.some((imp) => imp.mod === node.source.value);\n};\n\nexport const isBambooProp = (\n node: TSESTree.JSXAttribute,\n context: RuleContext<any, any>,\n) => {\n const jsxAncestor = getAncestor(isJSXOpeningElement, node);\n\n if (!jsxAncestor) {\n return;\n }\n\n // <styled.div /> && <Box />\n if (\n !isJSXMemberExpression(jsxAncestor.name) &&\n !isJSXIdentifier(jsxAncestor.name)\n ) {\n return;\n }\n\n let isBambooComponent = false;\n let componentName: string | undefined;\n\n if (isJSXMemberExpression(jsxAncestor.name)) {\n // For <styled.div>, check if 'styled' is a Bamboo import\n const objectName = (jsxAncestor.name.object as any).name;\n componentName = objectName;\n // Check if 'styled' is imported from bamboo - check both filtered and raw imports\n const imports = getImports(context);\n const rawImports = _getImports(context);\n isBambooComponent =\n imports.some((imp) => imp.alias === objectName) ||\n rawImports.some(\n (imp) => imp.alias === objectName && imp.mod.includes('bamboo'),\n ) ||\n isBambooIsh(objectName, context);\n\n // For styled.div, all props are valid styled props\n if (isBambooComponent) {\n return true;\n }\n } else if (isJSXIdentifier(jsxAncestor.name)) {\n // For <Circle> or <BambooComp>\n componentName = jsxAncestor.name.name;\n\n // Check if it's a local styled factory (e.g., const BambooComp = styled(div))\n const isLocalStyled = isLocalStyledFactory(jsxAncestor, context);\n\n // For local styled components, we need to check if the prop is a valid Bamboo prop\n if (isLocalStyled) {\n const property = node.name.name;\n // Special props like 'css' and props starting with '_' are Bamboo props\n if (\n property === 'css' ||\n (typeof property === 'string' && property.startsWith('_'))\n ) {\n return true;\n }\n\n // Other props need to be valid style properties\n if (typeof property !== 'string' || !isValidProperty(property, context)) {\n return false;\n }\n\n return true;\n }\n\n // For imported Bamboo components like Circle\n isBambooComponent = isBambooIsh(componentName, context);\n }\n\n if (!isBambooComponent) {\n return;\n }\n\n const property = node.name.name;\n // Ensure prop is a styled prop\n if (\n typeof property !== 'string' ||\n !isValidProperty(property, context, componentName)\n ) {\n return;\n }\n\n return true;\n};\n\nexport const isStyledProperty = (\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n calleeName?: string,\n) => {\n if (\n !isIdentifier(node.key) &&\n !isLiteral(node.key) &&\n !isTemplateLiteral(node.key)\n ) {\n return;\n }\n\n if (\n isIdentifier(node.key) &&\n !isValidProperty(node.key.name, context, calleeName)\n ) {\n return;\n }\n\n if (\n isLiteral(node.key) &&\n typeof node.key.value === 'string' &&\n !isValidProperty(node.key.value, context, calleeName)\n ) {\n return;\n }\n\n if (\n isTemplateLiteral(node.key) &&\n !isValidProperty(node.key.quasis[0].value.raw, context, calleeName)\n ) {\n return;\n }\n\n return true;\n};\n\nexport const isInBambooFunction = (\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n) => {\n const callAncestor = getAncestor(isCallExpression, node);\n if (!callAncestor) {\n return;\n }\n\n let calleeName: string | undefined;\n\n // E.g. css({...}), cvs({...})\n if (isIdentifier(callAncestor.callee)) {\n calleeName = callAncestor.callee.name;\n }\n\n // E.g. css.raw({...})\n if (\n isMemberExpression(callAncestor.callee) &&\n isIdentifier(callAncestor.callee.object)\n ) {\n calleeName = callAncestor.callee.object.name;\n }\n\n if (!calleeName) {\n return;\n }\n\n if (!isBambooIsh(calleeName, context)) {\n return;\n }\n\n return calleeName;\n};\n\nexport const isInJSXProp = (\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n) => {\n const jsxExprAncestor = getAncestor(isJSXExpressionContainer, node);\n const jsxAttributeAncestor = getAncestor(isJSXAttribute, node);\n\n if (!jsxExprAncestor || !jsxAttributeAncestor) {\n return;\n }\n\n // Get the JSX element to check if it's a Bamboo component\n const jsxElement = getAncestor(isJSXOpeningElement, jsxAttributeAncestor);\n if (!jsxElement) {\n return;\n }\n\n // Check if it's a Bamboo component (styled.div, Circle, etc.)\n let isBambooComponent = false;\n if (isJSXMemberExpression(jsxElement.name)) {\n // For <styled.div>, check if 'styled' is a Bamboo import\n const objectName = (jsxElement.name.object as any).name;\n isBambooComponent = isBambooIsh(objectName, context);\n } else if (isJSXIdentifier(jsxElement.name)) {\n // For <Circle> or <BambooComp>\n const componentName = jsxElement.name.name;\n isBambooComponent =\n isBambooIsh(componentName, context) ||\n Boolean(isLocalStyledFactory(jsxElement, context));\n }\n\n if (!isBambooComponent) {\n return;\n }\n\n // Check if the attribute name is a valid styled prop\n if (!isJSXIdentifier(jsxAttributeAncestor.name)) {\n return;\n }\n\n if (!isValidStyledProperty(jsxAttributeAncestor.name, context)) {\n return;\n }\n\n return true;\n};\n\nexport const isBambooAttribute = (\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n) => {\n const callAncestor = getAncestor(isCallExpression, node);\n\n if (callAncestor) {\n const callee = isInBambooFunction(node, context);\n if (!callee) {\n return;\n }\n\n return isStyledProperty(node, context, callee);\n }\n\n // Object could be in JSX prop value i.e css prop or a pseudo\n return isInJSXProp(node, context) && isStyledProperty(node, context);\n};\n\nexport const resolveLonghand = (\n name: string,\n context: RuleContext<any, any>,\n) => {\n return syncAction('resolveLongHand', getSyncOptions(context), name);\n};\n\nexport const resolveShorthands = (\n name: string,\n context: RuleContext<any, any>,\n) => {\n return syncAction('resolveShorthands', getSyncOptions(context), name);\n};\n\nexport const isColorAttribute = (\n attribute: string,\n context: RuleContext<any, any>,\n) => {\n return syncAction('isColorAttribute', getSyncOptions(context), attribute);\n};\n\nexport const isColorToken = (\n value: string | undefined,\n context: RuleContext<any, any>,\n) => {\n if (!value) {\n return;\n }\n\n return syncAction('isColorToken', getSyncOptions(context), value);\n};\n\nexport const extractTokens = (value: string) => {\n const regex = /token\\(([^\"'(),]+)(?:,\\s*([^\"'(),]+))?\\)|\\{([^\\n\\r{}]+)\\}/g;\n const matches = [];\n let match;\n\n while ((match = regex.exec(value)) !== null) {\n const tokenFromFirstSyntax = match[1] || match[2] || match[3];\n const tokensFromSecondSyntax =\n match[4] && match[4].match(/(\\w+\\.\\w+(\\.\\w+)?)/g);\n\n if (tokenFromFirstSyntax) {\n matches.push(tokenFromFirstSyntax);\n }\n\n if (tokensFromSecondSyntax) {\n matches.push(...tokensFromSecondSyntax);\n }\n }\n\n return matches.filter(Boolean);\n};\n\n// Caching invalid tokens to avoid redundant computations\nconst invalidTokensCache = new Map<string, string[]>();\n\nexport const getInvalidTokens = (\n value: string,\n context: RuleContext<any, any>,\n) => {\n if (invalidTokensCache.has(value)) {\n return invalidTokensCache.get(value)!;\n }\n\n const tokens = extractTokens(value);\n if (!tokens.length) {\n return [];\n }\n\n const invalidTokens = syncAction(\n 'filterInvalidTokens',\n getSyncOptions(context),\n tokens,\n );\n invalidTokensCache.set(value, invalidTokens);\n return invalidTokens;\n};\n\n// Caching deprecated tokens to avoid redundant computations\nconst deprecatedTokensCache = new Map<string, DeprecatedToken[]>();\n\nexport const getDeprecatedTokens = (\n property: string,\n value: string,\n context: RuleContext<any, any>,\n) => {\n const propertyCategory = syncAction(\n 'getPropCategory',\n getSyncOptions(context),\n property,\n );\n\n const tokens = extractTokens(value);\n\n if (!propertyCategory && !tokens.length) {\n return [];\n }\n\n const values = tokens.length\n ? tokens\n : [{ category: propertyCategory, value: value.split('/')[0] }];\n\n if (deprecatedTokensCache.has(value)) {\n return deprecatedTokensCache.get(value)!;\n }\n\n const deprecatedTokens = syncAction(\n 'filterDeprecatedTokens',\n getSyncOptions(context),\n values,\n );\n deprecatedTokensCache.set(value, deprecatedTokens);\n\n return deprecatedTokens;\n};\n\nexport const getTokenImport = (context: RuleContext<any, any>) => {\n const imports = _getImports(context);\n return imports.find((imp) => imp.name === 'token');\n};\n\nexport const getTaggedTemplateCaller = (\n node: TSESTree.TaggedTemplateExpression,\n) => {\n // css``\n if (isIdentifier(node.tag)) {\n return node.tag.name;\n }\n\n // styled.h1``\n if (isMemberExpression(node.tag)) {\n if (!isIdentifier(node.tag.object)) {\n return;\n }\n\n return node.tag.object.name;\n }\n\n // styled(Comp)``\n if (isCallExpression(node.tag)) {\n if (!isIdentifier(node.tag.callee)) {\n return;\n }\n\n return node.tag.callee.name;\n }\n};\n\nexport const isStyledTaggedTemplate = (\n node: TSESTree.TaggedTemplateExpression,\n context: RuleContext<any, any>,\n) => {\n const caller = getTaggedTemplateCaller(node);\n if (!caller) {\n return false;\n }\n\n // Check if 'styled' is imported from bamboo\n const rawImports = _getImports(context);\n const isStyledImport = rawImports.some(\n (imp) => imp.alias === caller && imp.mod.includes('bamboo'),\n );\n\n return isStyledImport || isBambooIsh(caller, context);\n};\n\nexport function isRecipeVariant(\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n) {\n const caller = isInBambooFunction(node, context);\n if (!caller) {\n return;\n }\n\n // Check if the caller is either 'cva' or 'sva'\n const recipe = getImports(context).find(\n (imp) => ['cva', 'sva'].includes(imp.name) && imp.alias === caller,\n );\n if (!recipe) {\n return;\n }\n\n //* Nesting is different here because of slots and variants. We don't want to warn about those.\n let currentNode: any = node;\n let length = 0;\n let styleObjectParent: null | string = null;\n\n // Traverse up the AST\n while (currentNode) {\n const keyName = currentNode?.key?.name;\n if (keyName && ['base', 'variants'].includes(keyName)) {\n styleObjectParent = keyName;\n }\n\n currentNode = currentNode.parent;\n if (!styleObjectParent) {\n length++;\n }\n }\n\n // Determine the required length based on caller and styleObjectParent\n const isCvaCaller = caller === 'cva';\n const requiredLength = isCvaCaller ? 2 : 4;\n const extraLength = styleObjectParent === 'base' ? 0 : 4;\n\n if (length < requiredLength + extraLength) {\n return true;\n }\n}\n","import { createRule } from '../utils';\nimport { isBambooImport, isValidFile } from '../utils/helpers';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'file-not-included';\n\nconst rule = createRule({\n create(context) {\n // Determine if the current file is included in the Bamboo CSS configuration\n const isFileIncluded = isValidFile(context);\n\n // If the file is included, no need to proceed\n if (isFileIncluded) {\n return {};\n }\n\n let hasReported = false;\n\n return {\n ImportDeclaration(node: TSESTree.ImportDeclaration) {\n if (hasReported) {\n return;\n }\n\n if (!isBambooImport(node, context)) {\n return;\n }\n\n // Report only on the first import declaration\n context.report({\n messageId: 'include',\n node,\n });\n\n hasReported = true;\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow the use of Bamboo CSS in files that are not included in the specified Bamboo CSS `include` config.',\n },\n messages: {\n include:\n 'The use of Bamboo CSS is not allowed in this file. Please ensure the file is included in the Bamboo CSS `include` configuration.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n getAncestor,\n getImportSpecifiers,\n hasPkgImport,\n isBambooConfigFunction,\n isValidFile,\n} from '../utils/helpers';\nimport { isIdentifier, isVariableDeclaration } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-config-function-in-source';\n\nconst CONFIG_FUNCTIONS = new Set([\n 'defineConfig',\n 'defineGlobalStyles',\n 'defineKeyframes',\n 'defineLayerStyles',\n 'defineParts',\n 'definePattern',\n 'definePreset',\n 'defineRecipe',\n 'defineSemanticTokens',\n 'defineSlotRecipe',\n 'defineStyles',\n 'defineTextStyles',\n 'defineTokens',\n 'defineUtility',\n]);\n\nconst rule = createRule({\n create(context) {\n // Check if the package is imported; if not, exit early\n if (!hasPkgImport(context)) {\n return {};\n }\n\n // Determine if the current file is the Bamboo config file\n const isBambooFile = isValidFile(context);\n\n // If we are in the config file, no need to proceed\n if (!isBambooFile) {\n return {};\n }\n\n return {\n CallExpression(node: TSESTree.CallExpression) {\n // Ensure the callee is an identifier\n if (!isIdentifier(node.callee)) {\n return;\n }\n\n const functionName = node.callee.name;\n\n // Check if the function is a config function\n if (!CONFIG_FUNCTIONS.has(functionName)) {\n return;\n }\n\n // Verify that it's a Bamboo config function\n if (!isBambooConfigFunction(context, functionName)) {\n return;\n }\n\n context.report({\n data: {\n name: functionName,\n },\n messageId: 'configFunction',\n node,\n suggest: [\n {\n data: {\n name: functionName,\n },\n fix(fixer) {\n const declaration = getAncestor(isVariableDeclaration, node);\n const importSpecifiers = getImportSpecifiers(context);\n\n // Find the import specifier for the function\n const importSpec = importSpecifiers.find(\n (s) => s.specifier.local.name === functionName,\n );\n\n const fixes = [];\n\n // Remove the variable declaration if it exists; otherwise, remove the call expression\n if (declaration) {\n fixes.push(fixer.remove(declaration));\n } else {\n fixes.push(fixer.remove(node));\n }\n\n // Remove the import specifier if it exists\n if (importSpec?.specifier) {\n fixes.push(fixer.remove(importSpec.specifier));\n }\n\n return fixes;\n },\n messageId: 'delete',\n },\n ],\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Prohibit the use of config functions outside the Bamboo config file.',\n },\n hasSuggestions: true,\n messages: {\n configFunction:\n 'Unnecessary `{{name}}` call. Config functions should only be used in the Bamboo config file.',\n delete: 'Delete `{{name}}` call.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport { isJSXExpressionContainer, isObjectExpression } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-debug';\n\nconst rule = createRule({\n create(context) {\n // Track processed nodes to avoid duplicate reports\n const processedNodes = new WeakSet<TSESTree.Node>();\n\n const checkObjectForDebug = (object: TSESTree.ObjectExpression) => {\n for (const property of object.properties) {\n if (property.type !== 'Property') {\n continue;\n }\n\n if (!property.key || property.key.type !== 'Identifier') {\n continue;\n }\n\n // Check for debug property\n if (property.key.name === 'debug') {\n if (processedNodes.has(property)) {\n continue;\n }\n\n processedNodes.add(property);\n\n context.report({\n messageId: 'debug',\n node: property.key,\n suggest: [\n {\n fix: (fixer) =>\n fixer.removeRange([property.range[0], property.range[1] + 1]),\n messageId: 'property',\n },\n ],\n });\n }\n\n // Check nested objects (for pseudo selectors like &:hover)\n if (property.value && property.value.type === 'ObjectExpression') {\n checkObjectForDebug(property.value);\n }\n }\n };\n\n return {\n // Handle JSX attributes with object values (_hover, css, etc.)\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isBambooProperty(node, context)) {\n return;\n }\n\n // Skip non-object values\n if (!node.value || !isJSXExpressionContainer(node.value)) {\n return;\n }\n\n const expr = node.value.expression;\n if (!isObjectExpression(expr)) {\n return;\n }\n\n // Check for debug in the object\n checkObjectForDebug(expr);\n },\n\n // Handle JSX debug attribute directly on Bamboo components\n 'JSXAttribute[name.name=\"debug\"]'(node: TSESTree.JSXAttribute) {\n if (!isBambooProperty(node, context)) {\n return;\n }\n\n context.report({\n messageId: 'debug',\n node,\n suggest: [\n {\n fix: (fixer) => fixer.remove(node),\n messageId: 'prop',\n },\n ],\n });\n },\n\n // Handle debug property in objects (css, styled, etc.)\n 'Property[key.name=\"debug\"]'(node: TSESTree.Property) {\n // Skip if already processed\n if (processedNodes.has(node)) {\n return;\n }\n\n // Ensure the property is a Bamboo attribute\n if (!isBambooAttribute(node, context)) {\n return;\n }\n\n // Exclude recipe variants\n if (isRecipeVariant(node, context)) {\n return;\n }\n\n processedNodes.add(node);\n\n context.report({\n messageId: 'debug',\n node: node.key,\n suggest: [\n {\n fix: (fixer) =>\n fixer.removeRange([node.range[0], node.range[1] + 1]),\n messageId: 'property',\n },\n ],\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow the inclusion of the debug attribute when shipping code to the production environment.',\n },\n hasSuggestions: true,\n messages: {\n debug: 'Unnecessary debug utility.',\n prop: 'Remove the debug prop.',\n property: 'Remove the debug property.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n getDeprecatedTokens,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { type DeprecatedToken } from '../utils/worker';\nimport { AST_NODE_TYPES, type TSESTree } from '@typescript-eslint/utils';\nimport { isNodeOfTypes } from '@typescript-eslint/utils/ast-utils';\n\nexport const RULE_NAME = 'no-deprecated-tokens';\n\nconst rule = createRule({\n create(context) {\n // Cache for deprecated tokens to avoid redundant computations\n const deprecatedTokensCache = new Map<\n string,\n DeprecatedToken[] | undefined\n >();\n\n const sendReport = (\n property: string,\n node: TSESTree.Node,\n value: string | undefined,\n ) => {\n if (!value) {\n return;\n }\n\n let tokens: DeprecatedToken[] | undefined =\n deprecatedTokensCache.get(value);\n\n if (!tokens) {\n tokens = getDeprecatedTokens(property, value, context);\n deprecatedTokensCache.set(value, tokens);\n }\n\n if (!tokens || tokens.length === 0) {\n return;\n }\n\n for (const token of tokens) {\n context.report({\n data: {\n category: typeof token === 'string' ? undefined : token.category,\n token: typeof token === 'string' ? token : token.value,\n },\n messageId:\n typeof token === 'string'\n ? 'noDeprecatedTokenPaths'\n : 'noDeprecatedTokens',\n node,\n });\n }\n };\n\n const handleLiteralOrTemplate = (\n property: string,\n node: TSESTree.Node | undefined,\n ) => {\n if (!node) {\n return;\n }\n\n if (isLiteral(node)) {\n const value = node.value?.toString();\n sendReport(property, node, value);\n } else if (isTemplateLiteral(node) && node.expressions.length === 0) {\n const value = node.quasis[0].value.raw;\n sendReport(property, node.quasis[0], value);\n }\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value || !isBambooProperty(node, context)) {\n return;\n }\n\n const property = node.name.name as string;\n\n if (isLiteral(node.value)) {\n handleLiteralOrTemplate(property, node.value);\n } else if (isJSXExpressionContainer(node.value)) {\n handleLiteralOrTemplate(property, node.value.expression);\n }\n },\n\n Property(node: TSESTree.Property) {\n if (\n !isIdentifier(node.key) ||\n !isNodeOfTypes([\n AST_NODE_TYPES.Literal,\n AST_NODE_TYPES.TemplateLiteral,\n ])(node.value) ||\n !isBambooAttribute(node, context) ||\n isRecipeVariant(node, context)\n ) {\n return;\n }\n\n const property = node.key.name as string;\n\n handleLiteralOrTemplate(property, node.value);\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow the use of deprecated tokens within token function syntax.',\n },\n messages: {\n noDeprecatedTokenPaths: '`{{token}}` is a deprecated token.',\n noDeprecatedTokens: '`{{token}}` is a deprecated {{category}} token.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isInBambooFunction,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isArrayExpression,\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isObjectExpression,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-dynamic-styling';\n\nconst rule = createRule({\n create(context) {\n // Helper function to determine if a node represents a static value\n function isStaticValue(node: null | TSESTree.Node | undefined): boolean {\n if (!node) {\n return false;\n }\n\n if (isLiteral(node)) {\n return true;\n }\n\n if (isTemplateLiteral(node) && node.expressions.length === 0) {\n return true;\n }\n\n if (isObjectExpression(node)) {\n return true;\n } // Conditions are acceptable\n\n return false;\n }\n\n // Function to check array elements for dynamic values\n function checkArrayElements(array: TSESTree.ArrayExpression) {\n for (const element of array.elements) {\n if (!element) {\n continue;\n }\n\n if (isStaticValue(element)) {\n continue;\n }\n\n context.report({\n messageId: 'dynamic',\n node: element,\n });\n }\n }\n\n return {\n // JSX Attributes\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n // Check if it's a Bamboo prop early to avoid unnecessary processing\n const isBamboo = isBambooProperty(node, context);\n if (!isBamboo) {\n return;\n }\n\n // Static literals are fine\n if (isLiteral(node.value)) {\n return;\n }\n\n if (isJSXExpressionContainer(node.value)) {\n const expr = node.value.expression;\n\n if (isStaticValue(expr)) {\n return;\n }\n\n if (isArrayExpression(expr)) {\n checkArrayElements(expr);\n return;\n }\n\n // Report dynamic value usage\n context.report({\n messageId: 'dynamic',\n node: node.value,\n });\n }\n },\n\n // Object Properties\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n // Check if it's a Bamboo attribute early to avoid unnecessary processing\n if (!isBambooAttribute(node, context)) {\n return;\n }\n\n if (isRecipeVariant(node, context)) {\n return;\n }\n\n if (isStaticValue(node.value)) {\n return;\n }\n\n if (isArrayExpression(node.value)) {\n checkArrayElements(node.value);\n return;\n }\n\n // Report dynamic value usage\n context.report({\n messageId: 'dynamic',\n node: node.value,\n });\n },\n\n // Dynamic properties with computed keys\n 'Property[computed=true]': (node: TSESTree.Property) => {\n if (!isInBambooFunction(node, context)) {\n return;\n }\n\n context.report({\n messageId: isRecipeVariant(node, context)\n ? 'dynamicRecipeVariant'\n : 'dynamicProperty',\n node: node.key,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"Ensure users don't use dynamic styling. Prefer static styles, leverage CSS variables, or recipes for known dynamic styles.\",\n },\n messages: {\n dynamic: 'Remove dynamic value. Prefer static styles.',\n dynamicProperty: 'Remove dynamic property. Prefer static style property.',\n dynamicRecipeVariant:\n 'Remove dynamic variant. Prefer static variant definition.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { getArbitraryValue } from '@bamboocss/shared';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-escape-hatch';\n\nconst rule = createRule({\n create(context) {\n // Helper function to adjust the range for fixing (removing brackets)\n const removeBrackets = (range: readonly [number, number]) => {\n const [start, end] = range;\n return [start + 1, end - 1] as const;\n };\n\n // Function to check if a value contains escape hatch syntax\n const hasEscapeHatch = (value: string | undefined): boolean => {\n if (!value) {\n return false;\n }\n\n // Early return if the value doesn't contain brackets\n if (!value.includes('[')) {\n return false;\n }\n\n return getArbitraryValue(value) !== value.trim();\n };\n\n // Unified function to handle reporting\n const handleNodeValue = (node: TSESTree.Node, value: string) => {\n if (!hasEscapeHatch(value)) {\n return;\n }\n\n context.report({\n messageId: 'escapeHatch',\n node,\n suggest: [\n {\n fix: (fixer) => {\n return fixer.replaceTextRange(\n removeBrackets(node.range as [number, number]),\n getArbitraryValue(value),\n );\n },\n messageId: 'remove',\n },\n ],\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n // Ensure the attribute is a Bamboo prop\n if (!isBambooProperty(node, context)) {\n return;\n }\n\n const { value } = node;\n\n if (isLiteral(value)) {\n const value_ = value.value?.toString() ?? '';\n handleNodeValue(value, value_);\n } else if (isJSXExpressionContainer(value)) {\n const expr = value.expression;\n if (isLiteral(expr)) {\n const value_ = expr.value?.toString() ?? '';\n handleNodeValue(expr, value_);\n } else if (isTemplateLiteral(expr) && expr.expressions.length === 0) {\n const value_ = expr.quasis[0].value.raw;\n handleNodeValue(expr.quasis[0], value_);\n }\n }\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n // Ensure the property is a Bamboo attribute\n if (!isBambooAttribute(node, context)) {\n return;\n }\n\n // Exclude recipe variants\n if (isRecipeVariant(node, context)) {\n return;\n }\n\n const value = node.value;\n if (isLiteral(value)) {\n const value_ = value.value?.toString() ?? '';\n handleNodeValue(value, value_);\n } else if (isTemplateLiteral(value) && value.expressions.length === 0) {\n const value_ = value.quasis[0].value.raw;\n handleNodeValue(value.quasis[0], value_);\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description: 'Prohibit the use of escape hatch syntax in the code.',\n },\n hasSuggestions: true,\n messages: {\n escapeHatch:\n 'Avoid using the escape hatch [value] for undefined tokens. Define a corresponding token in your design system for better consistency and maintainability.',\n remove: 'Remove the square brackets (`[]`).',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n extractTokens,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isColorAttribute as originalIsColorAttribute,\n isColorToken as originalIsColorToken,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isJSXIdentifier,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-hardcoded-color';\n\nconst rule = createRule({\n create(context) {\n const noOpacity = context.options[0]?.noOpacity;\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Caches for isColorToken and isColorAttribute results\n const colorTokenCache = new Map<string, boolean | undefined>(\n whitelist?.map((item) => [item, true]),\n );\n const colorAttributeCache = new Map<string, boolean>();\n\n // Cached version of isColorToken\n const isColorToken = (token: string): boolean => {\n if (colorTokenCache.has(token)) {\n return colorTokenCache.get(token)!;\n }\n\n const result = originalIsColorToken(token, context);\n colorTokenCache.set(token, result);\n return Boolean(result);\n };\n\n // Cached version of isColorAttribute\n const isColorAttribute = (attribute: string): boolean => {\n if (colorAttributeCache.has(attribute)) {\n return colorAttributeCache.get(attribute)!;\n }\n\n const result = originalIsColorAttribute(attribute, context);\n colorAttributeCache.set(attribute, result);\n return result;\n };\n\n const isTokenFunctionUsed = (value: string): boolean => {\n if (!value) {\n return false;\n }\n\n const tokens = extractTokens(value);\n return tokens.length > 0;\n };\n\n const isValidColorToken = (value: string): boolean => {\n if (!value) {\n return false;\n }\n\n const [colorToken, opacity] = value.split('/');\n const hasOpacity = opacity !== undefined && opacity.length > 0;\n const isValidToken = isColorToken(colorToken);\n\n return noOpacity ? isValidToken && !hasOpacity : isValidToken;\n };\n\n const reportInvalidColor = (node: TSESTree.Node, color: string) => {\n context.report({\n data: {\n color,\n },\n messageId: 'invalidColor',\n node,\n });\n };\n\n const checkColorValue = (\n node: TSESTree.Node,\n value: string,\n attributeName: string,\n ) => {\n if (!isColorAttribute(attributeName)) {\n return;\n }\n\n if (isTokenFunctionUsed(value)) {\n return;\n }\n\n if (isValidColorToken(value)) {\n return;\n }\n\n reportInvalidColor(node, value);\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isBambooProperty(node, context) || !node.value) {\n return;\n }\n\n const attributeName = node.name.name;\n const valueNode = node.value;\n\n if (isLiteral(valueNode)) {\n const value = valueNode.value?.toString() || '';\n checkColorValue(valueNode, value, attributeName);\n } else if (isJSXExpressionContainer(valueNode)) {\n const expression = valueNode.expression;\n if (isLiteral(expression)) {\n const value = expression.value?.toString() || '';\n checkColorValue(expression, value, attributeName);\n } else if (\n isTemplateLiteral(expression) &&\n expression.expressions.length === 0\n ) {\n const value = expression.quasis[0].value.raw;\n checkColorValue(expression.quasis[0], value, attributeName);\n }\n }\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isBambooAttribute(node, context)) {\n return;\n }\n\n if (isRecipeVariant(node, context)) {\n return;\n }\n\n const attributeName = node.key.name;\n const valueNode = node.value;\n\n if (isLiteral(valueNode)) {\n const value = valueNode.value?.toString() || '';\n checkColorValue(valueNode, value, attributeName);\n } else if (\n isTemplateLiteral(valueNode) &&\n valueNode.expressions.length === 0\n ) {\n const value = valueNode.quasis[0].value.raw;\n checkColorValue(valueNode.quasis[0], value, attributeName);\n }\n },\n };\n },\n defaultOptions: [\n {\n noOpacity: false,\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Enforce the exclusive use of design tokens as values for colors within the codebase.',\n },\n messages: {\n invalidColor: '`{{color}}` is not a valid color token.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n noOpacity: {\n type: 'boolean',\n },\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { getArbitraryValue } from '@bamboocss/shared';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\n// Regular expressions to detect '!important' and '!' at the end of a value\nconst exclamationRegex = /\\s*!$/;\nconst importantRegex = /\\s*!important\\s*$/;\n\nexport const RULE_NAME = 'no-important';\n\nconst rule = createRule({\n create(context) {\n // Helper function to adjust the range for fixing (removing quotes)\n const removeQuotes = (range: readonly [number, number]) => {\n const [start, end] = range;\n return [start + 1, end - 1] as const;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n\n // Cached version of isBambooProp\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n // Cached version of isBambooAttribute\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n // Cached version of isRecipeVariant\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n // Function to check if a value contains '!important' or '!'\n const hasImportantKeyword = (value: string | undefined): boolean => {\n if (!value) {\n return false;\n }\n\n const arbitraryValue = getArbitraryValue(value);\n return (\n exclamationRegex.test(arbitraryValue) ||\n importantRegex.test(arbitraryValue)\n );\n };\n\n // Function to remove '!important' or '!' from a string\n const removeImportantKeyword = (\n input: string,\n ): { fixed: string; keyword: null | string } => {\n if (importantRegex.test(input)) {\n // Remove '!important' with optional whitespace\n return {\n fixed: input.replace(importantRegex, '').trimEnd(),\n keyword: '!important',\n };\n } else if (exclamationRegex.test(input)) {\n // Remove trailing '!'\n return {\n fixed: input.replace(exclamationRegex, '').trimEnd(),\n keyword: '!',\n };\n } else {\n // No match, return the original string\n return { fixed: input, keyword: null };\n }\n };\n\n // Unified function to handle reporting\n const handleNodeValue = (node: TSESTree.Node, value: string) => {\n if (!hasImportantKeyword(value)) {\n return;\n }\n\n const arbitraryValue = getArbitraryValue(value);\n const { fixed: fixedArbitrary, keyword } =\n removeImportantKeyword(arbitraryValue);\n\n // If the value has escape hatch brackets, preserve them\n let fixed = value;\n if (value.startsWith('[') && value.endsWith(']')) {\n fixed = `[${fixedArbitrary}]`;\n } else {\n fixed = fixedArbitrary;\n }\n\n context.report({\n data: { keyword },\n messageId: 'important',\n node,\n suggest: [\n {\n data: { keyword },\n fix: (fixer) => {\n return fixer.replaceTextRange(\n removeQuotes(node.range as [number, number]),\n fixed,\n );\n },\n messageId: 'remove',\n },\n ],\n });\n };\n\n return {\n // JSX Attributes\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const valueNode = node.value;\n\n if (isLiteral(valueNode)) {\n const value = valueNode.value?.toString() ?? '';\n handleNodeValue(valueNode, value);\n } else if (isJSXExpressionContainer(valueNode)) {\n const expr = valueNode.expression;\n\n if (isLiteral(expr)) {\n const value = expr.value?.toString() ?? '';\n handleNodeValue(expr, value);\n } else if (isTemplateLiteral(expr) && expr.expressions.length === 0) {\n const value = expr.quasis[0].value.raw;\n handleNodeValue(expr.quasis[0], value);\n }\n }\n },\n\n // Object Properties\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const valueNode = node.value;\n\n if (isLiteral(valueNode)) {\n const value = valueNode.value?.toString() ?? '';\n handleNodeValue(valueNode, value);\n } else if (\n isTemplateLiteral(valueNode) &&\n valueNode.expressions.length === 0\n ) {\n const value = valueNode.quasis[0].value.raw;\n handleNodeValue(valueNode.quasis[0], value);\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow usage of !important keyword. Prioritize specificity for a maintainable and predictable styling structure.',\n },\n hasSuggestions: true,\n messages: {\n important:\n 'Avoid using the {{keyword}} keyword. Refactor your code to prioritize specificity for predictable styling.',\n remove: 'Remove the `{{keyword}}` keyword.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isInJSXProp as isInJSXProperty,\n isInBambooFunction,\n isRecipeVariant,\n isStyledProperty,\n} from '../utils/helpers';\nimport { isLiteral, isTemplateLiteral } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-invalid-nesting';\n\nconst rule = createRule({\n create(context) {\n // Caches for helper functions\n const bambooFunctionCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const jsxPropertyCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const styledPropertyCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n\n // Cached helper functions\n const isCachedInBambooFunction = (node: TSESTree.Property): boolean => {\n if (bambooFunctionCache.has(node)) {\n return bambooFunctionCache.get(node)!;\n }\n\n const result = Boolean(isInBambooFunction(node, context));\n bambooFunctionCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedInJSXProperty = (node: TSESTree.Property): boolean => {\n if (jsxPropertyCache.has(node)) {\n return jsxPropertyCache.get(node)!;\n }\n\n const result = isInJSXProperty(node, context);\n jsxPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedStyledProperty = (node: TSESTree.Property): boolean => {\n if (styledPropertyCache.has(node)) {\n return styledPropertyCache.get(node)!;\n }\n\n const result = isStyledProperty(node, context);\n styledPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n // Function to check if a key is an invalid nesting selector\n const isInvalidNestingSelector = (node: TSESTree.Expression): boolean => {\n if (isLiteral(node) && typeof node.value === 'string') {\n return !node.value.includes('&');\n } else if (isTemplateLiteral(node) && node.expressions.length === 0) {\n return !node.quasis[0].value.raw.includes('&');\n }\n\n return false;\n };\n\n return {\n // Use AST selector to target Property nodes with non-Identifier keys whose value is an ObjectExpression\n 'Property[key.type!=/Identifier/][value.type=\"ObjectExpression\"]'(\n node: TSESTree.Property,\n ) {\n // Check if the node is within a Bamboo function or JSX prop\n const inBambooFunction = isCachedInBambooFunction(node);\n const inJSXProperty = isCachedInJSXProperty(node);\n\n if (!inBambooFunction && !inJSXProperty) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n if (isCachedStyledProperty(node)) {\n return;\n }\n\n const keyNode = node.key;\n\n if (isInvalidNestingSelector(keyNode)) {\n context.report({\n messageId: 'nesting',\n node: keyNode,\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Warn against invalid nesting. Nested styles must contain the `&` character.',\n },\n messages: {\n nesting:\n 'Invalid style nesting. Nested styles must contain the `&` character.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n getInvalidTokens,\n getTaggedTemplateCaller,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isStyledTaggedTemplate,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { AST_NODE_TYPES, type TSESTree } from '@typescript-eslint/utils';\nimport { isNodeOfTypes } from '@typescript-eslint/utils/ast-utils';\n\nexport const RULE_NAME = 'no-invalid-token-paths';\n\nconst rule = createRule({\n create(context) {\n // Cache for invalid tokens to avoid redundant computations\n const invalidTokensCache = new Map<string, string[] | undefined>();\n\n const sendReport = (node: TSESTree.Node, value: string | undefined) => {\n if (!value) {\n return;\n }\n\n let tokens: string[] | undefined = invalidTokensCache.get(value);\n\n if (!tokens) {\n tokens = getInvalidTokens(value, context);\n invalidTokensCache.set(value, tokens);\n }\n\n if (!tokens || tokens.length === 0) {\n return;\n }\n\n for (const token of tokens) {\n context.report({\n data: { token },\n messageId: 'noInvalidTokenPaths',\n node,\n });\n }\n };\n\n const handleLiteralOrTemplate = (node: TSESTree.Node | undefined) => {\n if (!node) {\n return;\n }\n\n if (isLiteral(node)) {\n const value = node.value?.toString();\n sendReport(node, value);\n } else if (isTemplateLiteral(node) && node.expressions.length === 0) {\n const value = node.quasis[0].value.raw;\n sendReport(node.quasis[0], value);\n }\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value || !isBambooProperty(node, context)) {\n return;\n }\n\n if (isLiteral(node.value)) {\n handleLiteralOrTemplate(node.value);\n } else if (isJSXExpressionContainer(node.value)) {\n handleLiteralOrTemplate(node.value.expression);\n }\n },\n\n Property(node: TSESTree.Property) {\n if (\n !isIdentifier(node.key) ||\n !isNodeOfTypes([\n AST_NODE_TYPES.Literal,\n AST_NODE_TYPES.TemplateLiteral,\n ])(node.value) ||\n !isBambooAttribute(node, context) ||\n isRecipeVariant(node, context)\n ) {\n return;\n }\n\n handleLiteralOrTemplate(node.value);\n },\n\n TaggedTemplateExpression(node: TSESTree.TaggedTemplateExpression) {\n const caller = getTaggedTemplateCaller(node);\n if (!caller) {\n return;\n }\n\n // Check if this is a styled template literal\n if (!isStyledTaggedTemplate(node, context)) {\n return;\n }\n\n const quasis = node.quasi.quasis;\n for (const quasi of quasis) {\n const styles = quasi.value.raw;\n if (!styles) {\n continue;\n }\n\n let tokens: string[] | undefined = invalidTokensCache.get(styles);\n if (!tokens) {\n tokens = getInvalidTokens(styles, context);\n invalidTokensCache.set(styles, tokens);\n }\n\n if (!tokens || tokens.length === 0) {\n continue;\n }\n\n for (const token of tokens) {\n let index = styles.indexOf(token);\n\n while (index !== -1) {\n const start = quasi.range[0] + index + 1; // +1 for the backtick\n const end = start + token.length;\n\n context.report({\n data: { token },\n loc: {\n end: context.sourceCode.getLocFromIndex(end),\n start: context.sourceCode.getLocFromIndex(start),\n },\n messageId: 'noInvalidTokenPaths',\n });\n\n // Check for other occurences of the invalid token\n index = styles.indexOf(token, index + token.length);\n }\n }\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow the use of invalid token paths within token function syntax.',\n },\n messages: {\n noInvalidTokenPaths: '`{{token}}` is an invalid token path.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n resolveLonghand,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-margin-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string>();\n\n const getLonghand = (name: string): string => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n const marginRegex = /margin/i;\n\n const isMarginProperty = (name: string): boolean => {\n const longhand = getLonghand(name).toLowerCase();\n return marginRegex.test(longhand);\n };\n\n const sendReport = (node: TSESTree.Identifier | TSESTree.JSXIdentifier) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n if (!isMarginProperty(node.name)) {\n return;\n }\n\n context.report({\n messageId: 'noMargin',\n node,\n });\n };\n\n // Cache for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n sendReport(node.name);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n sendReport(node.key);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Discourage using margin properties for spacing; prefer defining spacing in parent elements with `flex` or `grid` using the `gap` property for a more resilient layout. Margins make components less reusable in other contexts.',\n },\n messages: {\n noMargin:\n 'Use flex or grid with the `gap` property to define spacing in parent elements for a more resilient layout.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","export const physicalProperties: Record<string, string> = {\n borderBottom: 'borderBlockEnd',\n borderBottomColor: 'borderBlockEndColor',\n borderBottomLeftRadius: 'borderEndStartRadius',\n borderBottomRightRadius: 'borderEndEndRadius',\n borderBottomStyle: 'borderBlockEndStyle',\n borderBottomWidth: 'borderBlockEndWidth',\n borderLeft: 'borderInlineStart',\n borderLeftColor: 'borderInlineStartColor',\n borderLeftStyle: 'borderInlineStartStyle',\n borderLeftWidth: 'borderInlineStartWidth',\n borderRight: 'borderInlineEnd',\n borderRightColor: 'borderInlineEndColor',\n borderRightStyle: 'borderInlineEndStyle',\n borderRightWidth: 'borderInlineEndWidth',\n borderTop: 'borderBlockStart',\n borderTopColor: 'borderBlockStartColor',\n borderTopLeftRadius: 'borderStartStartRadius',\n borderTopRightRadius: 'borderStartEndRadius',\n borderTopStyle: 'borderBlockStartStyle',\n borderTopWidth: 'borderBlockStartWidth',\n bottom: 'insetBlockEnd',\n left: 'insetInlineStart',\n marginBottom: 'marginBlockEnd',\n marginLeft: 'marginInlineStart',\n marginRight: 'marginInlineEnd',\n marginTop: 'marginBlockStart',\n paddingBottom: 'paddingBlockEnd',\n paddingLeft: 'paddingInlineStart',\n paddingRight: 'paddingInlineEnd',\n paddingTop: 'paddingBlockStart',\n right: 'insetInlineEnd',\n top: 'insetBlockStart',\n};\n\n// Map of property names to their physical values and corresponding logical values\nexport const physicalPropertyValues: Record<string, Record<string, string>> = {\n // text-align physical values mapped to logical values\n textAlign: {\n left: 'start',\n right: 'end',\n },\n};\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n resolveLonghand,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isJSXIdentifier,\n isLiteral,\n} from '../utils/nodes';\nimport {\n physicalProperties,\n physicalPropertyValues,\n} from '../utils/physical-properties';\nimport { type TSESLint, type TSESTree } from '@typescript-eslint/utils';\n\ntype CacheMap<K extends object, V> = WeakMap<K, undefined | V>;\ntype IdentifierNode = TSESTree.Identifier | TSESTree.JSXIdentifier;\ntype RuleContextType = TSESLint.RuleContext<\n keyof typeof MESSAGES,\n [{ whitelist: string[] }]\n>;\ntype ValueNode = TSESTree.JSXAttribute['value'] | TSESTree.Property['value'];\n\nexport const RULE_NAME = 'no-physical-properties';\n\nconst MESSAGES = {\n physical:\n 'Use logical property instead of {{physical}}. Prefer `{{logical}}`.',\n physicalValue:\n 'Use logical value instead of {{physical}}. Prefer `{{logical}}`.',\n replace: 'Replace `{{physical}}` with `{{logical}}`.',\n} as const;\n\nclass PropertyCache {\n private longhandCache = new Map<string, string>();\n\n private bambooAttributeCache: CacheMap<TSESTree.Property, boolean> =\n new WeakMap();\n\n private bambooPropCache: CacheMap<TSESTree.JSXAttribute, boolean> =\n new WeakMap();\n\n private recipeVariantCache: CacheMap<TSESTree.Property, boolean> =\n new WeakMap();\n\n getLonghand(name: string, context: RuleContextType): string {\n if (this.longhandCache.has(name)) {\n return this.longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n this.longhandCache.set(name, longhand);\n return longhand;\n }\n\n isBambooAttribute(node: TSESTree.Property, context: RuleContextType): boolean {\n if (this.bambooAttributeCache.has(node)) {\n return this.bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n this.bambooAttributeCache.set(node, result);\n return Boolean(result);\n }\n\n isBambooProp(node: TSESTree.JSXAttribute, context: RuleContextType): boolean {\n if (this.bambooPropCache.has(node)) {\n return this.bambooPropCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n this.bambooPropCache.set(node, result);\n return Boolean(result);\n }\n\n isRecipeVariant(node: TSESTree.Property, context: RuleContextType): boolean {\n if (this.recipeVariantCache.has(node)) {\n return this.recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n this.recipeVariantCache.set(node, result);\n return Boolean(result);\n }\n}\n\nconst extractStringLiteralValue = (valueNode: ValueNode): null | string => {\n if (isLiteral(valueNode) && typeof valueNode.value === 'string') {\n return valueNode.value;\n }\n\n if (\n isJSXExpressionContainer(valueNode) &&\n isLiteral(valueNode.expression) &&\n typeof valueNode.expression.value === 'string'\n ) {\n return valueNode.expression.value;\n }\n\n return null;\n};\n\nconst createPropertyReport = (\n node: IdentifierNode,\n longhandName: string,\n logical: string,\n context: RuleContextType,\n) => {\n const physicalName = `\\`${node.name}\\`${longhandName !== node.name ? ` (resolved to \\`${longhandName}\\`)` : ''}`;\n\n context.report({\n data: { logical, physical: physicalName },\n messageId: 'physical',\n node,\n suggest: [\n {\n data: { logical, physical: node.name },\n fix: (fixer: TSESLint.RuleFixer) => fixer.replaceText(node, logical),\n messageId: 'replace',\n },\n ],\n });\n};\n\nconst createValueReport = (\n valueNode: NonNullable<ValueNode>,\n valueText: string,\n logical: string,\n context: RuleContextType,\n) => {\n context.report({\n data: { logical: `\"${logical}\"`, physical: `\"${valueText}\"` },\n messageId: 'physicalValue',\n node: valueNode,\n suggest: [\n {\n data: { logical: `\"${logical}\"`, physical: `\"${valueText}\"` },\n fix: (fixer: TSESLint.RuleFixer) => {\n if (isLiteral(valueNode)) {\n return fixer.replaceText(valueNode, `\"${logical}\"`);\n }\n\n if (\n isJSXExpressionContainer(valueNode) &&\n isLiteral(valueNode.expression)\n ) {\n return fixer.replaceText(valueNode.expression, `\"${logical}\"`);\n }\n\n return null;\n },\n messageId: 'replace',\n },\n ],\n });\n};\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n const cache = new PropertyCache();\n\n const checkPropertyName = (node: IdentifierNode) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n const longhandName = cache.getLonghand(node.name, context);\n if (!(longhandName in physicalProperties)) {\n return;\n }\n\n const logical = physicalProperties[longhandName];\n createPropertyReport(node, longhandName, logical, context);\n };\n\n const checkPropertyValue = (\n keyNode: IdentifierNode,\n valueNode: NonNullable<ValueNode>,\n ): boolean => {\n const propertyName = keyNode.name;\n if (!(propertyName in physicalPropertyValues)) {\n return false;\n }\n\n const valueText = extractStringLiteralValue(valueNode);\n if (valueText === null) {\n return false;\n }\n\n const valueMap = physicalPropertyValues[propertyName];\n if (!valueMap[valueText]) {\n return false;\n }\n\n createValueReport(valueNode, valueText, valueMap[valueText], context);\n return true;\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!cache.isBambooProp(node, context)) {\n return;\n }\n\n checkPropertyName(node.name);\n if (node.value) {\n checkPropertyValue(node.name, node.value);\n }\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!cache.isBambooAttribute(node, context)) {\n return;\n }\n\n if (cache.isRecipeVariant(node, context)) {\n return;\n }\n\n checkPropertyName(node.key);\n if (node.value) {\n checkPropertyValue(node.key, node.value);\n }\n },\n };\n },\n defaultOptions: [{ whitelist: [] }],\n meta: {\n docs: {\n description:\n 'Encourage the use of logical properties over physical properties to foster a responsive and adaptable user interface.',\n },\n hasSuggestions: true,\n messages: MESSAGES,\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isMemberExpression,\n} from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-property-renaming';\n\nconst rule = createRule({\n create(context) {\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (\n node: TSESTree.Node,\n expected: string,\n property: string,\n ) => {\n context.report({\n data: {\n expected,\n prop: property,\n },\n messageId: 'noRenaming',\n node,\n });\n };\n\n const handleReport = (\n node: TSESTree.Node,\n value: TSESTree.Node,\n attribute: string,\n ) => {\n if (isIdentifier(value) && attribute !== value.name) {\n sendReport(node, attribute, value.name);\n } else if (\n isMemberExpression(value) &&\n isIdentifier(value.property) &&\n attribute !== value.property.name\n ) {\n sendReport(node, attribute, value.property.name);\n }\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n if (!isJSXExpressionContainer(node.value)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const attribute = node.name.name.toString();\n const expression = node.value.expression;\n\n handleReport(node.value, expression, attribute);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isIdentifier(node.value) && !isMemberExpression(node.value)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const attribute = node.key.name;\n const value = node.value;\n\n handleReport(node.value, value, attribute);\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Ensure that properties for patterns or style props are not renamed, as it prevents proper tracking.',\n },\n messages: {\n noRenaming:\n 'Incoming `{{prop}}` prop is different from the expected `{{expected}}` attribute. Bamboo will not track this prop.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n extractTokens,\n getTokenImport,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isCallExpression,\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { getArbitraryValue } from '@bamboocss/shared';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-unsafe-token-fn-usage';\n\nconst rule = createRule({\n create(context) {\n // Cache for getTokenImport result\n let tokenImportCache: null | undefined | { alias: string };\n\n const getCachedTokenImport = (): null | undefined | { alias: string } => {\n if (tokenImportCache !== undefined) {\n return tokenImportCache;\n }\n\n tokenImportCache = getTokenImport(context);\n return tokenImportCache;\n };\n\n const isUnsafeCallExpression = (node: TSESTree.CallExpression): boolean => {\n const tkImport = getCachedTokenImport();\n return isIdentifier(node.callee) && node.callee.name === tkImport?.alias;\n };\n\n const tokenWrap = (value?: string): string =>\n value ? `token(${value})` : '';\n\n const isCompositeValue = (input?: string): boolean => {\n if (!input) {\n return false;\n }\n\n // Regular expression to match token-only values, e.g., token('space.2') or {space.2}\n const tokenRegex = /^(?:token\\([^)]*\\)|\\{[^}]*\\})$/;\n return !tokenRegex.test(input);\n };\n\n const sendReport = (node: TSESTree.Node, value: string) => {\n const tkImports = extractTokens(value);\n if (!tkImports.length) {\n return;\n }\n\n const token = tkImports[0].replace(/^[^.]*\\./, '');\n\n context.report({\n messageId: 'noUnsafeTokenFnUsage',\n node,\n suggest: [\n {\n data: { safe: token },\n fix: (fixer) => fixer.replaceText(node, `'${token}'`),\n messageId: 'replace',\n },\n ],\n });\n };\n\n const handleRuntimeFunction = (node: TSESTree.Node) => {\n if (!isCallExpression(node)) {\n return;\n }\n\n if (!isUnsafeCallExpression(node)) {\n return;\n }\n\n const value = node.arguments[0];\n\n if (isLiteral(value)) {\n const value_ = getArbitraryValue(value.value?.toString() ?? '');\n sendReport(node, tokenWrap(value_));\n } else if (isTemplateLiteral(value) && value.expressions.length === 0) {\n const value_ = getArbitraryValue(value.quasis[0].value.raw);\n sendReport(node, tokenWrap(value_));\n }\n };\n\n const handleLiteral = (node: TSESTree.Node) => {\n if (!isLiteral(node)) {\n return;\n }\n\n const value = getArbitraryValue(node.value?.toString() ?? '');\n if (isCompositeValue(value)) {\n return;\n }\n\n sendReport(node, value);\n };\n\n const handleTemplateLiteral = (node: TSESTree.Node) => {\n if (!isTemplateLiteral(node) || node.expressions.length > 0) {\n return;\n }\n\n const value = getArbitraryValue(node.quasis[0].value.raw);\n if (isCompositeValue(value)) {\n return;\n }\n\n sendReport(node, value);\n };\n\n // Cached versions of helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n handleLiteral(node.value);\n\n if (isJSXExpressionContainer(node.value)) {\n const expression = node.value.expression;\n handleLiteral(expression);\n handleTemplateLiteral(expression);\n handleRuntimeFunction(expression);\n }\n },\n\n Property(node: TSESTree.Property) {\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const valueNode = node.value;\n\n if (\n isCallExpression(valueNode) ||\n isLiteral(valueNode) ||\n isTemplateLiteral(valueNode)\n ) {\n handleRuntimeFunction(valueNode);\n handleLiteral(valueNode);\n handleTemplateLiteral(valueNode);\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Prevent users from using the token function in situations where they could simply use the raw design token.',\n },\n hasSuggestions: true,\n messages: {\n noUnsafeTokenFnUsage:\n 'Unnecessary token function usage. Prefer design token.',\n replace: 'Replace token function with `{{safe}}`.',\n },\n schema: [],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","export const compositeProperties: Record<string, string[]> = {\n animation: [\n 'animationName',\n 'animationDuration',\n 'animationTimingFunction',\n 'animationDelay',\n 'animationIterationCount',\n 'animationDirection',\n 'animationFillMode',\n 'animationPlayState',\n ],\n background: [\n 'backgroundImage',\n 'backgroundPosition',\n 'backgroundSize',\n 'backgroundRepeat',\n 'backgroundAttachment',\n 'backgroundOrigin',\n 'backgroundClip',\n 'backgroundColor',\n ],\n backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n border: ['borderWidth', 'borderStyle', 'borderColor'],\n borderBlockEnd: [\n 'borderBlockEndWidth',\n 'borderBlockEndStyle',\n 'borderBlockEndColor',\n ],\n borderBlockStart: [\n 'borderBlockStartWidth',\n 'borderBlockStartStyle',\n 'borderBlockStartColor',\n ],\n borderBottom: ['borderBottomWidth', 'borderBottomStyle', 'borderBottomColor'],\n borderColor: [\n 'borderTopColor',\n 'borderRightColor',\n 'borderBottomColor',\n 'borderLeftColor',\n ],\n borderImage: [\n 'borderImageSource',\n 'borderImageSlice',\n 'borderImageWidth',\n 'borderImageOutset',\n 'borderImageRepeat',\n ],\n borderInlineEnd: [\n 'borderInlineEndWidth',\n 'borderInlineEndStyle',\n 'borderInlineEndColor',\n ],\n borderInlineStart: [\n 'borderInlineStartWidth',\n 'borderInlineStartStyle',\n 'borderInlineStartColor',\n ],\n borderLeft: ['borderLeftWidth', 'borderLeftStyle', 'borderLeftColor'],\n borderRadius: [\n 'borderTopLeftRadius',\n 'borderTopRightRadius',\n 'borderBottomRightRadius',\n 'borderBottomLeftRadius',\n ],\n borderRight: ['borderRightWidth', 'borderRightStyle', 'borderRightColor'],\n borderStyle: [\n 'borderTopStyle',\n 'borderRightStyle',\n 'borderBottomStyle',\n 'borderLeftStyle',\n ],\n borderTop: ['borderTopWidth', 'borderTopStyle', 'borderTopColor'],\n borderWidth: [\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n ],\n columnRule: ['columnRuleWidth', 'columnRuleStyle', 'columnRuleColor'],\n columns: ['columnWidth', 'columnCount'],\n container: ['contain', 'content'],\n containIntrinsicSize: [\n 'containIntrinsicSizeInline',\n 'containIntrinsicSizeBlock',\n ],\n cue: ['cueBefore', 'cueAfter'],\n flex: ['flexGrow', 'flexShrink', 'flexBasis'],\n flexFlow: ['flexDirection', 'flexWrap'],\n font: [\n 'fontStyle',\n 'fontVariantCaps',\n 'fontVariantEastAsian',\n 'fontVariantLigatures',\n 'fontVariantNumeric',\n 'fontVariantPosition',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'lineHeight',\n 'fontFamily',\n ],\n fontSynthesis: [\n 'fontSynthesisWeight',\n 'fontSynthesisStyle',\n 'fontSynthesisSmallCaps',\n ],\n fontVariant: [\n 'fontVariantCaps',\n 'fontVariantEastAsian',\n 'fontVariantLigatures',\n 'fontVariantNumeric',\n 'fontVariantPosition',\n ],\n gap: ['columnGap', 'rowGap'],\n grid: [\n 'gridTemplateColumns',\n 'gridTemplateRows',\n 'gridTemplateAreas',\n 'gridAutoColumns',\n 'gridAutoRows',\n 'gridAutoFlow',\n ],\n gridArea: ['gridRowStart', 'gridColumnStart', 'gridRowEnd', 'gridColumnEnd'],\n gridColumn: ['gridColumnStart', 'gridColumnEnd'],\n gridGap: ['gridColumnGap', 'gridRowGap'],\n gridRow: ['gridRowStart', 'gridRowEnd'],\n gridTemplate: [\n 'gridTemplateColumns',\n 'gridTemplateRows',\n 'gridTemplateAreas',\n ],\n inset: ['top', 'right', 'bottom', 'left'],\n listStyle: ['listStyleType', 'listStylePosition', 'listStyleImage'],\n margin: ['marginTop', 'marginRight', 'marginBottom', 'marginLeft'],\n mask: [\n 'maskImage',\n 'maskMode',\n 'maskRepeat',\n 'maskPosition',\n 'maskClip',\n 'maskOrigin',\n 'maskSize',\n 'maskComposite',\n ],\n maskBorder: [\n 'maskBorderSource',\n 'maskBorderMode',\n 'maskBorderSlice',\n 'maskBorderWidth',\n 'maskBorderOutset',\n 'maskBorderRepeat',\n ],\n offset: [\n 'offsetPosition',\n 'offsetPath',\n 'offsetDistance',\n 'offsetRotate',\n 'offsetAnchor',\n ],\n outline: ['outlineWidth', 'outlineStyle', 'outlineColor'],\n overflow: ['overflowX', 'overflowY'],\n padding: ['paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n pause: ['pauseBefore', 'pauseAfter'],\n placeContent: ['alignContent', 'justifyContent'],\n placeItems: ['alignItems', 'justifyItems'],\n placeSelf: ['alignSelf', 'justifySelf'],\n rest: ['restBefore', 'restAfter'],\n scrollMargin: [\n 'scrollMarginTop',\n 'scrollMarginRight',\n 'scrollMarginBottom',\n 'scrollMarginLeft',\n ],\n scrollPadding: [\n 'scrollPaddingTop',\n 'scrollPaddingRight',\n 'scrollPaddingBottom',\n 'scrollPaddingLeft',\n ],\n scrollPaddingBlock: ['scrollPaddingBlockStart', 'scrollPaddingBlockEnd'],\n scrollPaddingInline: ['scrollPaddingInlineStart', 'scrollPaddingInlineEnd'],\n scrollSnapMargin: [\n 'scrollSnapMarginTop',\n 'scrollSnapMarginRight',\n 'scrollSnapMarginBottom',\n 'scrollSnapMarginLeft',\n ],\n scrollSnapMarginBlock: [\n 'scrollSnapMarginBlockStart',\n 'scrollSnapMarginBlockEnd',\n ],\n scrollSnapMarginInline: [\n 'scrollSnapMarginInlineStart',\n 'scrollSnapMarginInlineEnd',\n ],\n scrollTimeline: ['scrollTimelineSource', 'scrollTimelineOrientation'],\n textDecoration: [\n 'textDecorationLine',\n 'textDecorationStyle',\n 'textDecorationColor',\n ],\n textEmphasis: ['textEmphasisStyle', 'textEmphasisColor'],\n transition: [\n 'transitionProperty',\n 'transitionDuration',\n 'transitionTimingFunction',\n 'transitionDelay',\n ],\n};\n","import { createRule } from '../utils';\nimport { compositeProperties } from '../utils/composite-properties';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isValidProperty,\n resolveLonghand,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-atomic-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string>();\n\n const getLonghand = (name: string): string => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Cache for composite property resolution\n const compositePropertyCache = new Map<string, string | undefined>();\n\n const resolveCompositeProperty = (name: string): string | undefined => {\n if (compositePropertyCache.has(name)) {\n return compositePropertyCache.get(name);\n }\n\n if (Object.hasOwn(compositeProperties, name)) {\n compositePropertyCache.set(name, name);\n return name;\n }\n\n const longhand = getLonghand(name);\n if (\n isValidProperty(longhand, context) &&\n Object.hasOwn(compositeProperties, longhand)\n ) {\n compositePropertyCache.set(name, longhand);\n return longhand;\n }\n\n compositePropertyCache.set(name, undefined);\n return undefined;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (\n node: TSESTree.Identifier | TSESTree.JSXIdentifier,\n composite: string,\n ) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n const atomics = compositeProperties[composite]\n .map((name) => `\\`${name}\\``)\n .join(',\\n');\n\n context.report({\n data: {\n atomics,\n composite: node.name,\n },\n messageId: 'atomic',\n node,\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.name.name);\n if (!composite) {\n return;\n }\n\n sendReport(node.name, composite);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.key.name);\n if (!composite) {\n return;\n }\n\n sendReport(node.key, composite);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Encourage the use of atomic properties instead of composite properties in the codebase.',\n },\n messages: {\n atomic:\n 'Use atomic properties instead of `{{composite}}`. Prefer: \\n{{atomics}}',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport { compositeProperties } from '../utils/composite-properties';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isValidProperty,\n resolveLonghand,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-composite-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string>();\n\n const getLonghand = (name: string): string => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Cache for composite property resolution\n const compositePropertyCache = new Map<string, string | undefined>();\n\n const resolveCompositeProperty = (name: string): string | undefined => {\n if (compositePropertyCache.has(name)) {\n return compositePropertyCache.get(name);\n }\n\n const longhand = getLonghand(name);\n\n if (!isValidProperty(longhand, context)) {\n compositePropertyCache.set(name, undefined);\n return undefined;\n }\n\n const composite = Object.keys(compositeProperties).find((cpd) =>\n compositeProperties[cpd].includes(longhand),\n );\n\n compositePropertyCache.set(name, composite);\n return composite;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (\n node: TSESTree.Identifier | TSESTree.JSXIdentifier,\n composite: string,\n ) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n context.report({\n data: {\n atomic: node.name,\n composite,\n },\n messageId: 'composite',\n node,\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.name.name);\n if (!composite) {\n return;\n }\n\n sendReport(node.name, composite);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.key.name);\n if (!composite) {\n return;\n }\n\n sendReport(node.key, composite);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Encourage the use of composite properties instead of atomic properties in the codebase.',\n },\n messages: {\n composite:\n 'Use composite property instead of `{{atomic}}`. Prefer: `{{composite}}`.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n resolveLonghand,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-longhand-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string | undefined>();\n\n const getLonghand = (name: string): string | undefined => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context);\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (node: TSESTree.Identifier | TSESTree.JSXIdentifier) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n const longhand = getLonghand(node.name);\n if (!longhand || longhand === node.name) {\n return;\n }\n\n const data = {\n longhand,\n shorthand: node.name,\n };\n\n context.report({\n data,\n messageId: 'longhand',\n node,\n suggest: [\n {\n data,\n fix: (fixer) => fixer.replaceText(node, longhand),\n messageId: 'replace',\n },\n ],\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n sendReport(node.name);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n sendReport(node.key);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Discourage the use of shorthand properties and promote the preference for longhand properties in the codebase.',\n },\n hasSuggestions: true,\n messages: {\n longhand:\n 'Use longhand property instead of `{{shorthand}}`. Prefer `{{longhand}}`.',\n replace: 'Replace `{{shorthand}}` with `{{longhand}}`.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n resolveLonghand,\n resolveShorthands,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-shorthand-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string | undefined>();\n\n const getLonghand = (name: string): string | undefined => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context);\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Cache for resolved shorthands\n const shorthandsCache = new Map<string, string[] | undefined>();\n\n const getShorthands = (name: string): string[] | undefined => {\n if (shorthandsCache.has(name)) {\n return shorthandsCache.get(name)!;\n }\n\n const shorthands = resolveShorthands(name, context);\n shorthandsCache.set(name, shorthands);\n return shorthands;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (node: TSESTree.Identifier | TSESTree.JSXIdentifier) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n const longhand = getLonghand(node.name);\n if (longhand) {\n return;\n } // If it's already shorthand, no need to report\n\n const shorthands = getShorthands(node.name);\n if (!shorthands || shorthands.length === 0) {\n return;\n }\n\n const shorthandList = shorthands.map((s) => `\\`${s}\\``).join(', ');\n\n const data = {\n longhand: node.name,\n shorthand: shorthandList,\n };\n\n context.report({\n data,\n messageId: 'shorthand',\n node,\n suggest: [\n {\n data,\n fix: (fixer) => fixer.replaceText(node, shorthands[0]),\n messageId: 'replace',\n },\n ],\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n sendReport(node.name);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n sendReport(node.key);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Discourage the use of longhand properties and promote the preference for shorthand properties in the codebase.',\n },\n hasSuggestions: true,\n messages: {\n replace: 'Replace `{{longhand}}` with `{{shorthand}}`.',\n shorthand:\n 'Use shorthand property instead of `{{longhand}}`. Prefer `{{shorthand}}`.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport { compositeProperties } from '../utils/composite-properties';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isValidProperty,\n resolveLonghand,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXIdentifier,\n isJSXOpeningElement,\n isObjectExpression,\n} from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-unified-property-style';\n\nconst rule = createRule({\n create(context) {\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string>();\n\n const getLonghand = (name: string): string => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Cache for composite property resolution\n const compositePropertyCache = new Map<string, string | undefined>();\n\n const resolveCompositeProperty = (name: string): string | undefined => {\n if (compositePropertyCache.has(name)) {\n return compositePropertyCache.get(name);\n }\n\n if (name in compositeProperties) {\n compositePropertyCache.set(name, name);\n return name;\n }\n\n const longhand = getLonghand(name);\n if (\n isValidProperty(longhand, context) &&\n longhand in compositeProperties\n ) {\n compositePropertyCache.set(name, longhand);\n return longhand;\n }\n\n compositePropertyCache.set(name, undefined);\n return undefined;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (\n node: TSESTree.Node,\n composite: string,\n siblings: string[],\n ) => {\n const atomicPropertiesSet = new Set(\n siblings.filter((property) =>\n compositeProperties[composite].includes(getLonghand(property)),\n ),\n );\n\n if (atomicPropertiesSet.size === 0) {\n return;\n }\n\n const atomicProperties = Array.from(atomicPropertiesSet)\n .map((property) => `\\`${property}\\``)\n .join(', ');\n\n const atomics = compositeProperties[composite]\n .map((name) => `\\`${name}\\``)\n .join(', ');\n\n context.report({\n data: {\n atomicProperties,\n atomics,\n composite,\n },\n messageId: 'unify',\n node,\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.name.name);\n if (!composite) {\n return;\n }\n\n if (!isJSXOpeningElement(node.parent)) {\n return;\n }\n\n const siblings = node.parent.attributes.map(\n (attribute: any) => attribute.name.name,\n );\n\n sendReport(node, composite, siblings);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.key.name);\n if (!composite) {\n return;\n }\n\n if (!isObjectExpression(node.parent)) {\n return;\n }\n\n const siblings = node.parent.properties\n .filter(\n (property): property is TSESTree.Property =>\n property.type === 'Property',\n )\n .map((property) =>\n isIdentifier(property.key) ? property.key.name : '',\n );\n\n sendReport(node.key, composite, siblings);\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Discourage mixing atomic and composite forms of the same property in a style declaration. Atomic styles give more consistent results.',\n },\n messages: {\n unify:\n \"You're mixing atomic {{atomicProperties}} with composite property `{{composite}}`. Prefer atomic styling to mixing atomic and composite properties. Remove `{{composite}}` and use one or more of {{atomics}} instead.\",\n },\n schema: [],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import fileNotIncluded, {\n RULE_NAME as FileNotIncluded,\n} from './file-not-included';\nimport noConfigunctionInSource, {\n RULE_NAME as NoConfigunctionInSource,\n} from './no-config-function-in-source';\nimport noDebug, { RULE_NAME as NoDebug } from './no-debug';\nimport noDeprecatedTokens, {\n RULE_NAME as NoDeprecatedTokens,\n} from './no-deprecated-tokens';\nimport noDynamicStyling, {\n RULE_NAME as NoDynamicStyling,\n} from './no-dynamic-styling';\nimport noEscapeHatch, { RULE_NAME as NoEscapeHatch } from './no-escape-hatch';\nimport noHardCodedColor, {\n RULE_NAME as NoHardCodedColor,\n} from './no-hardcoded-color';\nimport noImportant, { RULE_NAME as NoImportant } from './no-important';\nimport noInvalidNesting, {\n RULE_NAME as NoInvalidNesting,\n} from './no-invalid-nesting';\nimport noInvalidTokenPaths, {\n RULE_NAME as NoInvalidTokenPaths,\n} from './no-invalid-token-paths';\nimport noMarginProperties, {\n RULE_NAME as NoMarginProperties,\n} from './no-margin-properties';\nimport noPhysicalProperties, {\n RULE_NAME as NoPhysicalProperties,\n} from './no-physical-properties';\nimport noPropertyRenaming, {\n RULE_NAME as NoPropertyRenaming,\n} from './no-property-renaming';\nimport noUnsafeTokenUsage, {\n RULE_NAME as NoUnsafeTokenUsage,\n} from './no-unsafe-token-fn-usage';\nimport preferAtomicProperties, {\n RULE_NAME as PreferAtomicProperties,\n} from './prefer-atomic-properties';\nimport preferCompositeProperties, {\n RULE_NAME as PreferCompositeProperties,\n} from './prefer-composite-properties';\nimport preferLonghandProperties, {\n RULE_NAME as PreferLonghandProperties,\n} from './prefer-longhand-properties';\nimport preferShorthandProperties, {\n RULE_NAME as PreferShorthandProperties,\n} from './prefer-shorthand-properties';\nimport preferUnifiedPropertyStyle, {\n RULE_NAME as PreferUnifiedPropertyStyle,\n} from './prefer-unified-property-style';\n\nexport const rules = {\n [FileNotIncluded]: fileNotIncluded,\n [NoConfigunctionInSource]: noConfigunctionInSource,\n [NoDebug]: noDebug,\n [NoDeprecatedTokens]: noDeprecatedTokens,\n [NoDynamicStyling]: noDynamicStyling,\n [NoEscapeHatch]: noEscapeHatch,\n [NoHardCodedColor]: noHardCodedColor,\n [NoImportant]: noImportant,\n [NoInvalidNesting]: noInvalidNesting,\n [NoInvalidTokenPaths]: noInvalidTokenPaths,\n [NoMarginProperties]: noMarginProperties,\n [NoPhysicalProperties]: noPhysicalProperties,\n [NoPropertyRenaming]: noPropertyRenaming,\n [NoUnsafeTokenUsage]: noUnsafeTokenUsage,\n [PreferAtomicProperties]: preferAtomicProperties,\n [PreferCompositeProperties]: preferCompositeProperties,\n [PreferLonghandProperties]: preferLonghandProperties,\n [PreferShorthandProperties]: preferShorthandProperties,\n [PreferUnifiedPropertyStyle]: preferUnifiedPropertyStyle,\n} as any;\n","import { rules } from '../rules';\nimport { RULE_NAME as FileNotIncluded } from '../rules/file-not-included';\nimport { RULE_NAME as NoConfigFunctionInSource } from '../rules/no-config-function-in-source';\nimport { RULE_NAME as NoInvalidTokenPaths } from '../rules/no-invalid-token-paths';\n\nconst errorRules = [\n FileNotIncluded,\n NoConfigFunctionInSource,\n NoInvalidTokenPaths,\n];\n\nconst allRules = Object.fromEntries(\n Object.entries(rules).map(([name]) => {\n return [`@bamboocss/${name}`, errorRules.includes(name) ? 'error' : 'warn'];\n }),\n);\n\nexport default {\n parser: '@typescript-eslint/parser',\n parserOptions: { sourceType: 'module' },\n plugins: ['@bamboocss'],\n rules: allRules,\n};\n","export default {\n parser: '@typescript-eslint/parser',\n parserOptions: { sourceType: 'module' },\n plugins: ['@bamboocss'],\n rules: {\n '@bamboocss/file-not-included': 'error',\n '@bamboocss/no-config-function-in-source': 'error',\n '@bamboocss/no-debug': 'warn',\n '@bamboocss/no-deprecated-tokens': 'warn',\n '@bamboocss/no-dynamic-styling': 'warn',\n '@bamboocss/no-hardcoded-color': 'warn',\n '@bamboocss/no-invalid-nesting': 'error',\n '@bamboocss/no-invalid-token-paths': 'error',\n '@bamboocss/no-property-renaming': 'warn',\n '@bamboocss/no-unsafe-token-fn-usage': 'warn',\n },\n};\n","import { name, version } from '../package.json';\nimport all from './configs/all';\nimport recommended from './configs/recommended';\nimport { rules } from './rules';\n\nconst plugin = {\n configs: {\n all,\n recommended,\n },\n meta: {\n name,\n version,\n },\n rules,\n};\n\nmodule.exports = plugin;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["RULE_NAME","rule","RULE_NAME","rule","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isColorToken","originalIsColorToken","isColorAttribute","originalIsColorAttribute","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isInJSXProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","isBambooProperty","rule","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","RULE_NAME","rule","isBambooProperty","isBambooProperty","FileNotIncluded","fileNotIncluded","NoConfigunctionInSource","noConfigunctionInSource","NoDebug","noDebug","NoDeprecatedTokens","noDeprecatedTokens","NoDynamicStyling","noDynamicStyling","NoEscapeHatch","noEscapeHatch","NoHardCodedColor","noHardCodedColor","NoImportant","noImportant","NoInvalidNesting","noInvalidNesting","NoInvalidTokenPaths","noInvalidTokenPaths","NoMarginProperties","noMarginProperties","NoPhysicalProperties","noPhysicalProperties","NoPropertyRenaming","noPropertyRenaming","NoUnsafeTokenUsage","noUnsafeTokenUsage","PreferAtomicProperties","preferAtomicProperties","PreferCompositeProperties","preferCompositeProperties","PreferLonghandProperties","preferLonghandProperties","PreferShorthandProperties","preferShorthandProperties","PreferUnifiedPropertyStyle","preferUnifiedPropertyStyle","FileNotIncluded","NoConfigFunctionInSource","NoInvalidTokenPaths"],"sources":["../package.json","../src/utils/nodes.ts","../src/utils/helpers.ts","../src/rules/file-not-included.ts","../src/rules/no-config-function-in-source.ts","../src/rules/no-debug.ts","../src/rules/no-deprecated-tokens.ts","../src/rules/no-dynamic-styling.ts","../src/rules/no-escape-hatch.ts","../src/rules/no-hardcoded-color.ts","../src/rules/no-important.ts","../src/rules/no-invalid-nesting.ts","../src/rules/no-invalid-token-paths.ts","../src/rules/no-margin-properties.ts","../src/utils/physical-properties.ts","../src/rules/no-physical-properties.ts","../src/rules/no-property-renaming.ts","../src/rules/no-unsafe-token-fn-usage.ts","../src/utils/composite-properties.ts","../src/rules/prefer-atomic-properties.ts","../src/rules/prefer-composite-properties.ts","../src/rules/prefer-longhand-properties.ts","../src/rules/prefer-shorthand-properties.ts","../src/rules/prefer-unified-property-style.ts","../src/rules/index.ts","../src/configs/all.ts","../src/configs/recommended.ts","../src/index.ts"],"sourcesContent":["","import { AST_NODE_TYPES, type TSESTree } from '@typescript-eslint/utils';\nimport { isNodeOfType } from '@typescript-eslint/utils/ast-utils';\n\nexport type Node = TSESTree.Node;\n\nexport const isIdentifier = isNodeOfType(AST_NODE_TYPES.Identifier);\nexport const isLiteral = isNodeOfType(AST_NODE_TYPES.Literal);\nexport const isTemplateLiteral = isNodeOfType(AST_NODE_TYPES.TemplateLiteral);\nexport const isArrayExpression = isNodeOfType(AST_NODE_TYPES.ArrayExpression);\nexport const isObjectExpression = isNodeOfType(AST_NODE_TYPES.ObjectExpression);\nexport const isMemberExpression = isNodeOfType(AST_NODE_TYPES.MemberExpression);\nexport const isVariableDeclarator = isNodeOfType(\n AST_NODE_TYPES.VariableDeclarator,\n);\nexport const isVariableDeclaration = isNodeOfType(\n AST_NODE_TYPES.VariableDeclaration,\n);\nexport const isJSXMemberExpression = isNodeOfType(\n AST_NODE_TYPES.JSXMemberExpression,\n);\nexport const isJSXOpeningElement = isNodeOfType(\n AST_NODE_TYPES.JSXOpeningElement,\n);\nexport const isJSXExpressionContainer = isNodeOfType(\n AST_NODE_TYPES.JSXExpressionContainer,\n);\nexport const isJSXAttribute = isNodeOfType(AST_NODE_TYPES.JSXAttribute);\nexport const isJSXIdentifier = isNodeOfType(AST_NODE_TYPES.JSXIdentifier);\nexport const isCallExpression = isNodeOfType(AST_NODE_TYPES.CallExpression);\nexport const isImportDeclaration = isNodeOfType(\n AST_NODE_TYPES.ImportDeclaration,\n);\nexport const isImportSpecifier = isNodeOfType(AST_NODE_TYPES.ImportSpecifier);\n","import { type ImportResult, syncAction } from '.';\nimport {\n isCallExpression,\n isIdentifier,\n isImportDeclaration,\n isImportSpecifier,\n isJSXAttribute,\n isJSXExpressionContainer,\n isJSXIdentifier,\n isJSXMemberExpression,\n isJSXOpeningElement,\n isLiteral,\n isMemberExpression,\n isTemplateLiteral,\n isVariableDeclarator,\n type Node,\n} from './nodes';\nimport { type DeprecatedToken } from './worker';\nimport { analyze, type ScopeManager } from '@typescript-eslint/scope-manager';\nimport { type TSESTree } from '@typescript-eslint/utils';\nimport { type RuleContext } from '@typescript-eslint/utils/ts-eslint';\n\nexport const getAncestor = <N extends Node>(\n ofType: (node: Node) => node is N,\n for_: Node,\n): N | undefined => {\n let current: Node | undefined = for_.parent;\n while (current) {\n if (ofType(current)) {\n return current;\n }\n\n current = current.parent;\n }\n};\n\nconst getSyncOptions = (context: RuleContext<any, any>) => {\n return {\n configPath: context.settings['@bamboocss/configPath'] as string | undefined,\n currentFile: context.filename,\n };\n};\n\nexport const getImportSpecifiers = (context: RuleContext<any, any>) => {\n const specifiers: Array<{\n mod: string;\n specifier: TSESTree.ImportSpecifier;\n }> = [];\n\n for (const node of context.sourceCode?.ast.body) {\n if (!isImportDeclaration(node)) {\n continue;\n }\n\n const module_ = node.source.value;\n if (!module_) {\n continue;\n }\n\n for (const specifier of node.specifiers) {\n if (!isImportSpecifier(specifier)) {\n continue;\n }\n\n specifiers.push({ mod: module_, specifier });\n }\n }\n\n return specifiers;\n};\n\nexport const hasPkgImport = (context: RuleContext<any, any>) => {\n const imports = _getImports(context);\n return imports.some(({ mod }) => mod === '@bamboocss/dev');\n};\n\nexport const isBambooConfigFunction = (\n context: RuleContext<any, any>,\n name: string,\n) => {\n const imports = _getImports(context);\n return imports.some(\n ({ alias, mod }) => alias === name && mod === '@bamboocss/dev',\n );\n};\n\n// Caching raw imports per context to avoid redundant AST traversal\nconst rawImportsCache = new WeakMap<RuleContext<any, any>, ImportResult[]>();\n\nconst _getImports = (context: RuleContext<any, any>) => {\n if (rawImportsCache.has(context)) {\n return rawImportsCache.get(context)!;\n }\n\n const specifiers = getImportSpecifiers(context);\n\n const imports: ImportResult[] = specifiers.map(({ mod, specifier }) => ({\n alias: specifier.local.name,\n mod,\n name: (specifier.imported as any).name,\n }));\n\n rawImportsCache.set(context, imports);\n return imports;\n};\n\n// Caching filtered imports per context to avoid redundant computations\nconst importsCache = new WeakMap<RuleContext<any, any>, ImportResult[]>();\n\nconst getImports = (context: RuleContext<any, any>): ImportResult[] => {\n if (importsCache.has(context)) {\n return importsCache.get(context)!;\n }\n\n const imports = _getImports(context);\n // Batch filter all imports in a single sync call to reduce worker thread crossings\n const filteredImports = syncAction(\n 'filterImports',\n getSyncOptions(context),\n imports,\n );\n // syncAction returns undefined when the worker fails (e.g. config loading error).\n // Fall back to an empty array to prevent downstream crashes.\n const result = filteredImports ?? [];\n importsCache.set(context, result);\n return result;\n};\n\nconst isValidStyledProperty = <T extends Node>(\n node: T,\n context: RuleContext<any, any>,\n) => {\n return isJSXIdentifier(node) && isValidProperty(node.name, context);\n};\n\nconst matchFile = (\n name: string,\n imports: ImportResult[],\n context: RuleContext<any, any>,\n) => {\n return syncAction('matchFile', getSyncOptions(context), name, imports);\n};\n\nconst isBambooIsh = (name: string, context: RuleContext<any, any>) => {\n const imports = getImports(context);\n if (imports.length === 0) {\n return false;\n }\n\n // Check if the name is the jsx factory\n const jsxFactory = syncAction('getJsxFactory', getSyncOptions(context));\n if (jsxFactory && name === jsxFactory) {\n // Check if the jsx factory is imported\n return imports.some((imp) => imp.name === name || imp.alias === name);\n }\n\n return matchFile(name, imports, context);\n};\n\n// Caching scope analysis per AST to avoid expensive re-computation\nconst scopeCache = new WeakMap<TSESTree.Program, ScopeManager>();\n\nconst findDeclaration = (name: string, context: RuleContext<any, any>) => {\n try {\n const source = context.sourceCode;\n\n if (!source) {\n console.warn(\n \"⚠️ ESLint's sourceCode is not available. Ensure that the rule is invoked with valid code.\",\n );\n return undefined;\n }\n\n let scope = scopeCache.get(source.ast);\n if (!scope) {\n scope = analyze(source.ast, {\n sourceType: 'module',\n });\n scopeCache.set(source.ast, scope);\n }\n\n const decl = scope.variables\n .find((v) => v.name === name)\n ?.defs.find((d) => isIdentifier(d.name) && d.name.name === name)?.node;\n if (isVariableDeclarator(decl)) {\n return decl;\n }\n } catch (error) {\n console.error('Error in findDeclaration:', error);\n return undefined;\n }\n};\n\nconst isLocalStyledFactory = (\n node: TSESTree.JSXOpeningElement,\n context: RuleContext<any, any>,\n) => {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n const decl = findDeclaration(node.name.name, context);\n\n if (!decl) {\n return;\n }\n\n if (!isCallExpression(decl.init)) {\n return;\n }\n\n if (!isIdentifier(decl.init.callee)) {\n return;\n }\n\n // Check if the callee is 'styled' from bamboo imports\n const calleeName = decl.init.callee.name;\n const rawImports = _getImports(context);\n const isStyledImport = rawImports.some(\n (imp) => imp.alias === calleeName && imp.mod.includes('bamboo'),\n );\n\n if (!isStyledImport && !isBambooIsh(calleeName, context)) {\n return;\n }\n\n return true;\n};\n\nexport const isValidFile = (context: RuleContext<any, any>) => {\n return syncAction('isValidFile', getSyncOptions(context));\n};\n\nexport const isValidProperty = (\n name: string,\n context: RuleContext<any, any>,\n calleName?: string,\n) => {\n return syncAction(\n 'isValidProperty',\n getSyncOptions(context),\n name,\n calleName,\n );\n};\n\nexport const isBambooImport = (\n node: TSESTree.ImportDeclaration,\n context: RuleContext<any, any>,\n) => {\n const imports = getImports(context);\n return imports.some((imp) => imp.mod === node.source.value);\n};\n\nexport const isBambooProp = (\n node: TSESTree.JSXAttribute,\n context: RuleContext<any, any>,\n) => {\n const jsxAncestor = getAncestor(isJSXOpeningElement, node);\n\n if (!jsxAncestor) {\n return;\n }\n\n // <styled.div /> && <Box />\n if (\n !isJSXMemberExpression(jsxAncestor.name) &&\n !isJSXIdentifier(jsxAncestor.name)\n ) {\n return;\n }\n\n let isBambooComponent = false;\n let componentName: string | undefined;\n\n if (isJSXMemberExpression(jsxAncestor.name)) {\n // For <styled.div>, check if 'styled' is a Bamboo import\n const objectName = (jsxAncestor.name.object as any).name;\n componentName = objectName;\n // Check if 'styled' is imported from bamboo - check both filtered and raw imports\n const imports = getImports(context);\n const rawImports = _getImports(context);\n isBambooComponent =\n imports.some((imp) => imp.alias === objectName) ||\n rawImports.some(\n (imp) => imp.alias === objectName && imp.mod.includes('bamboo'),\n ) ||\n isBambooIsh(objectName, context);\n\n // For styled.div, all props are valid styled props\n if (isBambooComponent) {\n return true;\n }\n } else if (isJSXIdentifier(jsxAncestor.name)) {\n // For <Circle> or <BambooComp>\n componentName = jsxAncestor.name.name;\n\n // Check if it's a local styled factory (e.g., const BambooComp = styled(div))\n const isLocalStyled = isLocalStyledFactory(jsxAncestor, context);\n\n // For local styled components, we need to check if the prop is a valid Bamboo prop\n if (isLocalStyled) {\n const property = node.name.name;\n // Special props like 'css' and props starting with '_' are Bamboo props\n if (\n property === 'css' ||\n (typeof property === 'string' && property.startsWith('_'))\n ) {\n return true;\n }\n\n // Other props need to be valid style properties\n if (typeof property !== 'string' || !isValidProperty(property, context)) {\n return false;\n }\n\n return true;\n }\n\n // For imported Bamboo components like Circle\n isBambooComponent = isBambooIsh(componentName, context);\n }\n\n if (!isBambooComponent) {\n return;\n }\n\n const property = node.name.name;\n // Ensure prop is a styled prop\n if (\n typeof property !== 'string' ||\n !isValidProperty(property, context, componentName)\n ) {\n return;\n }\n\n return true;\n};\n\nexport const isStyledProperty = (\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n calleeName?: string,\n) => {\n if (\n !isIdentifier(node.key) &&\n !isLiteral(node.key) &&\n !isTemplateLiteral(node.key)\n ) {\n return;\n }\n\n if (\n isIdentifier(node.key) &&\n !isValidProperty(node.key.name, context, calleeName)\n ) {\n return;\n }\n\n if (\n isLiteral(node.key) &&\n typeof node.key.value === 'string' &&\n !isValidProperty(node.key.value, context, calleeName)\n ) {\n return;\n }\n\n if (\n isTemplateLiteral(node.key) &&\n !isValidProperty(node.key.quasis[0].value.raw, context, calleeName)\n ) {\n return;\n }\n\n return true;\n};\n\nexport const isInBambooFunction = (\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n) => {\n const callAncestor = getAncestor(isCallExpression, node);\n if (!callAncestor) {\n return;\n }\n\n let calleeName: string | undefined;\n\n // E.g. css({...}), cvs({...})\n if (isIdentifier(callAncestor.callee)) {\n calleeName = callAncestor.callee.name;\n }\n\n // E.g. css.raw({...})\n if (\n isMemberExpression(callAncestor.callee) &&\n isIdentifier(callAncestor.callee.object)\n ) {\n calleeName = callAncestor.callee.object.name;\n }\n\n if (!calleeName) {\n return;\n }\n\n if (!isBambooIsh(calleeName, context)) {\n return;\n }\n\n return calleeName;\n};\n\nexport const isInJSXProp = (\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n) => {\n const jsxExprAncestor = getAncestor(isJSXExpressionContainer, node);\n const jsxAttributeAncestor = getAncestor(isJSXAttribute, node);\n\n if (!jsxExprAncestor || !jsxAttributeAncestor) {\n return;\n }\n\n // Get the JSX element to check if it's a Bamboo component\n const jsxElement = getAncestor(isJSXOpeningElement, jsxAttributeAncestor);\n if (!jsxElement) {\n return;\n }\n\n // Check if it's a Bamboo component (styled.div, Circle, etc.)\n let isBambooComponent = false;\n if (isJSXMemberExpression(jsxElement.name)) {\n // For <styled.div>, check if 'styled' is a Bamboo import\n const objectName = (jsxElement.name.object as any).name;\n isBambooComponent = isBambooIsh(objectName, context);\n } else if (isJSXIdentifier(jsxElement.name)) {\n // For <Circle> or <BambooComp>\n const componentName = jsxElement.name.name;\n isBambooComponent =\n isBambooIsh(componentName, context) ||\n Boolean(isLocalStyledFactory(jsxElement, context));\n }\n\n if (!isBambooComponent) {\n return;\n }\n\n // Check if the attribute name is a valid styled prop\n if (!isJSXIdentifier(jsxAttributeAncestor.name)) {\n return;\n }\n\n if (!isValidStyledProperty(jsxAttributeAncestor.name, context)) {\n return;\n }\n\n return true;\n};\n\nexport const isBambooAttribute = (\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n) => {\n const callAncestor = getAncestor(isCallExpression, node);\n\n if (callAncestor) {\n const callee = isInBambooFunction(node, context);\n if (!callee) {\n return;\n }\n\n return isStyledProperty(node, context, callee);\n }\n\n // Object could be in JSX prop value i.e css prop or a pseudo\n return isInJSXProp(node, context) && isStyledProperty(node, context);\n};\n\nexport const resolveLonghand = (\n name: string,\n context: RuleContext<any, any>,\n) => {\n return syncAction('resolveLongHand', getSyncOptions(context), name);\n};\n\nexport const resolveShorthands = (\n name: string,\n context: RuleContext<any, any>,\n) => {\n return syncAction('resolveShorthands', getSyncOptions(context), name);\n};\n\nexport const isColorAttribute = (\n attribute: string,\n context: RuleContext<any, any>,\n) => {\n return syncAction('isColorAttribute', getSyncOptions(context), attribute);\n};\n\nexport const isColorToken = (\n value: string | undefined,\n context: RuleContext<any, any>,\n) => {\n if (!value) {\n return;\n }\n\n return syncAction('isColorToken', getSyncOptions(context), value);\n};\n\nexport const extractTokens = (value: string) => {\n const regex = /token\\(([^\"'(),]+)(?:,\\s*([^\"'(),]+))?\\)|\\{([^\\n\\r{}]+)\\}/g;\n const matches = [];\n let match;\n\n while ((match = regex.exec(value)) !== null) {\n const tokenFromFirstSyntax = match[1] || match[2] || match[3];\n const tokensFromSecondSyntax =\n match[4] && match[4].match(/(\\w+\\.\\w+(\\.\\w+)?)/g);\n\n if (tokenFromFirstSyntax) {\n matches.push(tokenFromFirstSyntax);\n }\n\n if (tokensFromSecondSyntax) {\n matches.push(...tokensFromSecondSyntax);\n }\n }\n\n return matches.filter(Boolean);\n};\n\n// Caching invalid tokens to avoid redundant computations\nconst invalidTokensCache = new Map<string, string[]>();\n\nexport const getInvalidTokens = (\n value: string,\n context: RuleContext<any, any>,\n) => {\n if (invalidTokensCache.has(value)) {\n return invalidTokensCache.get(value)!;\n }\n\n const tokens = extractTokens(value);\n if (!tokens.length) {\n return [];\n }\n\n const invalidTokens = syncAction(\n 'filterInvalidTokens',\n getSyncOptions(context),\n tokens,\n );\n invalidTokensCache.set(value, invalidTokens);\n return invalidTokens;\n};\n\n// Caching deprecated tokens to avoid redundant computations\nconst deprecatedTokensCache = new Map<string, DeprecatedToken[]>();\n\nexport const getDeprecatedTokens = (\n property: string,\n value: string,\n context: RuleContext<any, any>,\n) => {\n const propertyCategory = syncAction(\n 'getPropCategory',\n getSyncOptions(context),\n property,\n );\n\n const tokens = extractTokens(value);\n\n if (!propertyCategory && !tokens.length) {\n return [];\n }\n\n const values = tokens.length\n ? tokens\n : [{ category: propertyCategory, value: value.split('/')[0] }];\n\n if (deprecatedTokensCache.has(value)) {\n return deprecatedTokensCache.get(value)!;\n }\n\n const deprecatedTokens = syncAction(\n 'filterDeprecatedTokens',\n getSyncOptions(context),\n values,\n );\n deprecatedTokensCache.set(value, deprecatedTokens);\n\n return deprecatedTokens;\n};\n\nexport const getTokenImport = (context: RuleContext<any, any>) => {\n const imports = _getImports(context);\n return imports.find((imp) => imp.name === 'token');\n};\n\nexport const getTaggedTemplateCaller = (\n node: TSESTree.TaggedTemplateExpression,\n) => {\n // css``\n if (isIdentifier(node.tag)) {\n return node.tag.name;\n }\n\n // styled.h1``\n if (isMemberExpression(node.tag)) {\n if (!isIdentifier(node.tag.object)) {\n return;\n }\n\n return node.tag.object.name;\n }\n\n // styled(Comp)``\n if (isCallExpression(node.tag)) {\n if (!isIdentifier(node.tag.callee)) {\n return;\n }\n\n return node.tag.callee.name;\n }\n};\n\nexport const isStyledTaggedTemplate = (\n node: TSESTree.TaggedTemplateExpression,\n context: RuleContext<any, any>,\n) => {\n const caller = getTaggedTemplateCaller(node);\n if (!caller) {\n return false;\n }\n\n // Check if 'styled' is imported from bamboo\n const rawImports = _getImports(context);\n const isStyledImport = rawImports.some(\n (imp) => imp.alias === caller && imp.mod.includes('bamboo'),\n );\n\n return isStyledImport || isBambooIsh(caller, context);\n};\n\nexport function isRecipeVariant(\n node: TSESTree.Property,\n context: RuleContext<any, any>,\n) {\n const caller = isInBambooFunction(node, context);\n if (!caller) {\n return;\n }\n\n // Check if the caller is either 'cva' or 'sva'\n const recipe = getImports(context).find(\n (imp) => ['cva', 'sva'].includes(imp.name) && imp.alias === caller,\n );\n if (!recipe) {\n return;\n }\n\n //* Nesting is different here because of slots and variants. We don't want to warn about those.\n let currentNode: any = node;\n let length = 0;\n let styleObjectParent: null | string = null;\n\n // Traverse up the AST\n while (currentNode) {\n const keyName = currentNode?.key?.name;\n if (keyName && ['base', 'variants'].includes(keyName)) {\n styleObjectParent = keyName;\n }\n\n currentNode = currentNode.parent;\n if (!styleObjectParent) {\n length++;\n }\n }\n\n // Determine the required length based on caller and styleObjectParent\n const isCvaCaller = caller === 'cva';\n const requiredLength = isCvaCaller ? 2 : 4;\n const extraLength = styleObjectParent === 'base' ? 0 : 4;\n\n if (length < requiredLength + extraLength) {\n return true;\n }\n}\n","import { createRule } from '../utils';\nimport { isBambooImport, isValidFile } from '../utils/helpers';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'file-not-included';\n\nconst rule = createRule({\n create(context) {\n // Determine if the current file is included in the Bamboo CSS configuration\n const isFileIncluded = isValidFile(context);\n\n // If the file is included, no need to proceed\n if (isFileIncluded) {\n return {};\n }\n\n let hasReported = false;\n\n return {\n ImportDeclaration(node: TSESTree.ImportDeclaration) {\n if (hasReported) {\n return;\n }\n\n if (!isBambooImport(node, context)) {\n return;\n }\n\n // Report only on the first import declaration\n context.report({\n messageId: 'include',\n node,\n });\n\n hasReported = true;\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow the use of Bamboo CSS in files that are not included in the specified Bamboo CSS `include` config.',\n },\n messages: {\n include:\n 'The use of Bamboo CSS is not allowed in this file. Please ensure the file is included in the Bamboo CSS `include` configuration.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n getAncestor,\n getImportSpecifiers,\n hasPkgImport,\n isBambooConfigFunction,\n isValidFile,\n} from '../utils/helpers';\nimport { isIdentifier, isVariableDeclaration } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-config-function-in-source';\n\nconst CONFIG_FUNCTIONS = new Set([\n 'defineConfig',\n 'defineGlobalStyles',\n 'defineKeyframes',\n 'defineLayerStyles',\n 'defineParts',\n 'definePattern',\n 'definePreset',\n 'defineRecipe',\n 'defineSemanticTokens',\n 'defineSlotRecipe',\n 'defineStyles',\n 'defineTextStyles',\n 'defineTokens',\n 'defineUtility',\n]);\n\nconst rule = createRule({\n create(context) {\n // Check if the package is imported; if not, exit early\n if (!hasPkgImport(context)) {\n return {};\n }\n\n // Determine if the current file is the Bamboo config file\n const isBambooFile = isValidFile(context);\n\n // If we are in the config file, no need to proceed\n if (!isBambooFile) {\n return {};\n }\n\n return {\n CallExpression(node: TSESTree.CallExpression) {\n // Ensure the callee is an identifier\n if (!isIdentifier(node.callee)) {\n return;\n }\n\n const functionName = node.callee.name;\n\n // Check if the function is a config function\n if (!CONFIG_FUNCTIONS.has(functionName)) {\n return;\n }\n\n // Verify that it's a Bamboo config function\n if (!isBambooConfigFunction(context, functionName)) {\n return;\n }\n\n context.report({\n data: {\n name: functionName,\n },\n messageId: 'configFunction',\n node,\n suggest: [\n {\n data: {\n name: functionName,\n },\n fix(fixer) {\n const declaration = getAncestor(isVariableDeclaration, node);\n const importSpecifiers = getImportSpecifiers(context);\n\n // Find the import specifier for the function\n const importSpec = importSpecifiers.find(\n (s) => s.specifier.local.name === functionName,\n );\n\n const fixes = [];\n\n // Remove the variable declaration if it exists; otherwise, remove the call expression\n if (declaration) {\n fixes.push(fixer.remove(declaration));\n } else {\n fixes.push(fixer.remove(node));\n }\n\n // Remove the import specifier if it exists\n if (importSpec?.specifier) {\n fixes.push(fixer.remove(importSpec.specifier));\n }\n\n return fixes;\n },\n messageId: 'delete',\n },\n ],\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Prohibit the use of config functions outside the Bamboo config file.',\n },\n hasSuggestions: true,\n messages: {\n configFunction:\n 'Unnecessary `{{name}}` call. Config functions should only be used in the Bamboo config file.',\n delete: 'Delete `{{name}}` call.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport { isJSXExpressionContainer, isObjectExpression } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-debug';\n\nconst rule = createRule({\n create(context) {\n // Track processed nodes to avoid duplicate reports\n const processedNodes = new WeakSet<TSESTree.Node>();\n\n const checkObjectForDebug = (object: TSESTree.ObjectExpression) => {\n for (const property of object.properties) {\n if (property.type !== 'Property') {\n continue;\n }\n\n if (!property.key || property.key.type !== 'Identifier') {\n continue;\n }\n\n // Check for debug property\n if (property.key.name === 'debug') {\n if (processedNodes.has(property)) {\n continue;\n }\n\n processedNodes.add(property);\n\n context.report({\n messageId: 'debug',\n node: property.key,\n suggest: [\n {\n fix: (fixer) =>\n fixer.removeRange([property.range[0], property.range[1] + 1]),\n messageId: 'property',\n },\n ],\n });\n }\n\n // Check nested objects (for pseudo selectors like &:hover)\n if (property.value && property.value.type === 'ObjectExpression') {\n checkObjectForDebug(property.value);\n }\n }\n };\n\n return {\n // Handle JSX attributes with object values (_hover, css, etc.)\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isBambooProperty(node, context)) {\n return;\n }\n\n // Skip non-object values\n if (!node.value || !isJSXExpressionContainer(node.value)) {\n return;\n }\n\n const expr = node.value.expression;\n if (!isObjectExpression(expr)) {\n return;\n }\n\n // Check for debug in the object\n checkObjectForDebug(expr);\n },\n\n // Handle JSX debug attribute directly on Bamboo components\n 'JSXAttribute[name.name=\"debug\"]'(node: TSESTree.JSXAttribute) {\n if (!isBambooProperty(node, context)) {\n return;\n }\n\n context.report({\n messageId: 'debug',\n node,\n suggest: [\n {\n fix: (fixer) => fixer.remove(node),\n messageId: 'prop',\n },\n ],\n });\n },\n\n // Handle debug property in objects (css, styled, etc.)\n 'Property[key.name=\"debug\"]'(node: TSESTree.Property) {\n // Skip if already processed\n if (processedNodes.has(node)) {\n return;\n }\n\n // Ensure the property is a Bamboo attribute\n if (!isBambooAttribute(node, context)) {\n return;\n }\n\n // Exclude recipe variants\n if (isRecipeVariant(node, context)) {\n return;\n }\n\n processedNodes.add(node);\n\n context.report({\n messageId: 'debug',\n node: node.key,\n suggest: [\n {\n fix: (fixer) =>\n fixer.removeRange([node.range[0], node.range[1] + 1]),\n messageId: 'property',\n },\n ],\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow the inclusion of the debug attribute when shipping code to the production environment.',\n },\n hasSuggestions: true,\n messages: {\n debug: 'Unnecessary debug utility.',\n prop: 'Remove the debug prop.',\n property: 'Remove the debug property.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n getDeprecatedTokens,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { type DeprecatedToken } from '../utils/worker';\nimport { AST_NODE_TYPES, type TSESTree } from '@typescript-eslint/utils';\nimport { isNodeOfTypes } from '@typescript-eslint/utils/ast-utils';\n\nexport const RULE_NAME = 'no-deprecated-tokens';\n\nconst rule = createRule({\n create(context) {\n // Cache for deprecated tokens to avoid redundant computations\n const deprecatedTokensCache = new Map<\n string,\n DeprecatedToken[] | undefined\n >();\n\n const sendReport = (\n property: string,\n node: TSESTree.Node,\n value: string | undefined,\n ) => {\n if (!value) {\n return;\n }\n\n let tokens: DeprecatedToken[] | undefined =\n deprecatedTokensCache.get(value);\n\n if (!tokens) {\n tokens = getDeprecatedTokens(property, value, context);\n deprecatedTokensCache.set(value, tokens);\n }\n\n if (!tokens || tokens.length === 0) {\n return;\n }\n\n for (const token of tokens) {\n context.report({\n data: {\n category: typeof token === 'string' ? undefined : token.category,\n token: typeof token === 'string' ? token : token.value,\n },\n messageId:\n typeof token === 'string'\n ? 'noDeprecatedTokenPaths'\n : 'noDeprecatedTokens',\n node,\n });\n }\n };\n\n const handleLiteralOrTemplate = (\n property: string,\n node: TSESTree.Node | undefined,\n ) => {\n if (!node) {\n return;\n }\n\n if (isLiteral(node)) {\n const value = node.value?.toString();\n sendReport(property, node, value);\n } else if (isTemplateLiteral(node) && node.expressions.length === 0) {\n const value = node.quasis[0].value.raw;\n sendReport(property, node.quasis[0], value);\n }\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value || !isBambooProperty(node, context)) {\n return;\n }\n\n const property = node.name.name as string;\n\n if (isLiteral(node.value)) {\n handleLiteralOrTemplate(property, node.value);\n } else if (isJSXExpressionContainer(node.value)) {\n handleLiteralOrTemplate(property, node.value.expression);\n }\n },\n\n Property(node: TSESTree.Property) {\n if (\n !isIdentifier(node.key) ||\n !isNodeOfTypes([\n AST_NODE_TYPES.Literal,\n AST_NODE_TYPES.TemplateLiteral,\n ])(node.value) ||\n !isBambooAttribute(node, context) ||\n isRecipeVariant(node, context)\n ) {\n return;\n }\n\n const property = node.key.name as string;\n\n handleLiteralOrTemplate(property, node.value);\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow the use of deprecated tokens within token function syntax.',\n },\n messages: {\n noDeprecatedTokenPaths: '`{{token}}` is a deprecated token.',\n noDeprecatedTokens: '`{{token}}` is a deprecated {{category}} token.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isInBambooFunction,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isArrayExpression,\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isObjectExpression,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-dynamic-styling';\n\nconst rule = createRule({\n create(context) {\n // Helper function to determine if a node represents a static value\n function isStaticValue(node: null | TSESTree.Node | undefined): boolean {\n if (!node) {\n return false;\n }\n\n if (isLiteral(node)) {\n return true;\n }\n\n if (isTemplateLiteral(node) && node.expressions.length === 0) {\n return true;\n }\n\n if (isObjectExpression(node)) {\n return true;\n } // Conditions are acceptable\n\n return false;\n }\n\n // Function to check array elements for dynamic values\n function checkArrayElements(array: TSESTree.ArrayExpression) {\n for (const element of array.elements) {\n if (!element) {\n continue;\n }\n\n if (isStaticValue(element)) {\n continue;\n }\n\n context.report({\n messageId: 'dynamic',\n node: element,\n });\n }\n }\n\n return {\n // JSX Attributes\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n // Check if it's a Bamboo prop early to avoid unnecessary processing\n const isBamboo = isBambooProperty(node, context);\n if (!isBamboo) {\n return;\n }\n\n // Static literals are fine\n if (isLiteral(node.value)) {\n return;\n }\n\n if (isJSXExpressionContainer(node.value)) {\n const expr = node.value.expression;\n\n if (isStaticValue(expr)) {\n return;\n }\n\n if (isArrayExpression(expr)) {\n checkArrayElements(expr);\n return;\n }\n\n // Report dynamic value usage\n context.report({\n messageId: 'dynamic',\n node: node.value,\n });\n }\n },\n\n // Object Properties\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n // Check if it's a Bamboo attribute early to avoid unnecessary processing\n if (!isBambooAttribute(node, context)) {\n return;\n }\n\n if (isRecipeVariant(node, context)) {\n return;\n }\n\n if (isStaticValue(node.value)) {\n return;\n }\n\n if (isArrayExpression(node.value)) {\n checkArrayElements(node.value);\n return;\n }\n\n // Report dynamic value usage\n context.report({\n messageId: 'dynamic',\n node: node.value,\n });\n },\n\n // Dynamic properties with computed keys\n 'Property[computed=true]': (node: TSESTree.Property) => {\n if (!isInBambooFunction(node, context)) {\n return;\n }\n\n context.report({\n messageId: isRecipeVariant(node, context)\n ? 'dynamicRecipeVariant'\n : 'dynamicProperty',\n node: node.key,\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n \"Ensure users don't use dynamic styling. Prefer static styles, leverage CSS variables, or recipes for known dynamic styles.\",\n },\n messages: {\n dynamic: 'Remove dynamic value. Prefer static styles.',\n dynamicProperty: 'Remove dynamic property. Prefer static style property.',\n dynamicRecipeVariant:\n 'Remove dynamic variant. Prefer static variant definition.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { getArbitraryValue } from '@bamboocss/shared';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-escape-hatch';\n\nconst rule = createRule({\n create(context) {\n // Helper function to adjust the range for fixing (removing brackets)\n const removeBrackets = (range: readonly [number, number]) => {\n const [start, end] = range;\n return [start + 1, end - 1] as const;\n };\n\n // Function to check if a value contains escape hatch syntax\n const hasEscapeHatch = (value: string | undefined): boolean => {\n if (!value) {\n return false;\n }\n\n // Early return if the value doesn't contain brackets\n if (!value.includes('[')) {\n return false;\n }\n\n return getArbitraryValue(value) !== value.trim();\n };\n\n // Unified function to handle reporting\n const handleNodeValue = (node: TSESTree.Node, value: string) => {\n if (!hasEscapeHatch(value)) {\n return;\n }\n\n context.report({\n messageId: 'escapeHatch',\n node,\n suggest: [\n {\n fix: (fixer) => {\n return fixer.replaceTextRange(\n removeBrackets(node.range as [number, number]),\n getArbitraryValue(value),\n );\n },\n messageId: 'remove',\n },\n ],\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n // Ensure the attribute is a Bamboo prop\n if (!isBambooProperty(node, context)) {\n return;\n }\n\n const { value } = node;\n\n if (isLiteral(value)) {\n const value_ = value.value?.toString() ?? '';\n handleNodeValue(value, value_);\n } else if (isJSXExpressionContainer(value)) {\n const expr = value.expression;\n if (isLiteral(expr)) {\n const value_ = expr.value?.toString() ?? '';\n handleNodeValue(expr, value_);\n } else if (isTemplateLiteral(expr) && expr.expressions.length === 0) {\n const value_ = expr.quasis[0].value.raw;\n handleNodeValue(expr.quasis[0], value_);\n }\n }\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n // Ensure the property is a Bamboo attribute\n if (!isBambooAttribute(node, context)) {\n return;\n }\n\n // Exclude recipe variants\n if (isRecipeVariant(node, context)) {\n return;\n }\n\n const value = node.value;\n if (isLiteral(value)) {\n const value_ = value.value?.toString() ?? '';\n handleNodeValue(value, value_);\n } else if (isTemplateLiteral(value) && value.expressions.length === 0) {\n const value_ = value.quasis[0].value.raw;\n handleNodeValue(value.quasis[0], value_);\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description: 'Prohibit the use of escape hatch syntax in the code.',\n },\n hasSuggestions: true,\n messages: {\n escapeHatch:\n 'Avoid using the escape hatch [value] for undefined tokens. Define a corresponding token in your design system for better consistency and maintainability.',\n remove: 'Remove the square brackets (`[]`).',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n extractTokens,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isColorAttribute as originalIsColorAttribute,\n isColorToken as originalIsColorToken,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isJSXIdentifier,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-hardcoded-color';\n\nconst rule = createRule({\n create(context) {\n const noOpacity = context.options[0]?.noOpacity;\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Caches for isColorToken and isColorAttribute results\n const colorTokenCache = new Map<string, boolean | undefined>(\n whitelist?.map((item) => [item, true]),\n );\n const colorAttributeCache = new Map<string, boolean>();\n\n // Cached version of isColorToken\n const isColorToken = (token: string): boolean => {\n if (colorTokenCache.has(token)) {\n return colorTokenCache.get(token)!;\n }\n\n const result = originalIsColorToken(token, context);\n colorTokenCache.set(token, result);\n return Boolean(result);\n };\n\n // Cached version of isColorAttribute\n const isColorAttribute = (attribute: string): boolean => {\n if (colorAttributeCache.has(attribute)) {\n return colorAttributeCache.get(attribute)!;\n }\n\n const result = originalIsColorAttribute(attribute, context);\n colorAttributeCache.set(attribute, result);\n return result;\n };\n\n const isTokenFunctionUsed = (value: string): boolean => {\n if (!value) {\n return false;\n }\n\n const tokens = extractTokens(value);\n return tokens.length > 0;\n };\n\n const isValidColorToken = (value: string): boolean => {\n if (!value) {\n return false;\n }\n\n const [colorToken, opacity] = value.split('/');\n const hasOpacity = opacity !== undefined && opacity.length > 0;\n const isValidToken = isColorToken(colorToken);\n\n return noOpacity ? isValidToken && !hasOpacity : isValidToken;\n };\n\n const reportInvalidColor = (node: TSESTree.Node, color: string) => {\n context.report({\n data: {\n color,\n },\n messageId: 'invalidColor',\n node,\n });\n };\n\n const checkColorValue = (\n node: TSESTree.Node,\n value: string,\n attributeName: string,\n ) => {\n if (!isColorAttribute(attributeName)) {\n return;\n }\n\n if (isTokenFunctionUsed(value)) {\n return;\n }\n\n if (isValidColorToken(value)) {\n return;\n }\n\n reportInvalidColor(node, value);\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isBambooProperty(node, context) || !node.value) {\n return;\n }\n\n const attributeName = node.name.name;\n const valueNode = node.value;\n\n if (isLiteral(valueNode)) {\n const value = valueNode.value?.toString() || '';\n checkColorValue(valueNode, value, attributeName);\n } else if (isJSXExpressionContainer(valueNode)) {\n const expression = valueNode.expression;\n if (isLiteral(expression)) {\n const value = expression.value?.toString() || '';\n checkColorValue(expression, value, attributeName);\n } else if (\n isTemplateLiteral(expression) &&\n expression.expressions.length === 0\n ) {\n const value = expression.quasis[0].value.raw;\n checkColorValue(expression.quasis[0], value, attributeName);\n }\n }\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isBambooAttribute(node, context)) {\n return;\n }\n\n if (isRecipeVariant(node, context)) {\n return;\n }\n\n const attributeName = node.key.name;\n const valueNode = node.value;\n\n if (isLiteral(valueNode)) {\n const value = valueNode.value?.toString() || '';\n checkColorValue(valueNode, value, attributeName);\n } else if (\n isTemplateLiteral(valueNode) &&\n valueNode.expressions.length === 0\n ) {\n const value = valueNode.quasis[0].value.raw;\n checkColorValue(valueNode.quasis[0], value, attributeName);\n }\n },\n };\n },\n defaultOptions: [\n {\n noOpacity: false,\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Enforce the exclusive use of design tokens as values for colors within the codebase.',\n },\n messages: {\n invalidColor: '`{{color}}` is not a valid color token.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n noOpacity: {\n type: 'boolean',\n },\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { getArbitraryValue } from '@bamboocss/shared';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\n// Regular expressions to detect '!important' and '!' at the end of a value\nconst exclamationRegex = /\\s*!$/;\nconst importantRegex = /\\s*!important\\s*$/;\n\nexport const RULE_NAME = 'no-important';\n\nconst rule = createRule({\n create(context) {\n // Helper function to adjust the range for fixing (removing quotes)\n const removeQuotes = (range: readonly [number, number]) => {\n const [start, end] = range;\n return [start + 1, end - 1] as const;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n\n // Cached version of isBambooProp\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n // Cached version of isBambooAttribute\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n // Cached version of isRecipeVariant\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n // Function to check if a value contains '!important' or '!'\n const hasImportantKeyword = (value: string | undefined): boolean => {\n if (!value) {\n return false;\n }\n\n const arbitraryValue = getArbitraryValue(value);\n return (\n exclamationRegex.test(arbitraryValue) ||\n importantRegex.test(arbitraryValue)\n );\n };\n\n // Function to remove '!important' or '!' from a string\n const removeImportantKeyword = (\n input: string,\n ): { fixed: string; keyword: null | string } => {\n if (importantRegex.test(input)) {\n // Remove '!important' with optional whitespace\n return {\n fixed: input.replace(importantRegex, '').trimEnd(),\n keyword: '!important',\n };\n } else if (exclamationRegex.test(input)) {\n // Remove trailing '!'\n return {\n fixed: input.replace(exclamationRegex, '').trimEnd(),\n keyword: '!',\n };\n } else {\n // No match, return the original string\n return { fixed: input, keyword: null };\n }\n };\n\n // Unified function to handle reporting\n const handleNodeValue = (node: TSESTree.Node, value: string) => {\n if (!hasImportantKeyword(value)) {\n return;\n }\n\n const arbitraryValue = getArbitraryValue(value);\n const { fixed: fixedArbitrary, keyword } =\n removeImportantKeyword(arbitraryValue);\n\n // If the value has escape hatch brackets, preserve them\n let fixed = value;\n if (value.startsWith('[') && value.endsWith(']')) {\n fixed = `[${fixedArbitrary}]`;\n } else {\n fixed = fixedArbitrary;\n }\n\n context.report({\n data: { keyword },\n messageId: 'important',\n node,\n suggest: [\n {\n data: { keyword },\n fix: (fixer) => {\n return fixer.replaceTextRange(\n removeQuotes(node.range as [number, number]),\n fixed,\n );\n },\n messageId: 'remove',\n },\n ],\n });\n };\n\n return {\n // JSX Attributes\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const valueNode = node.value;\n\n if (isLiteral(valueNode)) {\n const value = valueNode.value?.toString() ?? '';\n handleNodeValue(valueNode, value);\n } else if (isJSXExpressionContainer(valueNode)) {\n const expr = valueNode.expression;\n\n if (isLiteral(expr)) {\n const value = expr.value?.toString() ?? '';\n handleNodeValue(expr, value);\n } else if (isTemplateLiteral(expr) && expr.expressions.length === 0) {\n const value = expr.quasis[0].value.raw;\n handleNodeValue(expr.quasis[0], value);\n }\n }\n },\n\n // Object Properties\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const valueNode = node.value;\n\n if (isLiteral(valueNode)) {\n const value = valueNode.value?.toString() ?? '';\n handleNodeValue(valueNode, value);\n } else if (\n isTemplateLiteral(valueNode) &&\n valueNode.expressions.length === 0\n ) {\n const value = valueNode.quasis[0].value.raw;\n handleNodeValue(valueNode.quasis[0], value);\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow usage of !important keyword. Prioritize specificity for a maintainable and predictable styling structure.',\n },\n hasSuggestions: true,\n messages: {\n important:\n 'Avoid using the {{keyword}} keyword. Refactor your code to prioritize specificity for predictable styling.',\n remove: 'Remove the `{{keyword}}` keyword.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isInJSXProp as isInJSXProperty,\n isInBambooFunction,\n isRecipeVariant,\n isStyledProperty,\n} from '../utils/helpers';\nimport { isLiteral, isTemplateLiteral } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-invalid-nesting';\n\nconst rule = createRule({\n create(context) {\n // Caches for helper functions\n const bambooFunctionCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const jsxPropertyCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const styledPropertyCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n\n // Cached helper functions\n const isCachedInBambooFunction = (node: TSESTree.Property): boolean => {\n if (bambooFunctionCache.has(node)) {\n return bambooFunctionCache.get(node)!;\n }\n\n const result = Boolean(isInBambooFunction(node, context));\n bambooFunctionCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedInJSXProperty = (node: TSESTree.Property): boolean => {\n if (jsxPropertyCache.has(node)) {\n return jsxPropertyCache.get(node)!;\n }\n\n const result = isInJSXProperty(node, context);\n jsxPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedStyledProperty = (node: TSESTree.Property): boolean => {\n if (styledPropertyCache.has(node)) {\n return styledPropertyCache.get(node)!;\n }\n\n const result = isStyledProperty(node, context);\n styledPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n // Function to check if a key is an invalid nesting selector\n const isInvalidNestingSelector = (node: TSESTree.Expression): boolean => {\n if (isLiteral(node) && typeof node.value === 'string') {\n return !node.value.includes('&');\n } else if (isTemplateLiteral(node) && node.expressions.length === 0) {\n return !node.quasis[0].value.raw.includes('&');\n }\n\n return false;\n };\n\n return {\n // Use AST selector to target Property nodes with non-Identifier keys whose value is an ObjectExpression\n 'Property[key.type!=/Identifier/][value.type=\"ObjectExpression\"]'(\n node: TSESTree.Property,\n ) {\n // Check if the node is within a Bamboo function or JSX prop\n const inBambooFunction = isCachedInBambooFunction(node);\n const inJSXProperty = isCachedInJSXProperty(node);\n\n if (!inBambooFunction && !inJSXProperty) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n if (isCachedStyledProperty(node)) {\n return;\n }\n\n const keyNode = node.key;\n\n if (isInvalidNestingSelector(keyNode)) {\n context.report({\n messageId: 'nesting',\n node: keyNode,\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Warn against invalid nesting. Nested styles must contain the `&` character.',\n },\n messages: {\n nesting:\n 'Invalid style nesting. Nested styles must contain the `&` character.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n getInvalidTokens,\n getTaggedTemplateCaller,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isStyledTaggedTemplate,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { AST_NODE_TYPES, type TSESTree } from '@typescript-eslint/utils';\nimport { isNodeOfTypes } from '@typescript-eslint/utils/ast-utils';\n\nexport const RULE_NAME = 'no-invalid-token-paths';\n\nconst rule = createRule({\n create(context) {\n // Cache for invalid tokens to avoid redundant computations\n const invalidTokensCache = new Map<string, string[] | undefined>();\n\n const sendReport = (node: TSESTree.Node, value: string | undefined) => {\n if (!value) {\n return;\n }\n\n let tokens: string[] | undefined = invalidTokensCache.get(value);\n\n if (!tokens) {\n tokens = getInvalidTokens(value, context);\n invalidTokensCache.set(value, tokens);\n }\n\n if (!tokens || tokens.length === 0) {\n return;\n }\n\n for (const token of tokens) {\n context.report({\n data: { token },\n messageId: 'noInvalidTokenPaths',\n node,\n });\n }\n };\n\n const handleLiteralOrTemplate = (node: TSESTree.Node | undefined) => {\n if (!node) {\n return;\n }\n\n if (isLiteral(node)) {\n const value = node.value?.toString();\n sendReport(node, value);\n } else if (isTemplateLiteral(node) && node.expressions.length === 0) {\n const value = node.quasis[0].value.raw;\n sendReport(node.quasis[0], value);\n }\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value || !isBambooProperty(node, context)) {\n return;\n }\n\n if (isLiteral(node.value)) {\n handleLiteralOrTemplate(node.value);\n } else if (isJSXExpressionContainer(node.value)) {\n handleLiteralOrTemplate(node.value.expression);\n }\n },\n\n Property(node: TSESTree.Property) {\n if (\n !isIdentifier(node.key) ||\n !isNodeOfTypes([\n AST_NODE_TYPES.Literal,\n AST_NODE_TYPES.TemplateLiteral,\n ])(node.value) ||\n !isBambooAttribute(node, context) ||\n isRecipeVariant(node, context)\n ) {\n return;\n }\n\n handleLiteralOrTemplate(node.value);\n },\n\n TaggedTemplateExpression(node: TSESTree.TaggedTemplateExpression) {\n const caller = getTaggedTemplateCaller(node);\n if (!caller) {\n return;\n }\n\n // Check if this is a styled template literal\n if (!isStyledTaggedTemplate(node, context)) {\n return;\n }\n\n const quasis = node.quasi.quasis;\n for (const quasi of quasis) {\n const styles = quasi.value.raw;\n if (!styles) {\n continue;\n }\n\n let tokens: string[] | undefined = invalidTokensCache.get(styles);\n if (!tokens) {\n tokens = getInvalidTokens(styles, context);\n invalidTokensCache.set(styles, tokens);\n }\n\n if (!tokens || tokens.length === 0) {\n continue;\n }\n\n for (const token of tokens) {\n let index = styles.indexOf(token);\n\n while (index !== -1) {\n const start = quasi.range[0] + index + 1; // +1 for the backtick\n const end = start + token.length;\n\n context.report({\n data: { token },\n loc: {\n end: context.sourceCode.getLocFromIndex(end),\n start: context.sourceCode.getLocFromIndex(start),\n },\n messageId: 'noInvalidTokenPaths',\n });\n\n // Check for other occurences of the invalid token\n index = styles.indexOf(token, index + token.length);\n }\n }\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Disallow the use of invalid token paths within token function syntax.',\n },\n messages: {\n noInvalidTokenPaths: '`{{token}}` is an invalid token path.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n resolveLonghand,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-margin-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string>();\n\n const getLonghand = (name: string): string => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n const marginRegex = /margin/i;\n\n const isMarginProperty = (name: string): boolean => {\n const longhand = getLonghand(name).toLowerCase();\n return marginRegex.test(longhand);\n };\n\n const sendReport = (node: TSESTree.Identifier | TSESTree.JSXIdentifier) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n if (!isMarginProperty(node.name)) {\n return;\n }\n\n context.report({\n messageId: 'noMargin',\n node,\n });\n };\n\n // Cache for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n sendReport(node.name);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n sendReport(node.key);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Discourage using margin properties for spacing; prefer defining spacing in parent elements with `flex` or `grid` using the `gap` property for a more resilient layout. Margins make components less reusable in other contexts.',\n },\n messages: {\n noMargin:\n 'Use flex or grid with the `gap` property to define spacing in parent elements for a more resilient layout.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","export const physicalProperties: Record<string, string> = {\n borderBottom: 'borderBlockEnd',\n borderBottomColor: 'borderBlockEndColor',\n borderBottomLeftRadius: 'borderEndStartRadius',\n borderBottomRightRadius: 'borderEndEndRadius',\n borderBottomStyle: 'borderBlockEndStyle',\n borderBottomWidth: 'borderBlockEndWidth',\n borderLeft: 'borderInlineStart',\n borderLeftColor: 'borderInlineStartColor',\n borderLeftStyle: 'borderInlineStartStyle',\n borderLeftWidth: 'borderInlineStartWidth',\n borderRight: 'borderInlineEnd',\n borderRightColor: 'borderInlineEndColor',\n borderRightStyle: 'borderInlineEndStyle',\n borderRightWidth: 'borderInlineEndWidth',\n borderTop: 'borderBlockStart',\n borderTopColor: 'borderBlockStartColor',\n borderTopLeftRadius: 'borderStartStartRadius',\n borderTopRightRadius: 'borderStartEndRadius',\n borderTopStyle: 'borderBlockStartStyle',\n borderTopWidth: 'borderBlockStartWidth',\n bottom: 'insetBlockEnd',\n left: 'insetInlineStart',\n marginBottom: 'marginBlockEnd',\n marginLeft: 'marginInlineStart',\n marginRight: 'marginInlineEnd',\n marginTop: 'marginBlockStart',\n paddingBottom: 'paddingBlockEnd',\n paddingLeft: 'paddingInlineStart',\n paddingRight: 'paddingInlineEnd',\n paddingTop: 'paddingBlockStart',\n right: 'insetInlineEnd',\n top: 'insetBlockStart',\n};\n\n// Map of property names to their physical values and corresponding logical values\nexport const physicalPropertyValues: Record<string, Record<string, string>> = {\n // text-align physical values mapped to logical values\n textAlign: {\n left: 'start',\n right: 'end',\n },\n};\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n resolveLonghand,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isJSXIdentifier,\n isLiteral,\n} from '../utils/nodes';\nimport {\n physicalProperties,\n physicalPropertyValues,\n} from '../utils/physical-properties';\nimport { type TSESLint, type TSESTree } from '@typescript-eslint/utils';\n\ntype CacheMap<K extends object, V> = WeakMap<K, undefined | V>;\ntype IdentifierNode = TSESTree.Identifier | TSESTree.JSXIdentifier;\ntype RuleContextType = TSESLint.RuleContext<\n keyof typeof MESSAGES,\n [{ whitelist: string[] }]\n>;\ntype ValueNode = TSESTree.JSXAttribute['value'] | TSESTree.Property['value'];\n\nexport const RULE_NAME = 'no-physical-properties';\n\nconst MESSAGES = {\n physical:\n 'Use logical property instead of {{physical}}. Prefer `{{logical}}`.',\n physicalValue:\n 'Use logical value instead of {{physical}}. Prefer `{{logical}}`.',\n replace: 'Replace `{{physical}}` with `{{logical}}`.',\n} as const;\n\nclass PropertyCache {\n private longhandCache = new Map<string, string>();\n\n private bambooAttributeCache: CacheMap<TSESTree.Property, boolean> =\n new WeakMap();\n\n private bambooPropCache: CacheMap<TSESTree.JSXAttribute, boolean> =\n new WeakMap();\n\n private recipeVariantCache: CacheMap<TSESTree.Property, boolean> =\n new WeakMap();\n\n getLonghand(name: string, context: RuleContextType): string {\n if (this.longhandCache.has(name)) {\n return this.longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n this.longhandCache.set(name, longhand);\n return longhand;\n }\n\n isBambooAttribute(node: TSESTree.Property, context: RuleContextType): boolean {\n if (this.bambooAttributeCache.has(node)) {\n return this.bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n this.bambooAttributeCache.set(node, result);\n return Boolean(result);\n }\n\n isBambooProp(node: TSESTree.JSXAttribute, context: RuleContextType): boolean {\n if (this.bambooPropCache.has(node)) {\n return this.bambooPropCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n this.bambooPropCache.set(node, result);\n return Boolean(result);\n }\n\n isRecipeVariant(node: TSESTree.Property, context: RuleContextType): boolean {\n if (this.recipeVariantCache.has(node)) {\n return this.recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n this.recipeVariantCache.set(node, result);\n return Boolean(result);\n }\n}\n\nconst extractStringLiteralValue = (valueNode: ValueNode): null | string => {\n if (isLiteral(valueNode) && typeof valueNode.value === 'string') {\n return valueNode.value;\n }\n\n if (\n isJSXExpressionContainer(valueNode) &&\n isLiteral(valueNode.expression) &&\n typeof valueNode.expression.value === 'string'\n ) {\n return valueNode.expression.value;\n }\n\n return null;\n};\n\nconst createPropertyReport = (\n node: IdentifierNode,\n longhandName: string,\n logical: string,\n context: RuleContextType,\n) => {\n const physicalName = `\\`${node.name}\\`${longhandName !== node.name ? ` (resolved to \\`${longhandName}\\`)` : ''}`;\n\n context.report({\n data: { logical, physical: physicalName },\n messageId: 'physical',\n node,\n suggest: [\n {\n data: { logical, physical: node.name },\n fix: (fixer: TSESLint.RuleFixer) => fixer.replaceText(node, logical),\n messageId: 'replace',\n },\n ],\n });\n};\n\nconst createValueReport = (\n valueNode: NonNullable<ValueNode>,\n valueText: string,\n logical: string,\n context: RuleContextType,\n) => {\n context.report({\n data: { logical: `\"${logical}\"`, physical: `\"${valueText}\"` },\n messageId: 'physicalValue',\n node: valueNode,\n suggest: [\n {\n data: { logical: `\"${logical}\"`, physical: `\"${valueText}\"` },\n fix: (fixer: TSESLint.RuleFixer) => {\n if (isLiteral(valueNode)) {\n return fixer.replaceText(valueNode, `\"${logical}\"`);\n }\n\n if (\n isJSXExpressionContainer(valueNode) &&\n isLiteral(valueNode.expression)\n ) {\n return fixer.replaceText(valueNode.expression, `\"${logical}\"`);\n }\n\n return null;\n },\n messageId: 'replace',\n },\n ],\n });\n};\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n const cache = new PropertyCache();\n\n const checkPropertyName = (node: IdentifierNode) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n const longhandName = cache.getLonghand(node.name, context);\n if (!(longhandName in physicalProperties)) {\n return;\n }\n\n const logical = physicalProperties[longhandName];\n createPropertyReport(node, longhandName, logical, context);\n };\n\n const checkPropertyValue = (\n keyNode: IdentifierNode,\n valueNode: NonNullable<ValueNode>,\n ): boolean => {\n const propertyName = keyNode.name;\n if (!(propertyName in physicalPropertyValues)) {\n return false;\n }\n\n const valueText = extractStringLiteralValue(valueNode);\n if (valueText === null) {\n return false;\n }\n\n const valueMap = physicalPropertyValues[propertyName];\n if (!valueMap[valueText]) {\n return false;\n }\n\n createValueReport(valueNode, valueText, valueMap[valueText], context);\n return true;\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!cache.isBambooProp(node, context)) {\n return;\n }\n\n checkPropertyName(node.name);\n if (node.value) {\n checkPropertyValue(node.name, node.value);\n }\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!cache.isBambooAttribute(node, context)) {\n return;\n }\n\n if (cache.isRecipeVariant(node, context)) {\n return;\n }\n\n checkPropertyName(node.key);\n if (node.value) {\n checkPropertyValue(node.key, node.value);\n }\n },\n };\n },\n defaultOptions: [{ whitelist: [] }],\n meta: {\n docs: {\n description:\n 'Encourage the use of logical properties over physical properties to foster a responsive and adaptable user interface.',\n },\n hasSuggestions: true,\n messages: MESSAGES,\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXExpressionContainer,\n isMemberExpression,\n} from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-property-renaming';\n\nconst rule = createRule({\n create(context) {\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (\n node: TSESTree.Node,\n expected: string,\n property: string,\n ) => {\n context.report({\n data: {\n expected,\n prop: property,\n },\n messageId: 'noRenaming',\n node,\n });\n };\n\n const handleReport = (\n node: TSESTree.Node,\n value: TSESTree.Node,\n attribute: string,\n ) => {\n if (isIdentifier(value) && attribute !== value.name) {\n sendReport(node, attribute, value.name);\n } else if (\n isMemberExpression(value) &&\n isIdentifier(value.property) &&\n attribute !== value.property.name\n ) {\n sendReport(node, attribute, value.property.name);\n }\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n if (!isJSXExpressionContainer(node.value)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const attribute = node.name.name.toString();\n const expression = node.value.expression;\n\n handleReport(node.value, expression, attribute);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isIdentifier(node.value) && !isMemberExpression(node.value)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const attribute = node.key.name;\n const value = node.value;\n\n handleReport(node.value, value, attribute);\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Ensure that properties for patterns or style props are not renamed, as it prevents proper tracking.',\n },\n messages: {\n noRenaming:\n 'Incoming `{{prop}}` prop is different from the expected `{{expected}}` attribute. Bamboo will not track this prop.',\n },\n schema: [],\n type: 'problem',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n extractTokens,\n getTokenImport,\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n} from '../utils/helpers';\nimport {\n isCallExpression,\n isIdentifier,\n isJSXExpressionContainer,\n isLiteral,\n isTemplateLiteral,\n} from '../utils/nodes';\nimport { getArbitraryValue } from '@bamboocss/shared';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'no-unsafe-token-fn-usage';\n\nconst rule = createRule({\n create(context) {\n // Cache for getTokenImport result\n let tokenImportCache: null | undefined | { alias: string };\n\n const getCachedTokenImport = (): null | undefined | { alias: string } => {\n if (tokenImportCache !== undefined) {\n return tokenImportCache;\n }\n\n tokenImportCache = getTokenImport(context);\n return tokenImportCache;\n };\n\n const isUnsafeCallExpression = (node: TSESTree.CallExpression): boolean => {\n const tkImport = getCachedTokenImport();\n return isIdentifier(node.callee) && node.callee.name === tkImport?.alias;\n };\n\n const tokenWrap = (value?: string): string =>\n value ? `token(${value})` : '';\n\n const isCompositeValue = (input?: string): boolean => {\n if (!input) {\n return false;\n }\n\n // Regular expression to match token-only values, e.g., token('space.2') or {space.2}\n const tokenRegex = /^(?:token\\([^)]*\\)|\\{[^}]*\\})$/;\n return !tokenRegex.test(input);\n };\n\n const sendReport = (node: TSESTree.Node, value: string) => {\n const tkImports = extractTokens(value);\n if (!tkImports.length) {\n return;\n }\n\n const token = tkImports[0].replace(/^[^.]*\\./, '');\n\n context.report({\n messageId: 'noUnsafeTokenFnUsage',\n node,\n suggest: [\n {\n data: { safe: token },\n fix: (fixer) => fixer.replaceText(node, `'${token}'`),\n messageId: 'replace',\n },\n ],\n });\n };\n\n const handleRuntimeFunction = (node: TSESTree.Node) => {\n if (!isCallExpression(node)) {\n return;\n }\n\n if (!isUnsafeCallExpression(node)) {\n return;\n }\n\n const value = node.arguments[0];\n\n if (isLiteral(value)) {\n const value_ = getArbitraryValue(value.value?.toString() ?? '');\n sendReport(node, tokenWrap(value_));\n } else if (isTemplateLiteral(value) && value.expressions.length === 0) {\n const value_ = getArbitraryValue(value.quasis[0].value.raw);\n sendReport(node, tokenWrap(value_));\n }\n };\n\n const handleLiteral = (node: TSESTree.Node) => {\n if (!isLiteral(node)) {\n return;\n }\n\n const value = getArbitraryValue(node.value?.toString() ?? '');\n if (isCompositeValue(value)) {\n return;\n }\n\n sendReport(node, value);\n };\n\n const handleTemplateLiteral = (node: TSESTree.Node) => {\n if (!isTemplateLiteral(node) || node.expressions.length > 0) {\n return;\n }\n\n const value = getArbitraryValue(node.quasis[0].value.raw);\n if (isCompositeValue(value)) {\n return;\n }\n\n sendReport(node, value);\n };\n\n // Cached versions of helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!node.value) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n handleLiteral(node.value);\n\n if (isJSXExpressionContainer(node.value)) {\n const expression = node.value.expression;\n handleLiteral(expression);\n handleTemplateLiteral(expression);\n handleRuntimeFunction(expression);\n }\n },\n\n Property(node: TSESTree.Property) {\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const valueNode = node.value;\n\n if (\n isCallExpression(valueNode) ||\n isLiteral(valueNode) ||\n isTemplateLiteral(valueNode)\n ) {\n handleRuntimeFunction(valueNode);\n handleLiteral(valueNode);\n handleTemplateLiteral(valueNode);\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Prevent users from using the token function in situations where they could simply use the raw design token.',\n },\n hasSuggestions: true,\n messages: {\n noUnsafeTokenFnUsage:\n 'Unnecessary token function usage. Prefer design token.',\n replace: 'Replace token function with `{{safe}}`.',\n },\n schema: [],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","export const compositeProperties: Record<string, string[]> = {\n animation: [\n 'animationName',\n 'animationDuration',\n 'animationTimingFunction',\n 'animationDelay',\n 'animationIterationCount',\n 'animationDirection',\n 'animationFillMode',\n 'animationPlayState',\n ],\n background: [\n 'backgroundImage',\n 'backgroundPosition',\n 'backgroundSize',\n 'backgroundRepeat',\n 'backgroundAttachment',\n 'backgroundOrigin',\n 'backgroundClip',\n 'backgroundColor',\n ],\n backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n border: ['borderWidth', 'borderStyle', 'borderColor'],\n borderBlockEnd: [\n 'borderBlockEndWidth',\n 'borderBlockEndStyle',\n 'borderBlockEndColor',\n ],\n borderBlockStart: [\n 'borderBlockStartWidth',\n 'borderBlockStartStyle',\n 'borderBlockStartColor',\n ],\n borderBottom: ['borderBottomWidth', 'borderBottomStyle', 'borderBottomColor'],\n borderColor: [\n 'borderTopColor',\n 'borderRightColor',\n 'borderBottomColor',\n 'borderLeftColor',\n ],\n borderImage: [\n 'borderImageSource',\n 'borderImageSlice',\n 'borderImageWidth',\n 'borderImageOutset',\n 'borderImageRepeat',\n ],\n borderInlineEnd: [\n 'borderInlineEndWidth',\n 'borderInlineEndStyle',\n 'borderInlineEndColor',\n ],\n borderInlineStart: [\n 'borderInlineStartWidth',\n 'borderInlineStartStyle',\n 'borderInlineStartColor',\n ],\n borderLeft: ['borderLeftWidth', 'borderLeftStyle', 'borderLeftColor'],\n borderRadius: [\n 'borderTopLeftRadius',\n 'borderTopRightRadius',\n 'borderBottomRightRadius',\n 'borderBottomLeftRadius',\n ],\n borderRight: ['borderRightWidth', 'borderRightStyle', 'borderRightColor'],\n borderStyle: [\n 'borderTopStyle',\n 'borderRightStyle',\n 'borderBottomStyle',\n 'borderLeftStyle',\n ],\n borderTop: ['borderTopWidth', 'borderTopStyle', 'borderTopColor'],\n borderWidth: [\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n ],\n columnRule: ['columnRuleWidth', 'columnRuleStyle', 'columnRuleColor'],\n columns: ['columnWidth', 'columnCount'],\n container: ['contain', 'content'],\n containIntrinsicSize: [\n 'containIntrinsicSizeInline',\n 'containIntrinsicSizeBlock',\n ],\n cue: ['cueBefore', 'cueAfter'],\n flex: ['flexGrow', 'flexShrink', 'flexBasis'],\n flexFlow: ['flexDirection', 'flexWrap'],\n font: [\n 'fontStyle',\n 'fontVariantCaps',\n 'fontVariantEastAsian',\n 'fontVariantLigatures',\n 'fontVariantNumeric',\n 'fontVariantPosition',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'lineHeight',\n 'fontFamily',\n ],\n fontSynthesis: [\n 'fontSynthesisWeight',\n 'fontSynthesisStyle',\n 'fontSynthesisSmallCaps',\n ],\n fontVariant: [\n 'fontVariantCaps',\n 'fontVariantEastAsian',\n 'fontVariantLigatures',\n 'fontVariantNumeric',\n 'fontVariantPosition',\n ],\n gap: ['columnGap', 'rowGap'],\n grid: [\n 'gridTemplateColumns',\n 'gridTemplateRows',\n 'gridTemplateAreas',\n 'gridAutoColumns',\n 'gridAutoRows',\n 'gridAutoFlow',\n ],\n gridArea: ['gridRowStart', 'gridColumnStart', 'gridRowEnd', 'gridColumnEnd'],\n gridColumn: ['gridColumnStart', 'gridColumnEnd'],\n gridGap: ['gridColumnGap', 'gridRowGap'],\n gridRow: ['gridRowStart', 'gridRowEnd'],\n gridTemplate: [\n 'gridTemplateColumns',\n 'gridTemplateRows',\n 'gridTemplateAreas',\n ],\n inset: ['top', 'right', 'bottom', 'left'],\n listStyle: ['listStyleType', 'listStylePosition', 'listStyleImage'],\n margin: ['marginTop', 'marginRight', 'marginBottom', 'marginLeft'],\n mask: [\n 'maskImage',\n 'maskMode',\n 'maskRepeat',\n 'maskPosition',\n 'maskClip',\n 'maskOrigin',\n 'maskSize',\n 'maskComposite',\n ],\n maskBorder: [\n 'maskBorderSource',\n 'maskBorderMode',\n 'maskBorderSlice',\n 'maskBorderWidth',\n 'maskBorderOutset',\n 'maskBorderRepeat',\n ],\n offset: [\n 'offsetPosition',\n 'offsetPath',\n 'offsetDistance',\n 'offsetRotate',\n 'offsetAnchor',\n ],\n outline: ['outlineWidth', 'outlineStyle', 'outlineColor'],\n overflow: ['overflowX', 'overflowY'],\n padding: ['paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n pause: ['pauseBefore', 'pauseAfter'],\n placeContent: ['alignContent', 'justifyContent'],\n placeItems: ['alignItems', 'justifyItems'],\n placeSelf: ['alignSelf', 'justifySelf'],\n rest: ['restBefore', 'restAfter'],\n scrollMargin: [\n 'scrollMarginTop',\n 'scrollMarginRight',\n 'scrollMarginBottom',\n 'scrollMarginLeft',\n ],\n scrollPadding: [\n 'scrollPaddingTop',\n 'scrollPaddingRight',\n 'scrollPaddingBottom',\n 'scrollPaddingLeft',\n ],\n scrollPaddingBlock: ['scrollPaddingBlockStart', 'scrollPaddingBlockEnd'],\n scrollPaddingInline: ['scrollPaddingInlineStart', 'scrollPaddingInlineEnd'],\n scrollSnapMargin: [\n 'scrollSnapMarginTop',\n 'scrollSnapMarginRight',\n 'scrollSnapMarginBottom',\n 'scrollSnapMarginLeft',\n ],\n scrollSnapMarginBlock: [\n 'scrollSnapMarginBlockStart',\n 'scrollSnapMarginBlockEnd',\n ],\n scrollSnapMarginInline: [\n 'scrollSnapMarginInlineStart',\n 'scrollSnapMarginInlineEnd',\n ],\n scrollTimeline: ['scrollTimelineSource', 'scrollTimelineOrientation'],\n textDecoration: [\n 'textDecorationLine',\n 'textDecorationStyle',\n 'textDecorationColor',\n ],\n textEmphasis: ['textEmphasisStyle', 'textEmphasisColor'],\n transition: [\n 'transitionProperty',\n 'transitionDuration',\n 'transitionTimingFunction',\n 'transitionDelay',\n ],\n};\n","import { createRule } from '../utils';\nimport { compositeProperties } from '../utils/composite-properties';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isValidProperty,\n resolveLonghand,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-atomic-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string>();\n\n const getLonghand = (name: string): string => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Cache for composite property resolution\n const compositePropertyCache = new Map<string, string | undefined>();\n\n const resolveCompositeProperty = (name: string): string | undefined => {\n if (compositePropertyCache.has(name)) {\n return compositePropertyCache.get(name);\n }\n\n if (Object.hasOwn(compositeProperties, name)) {\n compositePropertyCache.set(name, name);\n return name;\n }\n\n const longhand = getLonghand(name);\n if (\n isValidProperty(longhand, context) &&\n Object.hasOwn(compositeProperties, longhand)\n ) {\n compositePropertyCache.set(name, longhand);\n return longhand;\n }\n\n compositePropertyCache.set(name, undefined);\n return undefined;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (\n node: TSESTree.Identifier | TSESTree.JSXIdentifier,\n composite: string,\n ) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n const atomics = compositeProperties[composite]\n .map((name) => `\\`${name}\\``)\n .join(',\\n');\n\n context.report({\n data: {\n atomics,\n composite: node.name,\n },\n messageId: 'atomic',\n node,\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.name.name);\n if (!composite) {\n return;\n }\n\n sendReport(node.name, composite);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.key.name);\n if (!composite) {\n return;\n }\n\n sendReport(node.key, composite);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Encourage the use of atomic properties instead of composite properties in the codebase.',\n },\n messages: {\n atomic:\n 'Use atomic properties instead of `{{composite}}`. Prefer: \\n{{atomics}}',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport { compositeProperties } from '../utils/composite-properties';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isValidProperty,\n resolveLonghand,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-composite-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string>();\n\n const getLonghand = (name: string): string => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Cache for composite property resolution\n const compositePropertyCache = new Map<string, string | undefined>();\n\n const resolveCompositeProperty = (name: string): string | undefined => {\n if (compositePropertyCache.has(name)) {\n return compositePropertyCache.get(name);\n }\n\n const longhand = getLonghand(name);\n\n if (!isValidProperty(longhand, context)) {\n compositePropertyCache.set(name, undefined);\n return undefined;\n }\n\n const composite = Object.keys(compositeProperties).find((cpd) =>\n compositeProperties[cpd].includes(longhand),\n );\n\n compositePropertyCache.set(name, composite);\n return composite;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (\n node: TSESTree.Identifier | TSESTree.JSXIdentifier,\n composite: string,\n ) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n context.report({\n data: {\n atomic: node.name,\n composite,\n },\n messageId: 'composite',\n node,\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.name.name);\n if (!composite) {\n return;\n }\n\n sendReport(node.name, composite);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.key.name);\n if (!composite) {\n return;\n }\n\n sendReport(node.key, composite);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Encourage the use of composite properties instead of atomic properties in the codebase.',\n },\n messages: {\n composite:\n 'Use composite property instead of `{{atomic}}`. Prefer: `{{composite}}`.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n resolveLonghand,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-longhand-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string | undefined>();\n\n const getLonghand = (name: string): string | undefined => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context);\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (node: TSESTree.Identifier | TSESTree.JSXIdentifier) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n const longhand = getLonghand(node.name);\n if (!longhand || longhand === node.name) {\n return;\n }\n\n const data = {\n longhand,\n shorthand: node.name,\n };\n\n context.report({\n data,\n messageId: 'longhand',\n node,\n suggest: [\n {\n data,\n fix: (fixer) => fixer.replaceText(node, longhand),\n messageId: 'replace',\n },\n ],\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n sendReport(node.name);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n sendReport(node.key);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Discourage the use of shorthand properties and promote the preference for longhand properties in the codebase.',\n },\n hasSuggestions: true,\n messages: {\n longhand:\n 'Use longhand property instead of `{{shorthand}}`. Prefer `{{longhand}}`.',\n replace: 'Replace `{{shorthand}}` with `{{longhand}}`.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n resolveLonghand,\n resolveShorthands,\n} from '../utils/helpers';\nimport { isIdentifier, isJSXIdentifier } from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-shorthand-properties';\n\nconst rule = createRule({\n create(context) {\n const whitelist: string[] = context.options[0]?.whitelist ?? [];\n\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string | undefined>();\n\n const getLonghand = (name: string): string | undefined => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context);\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Cache for resolved shorthands\n const shorthandsCache = new Map<string, string[] | undefined>();\n\n const getShorthands = (name: string): string[] | undefined => {\n if (shorthandsCache.has(name)) {\n return shorthandsCache.get(name)!;\n }\n\n const shorthands = resolveShorthands(name, context);\n shorthandsCache.set(name, shorthands);\n return shorthands;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (node: TSESTree.Identifier | TSESTree.JSXIdentifier) => {\n if (whitelist.includes(node.name)) {\n return;\n }\n\n const longhand = getLonghand(node.name);\n if (longhand) {\n return;\n } // If it's already shorthand, no need to report\n\n const shorthands = getShorthands(node.name);\n if (!shorthands || shorthands.length === 0) {\n return;\n }\n\n const shorthandList = shorthands.map((s) => `\\`${s}\\``).join(', ');\n\n const data = {\n longhand: node.name,\n shorthand: shorthandList,\n };\n\n context.report({\n data,\n messageId: 'shorthand',\n node,\n suggest: [\n {\n data,\n fix: (fixer) => fixer.replaceText(node, shorthands[0]),\n messageId: 'replace',\n },\n ],\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n sendReport(node.name);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n sendReport(node.key);\n },\n };\n },\n defaultOptions: [\n {\n whitelist: [],\n },\n ],\n meta: {\n docs: {\n description:\n 'Discourage the use of longhand properties and promote the preference for shorthand properties in the codebase.',\n },\n hasSuggestions: true,\n messages: {\n replace: 'Replace `{{longhand}}` with `{{shorthand}}`.',\n shorthand:\n 'Use shorthand property instead of `{{longhand}}`. Prefer `{{shorthand}}`.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n whitelist: {\n items: {\n minLength: 0,\n type: 'string',\n },\n type: 'array',\n uniqueItems: true,\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import { createRule } from '../utils';\nimport { compositeProperties } from '../utils/composite-properties';\nimport {\n isBambooAttribute,\n isBambooProp as isBambooProperty,\n isRecipeVariant,\n isValidProperty,\n resolveLonghand,\n} from '../utils/helpers';\nimport {\n isIdentifier,\n isJSXIdentifier,\n isJSXOpeningElement,\n isObjectExpression,\n} from '../utils/nodes';\nimport { type TSESTree } from '@typescript-eslint/utils';\n\nexport const RULE_NAME = 'prefer-unified-property-style';\n\nconst rule = createRule({\n create(context) {\n // Cache for resolved longhand properties\n const longhandCache = new Map<string, string>();\n\n const getLonghand = (name: string): string => {\n if (longhandCache.has(name)) {\n return longhandCache.get(name)!;\n }\n\n const longhand = resolveLonghand(name, context) ?? name;\n longhandCache.set(name, longhand);\n return longhand;\n };\n\n // Cache for composite property resolution\n const compositePropertyCache = new Map<string, string | undefined>();\n\n const resolveCompositeProperty = (name: string): string | undefined => {\n if (compositePropertyCache.has(name)) {\n return compositePropertyCache.get(name);\n }\n\n if (name in compositeProperties) {\n compositePropertyCache.set(name, name);\n return name;\n }\n\n const longhand = getLonghand(name);\n if (\n isValidProperty(longhand, context) &&\n longhand in compositeProperties\n ) {\n compositePropertyCache.set(name, longhand);\n return longhand;\n }\n\n compositePropertyCache.set(name, undefined);\n return undefined;\n };\n\n // Caches for helper functions\n const bambooPropertyCache = new WeakMap<\n TSESTree.JSXAttribute,\n boolean | undefined\n >();\n const isCachedBambooProperty = (node: TSESTree.JSXAttribute): boolean => {\n if (bambooPropertyCache.has(node)) {\n return bambooPropertyCache.get(node)!;\n }\n\n const result = isBambooProperty(node, context);\n bambooPropertyCache.set(node, result);\n return Boolean(result);\n };\n\n const bambooAttributeCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedBambooAttribute = (node: TSESTree.Property): boolean => {\n if (bambooAttributeCache.has(node)) {\n return bambooAttributeCache.get(node)!;\n }\n\n const result = isBambooAttribute(node, context);\n bambooAttributeCache.set(node, result);\n return Boolean(result);\n };\n\n const recipeVariantCache = new WeakMap<\n TSESTree.Property,\n boolean | undefined\n >();\n const isCachedRecipeVariant = (node: TSESTree.Property): boolean => {\n if (recipeVariantCache.has(node)) {\n return recipeVariantCache.get(node)!;\n }\n\n const result = isRecipeVariant(node, context);\n recipeVariantCache.set(node, result);\n return Boolean(result);\n };\n\n const sendReport = (\n node: TSESTree.Node,\n composite: string,\n siblings: string[],\n ) => {\n const atomicPropertiesSet = new Set(\n siblings.filter((property) =>\n compositeProperties[composite].includes(getLonghand(property)),\n ),\n );\n\n if (atomicPropertiesSet.size === 0) {\n return;\n }\n\n const atomicProperties = Array.from(atomicPropertiesSet)\n .map((property) => `\\`${property}\\``)\n .join(', ');\n\n const atomics = compositeProperties[composite]\n .map((name) => `\\`${name}\\``)\n .join(', ');\n\n context.report({\n data: {\n atomicProperties,\n atomics,\n composite,\n },\n messageId: 'unify',\n node,\n });\n };\n\n return {\n JSXAttribute(node: TSESTree.JSXAttribute) {\n if (!isJSXIdentifier(node.name)) {\n return;\n }\n\n if (!isCachedBambooProperty(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.name.name);\n if (!composite) {\n return;\n }\n\n if (!isJSXOpeningElement(node.parent)) {\n return;\n }\n\n const siblings = node.parent.attributes.map(\n (attribute: any) => attribute.name.name,\n );\n\n sendReport(node, composite, siblings);\n },\n\n Property(node: TSESTree.Property) {\n if (!isIdentifier(node.key)) {\n return;\n }\n\n if (!isCachedBambooAttribute(node)) {\n return;\n }\n\n if (isCachedRecipeVariant(node)) {\n return;\n }\n\n const composite = resolveCompositeProperty(node.key.name);\n if (!composite) {\n return;\n }\n\n if (!isObjectExpression(node.parent)) {\n return;\n }\n\n const siblings = node.parent.properties\n .filter(\n (property): property is TSESTree.Property =>\n property.type === 'Property',\n )\n .map((property) =>\n isIdentifier(property.key) ? property.key.name : '',\n );\n\n sendReport(node.key, composite, siblings);\n },\n };\n },\n defaultOptions: [],\n meta: {\n docs: {\n description:\n 'Discourage mixing atomic and composite forms of the same property in a style declaration. Atomic styles give more consistent results.',\n },\n messages: {\n unify:\n \"You're mixing atomic {{atomicProperties}} with composite property `{{composite}}`. Prefer atomic styling to mixing atomic and composite properties. Remove `{{composite}}` and use one or more of {{atomics}} instead.\",\n },\n schema: [],\n type: 'suggestion',\n },\n name: RULE_NAME,\n});\n\nexport default rule;\n","import fileNotIncluded, {\n RULE_NAME as FileNotIncluded,\n} from './file-not-included';\nimport noConfigunctionInSource, {\n RULE_NAME as NoConfigunctionInSource,\n} from './no-config-function-in-source';\nimport noDebug, { RULE_NAME as NoDebug } from './no-debug';\nimport noDeprecatedTokens, {\n RULE_NAME as NoDeprecatedTokens,\n} from './no-deprecated-tokens';\nimport noDynamicStyling, {\n RULE_NAME as NoDynamicStyling,\n} from './no-dynamic-styling';\nimport noEscapeHatch, { RULE_NAME as NoEscapeHatch } from './no-escape-hatch';\nimport noHardCodedColor, {\n RULE_NAME as NoHardCodedColor,\n} from './no-hardcoded-color';\nimport noImportant, { RULE_NAME as NoImportant } from './no-important';\nimport noInvalidNesting, {\n RULE_NAME as NoInvalidNesting,\n} from './no-invalid-nesting';\nimport noInvalidTokenPaths, {\n RULE_NAME as NoInvalidTokenPaths,\n} from './no-invalid-token-paths';\nimport noMarginProperties, {\n RULE_NAME as NoMarginProperties,\n} from './no-margin-properties';\nimport noPhysicalProperties, {\n RULE_NAME as NoPhysicalProperties,\n} from './no-physical-properties';\nimport noPropertyRenaming, {\n RULE_NAME as NoPropertyRenaming,\n} from './no-property-renaming';\nimport noUnsafeTokenUsage, {\n RULE_NAME as NoUnsafeTokenUsage,\n} from './no-unsafe-token-fn-usage';\nimport preferAtomicProperties, {\n RULE_NAME as PreferAtomicProperties,\n} from './prefer-atomic-properties';\nimport preferCompositeProperties, {\n RULE_NAME as PreferCompositeProperties,\n} from './prefer-composite-properties';\nimport preferLonghandProperties, {\n RULE_NAME as PreferLonghandProperties,\n} from './prefer-longhand-properties';\nimport preferShorthandProperties, {\n RULE_NAME as PreferShorthandProperties,\n} from './prefer-shorthand-properties';\nimport preferUnifiedPropertyStyle, {\n RULE_NAME as PreferUnifiedPropertyStyle,\n} from './prefer-unified-property-style';\n\nexport const rules = {\n [FileNotIncluded]: fileNotIncluded,\n [NoConfigunctionInSource]: noConfigunctionInSource,\n [NoDebug]: noDebug,\n [NoDeprecatedTokens]: noDeprecatedTokens,\n [NoDynamicStyling]: noDynamicStyling,\n [NoEscapeHatch]: noEscapeHatch,\n [NoHardCodedColor]: noHardCodedColor,\n [NoImportant]: noImportant,\n [NoInvalidNesting]: noInvalidNesting,\n [NoInvalidTokenPaths]: noInvalidTokenPaths,\n [NoMarginProperties]: noMarginProperties,\n [NoPhysicalProperties]: noPhysicalProperties,\n [NoPropertyRenaming]: noPropertyRenaming,\n [NoUnsafeTokenUsage]: noUnsafeTokenUsage,\n [PreferAtomicProperties]: preferAtomicProperties,\n [PreferCompositeProperties]: preferCompositeProperties,\n [PreferLonghandProperties]: preferLonghandProperties,\n [PreferShorthandProperties]: preferShorthandProperties,\n [PreferUnifiedPropertyStyle]: preferUnifiedPropertyStyle,\n} as any;\n","import { rules } from '../rules';\nimport { RULE_NAME as FileNotIncluded } from '../rules/file-not-included';\nimport { RULE_NAME as NoConfigFunctionInSource } from '../rules/no-config-function-in-source';\nimport { RULE_NAME as NoInvalidTokenPaths } from '../rules/no-invalid-token-paths';\n\nconst errorRules = [\n FileNotIncluded,\n NoConfigFunctionInSource,\n NoInvalidTokenPaths,\n];\n\nconst allRules = Object.fromEntries(\n Object.entries(rules).map(([name]) => {\n return [`bamboo/${name}`, errorRules.includes(name) ? 'error' : 'warn'];\n }),\n);\n\nexport default {\n parser: '@typescript-eslint/parser',\n parserOptions: { sourceType: 'module' },\n plugins: ['bamboo'],\n rules: allRules,\n};\n","export default {\n parser: '@typescript-eslint/parser',\n parserOptions: { sourceType: 'module' },\n plugins: ['bamboo'],\n rules: {\n 'bamboo/file-not-included': 'error',\n 'bamboo/no-config-function-in-source': 'error',\n 'bamboo/no-debug': 'warn',\n 'bamboo/no-deprecated-tokens': 'warn',\n 'bamboo/no-dynamic-styling': 'warn',\n 'bamboo/no-hardcoded-color': 'warn',\n 'bamboo/no-invalid-nesting': 'error',\n 'bamboo/no-invalid-token-paths': 'error',\n 'bamboo/no-property-renaming': 'warn',\n 'bamboo/no-unsafe-token-fn-usage': 'warn',\n },\n};\n","import { name, version } from '../package.json';\nimport all from './configs/all';\nimport recommended from './configs/recommended';\nimport { rules } from './rules';\n\nconst plugin = {\n configs: {\n all,\n recommended,\n },\n meta: {\n name,\n version,\n },\n rules,\n};\n\nmodule.exports = plugin;\n"],"mappings":"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"}