@jesscss/less-parser 2.0.0-alpha.4 → 2.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["createInterpolatedReference","cssProductions","getParenFrames","interpolatedRegex","createInterpolatedReference","getInterpolated","isArray","interpolatedRegex","createInterpolatedReference","getInterpolated","cssProductions","getParenFrames","createInterpolatedReference","cssProductions","productions","cssProductions"],"sources":["../src/lessTokens.ts","../src/utils.ts","../src/productions/root.ts","../src/productions/selectors.ts","../src/productions/values.ts","../src/productions/guards.ts","../src/productions/index.ts","../src/lessRecursiveParser.ts","../src/lessParser.ts"],"sourcesContent":["import {\n rawCssFragments,\n rawCssTokens,\n LexerType,\n groupCapture,\n type RawModeConfig,\n type RawTokenConfig,\n type RawToken,\n type TokenNames,\n type CssTokenType,\n SKIPPED_LABEL\n} from '@jesscss/css-parser';\nimport { AMPERSAND_TEMPLATE_CONTENTS_REGEX } from '@jesscss/core';\n\ntype IMerges = Partial<Record<CssTokenType, RawTokenConfig>>;\n\n/**\n * Less-specific token names introduced by merges below\n *\n * @todo - Can't we infer this from the tokens?\n */\nexport type LessExtraTokenType =\n | 'Ellipsis'\n | 'AtKeywordLessExtension'\n | 'Interpolated'\n | 'LineComment'\n | 'PlusAssign'\n | 'UnderscoreAssign'\n | 'AnonMixinStart'\n | 'GtEqAlias'\n | 'LtEqAlias'\n | 'Extend'\n | 'AmpersandExtend'\n | 'AmpersandLParen'\n | 'AmpersandTemplateContents'\n | 'AmpersandTemplateEnd'\n | 'AllFlag'\n | 'When'\n | 'WhenFunctionStart'\n | 'VarOrProp'\n | 'NestedReference'\n | 'PropertyReference'\n | 'Percent'\n | 'FormatFunction'\n | 'IfFunction'\n | 'BooleanFunction'\n | 'DefaultGuardIdent'\n | 'DefaultGuardFunc'\n | 'JavaScript'\n | 'InterpolatedIdent'\n | 'InterpolatedCustomProperty'\n | 'InterpolatedSelector';\n\nfunction $preBuildFragments() {\n const fragments: string[][] = rawCssFragments().map(f => [...f]);\n fragments.unshift(['lineComment', '\\\\/\\\\/[^\\\\n\\\\r]*']);\n fragments.push(['interpolated', '[@$]\\\\{(?:{{nmchar}}*)\\\\}']);\n\n return fragments;\n}\n\nfunction $preBuildTokens() {\n /**\n * Creates a type from the CSS mode and adds Less tokens\n */\n type Modes<T> = any;\n\n type InferMergeTypes = {\n modes: any;\n defaultMode: 'Default';\n };\n\n const tokens = rawCssTokens() as unknown as InferMergeTypes;\n\n /**\n * Keyed by what to insert after\n *\n * @todo - Move merge utility to css-parser\n */\n const merges = {\n Assign: [\n {\n name: 'Ellipsis',\n pattern: /\\.\\.\\./,\n categories: ['BlockMarker']\n },\n /**\n * Less's historical parser unfortunately allows\n * at-keywords that are not valid in CSS. One is\n * that Less allows at-keywords to begin with numbers.\n * Another is that it allows an at-rule that only\n * contains a single dash. So we capture this as\n * a separate token.\n *\n * We also do this later in the token stack so that we\n * don't accidentally grab something like\n * @-webkit-keyframes while looking for @-.\n */\n {\n name: 'AtKeywordLessExtension',\n pattern: '@(?:-|\\\\d(?:{{nmchar}})*)',\n categories: ['BlockMarker', 'AtName']\n }\n ],\n PlainIdent: [\n { name: 'Interpolated', pattern: LexerType.NA },\n {\n name: 'LineComment',\n pattern: '{{lineComment}}',\n label: SKIPPED_LABEL\n },\n { name: 'PlusAssign', pattern: '\\\\+{{whitespace}}*:', categories: ['BlockMarker', 'Assign'] },\n {\n name: 'UnderscoreAssign',\n pattern: '\\\\+{{whitespace}}*_{{whitespace}}*:',\n categories: ['BlockMarker', 'Assign']\n },\n { name: 'AnonMixinStart', pattern: /[.#]\\(/, categories: ['BlockMarker'] },\n { name: 'GtEqAlias', pattern: /=>/, categories: ['CompareOperator'] },\n { name: 'LtEqAlias', pattern: /=</, categories: ['CompareOperator'] },\n {\n name: 'Extend',\n pattern: /:extend\\(/,\n categories: ['BlockMarker']\n },\n {\n name: 'VarOrProp',\n pattern: LexerType.NA\n },\n {\n name: 'NestedReference',\n pattern: ['([@$]+{{ident}}?){2,}', groupCapture],\n start_chars_hint: ['@', '$'],\n categories: ['VarOrProp'],\n line_breaks: true\n },\n {\n name: 'PropertyReference',\n pattern: '\\\\${{ident}}',\n categories: ['VarOrProp']\n },\n /** Can be used in unit function or mod operation */\n {\n name: 'Percent',\n pattern: /%/\n },\n {\n name: 'DefaultGuardIdent',\n pattern: /default/,\n longer_alt: 'PlainIdent',\n categories: ['Ident']\n },\n {\n name: 'DefaultGuardFunc',\n pattern: /default(?:\\(\\))/\n }\n ],\n Ampersand: [\n {\n name: 'AmpersandExtend',\n pattern: /&:extend\\(/,\n categories: ['BlockMarker']\n },\n {\n name: 'AmpersandLParen',\n pattern: /&\\(/,\n push_mode: 'AmpersandTemplate',\n categories: ['Selector', 'NestedRuleStart', 'BlockMarker']\n },\n {\n name: 'AllFlag',\n pattern: /!all/,\n categories: ['BlockMarker']\n }\n ],\n UrlStart: [\n /**\n * Keywords that we don't identify as idents\n * should be manually added to other places where an ident is valid.\n */\n {\n name: 'When',\n pattern: /when/i,\n longer_alt: 'PlainIdent',\n categories: ['BlockMarker']\n },\n {\n name: 'FormatFunction',\n pattern: /%\\(/,\n categories: ['BlockMarker', 'FunctionStart']\n },\n {\n name: 'IfFunction',\n pattern: /if\\(/,\n categories: ['BlockMarker', 'FunctionStart']\n },\n {\n name: 'BooleanFunction',\n pattern: /boolean\\(/,\n categories: ['BlockMarker', 'FunctionStart']\n },\n {\n name: 'JavaScript',\n pattern: /~?`[^`]*`/,\n line_breaks: true\n }\n ],\n /**\n * These need to be after any keywords, so that\n * keywords with a longer_alt of `PlainIdent`\n * aren't captured first.\n */\n Signed: [\n {\n name: 'InterpolatedIdent',\n /**\n * Must contain one `@{}`\n * It's too expensive for Chevrotain to capture groups here,\n * so we'll extract the interpolated values later.\n */\n pattern: '(?:{{ident}}|-)?{{interpolated}}(?:{{interpolated}}|{{nmchar}})*',\n categories: ['Interpolated', 'Selector', 'Ident']\n },\n {\n name: 'InterpolatedCustomProperty',\n /**\n * Must contain one `@{}`\n * It's too expensive for Chevrotain to capture groups here,\n * so we'll extract the interpolated values later.\n */\n pattern: '--{{ident}}?{{interpolated}}(?:{{interpolated}}|{{nmchar}})*',\n categories: ['Interpolated']\n },\n /**\n * Unfortunately, there's grammatical ambiguity between\n * interpolated props and a naked interpolated selector name,\n * making this awkward token necessary.\n */\n {\n name: 'InterpolatedSelector',\n pattern: ['[.#]{{ident}}?{{interpolated}}(?:{{interpolated}}|{{nmchar}})*', groupCapture],\n categories: ['Interpolated', 'Selector'],\n start_chars_hint: ['.', '#'],\n line_breaks: true\n }\n ]\n } as const satisfies IMerges;\n\n let defaultTokens = (tokens.modes.Default as unknown as Readonly<RawToken[]>).slice() as RawToken[];\n\n let tokenLength = defaultTokens.length;\n for (let i = 0; i < tokenLength; i++) {\n let token: RawToken = defaultTokens[i]!;\n\n const { name } = token;\n const copyToken = () => {\n token = structuredClone(token) as RawToken;\n };\n\n let alterations = true;\n\n switch (name) {\n /**\n * Less / Sass Ampersand is slightly different\n * from CSS Nesting in that it concatenates, so we\n * need to gobble up the rest of the identifier\n * if present.\n */\n case 'Ampersand':\n copyToken();\n /**\n * Captures not just ampersands, but \"ampersand merges\", where\n * the intent of the author was to merge the parent selector with a token\n * suffix or prefix.\n *\n * e.g.\n * 1. &-foo\n * 2. &(foo)\n * 3. &1\n * 4. .foo-&\n */\n token.pattern = '(?:[.#](?:{{ident}}-)?&|&){{nmchar}}*';\n token.start_chars_hint = ['&', '.', '#'];\n break;\n case 'DotName':\n case 'HashName':\n copyToken();\n token.longer_alt = 'Ampersand';\n break;\n case 'Divide':\n copyToken();\n token.pattern = /\\.?\\//;\n break;\n case 'SingleQuoteStart':\n copyToken();\n token.pattern = /~?'/;\n break;\n case 'DoubleQuoteStart':\n copyToken();\n token.pattern = /~?\"/;\n break;\n default:\n alterations = false;\n }\n if (alterations) {\n defaultTokens[i] = token;\n }\n // @ts-expect-error - Suppress index warning\n const merge = merges[name];\n if (merge) {\n /** Insert after current token */\n defaultTokens = defaultTokens.slice(0, i + 1).concat(merge, defaultTokens.slice(i + 1));\n (tokens.modes.Default as unknown as RawToken[]) = defaultTokens;\n const mergeLength = merge.length;\n tokenLength += mergeLength;\n i += mergeLength;\n }\n }\n tokens.modes.AmpersandTemplate = [\n {\n name: 'AmpersandTemplateEnd',\n pattern: /\\)/,\n pop_mode: true,\n categories: ['FunctionLikeEnd']\n },\n {\n name: 'AmpersandTemplateContents',\n /**\n * Template-ish raw text until `)` or a quote. Quotes are tokenized\n * separately so `&('')` can be handled like `url(...)`.\n *\n * We intentionally do not accept arbitrary plain identifiers here:\n * Less templates are selector-ish fragments or explicit `&` insertion\n * patterns, not free-form identifiers like `nil`.\n */\n pattern: AMPERSAND_TEMPLATE_CONTENTS_REGEX,\n categories: ['Selector']\n },\n 'SingleQuoteStart',\n 'DoubleQuoteStart',\n 'WS'\n ] as Array<RawTokenConfig | string>;\n return tokens;\n}\n\nexport const Fragments = $preBuildFragments!();\nexport const Tokens = $preBuildTokens!();\n\ntype ReturnTokens = ReturnType<typeof $preBuildTokens>;\ntype TokenModes = ReturnTokens['modes'];\n\nexport type LessTokenType = TokenNames<TokenModes[keyof TokenModes]>;\n\nexport const lessFragments = () => Fragments as unknown as ReadonlyArray<Readonly<[string, string]>>;\nexport const lessTokens = () => Tokens as unknown as RawModeConfig;\n","import { Interpolated, Quoted, Reference, INTERPOLATION_PLACEHOLDER } from '@jesscss/core';\n\n// Pre-compiled regex for @{variable} interpolation - more efficient than creating new instances\nconst INTERPOLATION_REGEX = /([$@]){([^}]+)}/g;\n\nconst createInterpolatedReference = (\n prefix: string,\n varName: string,\n location?: any,\n context?: any\n): Reference => {\n const isProperty = prefix === '$';\n const key = isProperty\n ? new Quoted(varName, { quote: '\\'' }, location, context)\n : varName;\n return new Reference(\n { key },\n { type: isProperty ? 'property' : 'variable', role: 'ident' },\n location,\n context\n );\n};\n\n/* Handle both @{variable} interpolation and @id-@num variable variables */\nexport const getInterpolatedOrString = (name: string, location?: any, context?: any): Interpolated | string => {\n // First check for @{variable} interpolation syntax\n const matches: Array<{ fullMatch: string; prefix: string; varName: string; index: number }> = [];\n\n // Reset regex state and collect all matches\n INTERPOLATION_REGEX.lastIndex = 0;\n let result;\n while ((result = INTERPOLATION_REGEX.exec(name)) !== null) {\n const [fullMatch, prefix, varName] = result;\n if (varName && prefix) {\n matches.push({\n fullMatch,\n prefix,\n varName,\n index: result.index\n });\n }\n }\n\n if (matches.length > 0) {\n // Build source string and replacements\n let source = name;\n const replacements: any[] = [];\n let offset = 0; // Track how much the string has been modified\n\n // Process matches in forward order to maintain correct indices\n for (let i = 0; i < matches.length; i++) {\n const match = matches[i]!;\n const adjustedIndex = match.index - offset;\n const beforeMatch = source.substring(0, adjustedIndex);\n const afterMatch = source.substring(adjustedIndex + match.fullMatch.length);\n\n source = beforeMatch + INTERPOLATION_PLACEHOLDER + afterMatch;\n offset += match.fullMatch.length - INTERPOLATION_PLACEHOLDER.length;\n\n const ref = createInterpolatedReference(match.prefix, match.varName, location, context);\n replacements.push(ref); // Add to end to maintain order\n }\n\n return new Interpolated({ source, replacements }, { role: 'ident' }, location, context);\n }\n\n // If no interpolation found, check for @id-@num variable variables\n const atPos = name.indexOf('@', 1);\n const dollarPos = name.indexOf('$', 1);\n\n if (atPos === -1 && dollarPos === -1) {\n if (name.startsWith('@') || name.startsWith('$')) {\n return name.slice(1);\n } else {\n return name;\n }\n }\n\n const nextPos = atPos !== -1 ? atPos : dollarPos;\n const start = name.slice(1, nextPos);\n const end = name.slice(nextPos);\n const type: 'variable' | 'property' = end.startsWith('@') ? 'variable' : 'property';\n // For @id-@num variable variables, we need to create an Interpolated node\n const endResult = getInterpolatedOrString(end, location, context);\n if (typeof endResult === 'string') {\n const endKey = type === 'property'\n ? new Quoted(endResult, { quote: '\\'' }, location, context)\n : endResult;\n return new Interpolated({\n source: start + INTERPOLATION_PLACEHOLDER,\n replacements: [\n new Reference(\n { key: endKey },\n { type, role: 'ident' },\n location,\n context\n )\n ]\n }, { role: 'ident' });\n } else {\n /**\n * endResult is already an Interpolated node, so we need to handle this\n * differently.\n *\n * @todo - test deep nesting\n */\n return new Interpolated({\n source: start + INTERPOLATION_PLACEHOLDER,\n replacements: [endResult]\n }, { role: 'ident' });\n }\n};\n","// Root production rules for LessRecursiveParser\n// Converted from lines 1-1145 of productions.ts (Chevrotain → hand-written recursive-descent)\nimport type { RuleContext } from '../lessRecursiveParser.js';\nimport type { IToken } from 'chevrotain';\nimport { type IOrAlt } from 'chevrotain';\nimport { productions as cssProductions } from '@jesscss/css-parser';\n\nimport {\n type TreeContext,\n Node,\n Ampersand,\n Block,\n Any,\n type LocationInfo,\n type Operator,\n type ConditionOperator,\n Ruleset,\n BasicSelector,\n Combinator,\n type Combinators,\n List,\n Sequence,\n QueryCondition,\n Call,\n Paren,\n Operation,\n Quoted,\n AtRule,\n Interpolated,\n InterpolatedSelector,\n Reference,\n Dimension,\n Num,\n Extend,\n type Extend as ExtendType,\n Negative,\n Mixin,\n Condition,\n VarDeclaration,\n Declaration,\n CustomDeclaration,\n DefaultGuard,\n Rest,\n StyleImport,\n Expression,\n Keyword,\n SelectorCapture,\n ComplexSelector,\n CompoundSelector,\n SelectorList,\n Rules,\n Url,\n Nil,\n Collection,\n type ComplexSelectorComponent,\n type Selector,\n INTERPOLATION_PLACEHOLDER,\n type SimpleSelector,\n isNode,\n N,\n shouldOperateWithMathFrames\n} from '@jesscss/core';\nimport { getInterpolatedOrString } from '../utils.js';\nimport type { ExtendTarget, TokenMap } from '../lessRecursiveParser.js';\nimport { all } from 'known-css-properties';\n\n/** Use `any` for `this` to avoid structural incompatibility between LessRecursiveParser and CssRecursiveParser */\ntype P = any;\ntype Alt = IOrAlt<any>[];\ntype AltContext = (ctx?: RuleContext) => Alt;\n\n// ── Save references to CSS production factories ────────────────────────\nconst cssMain = cssProductions.main;\nconst cssDeclaration = cssProductions.declaration;\nconst cssMediaTypeQuery = cssProductions.mediaTypeQuery;\n\n// ── Helper functions ──────────────────────────────────────────────────\n\nfunction getParenFrames(ctx: RuleContext | undefined): boolean[] {\n return (ctx?.parenFrames as boolean[] | undefined) ?? [];\n}\n\nfunction getCalcFrames(ctx: RuleContext | undefined): number {\n return (ctx?.calcFrames as number | undefined) ?? 0;\n}\n\nfunction withCalcFrame(ctx: RuleContext | undefined, delta: number): RuleContext {\n const calcFrames = getCalcFrames(ctx) + delta;\n return { ...(ctx ?? {}), calcFrames };\n}\n\nfunction guardContainsDefaultCall(node: Node | undefined): boolean {\n if (!node) {\n return false;\n }\n const isNodeLike = (value: unknown): value is Node => {\n return Boolean(\n value\n && typeof value === 'object'\n && 'type' in value && typeof value.type === 'string'\n && 'valueOf' in value && typeof value.valueOf === 'function'\n );\n };\n const queue: unknown[] = [node];\n const seen = new Set<unknown>();\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current || seen.has(current) || !isNodeLike(current)) {\n continue;\n }\n seen.add(current);\n if (current.type === 'DefaultGuard') {\n return true;\n }\n if (isNode(current, N.Call)) {\n const callName = current.name;\n const callNameStr = String(\n (typeof callName === 'object' && callName !== null && 'valueOf' in callName)\n ? callName.valueOf()\n : callName ?? ''\n );\n if (callNameStr === 'default' || callNameStr === '??') {\n return true;\n }\n if (callName instanceof Reference) {\n const key = callName.key;\n const keyStr = String(\n (typeof key === 'object' && key !== null && 'valueOf' in key)\n ? key.valueOf()\n : key ?? ''\n );\n if (keyStr === 'default' || keyStr === '??') {\n return true;\n }\n }\n }\n if ('data' in current) {\n const value = current.data;\n if (Array.isArray(value)) {\n queue.push(...value);\n } else if (value && typeof value === 'object') {\n queue.push(...Object.values(value));\n }\n }\n }\n return false;\n}\n\nfunction isDefaultGuardCall(node: Node | undefined): node is Call {\n if (!node || !isNode(node, N.Call)) {\n return false;\n }\n const callName = node.name;\n const callNameStr = String(\n (typeof callName === 'object' && callName !== null && 'valueOf' in callName)\n ? callName.valueOf()\n : callName ?? ''\n );\n if (callNameStr === 'default' || callNameStr === '??') {\n return true;\n }\n if (callName instanceof Reference) {\n const key = callName.key;\n const keyStr = String(\n (typeof key === 'object' && key !== null && 'valueOf' in key)\n ? key.valueOf()\n : key ?? ''\n );\n return keyStr === 'default' || keyStr === '??';\n }\n return false;\n}\n\nfunction loc(node: Node): LocationInfo | undefined {\n const location = node.location;\n return location.length === 6 ? (location as LocationInfo) : undefined;\n}\n\nexport function wrapOuterExpressionIfNeeded(this: P, node: Node, ctx: RuleContext | undefined): Node {\n if (!this.wrapOuterExpressions) {\n return node;\n }\n if (!ctx?.wrapInExpression) {\n return node;\n }\n // Expressions should never contain Expressions; avoid nesting.\n if (node instanceof Expression) {\n return node;\n }\n\n // Math expressions: only wrap if this operation would actually be performed.\n if (isNode(node, N.Operation)) {\n const left = node.left;\n const op = node.get('operator');\n const right = node.right;\n const mathMode = this.mathMode ?? 'parens-division';\n const shouldOperate = shouldOperateWithMathFrames(\n {\n mathMode,\n parenFrames: getParenFrames(ctx),\n calcFrames: getCalcFrames(ctx)\n },\n op,\n left,\n right\n );\n if (shouldOperate) {\n return new Expression(node, { parens: true }, loc(node), this.context);\n }\n }\n\n return node;\n}\n\nfunction isEscapedString($: P, T: TokenMap): boolean {\n const next = $.LA(1);\n return (\n next.image.startsWith('~')\n && (\n $.matchToken(next, T.QuoteStart)\n || $.matchToken(next, T.DoubleQuoteStart)\n || $.matchToken(next, T.SingleQuoteStart)\n )\n );\n}\n\nfunction startsLessMediaQueryReference($: P, T: TokenMap): boolean {\n if (\n $.isType(T.AtName)\n || $.isType(T.PropertyReference)\n || $.isType(T.NestedReference)\n || $.isType(T.DotName)\n || $.isType(T.HashName)\n || $.isType(T.InterpolatedIdent)\n || $.isType(T.InterpolatedSelector)\n ) {\n return true;\n }\n\n if (!$.isType(T.ColorIdentStart)) {\n return false;\n }\n\n const tt2 = $.LA(2).tokenType;\n return (\n tt2 === T.Gt\n || tt2 === T.DotName\n || tt2 === T.HashName\n || tt2 === T.InterpolatedSelector\n || (\n $.noSep(1) && (\n tt2 === T.LParen\n || tt2 === T.LSquare\n || tt2 === T.HashName\n || tt2 === T.DotName\n )\n )\n );\n}\n\nfunction startsCustomValue($: P, T: TokenMap): boolean {\n return $.isType(T.LParen)\n || $.isType(T.FunctionStart)\n || $.isType(T.FunctionalPseudoClass)\n || $.isType(T.LSquare)\n || $.isType(T.LCurly)\n || $.isType(T.SingleQuoteStart)\n || $.isType(T.DoubleQuoteStart)\n || $.isType(T.Value)\n || $.isType(T.PlainIdent)\n || $.isType(T.AtKeyword)\n || $.isType(T.PropertyReference)\n || $.isType(T.CustomProperty)\n || $.isType(T.Dimension)\n || $.isType(T.Number)\n || $.isType(T.Color)\n || $.isType(T.UnicodeRange)\n || $.isType(T.Colon)\n || $.isType(T.Comma)\n || $.isType(T.Important)\n || $.isType(T.Unknown);\n}\n\nfunction isVariableLike($: P, T: TokenMap): boolean {\n let token = $.LA(2);\n let isColon = token.tokenType === T.Colon;\n let isParen = token.tokenType === T.LParen;\n let postToken = $.LA(3);\n\n if (!$.preSkippedTokenMap) {\n return false;\n }\n\n if (!isColon && !isParen) {\n return false;\n }\n\n // Known at-rule tokens (@media, @supports, etc.) followed by ( without space:\n // Only treat as a variable call if the parens are empty — @media();\n // Otherwise it's an at-rule — @media(min-width: 0) { }\n if (isParen && $.matchToken($.LA(1), T.AtName) && $.LA(1).tokenType !== T.AtKeyword) {\n if (postToken.tokenType === T.RParen) {\n // @media() — empty parens, allow as deprecated variable call\n $.warnDeprecation(\n 'Using known at-rule names as variables is deprecated',\n $.LA(1),\n 'at-rule-variable'\n );\n return true;\n }\n // @media(min-width: ...) — at-rule, not a variable\n return false;\n }\n\n let isVariable = !$.preSkippedTokenMap.has(token.startOffset)\n || (isColon && $.preSkippedTokenMap.has(postToken.startOffset));\n return isVariable;\n}\n\nlet interpolatedRegex = /([$@]){([^}]+)}/g;\n\nconst createInterpolatedReference = (\n prefix: string,\n value: string,\n location: LocationInfo,\n context: TreeContext\n): Reference => {\n const isProperty = prefix === '$';\n const key = isProperty\n ? new Quoted(value, { quote: '\\'' }, location, context)\n : value;\n return new Reference(\n { key },\n { type: isProperty ? 'property' : 'variable', role: 'ident' },\n location,\n context\n );\n};\n\nconst getInterpolated = (name: string, location: LocationInfo, context: TreeContext): Interpolated => {\n const replacements: Node[] = [];\n let result: RegExpExecArray | null;\n let source = name;\n while (result = interpolatedRegex.exec(name)) {\n const [match, propOrVar, value] = result;\n source = source.replace(match, INTERPOLATION_PLACEHOLDER);\n const reference = createInterpolatedReference(propOrVar!, value!, location, context);\n replacements.push(reference);\n }\n return new Interpolated({ source, replacements }, { role: 'ident' }, location, context);\n};\n\nconst { isArray } = Array;\n\n/**\n * Groups extends by target (using valueOf()) and flag.\n * Returns an array of grouped Extend nodes where extends with the same target and flag\n * are combined into a single Extend node with a SelectorList of all matching selectors.\n *\n * @todo Group complex selectors into selector lists\n */\nfunction groupExtendsByTargetAndFlag(\n extendNodes: Extend[]\n): Array<Extend | Extend[]> {\n // Group extends by target and flag\n const groups = new Map<string, Extend | Extend[]>();\n\n for (const ext of extendNodes) {\n let target = ext.target;\n let flag = ext.get('flag') ?? 1; // ExtendFlag.Exact = 1\n // Create a key from target valueOf() and flag\n const key = `${target.valueOf()}|${flag}`;\n\n let group = groups.get(key);\n if (!group) {\n groups.set(key, ext);\n } else if (isArray(group)) {\n group.push(ext);\n } else {\n groups.set(key, [group, ext]);\n }\n }\n\n return Array.from(groups.values());\n}\n\n// ── Exported production rules ─────────────────────────────────────────\n\n/** Charset moved within `main` (explained in that rule) */\nexport function stylesheet(this: P, T: TokenMap) {\n const $ = this;\n return (options: Record<string, any> = {}) => {\n let context: TreeContext;\n if (options.context) {\n context = $.context = options.context;\n } else {\n context = $.context;\n }\n\n let charset: IToken | undefined;\n\n if (!$.looseMode) {\n $.OPTION(() => {\n charset = $.CONSUME(T.Charset);\n });\n }\n\n const ctx: RuleContext = { isRoot: true };\n\n let root: Node = $.SUBRULE($.main, { ARGS: [ctx] });\n\n if (charset && isNode(root, N.Rules)) {\n let charsetLoc = $.getLocationInfo(charset);\n let rootLoc = root.location;\n root.setData([new Any(charset.image, { role: 'charset' }, charsetLoc, context!), ...root.value]);\n rootLoc[0] = charsetLoc[0];\n rootLoc[1] = charsetLoc[1];\n rootLoc[2] = charsetLoc[2];\n }\n\n return root;\n };\n}\n\n/**\n * Starts with a colon, with these conditions\n * 1. It is not preceded by a space or\n * 2. If it is preceded by a space, then it is\n * followed by a space.\n */\n\nexport function main(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const shouldTryQualifiedRuleInDeclarationList = () => {\n const isSelectorLikeContinuation = (offset: number) => {\n const tok = $.LA(offset);\n return (\n $.matchToken(tok, T.LCurly)\n || $.matchToken(tok, T.Comma)\n || $.matchToken(tok, T.Combinator)\n || $.matchToken(tok, T.LSquare)\n || $.matchToken(tok, T.Colon)\n || $.matchToken(tok, T.NthPseudoClass)\n || $.matchToken(tok, T.SelectorPseudoClass)\n );\n };\n if (typeof $.shouldTryQualifiedRuleInDeclarationList === 'function') {\n return $.shouldTryQualifiedRuleInDeclarationList();\n }\n if (!$.isTypeAt(1, T.Ident)) {\n return true;\n }\n if (!$.isTypeAt(2, T.Assign)) {\n return true;\n }\n if ($.hasWS(2)) {\n return false;\n }\n const tt3 = $.LA(3).tokenType;\n if (\n tt3 === T.Colon\n || tt3 === T.NthPseudoClass\n || tt3 === T.SelectorPseudoClass\n || $.matchToken($.LA(3), T.FunctionStart)\n ) {\n return true;\n }\n if (!$.matchToken($.LA(3), T.Ident)) {\n return false;\n }\n return isSelectorLikeContinuation(4);\n };\n const isMixinOrQualifiedStart = () => {\n const next = $.LA(1).tokenType;\n return next === T.DotName || next === T.HashName || next === T.ColorIdentStart;\n };\n const isCustomPropertyStart = () =>\n $.isType(T.InterpolatedCustomProperty) || $.isType(T.CustomProperty);\n const isAtRuleStart = () => $.matchToken($.LA(1), T.AtName);\n const shouldTryQualifiedRule = () =>\n !isCustomPropertyStart()\n && !isMixinOrQualifiedStart()\n && !isAtRuleStart()\n && shouldTryQualifiedRuleInDeclarationList();\n\n const ruleAlt = (ctx: RuleContext = {}): Alt => {\n let isVariable = isVariableLike($, T);\n return [\n { ALT: () => $.SUBRULE($.functionCall, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE2($.ampersandExtend, { ARGS: [ctx] }) },\n {\n GATE: isMixinOrQualifiedStart,\n ALT: () => $.SUBRULE3($.mixinOrQualifiedRule, { ARGS: [ctx] })\n },\n {\n GATE: () => isVariable,\n ALT: () => $.SUBRULE4($.varDeclarationOrCall, { ARGS: [ctx] })\n },\n {\n GATE: () => !isVariable && isAtRuleStart(),\n ALT: () => $.SUBRULE5($.atRule, { ARGS: [ctx] })\n },\n {\n GATE: isCustomPropertyStart,\n ALT: () => $.SUBRULE7($.declaration, { ARGS: [ctx] })\n },\n {\n GATE: shouldTryQualifiedRule,\n ALT: () => $.SUBRULE6($.qualifiedRule, { ARGS: [ctx] })\n },\n\n /**\n * Historically, Less allows `@charset` anywhere,\n * to avoid outputting it in the wrong place.\n * Ideally, this would result in an error if, say,\n * the `@charset` was defined at the bottom of the file,\n * but that wasn't the solution made.\n * @see https://github.com/less/less.js/issues/2126\n */\n {\n GATE: () => $.looseMode,\n ALT: () => $.CONSUME(T.Charset)\n },\n { ALT: () => $.CONSUME(T.Semi) }\n ];\n };\n\n let RECORDING_PHASE = $.RECORDING_PHASE;\n let context: TreeContext;\n let rules: Node[];\n if (!RECORDING_PHASE) {\n context = $.context;\n rules = [];\n }\n\n let requiredSemi = false;\n\n let lastRule: Node | undefined;\n /**\n * In this production rule, semi-colons are not required\n * but this is repurposed by declarationList and by Less / Sass,\n * so that's why this gate is here.\n */\n $.MANY({\n GATE: () => {\n const next = $.LA(1);\n // Stop at RCurly (belongs to parent block) or end of input\n if ($.isType(T.RCurly) || next.tokenType.name === 'EOF') {\n return false;\n }\n return !requiredSemi || (requiredSemi && (\n $.isType(T.Semi)\n || $.isTypeAt(0, T.Semi)\n ));\n },\n DEF: () => {\n const localAlt = ruleAlt(ctx);\n let value: Node | IToken = $.OR(localAlt);\n if (!RECORDING_PHASE) {\n /** @todo - When do we not have a value? */\n if (value) {\n if (!(value instanceof Node)) {\n /** This is a semi-colon or charset token */\n let tok = value as IToken;\n if (tok.image.includes('@charset')) {\n rules!.push(new Any(tok.image, { role: 'charset' }, $.getLocationInfo(tok), context!));\n } else {\n if (lastRule) {\n lastRule.options.semi = true;\n } else {\n rules!.push(new Any(';', { role: 'semi' }, $.getLocationInfo($.LA(1)), context!));\n }\n }\n } else {\n requiredSemi = !!value.requiredSemi;\n rules!.push(value);\n lastRule = value;\n }\n }\n }\n }\n });\n\n if (RECORDING_PHASE) {\n return;\n }\n // Process any extendNodes that were set (e.g., by ampersandExtend at root level)\n if (ctx.extendNodes && ctx.extendNodes!.length > 0) {\n // Filter out Nil nodes (returned by ampersandExtend to avoid duplication)\n const filteredRules = rules!.filter(r => !(r instanceof Nil));\n rules = [...ctx.extendNodes!, ...filteredRules];\n ctx.extendNodes = undefined;\n }\n let returnNode = $.getRulesWithComments(rules!, $.getLocationInfo($.LA(1)));\n // Attaches remaining whitespace at the end of rules\n return $.wrap(returnNode!, true);\n };\n}\n\nexport function declarationList(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const shouldTryQualifiedRuleInDeclarationList = () => {\n const isSelectorLikeContinuation = (offset: number) => {\n const tok = $.LA(offset);\n return (\n $.matchToken(tok, T.LCurly)\n || $.matchToken(tok, T.Comma)\n || $.matchToken(tok, T.Combinator)\n || $.matchToken(tok, T.LSquare)\n || $.matchToken(tok, T.Colon)\n || $.matchToken(tok, T.NthPseudoClass)\n || $.matchToken(tok, T.SelectorPseudoClass)\n );\n };\n if (typeof $.shouldTryQualifiedRuleInDeclarationList === 'function') {\n return $.shouldTryQualifiedRuleInDeclarationList();\n }\n if (!$.isTypeAt(1, T.Ident)) {\n return true;\n }\n if (!$.isTypeAt(2, T.Assign)) {\n return true;\n }\n if ($.hasWS(2)) {\n return false;\n }\n const tt3 = $.LA(3).tokenType;\n if (\n tt3 === T.Colon\n || tt3 === T.NthPseudoClass\n || tt3 === T.SelectorPseudoClass\n || $.matchToken($.LA(3), T.FunctionStart)\n ) {\n return true;\n }\n if (!$.matchToken($.LA(3), T.Ident)) {\n return false;\n }\n return isSelectorLikeContinuation(4);\n };\n const isMixinOrQualifiedStart = () => {\n const next = $.LA(1).tokenType;\n return next === T.DotName || next === T.HashName || next === T.ColorIdentStart;\n };\n const isCustomPropertyStart = () =>\n $.isType(T.InterpolatedCustomProperty) || $.isType(T.CustomProperty);\n const isAtRuleStart = () => $.matchToken($.LA(1), T.AtName);\n const shouldTryQualifiedRule = () =>\n !isCustomPropertyStart()\n && !isMixinOrQualifiedStart()\n && !isAtRuleStart()\n && shouldTryQualifiedRuleInDeclarationList();\n\n const ruleAlt = (ctx: RuleContext = {}): Alt => {\n const isVariable = isVariableLike($, T);\n return [\n {\n GATE: isMixinOrQualifiedStart,\n ALT: () => {\n return $.SUBRULE($.mixinOrQualifiedRule, { ARGS: [{ ...ctx, inner: true }] });\n }\n },\n {\n GATE: () => isVariable,\n ALT: () => $.SUBRULE2($.varDeclarationOrCall, { ARGS: [ctx] })\n },\n {\n GATE: () => !isVariable && isAtRuleStart(),\n ALT: () => $.SUBRULE3($.innerAtRule, { ARGS: [ctx] })\n },\n { ALT: () => $.SUBRULE4($.ampersandExtend, { ARGS: [ctx] }) },\n {\n GATE: () => $.check(T.FunctionStart),\n ALT: () => {\n const fnCall = $.SUBRULE5($.functionCall, { ARGS: [ctx] });\n if (fnCall instanceof Call) {\n fnCall.requiredSemi = false;\n }\n return fnCall;\n }\n },\n {\n GATE: isCustomPropertyStart,\n ALT: () => $.SUBRULE8($.declaration, { ARGS: [ctx] })\n },\n {\n GATE: shouldTryQualifiedRule,\n ALT: () => {\n return $.SUBRULE6($.qualifiedRule, { ARGS: [{ ...ctx, inner: true }] });\n }\n },\n {\n ALT: () => {\n return $.SUBRULE7($.declaration, { ARGS: [ctx] });\n }\n },\n { ALT: () => $.CONSUME(T.Semi) }\n ];\n };\n\n return cssMain.call($, T, ruleAlt)(ctx);\n };\n}\n\nexport function declaration(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const customPropertyAlt = (consumeName: () => IToken, occurrence: 2 | 3) => ({\n ALT: () => {\n let nodes: Node[] | undefined;\n if (!$.RECORDING_PHASE) {\n nodes = [];\n }\n const name = consumeName();\n const assign = occurrence === 2\n ? $.CONSUME2(T.Assign)\n : $.CONSUME3(T.Assign);\n $.startRule();\n while (startsCustomValue($, T)) {\n const val = occurrence === 2\n ? $.SUBRULE2($.customValue, { ARGS: [{ ...ctx, inCustomPropertyValue: true }] })\n : $.SUBRULE3($.customValue, { ARGS: [{ ...ctx, inCustomPropertyValue: true }] });\n if (!$.RECORDING_PHASE) {\n nodes!.push(val);\n }\n }\n if (!$.RECORDING_PHASE) {\n const location = $.endRule();\n let nameNode: Node;\n const nameValue = name.image;\n if (nameValue.includes('@') || nameValue.includes('$')) {\n nameNode = getInterpolated(nameValue, $.getLocationInfo(name), $.context);\n } else {\n nameNode = $.wrap(new Any(name.image, { role: 'property' }, $.getLocationInfo(name), $.context), true);\n }\n const value = new Sequence(nodes!, undefined, location, $.context);\n return [nameNode, assign, value];\n }\n }\n });\n\n const ruleAlt = (ctx: RuleContext = {}): Alt => [\n {\n ALT: () => {\n let name: IToken;\n $.OR2([\n {\n ALT: () => {\n name = $.CONSUME(T.Ident);\n }\n },\n {\n GATE: () => $.legacyMode,\n ALT: () => name = $.CONSUME(T.LegacyPropIdent)\n }\n ]);\n const assign = $.CONSUME(T.Assign);\n let value: Node | undefined;\n if ($.looseMode) {\n $.OPTION2({\n GATE: () => !($.isType(T.Semi) || $.isType(T.RCurly)),\n DEF: () => {\n value = $.SUBRULE($.valueList, { ARGS: [ctx] });\n }\n });\n if (!$.RECORDING_PHASE && !value) {\n value = new Sequence([], undefined, undefined, $.context);\n }\n } else {\n value = $.SUBRULE($.valueList, { ARGS: [ctx] });\n }\n let important: IToken | undefined;\n\n $.OPTION(() => {\n important = $.CONSUME(T.Important);\n });\n if (!$.RECORDING_PHASE) {\n let nameNode: Node;\n const nameValue = name!.image;\n if (nameValue.includes('@') || nameValue.includes('$')) {\n nameNode = getInterpolated(nameValue, $.getLocationInfo(name!), $.context);\n } else {\n nameNode = $.wrap(new Any(name!.image, { role: 'property' }, $.getLocationInfo(name!), $.context), true);\n }\n return [nameNode, assign, value, important];\n }\n }\n },\n customPropertyAlt(() => $.CONSUME(T.InterpolatedCustomProperty), 2),\n customPropertyAlt(() => $.CONSUME(T.CustomProperty), 3)\n ];\n\n return cssDeclaration.call($, T, ruleAlt)(ctx);\n };\n}\n\nexport function mediaInParens(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n $.CONSUME(T.LParen);\n\n const node = $.OR([\n {\n GATE: () => $.startsMediaCondition(T),\n ALT: () => $.SUBRULE($.mediaCondition, { ARGS: [ctx] })\n },\n {\n GATE: () => isEscapedString($, T),\n ALT: () => $.SUBRULE($.string, { ARGS: [ctx] })\n },\n {\n /**\n * Less allows media/container conditions to be supplied by variables or\n * namespaced references, but only when the inner token stream actually\n * starts like a Less reference, not a plain CSS media feature.\n */\n GATE: () => (\n $.isType(T.PropertyReference)\n || $.isType(T.NestedReference)\n || $.isType(T.AtName)\n || $.isType(T.HashName)\n || $.isType(T.DotName)\n || $.isType(T.ColorIdentStart)\n || $.isType(T.InterpolatedSelector)\n ),\n ALT: () => $.SUBRULE2($.valueReference, { ARGS: [{ ...ctx, requireAccessorsAfterMixinCall: true }] })\n },\n {\n ALT: () => $.SUBRULE($.mediaFeature, { ARGS: [ctx] })\n }\n ]);\n\n $.CONSUME(T.RParen);\n\n if (RECORDING_PHASE) {\n return;\n }\n const location = $.endRule();\n return $.wrap(new Paren($.wrap(node, 'both'), undefined, location, $.context));\n };\n}\n\nexport function mediaQuery(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n return $.OR2([\n {\n GATE: () => $.startsMediaCondition(T),\n ALT: () => $.SUBRULE($.mediaConditionWithoutOr, { ARGS: [ctx] })\n },\n {\n GATE: () => isEscapedString($, T),\n ALT: () => $.SUBRULE($.lessMediaQueryFromString, { ARGS: [ctx] })\n },\n {\n GATE: () => startsLessMediaQueryReference($, T),\n ALT: () => $.SUBRULE2($.lessMediaQueryFromReference, { ARGS: [ctx] })\n },\n {\n ALT: () => $.SUBRULE7($.mediaTypeQuery, { ARGS: [ctx] })\n }\n ]);\n };\n}\n\nexport function mediaCondition(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => $.SUBRULE($.mediaConditionWithoutOr, { ARGS: [ctx] });\n}\n\nexport function lessMediaQueryFromString(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const first = $.SUBRULE($.string, { ARGS: [ctx] });\n return $.SUBRULE($.lessMediaQueryTail, { ARGS: [{ ...ctx, startValue: first }] });\n };\n}\n\nexport function lessMediaQueryFromReference(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const first = $.SUBRULE($.valueReference, { ARGS: [{ ...ctx, requireAccessorsAfterMixinCall: true }] });\n return $.SUBRULE2($.lessMediaQueryTail, { ARGS: [{ ...ctx, startValue: first }] });\n };\n}\n\nexport function lessMediaQueryTail(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n let nodes: Node[] | undefined;\n if (!RECORDING_PHASE) {\n nodes = [ctx.startValue!];\n }\n\n $.MANY({\n GATE: () => $.isType(T.And),\n DEF: () => {\n const andToken = $.CONSUME(T.And);\n const next = $.OR([\n {\n GATE: () => isEscapedString($, T),\n ALT: () => $.SUBRULE2($.string, { ARGS: [ctx] })\n },\n {\n GATE: () => startsLessMediaQueryReference($, T),\n ALT: () => $.SUBRULE2($.valueReference, { ARGS: [{ ...ctx, requireAccessorsAfterMixinCall: true }] })\n },\n {\n GATE: () => $.startsMediaCondition(T),\n ALT: () => $.SUBRULE2($.mediaConditionWithoutOr, { ARGS: [ctx] })\n },\n {\n ALT: () => $.SUBRULE2($.mediaType, { ARGS: [ctx] })\n }\n ]);\n\n if (!RECORDING_PHASE) {\n nodes!.push($.wrap(new Keyword(andToken.image, undefined, $.getLocationInfo(andToken), $.context), 'both'));\n nodes!.push(next);\n }\n }\n });\n\n if (RECORDING_PHASE) {\n return;\n }\n const location = $.endRule();\n if (nodes!.length === 1) {\n return nodes![0]!;\n }\n return new QueryCondition(nodes!, undefined, location, $.context);\n };\n}\n\nexport function mediaConditionWithoutOr(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => $.OR([\n { ALT: () => $.SUBRULE($.mediaNot, { ARGS: [ctx] }) },\n {\n ALT: () => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n let nodes: Node[] | undefined;\n if (!RECORDING_PHASE) {\n nodes = [];\n }\n const node = $.SUBRULE($.mediaInParens, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n nodes!.push(node);\n }\n $.MANY({\n GATE: () => $.isType(T.And),\n DEF: () => {\n const rule = $.SUBRULE($.mediaAnd, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n nodes!.push(...rule);\n }\n }\n });\n if (RECORDING_PHASE) {\n return;\n }\n if (nodes!.length === 1) {\n $.endRule();\n return nodes![0]!;\n }\n return new QueryCondition(nodes!, undefined, $.endRule(), $.context);\n }\n }\n ]);\n}\n\nexport function mediaFeature(this: P, T: TokenMap) {\n const $ = this;\n\n const createFeatureIdentNode = (token: IToken, role: 'ident' | 'property') => {\n const location = $.getLocationInfo(token);\n const resolved = getInterpolatedOrString(token.image, location, $.context);\n if (typeof resolved === 'string') {\n return new Any(resolved, { role }, location, $.context);\n }\n return resolved;\n };\n\n return (ctx: RuleContext = {}) => $.OR([\n {\n GATE: () => {\n return $.isType(T.InterpolatedIdent) || $.isType(T.Ident);\n },\n ALT: () => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n let rule: Node | undefined;\n const ident = $.LA(1).tokenType === T.InterpolatedIdent\n ? $.CONSUME(T.InterpolatedIdent)\n : $.CONSUME(T.Ident);\n $.OPTION(() => {\n rule = $.OR2([\n {\n ALT: () => {\n $.CONSUME(T.Colon);\n const value = $.SUBRULE($.mfValue, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n const location = $.endRule();\n return $.wrap(\n new Declaration({\n name: $.wrap(createFeatureIdentNode(ident, 'property'), true),\n value: $.wrap(value)\n }, undefined, location, $.context),\n 'both'\n );\n }\n }\n },\n {\n GATE: () => ($.isTypeAt(1, T.MfLt) || $.isTypeAt(1, T.MfGt))\n && ($.isTypeAt(2, T.Ident) || $.isTypeAt(2, T.InterpolatedIdent)),\n ALT: () => {\n const seq = $.SUBRULE($.mediaRange, { ARGS: [ctx] });\n\n if (!RECORDING_PHASE) {\n const [startOffset, startLine, startColumn] = $.endRule();\n seq.value.unshift($.wrap(createFeatureIdentNode(ident, 'ident'), true));\n seq.location[0] = startOffset;\n seq.location[1] = startLine;\n seq.location[2] = startColumn;\n return new QueryCondition(seq.value, undefined, seq.location, $.context);\n }\n return seq;\n }\n },\n {\n GATE: () => $.isTypeAt(1, T.MfLt) || $.isTypeAt(1, T.MfGt) || $.LA(1).tokenType === T.Eq,\n ALT: () => {\n const op = $.SUBRULE($.mfComparison, { ARGS: [ctx] });\n const value = $.SUBRULE($.mfNonIdentifierValue, { ARGS: [ctx] });\n\n if (!RECORDING_PHASE) {\n const location = $.endRule();\n return new QueryCondition([\n $.wrap(createFeatureIdentNode(ident, 'ident'), true),\n $.wrap(new Any(op.image, { role: 'operator' }, $.getLocationInfo(op), $.context), 'both'),\n value\n ], undefined, location, $.context);\n }\n }\n }\n ]);\n });\n if (!RECORDING_PHASE && !rule) {\n const location = $.endRule();\n const identNode = createFeatureIdentNode(ident, 'ident');\n return $.wrap(new QueryCondition([identNode], undefined, location, $.context), 'both');\n }\n return rule;\n }\n },\n {\n ALT: () => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n const left = $.SUBRULE2($.mfNonIdentifierValue, { ARGS: [{ ...ctx }] });\n return $.OR3([\n {\n GATE: () => {\n const tt2 = $.LA(2).tokenType;\n if (!(($.isTypeAt(1, T.MfLt) || $.isTypeAt(1, T.MfGt) || $.LA(1).tokenType === T.Eq)\n && (tt2 === T.Ident || tt2 === T.InterpolatedIdent))) {\n return false;\n }\n if ($.isTypeAt(3, T.MfLt) || $.isTypeAt(3, T.MfGt)) {\n return false;\n }\n return true;\n },\n ALT: () => {\n const op = $.SUBRULE2($.mfComparison, { ARGS: [{ ...ctx }] });\n const value = $.LA(1).tokenType === T.Ident\n ? $.CONSUME2(T.Ident)\n : $.CONSUME2(T.InterpolatedIdent);\n if (!RECORDING_PHASE) {\n const location = $.endRule();\n return new QueryCondition([\n left,\n $.wrap(new Any(op.image, { role: 'operator' }, $.getLocationInfo(op), $.context)),\n $.wrap(createFeatureIdentNode(value, 'ident'), 'both')\n ], undefined, location, $.context);\n }\n }\n },\n {\n ALT: () => {\n const seq = $.SUBRULE2($.mediaRange, { ARGS: [{ ...ctx }] });\n if (!RECORDING_PHASE) {\n const [startOffset, startLine, startColumn] = $.endRule();\n seq.value.unshift(left);\n seq.location[0] = startOffset;\n seq.location[1] = startLine;\n seq.location[2] = startColumn;\n return new QueryCondition(seq.value, undefined, seq.location, $.context);\n }\n return seq;\n }\n }\n ]);\n }\n }\n ]);\n}\n\nexport function mfValue(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n /**\n * Like the original Less Parser, we're\n * going to allow any value expression,\n * and it's up to the Less author to know\n * if it's valid.\n */\n const exprCtx: RuleContext = { ...ctx, wrapInExpression: true };\n const node = $.SUBRULE($.expressionSum, { ARGS: [exprCtx] });\n return wrapOuterExpressionIfNeeded.call($, node, exprCtx);\n };\n}\n\nexport function mfNonIdentifierValue(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n return $.OR2([\n {\n GATE: () => {\n const next = $.LA(1);\n return next.tokenType === T.AtKeyword || next.tokenType === T.PropertyReference || next.tokenType === T.NestedReference;\n },\n ALT: () => $.SUBRULE($.valueReference, { ARGS: [{ ...ctx, requireAccessorsAfterMixinCall: true }] })\n },\n {\n ALT: () => {\n $.startRule();\n let num1 = $.CONSUME(T.Number);\n let num2: IToken | undefined;\n $.OPTION(() => {\n $.CONSUME(T.Slash);\n num2 = $.CONSUME2(T.Number);\n });\n let location = $.endRule();\n let num1Node = $.wrap($.processValueToken(num1), 'both');\n if (!num2) {\n return num1Node;\n }\n let num2Node = $.wrap($.processValueToken(num2), 'both');\n return new List([num1Node, num2Node], { sep: '/' }, location, $.context);\n }\n },\n {\n ALT: () => {\n let dim = $.CONSUME(T.Dimension);\n return $.wrap($.processValueToken(dim), 'both');\n }\n }\n ]);\n };\n}\n\nexport function wrappedDeclarationList(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.CONSUME(T.LCurly);\n let rules = $.SUBRULE($.declarationList, { ARGS: [ctx] });\n $.CONSUME(T.RCurly);\n return rules;\n };\n}\n\nexport function qualifiedRuleBody(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let selector!: Selector;\n let isSelectorList: boolean | undefined;\n selector = ctx.selector!;\n isSelectorList = typeof ctx.isSelectorList === 'boolean' ? ctx.isSelectorList : selector instanceof SelectorList;\n\n let guard: Condition | undefined;\n if (!isSelectorList) {\n $.OPTION(() => {\n guard = $.SUBRULE($.guard, { ARGS: [ctx] });\n });\n }\n $.CONSUME(T.LCurly);\n let savedExtendNodes: Extend[] | undefined;\n if (!$.RECORDING_PHASE) {\n // Save extendNodes before parsing declarationList, so nested rulesets don't inherit them\n // Make a copy of the array (not just a reference) so mutations during nested parsing don't affect it\n savedExtendNodes = ctx.extendNodes ? [...ctx.extendNodes] : undefined;\n ctx.extendNodes = undefined;\n }\n let rules = $.SUBRULE2($.declarationList, { ARGS: [ctx] });\n let end = $.CONSUME(T.RCurly);\n if (!$.RECORDING_PHASE) {\n // After declarationList, check if new extends were added (e.g., by ampersandExtend)\n // If so, merge them with the saved extends; otherwise restore the saved extends\n const newExtends = ctx.extendNodes as Extend[] | undefined;\n if (newExtends && newExtends.length) {\n // New extends were added during declarationList (e.g., &:extend())\n if (savedExtendNodes && savedExtendNodes.length > 0) {\n // Merge with saved extends\n ctx.extendNodes = [...savedExtendNodes, ...newExtends];\n } else {\n // Keep the new extends\n ctx.extendNodes = newExtends;\n }\n } else {\n // No new extends, restore saved extends\n ctx.extendNodes = savedExtendNodes;\n }\n let extend = ctx.extendNodes;\n if (extend?.length) {\n /** If it's not a selector list, then our only extend does not need to be grouped */\n if (!isSelectorList) {\n /** For extends inside rulesets (not bubbled), selector should be undefined\n * so it defaults to ampersand and resolves to the ruleset's selector */\n for (let e of extend) {\n e.setData('selector', undefined);\n }\n rules.setData([...extend, ...rules.value]);\n ctx.extendNodes = undefined;\n } else {\n const selectorList = selector instanceof SelectorList ? selector : undefined;\n if (!selectorList) {\n return;\n }\n const selectorCount = selectorList.value.length;\n const extendCount = extend.length;\n\n // Determine if extends should bubble up:\n // 1. If any selectors in the list have extends (extendCount < selectorCount)\n // 2. If all selectors have extends but their \"all\" flags don't match\n let shouldBubble = false;\n\n if (extendCount < selectorCount) {\n // Some selectors have extends, some don't - bubble up\n shouldBubble = true;\n } else if (extendCount === selectorCount) {\n // All selectors have extends - check if flags match\n let finalExtends = groupExtendsByTargetAndFlag(extend);\n if (finalExtends.length === 1) {\n // All extends have same target and flag - can be inside ruleset\n let extendNodes = finalExtends[0]!;\n let finalExtend = isArray(extendNodes) ? extendNodes[0]! : extendNodes;\n finalExtend.setData('selector', undefined);\n rules.setData([finalExtend, ...rules.value]);\n ctx.extendNodes = undefined;\n } else {\n // Multiple extend groups (different targets/flags) - bubble up\n shouldBubble = true;\n }\n } else {\n // extendCount > selectorCount - shouldn't happen, but bubble to be safe\n shouldBubble = true;\n }\n\n if (shouldBubble) {\n // Keep extends in ctx.extendNodes so they bubble up to qualifiedRule\n // Don't clear ctx.extendNodes - let them bubble\n // The extends will be prepended above the ruleset in qualifiedRule\n }\n }\n }\n let node = new Ruleset({ selector, rules, guard }, undefined, undefined, $.context);\n let [startOffset, startLine, startColumn] = selector.location!;\n let { endOffset, endLine, endColumn } = end;\n node._location = [startOffset!, startLine!, startColumn!, endOffset!, endLine!, endColumn!];\n\n return node;\n }\n };\n}\n\nexport function qualifiedRule(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}, altContext?: AltContext) => {\n let selectorAlt = altContext ?? ((ctx: RuleContext) => [\n {\n GATE: () => !ctx.inner,\n ALT: () => {\n let initialQualifiedRule = ctx.qualifiedRule;\n ctx.qualifiedRule = true;\n try {\n return $.SUBRULE($.selectorList, { ARGS: [ctx] });\n } finally {\n ctx.qualifiedRule = initialQualifiedRule;\n }\n }\n },\n {\n GATE: () => !!ctx.inner,\n ALT: () => {\n let initialQualifiedRule = ctx.qualifiedRule;\n let initialFirstSelector = ctx.firstSelector;\n ctx.firstSelector = true;\n ctx.qualifiedRule = true;\n try {\n return $.SUBRULE2($.forgivingSelectorList, { ARGS: [ctx] });\n } finally {\n ctx.qualifiedRule = initialQualifiedRule;\n ctx.firstSelector = initialFirstSelector;\n }\n }\n }\n ]);\n // qualifiedRule\n // : selectorList WS* LCURLY declarationList RCURLY\n // ;\n // Save parent's extendNodes before parsing selector (which may set extendNodes)\n let savedExtendNodes = ctx.extendNodes ? [...ctx.extendNodes] : undefined;\n // Set extendNodes to a fresh empty array upon entry to this qualifiedRule\n // so nested rulesets don't inherit extends from parent rulesets\n ctx.extendNodes = undefined;\n let selector: Selector = $.OR(selectorAlt(ctx));\n // Use the same context object so modifications propagate back\n ctx.selector = selector;\n // Now extendNodes may have been set by extend() during selector parsing\n // Save it for this ruleset, then clear it so nested rulesets don't see it\n let thisExtendNodes = ctx.extendNodes ? [...ctx.extendNodes] : undefined;\n ctx.extendNodes = undefined;\n let rule: Node = $.SUBRULE3($.qualifiedRuleBody, { ARGS: [ctx] });\n // After qualifiedRuleBody returns, ctx.extendNodes may contain:\n // 1. Extends that should bubble up (from nested rulesets or this ruleset that didn't match)\n // 2. Nothing (if all extends were processed)\n // Restore this ruleset's extendNodes (from selector parsing) to process them\n const bubblingExtends = ctx.extendNodes; // Extends that should bubble up\n ctx.extendNodes = thisExtendNodes;\n // Restore parent's extendNodes after processing this ruleset's extends\n let parentExtendNodes = savedExtendNodes;\n if (ctx.extendNodes) {\n let qRuleset = rule;\n // Set the Extend nodes' selector to the ruleset's selector (not &)\n // This allows the extends to work correctly when evaluated in the wrapper Rules context\n for (const extendNode of ctx.extendNodes) {\n if (extendNode.selector === undefined || extendNode.selector instanceof Ampersand) {\n extendNode.setData('selector', selector);\n }\n }\n /** Prepend a rules block */\n rule = new Rules([\n ...ctx.extendNodes,\n qRuleset\n ]);\n // Set location from the ruleset (which has proper location info)\n if (qRuleset._location) {\n rule._location = qRuleset._location;\n }\n ctx.extendNodes = undefined;\n }\n // Restore parent's extendNodes and merge with any bubbling extends\n const hasBubblingExtends = bubblingExtends && (bubblingExtends as ExtendType[]).length > 0;\n if (hasBubblingExtends) {\n // Bubble them up to parent\n if (parentExtendNodes && parentExtendNodes.length > 0) {\n ctx.extendNodes = [...parentExtendNodes, ...(bubblingExtends as ExtendType[])];\n } else {\n ctx.extendNodes = bubblingExtends as ExtendType[];\n }\n } else {\n ctx.extendNodes = parentExtendNodes;\n }\n return rule;\n };\n}\n\n/**\n * In order to not do any backtracking, anything with a class or id selector start\n * will end up here, and everything else will be shunted to the qualified rule.\n */\nexport function mixinOrQualifiedRule(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n // Helper function to convert Any nodes to VarDeclaration nodes for mixin definition parameters\n const convertArgsForDefinition = (args: List<Node> | undefined) => {\n if (!args || !args.value.length) {\n return;\n }\n\n for (let i = 0; i < args.value.length; i++) {\n const node = args.value[i]!;\n const location = node.location && node.location.length > 0 ? node.location as LocationInfo : undefined;\n\n // If it's an Any node with role: 'name', convert it to VarDeclaration for mixin definition parameters\n if (node instanceof Any && node.role === 'name') {\n // Create a new Any node with role 'property' for the name\n const nameNode = new Any(node.valueOf(), { ...node.options, role: 'property' }, node.location, $.context);\n args.setData(i, new VarDeclaration({\n name: nameNode,\n value: new Nil(undefined, undefined, location, $.context)\n }, { paramVar: true }, location, $.context));\n }\n // Rest nodes with string values can stay as-is for mixin definitions\n }\n };\n\n // Helper function to convert Any nodes to Reference nodes for mixin call arguments\n const convertArgsForCall = (args: List<Node> | undefined) => {\n if (!args || !args.value.length) {\n return;\n }\n\n for (let i = 0; i < args.value.length; i++) {\n const node = args.value[i]!;\n const location = node.location && node.location.length > 0 ? node.location as LocationInfo : undefined;\n\n // If it's an Any node with role: 'name', convert it to Reference for mixin call arguments\n if (node instanceof Any && node.role === 'name') {\n args.setData(i, new Reference({ key: node.valueOf() }, { type: 'variable' }, location, $.context));\n } else if (node instanceof Rest) {\n const restValue = node.get('value');\n if (typeof restValue === 'string') {\n args.setData(i, new Rest(new Reference({ key: restValue }, { type: 'variable' }, location, $.context), undefined, location, $.context));\n }\n }\n }\n };\n\n // qualifiedRule\n // : selectorList WS* LCURLY declarationList RCURLY\n // ;\n $.startRule();\n\n let selector: Selector = $.OR([\n {\n GATE: () => !ctx.inner,\n ALT: () => {\n let initialQualifiedRule = ctx.qualifiedRule;\n ctx.qualifiedRule = true;\n try {\n return $.SUBRULE($.selectorList, { ARGS: [ctx] });\n } finally {\n ctx.qualifiedRule = initialQualifiedRule;\n }\n }\n },\n {\n GATE: () => !!ctx.inner,\n ALT: () => {\n let initialQualifiedRule = ctx.qualifiedRule;\n let initialFirstSelector = ctx.firstSelector;\n ctx.firstSelector = true;\n ctx.qualifiedRule = true;\n try {\n return $.SUBRULE2($.forgivingSelectorList, { ARGS: [ctx] });\n } finally {\n ctx.qualifiedRule = initialQualifiedRule;\n ctx.firstSelector = initialFirstSelector;\n }\n }\n }\n ]);\n\n let isSelectorList = selector instanceof SelectorList;\n let guard: Condition | undefined;\n let args: List<Node> | undefined;\n let important: IToken | undefined;\n\n const createMixinCall = (location: LocationInfo) => {\n let leftNode!: Node;\n\n // If selector is a CompoundSelector, ComplexSelector, or single BasicSelector (but not SelectorList),\n // create a single Reference with the selector instance as the key instead of nested references.\n // This handles cases like .foo.bar() or .foo > .bar() as a single call.\n // Note: .foo().bar() still creates nested calls because .foo() is parsed separately.\n if (!isSelectorList && (\n selector instanceof CompoundSelector\n || selector instanceof ComplexSelector\n || selector instanceof BasicSelector\n )) {\n // Create a single Reference with the selector instance as the key\n leftNode = new Reference({ key: selector }, { type: 'mixin-ruleset', role: 'name' }, undefined, $.context);\n } else {\n // For other cases (like SelectorList or when we need nested references),\n // iterate through selector nodes and create nested references\n for (let s of selector.nodes()) {\n if (s instanceof BasicSelector) {\n const target = leftNode instanceof Reference ? leftNode : leftNode instanceof Call ? leftNode : undefined;\n leftNode = new Reference({ target, key: s.valueOf() }, { type: 'mixin-ruleset', role: 'name' }, undefined, $.context);\n }\n }\n }\n\n /** Finally, pass this reference into a call */\n leftNode = new Call({ name: leftNode, args }, { markImportant: !!important }, location, $.context);\n return leftNode;\n };\n\n let isPossibleMixinDefinition = (selector instanceof BasicSelector && (selector.isClass || selector.isId))\n || (selector instanceof InterpolatedSelector && (selector.isClass || selector.isId));\n let isPossibleMixinCall = true;\n if (!$.RECORDING_PHASE && !isSelectorList && !isPossibleMixinDefinition) {\n for (let s of selector.nodes()) {\n /** Keep going until we get to basic selectors. */\n if (s instanceof ComplexSelector || s instanceof CompoundSelector) {\n continue;\n }\n if (\n (s instanceof BasicSelector && (s.isClass || s.isId))\n || (s instanceof InterpolatedSelector && (s.isClass || s.isId))\n || (s instanceof Combinator && (s.value === '>' || s.value === ' '))\n ) {\n continue;\n }\n isPossibleMixinCall = false;\n break;\n }\n }\n return $.OR2([\n {\n GATE: () => (isPossibleMixinDefinition || isPossibleMixinCall) && $.isType(T.LParen),\n ALT: () => {\n args = $.SUBRULE3($.mixinArgs, { ARGS: [ctx] });\n let next = $.LA(1).tokenType;\n if (next === T.LCurly || next === T.When) {\n isPossibleMixinCall = false;\n }\n return $.OR3([\n {\n GATE: () => isPossibleMixinDefinition,\n /** Mixin definition */\n ALT: () => {\n $.OPTION(() => {\n guard = $.SUBRULE4($.guard, { ARGS: [ctx] });\n });\n $.CONSUME(T.LCurly);\n\n let rules = $.SUBRULE5($.declarationList, { ARGS: [ctx] });\n $.CONSUME(T.RCurly);\n if (!$.RECORDING_PHASE) {\n // Convert Any nodes to VarDeclaration nodes for mixin definition parameters\n convertArgsForDefinition(args);\n const guardText = String(guard?.toString?.() ?? '');\n const hasDefault = Boolean(ctx.hasDefault) || guardContainsDefaultCall(guard) || guardText.includes('??()');\n const node = new Mixin(\n { name: selector.valueOf() as unknown as Any<'name'>, params: args, rules, guard },\n hasDefault ? { hasDefault: true } : undefined,\n $.endRule(),\n $.context\n );\n ctx.hasDefault = false;\n return node;\n }\n $.endRule();\n }\n },\n {\n GATE: () => isPossibleMixinCall,\n /** Mixin call */\n ALT: () => {\n $.OPTION2(() => {\n important = $.CONSUME(T.Important);\n });\n let location: LocationInfo = $.endRule();\n if (!$.RECORDING_PHASE) {\n // Convert Any nodes to Reference nodes for mixin call arguments\n convertArgsForCall(args);\n }\n let result: Node | undefined;\n {\n /** in Less legacy mode, mixin calls can happen without a space. */\n let noSpace = $.noSep();\n let next = $.LA(1).tokenType;\n if ((noSpace && next === T.LSquare) || ((noSpace || $.looseMode) && next === T.LParen)) {\n result = $.OPTION3(() => $.SUBRULE6($.lookupOrCall, { ARGS: [{ ...ctx, node: $.RECORDING_PHASE ? undefined! : createMixinCall(location) }] }));\n }\n }\n // Note: Mixin calls without parentheses are handled in the semicolon-terminated ALT below\n return $.RECORDING_PHASE ? undefined : (result ?? createMixinCall(location!));\n }\n }\n ]);\n }\n },\n {\n GATE: () => isPossibleMixinCall && $.isType(T.Semi),\n ALT: () => {\n // Call terminated by a semi-colon and not parens, deprecated\n const semi = $.CONSUME(T.Semi);\n const location = $.endRule();\n if (!$.RECORDING_PHASE) {\n // Mixin call without parentheses - deprecated\n $.warnDeprecation(\n 'Calling a mixin without parentheses is deprecated',\n semi,\n 'mixin-call-no-parens'\n );\n return createMixinCall(location);\n }\n }\n },\n {\n /** Parse as qualified rule */\n ALT: () => {\n $.endRule();\n let initialSelector = ctx.selector;\n let initialIsSelectorList = ctx.isSelectorList;\n ctx.selector = selector;\n ctx.isSelectorList = isSelectorList;\n let rule: Node;\n try {\n rule = $.SUBRULE7($.qualifiedRuleBody, { ARGS: [ctx] });\n } finally {\n ctx.selector = initialSelector;\n ctx.isSelectorList = initialIsSelectorList;\n }\n if (ctx.extendNodes) {\n /** Prepend a rules block */\n let qRule = rule;\n // Set the Extend nodes' selector to the ruleset's selector (not &)\n // This allows the extends to work correctly when evaluated in the wrapper Rules context\n for (const extendNode of ctx.extendNodes) {\n if (extendNode.selector === undefined || extendNode.selector instanceof Ampersand) {\n extendNode.setData('selector', selector);\n }\n }\n rule = new Rules([\n ...ctx.extendNodes,\n qRule\n ]);\n rule._location = qRule._location;\n ctx.extendNodes = undefined;\n }\n return rule;\n }\n }\n ]);\n };\n}\n","// Selector-related production rules for LessRecursiveParser\n// Converted from Chevrotain-based productions.ts lines 1145-2060\n\nimport type { RuleContext, ExtendTarget, TokenMap } from '../lessRecursiveParser.js';\nimport type { IToken, IOrAlt } from 'chevrotain';\nimport {\n type TreeContext,\n Node,\n Ampersand,\n Block,\n Any,\n type LocationInfo,\n BasicSelector,\n Combinator,\n type Combinators,\n List,\n Sequence,\n Call,\n Quoted,\n AtRule,\n Interpolated,\n InterpolatedSelector,\n AttributeSelector,\n Reference,\n Extend,\n Mixin,\n VarDeclaration,\n Declaration,\n Expression,\n SelectorCapture,\n ComplexSelector,\n CompoundSelector,\n SelectorList,\n Url,\n Nil,\n Collection,\n type ComplexSelectorValue,\n type ComplexSelectorComponent,\n type Selector,\n INTERPOLATION_PLACEHOLDER,\n type SimpleSelector,\n isNode,\n N,\n StyleImport\n} from '@jesscss/core';\n\nimport { getInterpolatedOrString } from '../utils.js';\nimport { all } from 'known-css-properties';\n\n/** Use `any` for `this` to avoid structural incompatibility between LessRecursiveParser and CssRecursiveParser */\ntype P = any;\ntype Alt = IOrAlt<any>[];\ntype AltContext = (ctx?: RuleContext) => Alt;\n\n// ── Helper: interpolation regex and getInterpolated ──────────────────\n\nlet interpolatedRegex = /([$@]){([^}]+)}/g;\n\nconst createInterpolatedReference = (\n prefix: string,\n value: string,\n location: LocationInfo,\n context: TreeContext\n): Reference => {\n const isProperty = prefix === '$';\n const key = isProperty\n ? new Quoted(value, { quote: '\\'' }, location, context)\n : value;\n return new Reference(\n { key },\n { type: isProperty ? 'property' : 'variable', role: 'ident' },\n location,\n context\n );\n};\n\nconst getInterpolated = (name: string, location: LocationInfo, context: TreeContext): Interpolated => {\n const replacements: Node[] = [];\n let result: RegExpExecArray | null;\n let source = name;\n while (result = interpolatedRegex.exec(name)) {\n const [match, propOrVar, value] = result;\n source = source.replace(match, INTERPOLATION_PLACEHOLDER);\n const reference = createInterpolatedReference(propOrVar!, value!, location, context);\n replacements.push(reference);\n }\n return new Interpolated({ source, replacements }, { role: 'ident' }, location, context);\n};\n\nexport function attributeSelector(this: P, T: TokenMap, valueAlt?: AltContext) {\n const $ = this;\n\n valueAlt ??= () => [\n {\n GATE: () => !$.isType(T.InterpolatedIdent),\n ALT: () => {\n const token = $.CONSUME5(T.Ident);\n if ($.RECORDING_PHASE) {\n return;\n }\n return new Any(token.image, { role: 'ident' }, $.getLocationInfo(token), $.context);\n }\n },\n {\n GATE: () => $.isType(T.InterpolatedIdent),\n ALT: () => {\n const token = $.CONSUME(T.InterpolatedIdent);\n if ($.RECORDING_PHASE) {\n return;\n }\n const match = interpolatedRegex.exec(token.image);\n interpolatedRegex.lastIndex = 0;\n if (match && match[0] === token.image) {\n return createInterpolatedReference(\n match[1]!,\n match[2]!,\n $.getLocationInfo(token),\n $.context\n );\n }\n const result = getInterpolatedOrString(token.image, $.getLocationInfo(token), $.context);\n return typeof result === 'string'\n ? new Any(result, { role: 'ident' }, $.getLocationInfo(token), $.context)\n : result;\n }\n },\n { ALT: () => $.SUBRULE($.string) }\n ];\n\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n\n $.CONSUME2(T.LSquare);\n const key: Any = $.SUBRULE2($.attributeName);\n let op: IToken | undefined;\n let value: Node | undefined;\n let mod: IToken | undefined;\n $.OPTION(() => {\n op = $.OR([\n { ALT: () => $.CONSUME4(T.Eq) },\n { ALT: () => $.CONSUME6(T.AttrMatch) }\n ]);\n value = $.OR2(valueAlt!(ctx));\n });\n $.OPTION2(() => mod = $.CONSUME7(T.AttrFlag));\n $.CONSUME8(T.RSquare);\n\n if (!RECORDING_PHASE) {\n const location = $.endRule();\n return new AttributeSelector({\n name: key.valueOf(),\n op: op?.image,\n value,\n mod: mod?.image\n }, undefined, location, $.context);\n }\n };\n}\n\n// ── Helper: getAmpersandTemplateValue ────────────────────────────────\n\nfunction getAmpersandTemplateValue(image: string): string | Nil | undefined {\n if (image === '&') {\n return undefined;\n }\n if (image.startsWith('&')) {\n return image.slice(1) || undefined;\n }\n if (image.includes('&')) {\n return image;\n }\n return undefined;\n}\n\n// ── Helper: wrapOuterExpressionIfNeeded ──────────────────────────────\n// Imported from root.ts where it's defined.\nimport { wrapOuterExpressionIfNeeded } from './root.js';\n\n// ── Helper: groupExtendsByTargetAndFlag ──────────────────────────────\n\nconst { isArray } = Array;\ntype ExtendSelectorKind = 'simple' | 'basic' | 'pseudo' | 'complex' | 'compound';\n\nfunction getAllowedExtendSelectors(context: TreeContext): ExtendSelectorKind[] | undefined {\n const val: ExtendSelectorKind[] | undefined = context.opts.allowExtendSelectors;\n return val;\n}\n\nfunction findDisallowedExtendSelector(selector: Selector, allowed?: readonly ExtendSelectorKind[]): { kind: ExtendSelectorKind; selector: Selector } | undefined {\n if (!allowed) {\n return undefined;\n }\n if (isNode(selector, N.SelectorList)) {\n for (const item of selector.value) {\n const disallowed = findDisallowedExtendSelector(item, allowed);\n if (disallowed) {\n return disallowed;\n }\n }\n return undefined;\n }\n const kinds: ExtendSelectorKind[] = isNode(selector, N.BasicSelector)\n ? ['simple', 'basic']\n : isNode(selector, N.PseudoSelector)\n ? ['simple', 'pseudo']\n : isNode(selector, N.CompoundSelector)\n ? ['compound']\n : isNode(selector, N.ComplexSelector)\n ? ['complex']\n : ['simple'];\n if (kinds.some(kind => allowed.includes(kind))) {\n return undefined;\n }\n return {\n kind: kinds[0]!,\n selector\n };\n}\n\nfunction formatAllowedExtendSelectors(allowed: readonly ExtendSelectorKind[]) {\n if (allowed.length === 0) {\n return 'no selector kinds';\n }\n if (allowed.length === 1) {\n return `${allowed[0]} selectors`;\n }\n const head = allowed.slice(0, -1).join(', ');\n return `${head}, or ${allowed[allowed.length - 1]} selectors`;\n}\n\nfunction validateExtendTarget($: P, selector: Selector, source: ':extend()' | '&:extend()') {\n const allowed = getAllowedExtendSelectors($.context);\n const disallowed = findDisallowedExtendSelector(selector, allowed);\n if (!disallowed || !allowed) {\n return;\n }\n throw new Error(\n `${source} only allows ${formatAllowedExtendSelectors(allowed)}, but found ${disallowed.kind} selector \"${disallowed.selector.valueOf()}\".`\n );\n}\n\n/**\n * Groups extends by target (using valueOf()) and flag.\n * Returns an array of grouped Extend nodes where extends with the same target and flag\n * are combined into a single Extend node with a SelectorList of all matching selectors.\n *\n * @todo Group complex selectors into selector lists\n */\nfunction groupExtendsByTargetAndFlag(\n extendNodes: Extend[]\n): Array<Extend | Extend[]> {\n // Group extends by target and flag\n const groups = new Map<string, Extend | Extend[]>();\n\n for (const ext of extendNodes) {\n let target = ext.target;\n let flag = ext.get('flag') ?? 1; // ExtendFlag.Exact = 1\n // Create a key from target valueOf() and flag\n const key = `${target.valueOf()}|${flag}`;\n\n let group = groups.get(key);\n if (!group) {\n groups.set(key, ext);\n } else if (isArray(group)) {\n group.push(ext);\n } else {\n groups.set(key, [group, ext]);\n }\n }\n\n return Array.from(groups.values());\n}\n\n// ── Helper: mergeExtends ─────────────────────────────────────────────\n\nfunction mergeExtends(\n selector: Selector | undefined,\n extendTargets: ExtendTarget[],\n location: LocationInfo,\n context: TreeContext,\n flag: IToken | undefined\n): Extend | Extend[] {\n let extendNodes: Extend[] | undefined;\n let currentTarget = extendTargets[0]!.target;\n let currentFlag = (extendTargets[0]!.flag ?? flag) ? 0 : 1; // ExtendFlag.All = 0, ExtendFlag.Exact = 1\n let currentNode = new Extend({\n selector,\n target: currentTarget,\n flag: currentFlag\n }, undefined, location, context);\n for (let i = 1; i < extendTargets.length; i++) {\n let ext = extendTargets[i]!;\n let thisFlag = (ext.flag ?? flag) ? 0 : 1;\n /**\n * Merge extends. We do this instead of merging earlier so that\n * selector lists with different flags are not merged.\n */\n if (thisFlag === currentFlag) {\n let target = currentNode.target;\n if (!(target instanceof SelectorList)) {\n currentNode.setData('target', new SelectorList([target, ext.target], undefined, location, context));\n } else {\n target.setData([...target.value, ext.target]);\n }\n } else {\n if (!extendNodes || !extendNodes.includes(currentNode)) {\n (extendNodes ??= []).push(currentNode);\n }\n currentFlag = thisFlag;\n currentTarget = ext.target;\n currentNode = new Extend({\n selector,\n target: currentTarget,\n flag: currentFlag\n }, undefined, location, context);\n extendNodes.push(currentNode);\n }\n };\n if (!extendNodes) {\n return currentNode;\n }\n if (extendNodes.length === 1) {\n return extendNodes[0]!;\n }\n return extendNodes;\n}\n\n// ── Helper: isSelectorLikeListItem / isLegacySelectorLikeValue ───────\n\n/** True for a node that could be one item in the old unquoted selector list (e.g. .a or #id). */\nfunction isSelectorLikeListItem(node: Node): boolean {\n if (node.type === 'SelectorCapture' || isNode(node, N.Call)) {\n return false;\n }\n if (isNode(node, N.Reference)) {\n return node.options.type === 'mixin-ruleset';\n }\n if (node instanceof List || node instanceof Sequence) {\n return node.value.length > 0 && node.value.every(isSelectorLikeListItem);\n }\n return false;\n}\n\n/** True only for the legacy unquoted selector-list form (e.g. @var: .a, .b, .c), not @var: .a; */\nfunction isLegacySelectorLikeValue(node: Node): boolean {\n if (node.type === 'SelectorCapture' || isNode(node, N.Call)) {\n return false;\n }\n if (isNode(node, N.Reference)) {\n return false;\n }\n if (node instanceof List || node instanceof Sequence) {\n return node.value.length > 1 && node.value.every(isSelectorLikeListItem);\n }\n return false;\n}\n\n// ══════════════════════════════════════════════════════════════════════\n// PRODUCTION RULES\n// ══════════════════════════════════════════════════════════════════════\n\n/**\n * We need to now handle a returned `Extend` node from the complexSelector rule\n */\nexport function relativeSelector(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n return $.OR([\n {\n ALT: () => {\n let co = $.CONSUME(T.Combinator);\n let node: ComplexSelector | Extend = $.SUBRULE2($.complexSelector, { ARGS: [ctx] });\n\n const coImage: Combinators = co.image;\n let combinator = new Combinator(coImage, undefined, $.getLocationInfo(co), $.context);\n let targetNode =\n node instanceof Extend\n ? node.selector\n : node;\n if (targetNode instanceof ComplexSelector) {\n targetNode.setData([combinator, ...targetNode.value]);\n targetNode._location = $.getLocationFromNodes(targetNode.value);\n } else {\n let nodes = [combinator, targetNode as ComplexSelectorComponent];\n let complex = new ComplexSelector(nodes, undefined, $.getLocationFromNodes(nodes), $.context);\n if (node instanceof Extend) {\n node.setData('selector', complex);\n let location = node.location;\n location[0] = co.startOffset;\n location[1] = co.startLine;\n location[2] = co.startColumn;\n } else {\n node = complex;\n }\n }\n return node;\n }\n },\n {\n ALT: () => $.SUBRULE3($.complexSelector, { ARGS: [ctx] })\n }\n ]);\n };\n}\n\nexport function forgivingSelectorList(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n\n let sequences: ComplexSelector[] | undefined;\n let i = 0;\n\n if (!RECORDING_PHASE) {\n sequences = [];\n }\n\n $.AT_LEAST_ONE_SEP({\n SEP: T.Comma,\n DEF: () => {\n const selector = $.SUBRULE($.relativeSelector, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n i++;\n if (i === 1 && ctx.qualifiedRule) {\n sequences!.push($.wrap(selector, true));\n } else {\n sequences!.push($.wrap(selector, i === 1 ? true : 'both'));\n }\n }\n }\n });\n\n if (RECORDING_PHASE) {\n return;\n }\n const location = $.endRule();\n if (sequences!.length === 1) {\n return sequences![0];\n }\n return new SelectorList(sequences!, undefined, location, $.context);\n };\n}\n\nexport function selectorList(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n\n let sequences: ComplexSelector[] | undefined;\n let i = 0;\n\n if (!RECORDING_PHASE) {\n sequences = [];\n }\n\n $.AT_LEAST_ONE_SEP({\n SEP: T.Comma,\n DEF: () => {\n const selector = $.SUBRULE2($.complexSelector, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n i++;\n if (i === 1 && ctx.qualifiedRule) {\n sequences!.push($.wrap(selector, true));\n } else {\n sequences!.push($.wrap(selector, i === 1 ? true : 'both'));\n }\n }\n }\n });\n\n if (RECORDING_PHASE) {\n return;\n }\n const location = $.endRule();\n if (sequences!.length === 1) {\n return sequences![0];\n }\n return new SelectorList(sequences!, undefined, location, $.context);\n };\n}\n\nexport function compoundSelector(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n /**\n A sequence of simple selectors that are not separated by\n a combinator.\n .e.g. `a#selected`\n */\n // compoundSelector\n // : simpleSelector+\n // ;\n let RECORDING_PHASE = $.RECORDING_PHASE;\n let selectors: SimpleSelector[];\n if (!RECORDING_PHASE) {\n selectors = [];\n }\n let sel: SimpleSelector = $.SUBRULE($.simpleSelector, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n selectors!.push(sel);\n }\n $.MANY({\n /** Make sure we don't ignore space combinators */\n GATE: () => !$.hasWS() && !(ctx.inExtend && $.isType(T.All)),\n DEF: () => {\n let sel: SimpleSelector = $.SUBRULE2($.simpleSelector, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n /** Make sure we don't add implicit whitespace */\n sel.pre = 0;\n selectors!.push(sel);\n }\n }\n });\n if (RECORDING_PHASE) {\n return;\n }\n if (selectors!.length === 1) {\n return selectors![0]!;\n }\n return new CompoundSelector(selectors!, undefined, $.getLocationFromNodes(selectors!), $.context);\n };\n}\n\n/**\n * Extended with :extend\n */\nexport function complexSelector(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n\n let selectors: ComplexSelectorValue | undefined;\n if (!RECORDING_PHASE) {\n const first: ComplexSelectorComponent = $.SUBRULE($.compoundSelector, { ARGS: [ctx] });\n selectors = [first];\n } else {\n $.SUBRULE($.compoundSelector, { ARGS: [ctx] });\n }\n\n $.MANY({\n GATE: () => {\n if (ctx.inExtend && $.isType(T.All)) {\n return false;\n }\n return $.hasWS() || $.isType(T.Combinator);\n },\n DEF: () => {\n let co: IToken | undefined;\n let combinator: Combinator | undefined;\n\n $.OPTION(() => {\n co = $.CONSUME(T.Combinator);\n });\n\n if (!RECORDING_PHASE) {\n if (co) {\n const coImg = co.image as Combinators;\n combinator = $.wrap(\n new Combinator(coImg, undefined, $.getLocationInfo(co), $.context),\n 'both'\n );\n } else {\n const startOffset = $.LA(1).startOffset;\n combinator = new Combinator(' ', undefined, undefined, $.context);\n let pre = $.getPrePost(startOffset);\n if (pre === 1) {\n pre = 0;\n } else if (pre) {\n const last = pre[pre.length - 1];\n if (typeof last === 'string' && last.endsWith(' ')) {\n pre[pre.length - 1] = last.slice(0, -1);\n }\n }\n combinator.pre = pre;\n }\n }\n\n const compound: ComplexSelectorComponent = $.SUBRULE2($.compoundSelector, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n selectors!.push(combinator!, compound);\n }\n }\n });\n\n let selector: Selector | undefined;\n if (!RECORDING_PHASE) {\n const location = $.endRule();\n selector = selectors!.length === 1\n ? selectors![0] as Selector\n : new ComplexSelector(selectors!, undefined, location, $.context);\n }\n\n let flag: IToken | undefined;\n\n /** Inside :extend(...), only consume the optional trailing \"all\" keyword. */\n $.OPTION2({\n GATE: () => !!ctx.inExtend && $.isType(T.All),\n DEF: () => {\n flag = $.CONSUME(T.All);\n }\n });\n\n /**\n * Outside :extend(...), only enter the extend production when the next token\n * is actually :extend(. Do not commit based on context alone.\n */\n $.OPTION3({\n GATE: () => !ctx.inExtend && !!ctx.qualifiedRule && $.isType(T.Extend),\n DEF: () => {\n const initialSelector = ctx.selector;\n if (!RECORDING_PHASE) {\n ctx.selector = selector;\n }\n try {\n $.SUBRULE($.extend, { ARGS: [ctx] });\n } finally {\n ctx.selector = initialSelector;\n }\n }\n });\n\n if (ctx.inExtend) {\n validateExtendTarget($, selector!, ':extend()');\n (ctx.extendTargets ??= []).push({ selector: ctx.selector, target: selector!, flag });\n }\n\n return selector;\n };\n}\n\n/**\n * &:extend(...) statement ending with a semicolon.\n * This is the only valid standalone extend statement in Less.\n */\nexport function ampersandExtend(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n\n $.CONSUME(T.AmpersandExtend);\n ctx.inExtend = true;\n $.SUBRULE($.selectorList, { ARGS: [ctx] });\n ctx.inExtend = false;\n let extendTargets = ctx.extendTargets!;\n let flag = $.OPTION(() => $.CONSUME(T.AllFlag));\n $.CONSUME(T.RParen);\n $.CONSUME(T.Semi);\n\n let location = $.endRule();\n if (!$.RECORDING_PHASE) {\n let result = mergeExtends(undefined, extendTargets, location, $.context, flag);\n /** We've converted these extend targets to nodes, so we can reset extend targets */\n ctx.extendTargets = undefined;\n if (ctx.extendNodes) {\n if (isArray(result)) {\n ctx.extendNodes = [...ctx.extendNodes, ...result];\n } else {\n ctx.extendNodes.push(result);\n }\n } else {\n if (isArray(result)) {\n ctx.extendNodes = result;\n } else {\n ctx.extendNodes = [result];\n }\n }\n // Return Nil instead of the extend node - extends are handled via ctx.extendNodes\n // pathway to avoid duplicates (cssMain collects returned nodes into rules.value).\n // Nil is needed because undefined confuses cssMain (treats it as semicolon).\n return new Nil(undefined, undefined, location, $.context);\n }\n };\n}\n\nexport function extend(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n $.CONSUME(T.Extend);\n\n ctx.inExtend = true;\n $.SUBRULE($.selectorList, { ARGS: [ctx] });\n let extendTargets = ctx.extendTargets;\n ctx.inExtend = false;\n\n let selector = ctx.selector;\n let flag = $.OPTION(() => $.CONSUME(T.AllFlag));\n $.CONSUME(T.RParen);\n\n let location = $.endRule();\n if (!$.RECORDING_PHASE) {\n // When .c:extend(...) is parsed, selector is .c\n // The extend will be processed in qualifiedRuleBody where selector: undefined is set\n // for extends that stay inside the ruleset (not bubbled)\n // Bubbled extends keep their selector and get it set correctly in qualifiedRule\n let merged = mergeExtends(selector, extendTargets!, location, $.context, flag);\n /**\n * If we don't have as many extends as we have selectors, we need a way to signal\n * that these should be bumped above the ruleset.\n */\n /** We've converted these extend targets to nodes, so we can reset extend targets */\n ctx.extendTargets = undefined;\n if (ctx.extendNodes) {\n if (isArray(merged)) {\n ctx.extendNodes = [...ctx.extendNodes, ...merged];\n } else {\n ctx.extendNodes.push(merged);\n }\n } else {\n if (isArray(merged)) {\n ctx.extendNodes = merged;\n } else {\n ctx.extendNodes = [merged];\n }\n }\n }\n };\n}\n\nexport function simpleSelector(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let selectorAlt: Alt = [\n {\n GATE: () => (\n (!ctx.inExtend || $.LA(1).tokenType !== T.All)\n && $.LA(1).tokenType !== T.InterpolatedIdent\n ),\n /**\n * In Less/Sass (and now CSS), the first inner selector can be an identifier\n */\n ALT: () => $.CONSUME(T.Ident)\n },\n {\n /**\n * Unlike CSS Nesting, Less allows outer qualified rules\n * to have `&`, and it is just silently absorbed if there\n * is no parent selector.\n */\n ALT: () => {\n let amp = $.CONSUME(T.Ampersand);\n const value = getAmpersandTemplateValue(amp.image);\n return new Ampersand({ template: value }, undefined, $.getLocationInfo(amp), $.context);\n }\n },\n {\n ALT: () => {\n $.startRule();\n $.CONSUME(T.AmpersandLParen);\n const parts: string[] = [];\n let sawQuoted = false;\n $.MANY(() => {\n $.OR2([\n {\n GATE: () => $.isType(T.QuoteStart),\n ALT: () => {\n const quoted: Quoted = $.SUBRULE($.string, { ARGS: [ctx] });\n parts.push(quoted.valueOf());\n sawQuoted = true;\n }\n },\n {\n GATE: () => $.isType(T.WS),\n ALT: () => {\n parts.push($.CONSUME(T.WS).image);\n }\n },\n {\n ALT: () => {\n parts.push($.CONSUME(T.AmpersandTemplateContents).image);\n }\n }\n ]);\n });\n $.CONSUME(T.AmpersandTemplateEnd);\n const location = $.endRule();\n const value = parts.join('');\n const template: string | Nil = sawQuoted && value === ''\n ? new Nil()\n : value === 'nil'\n ? new Nil()\n : value;\n return new Ampersand({ template }, undefined, location, $.context);\n }\n },\n { ALT: () => $.CONSUME(T.InterpolatedIdent) },\n { ALT: () => $.CONSUME(T.InterpolatedSelector) },\n { ALT: () => $.SUBRULE($.classSelector, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE($.idSelector, { ARGS: [ctx] }) },\n { ALT: () => $.CONSUME(T.Star) },\n { ALT: () => {\n let initialIsQualifiedRule = ctx.qualifiedRule;\n ctx.qualifiedRule = false;\n /** Make sure we prevent things like :extend() inside pseudo-selectors */\n try {\n let pseudo = $.SUBRULE($.pseudoSelector, { ARGS: [ctx] });\n return pseudo;\n } finally {\n ctx.qualifiedRule = initialIsQualifiedRule;\n }\n } },\n /** @todo - replicate this fix we made with the Jess parser\n *\n * { ALT: () => $.attributeSelector(ctx, () => [\n {\n ALT: () => {\n let token = $.CONSUME($.T.InterpolatedIdent);\n let location = $.getLocationInfo(token);\n let image = token.image;\n let match = interpolatedRegex.exec(image);\n interpolatedRegex.lastIndex = 0;\n if (match && match[0] === image) {\n return new Reference(\n { key: new Keyword(match[2]!, undefined, location, $.context) },\n { type: 'index' },\n location,\n $.context\n );\n }\n return getInterpolated(image, location, $.context);\n }\n },\n */\n { ALT: () => $.SUBRULE($.attributeSelector, { ARGS: [ctx] }) },\n /** Supports keyframes selectors */\n { ALT: () => $.CONSUME(T.DimensionInt) },\n { ALT: () => $.CONSUME(T.DimensionNum) }\n ];\n\n let selector = $.OR(selectorAlt);\n\n if ($.isToken(selector)) {\n if (selector.tokenType.name === 'Ampersand') {\n const value = getAmpersandTemplateValue(selector.image);\n return new Ampersand({ template: value }, undefined, $.getLocationInfo(selector), $.context);\n }\n if (\n selector.tokenType.name === 'InterpolatedSelector'\n || selector.tokenType.name === 'InterpolatedIdent'\n ) {\n // Create an InterpolatedSelector wrapper for interpolated selectors\n let nameValue = selector.image;\n let interpolatedNode = getInterpolated(nameValue, $.getLocationInfo(selector), $.context);\n\n return new InterpolatedSelector(interpolatedNode, undefined, $.getLocationInfo(selector), $.context);\n }\n return new BasicSelector(selector.image, undefined, $.getLocationInfo(selector), $.context);\n }\n const result: Node = selector;\n return result;\n };\n}\n\nexport function anonymousMixinDefinition(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n let params: List | undefined;\n let anonToken: IToken | undefined;\n $.OPTION(() => {\n anonToken = $.CONSUME(T.AnonMixinStart);\n $.OPTION2(() => {\n params = $.SUBRULE($.mixinArgList, { ARGS: [{ ...ctx, isDefinition: true }] });\n });\n $.CONSUME(T.RParen);\n });\n let rules = $.SUBRULE($.wrappedDeclarationList, { ARGS: [ctx] });\n\n if ($.RECORDING_PHASE) {\n return;\n }\n\n // Set rulesVisibility for detached rulesets based on leakyRules\n // Less, for whatever reason, has slightly different lookup rules for\n // \"detached rulesets\".\n\n // Parse as Anonymous mixin\n if (!rules.options.rulesVisibility) {\n rules.options.rulesVisibility = {};\n }\n if ($.leakyRules) {\n rules.options.rulesVisibility.Mixin = 'public';\n rules.options.rulesVisibility.VarDeclaration = 'private';\n } else {\n rules.options.rulesVisibility.Mixin = 'private';\n rules.options.rulesVisibility.VarDeclaration = 'private';\n }\n\n if (!anonToken) {\n /** To Less, this is a \"detached ruleset\" */\n // Check if this should be parsed as Collection or Rules\n const shouldBeCollection = (() => {\n let properties: Declaration[] = [];\n for (const node of rules.value) {\n if (node.type === 'Declaration') {\n properties.push(node);\n } else if (node.type === 'Comment' || node.type === 'VarDeclaration') {\n continue;\n } else {\n /** Not a valid collection, parse as anonymous mixin */\n return false;\n }\n }\n\n if (properties.length === 0) {\n /** If just var declarations and/or comments, parse as collection */\n return true;\n }\n\n const validPropertyCount = properties.filter((decl) => {\n const name = decl.name;\n const propName = typeof name === 'string' ? name : name.valueOf();\n // Skip custom properties (--*)\n if (propName.startsWith('--')) {\n return true; // Custom properties are always valid\n }\n return all.includes(propName);\n }).length;\n\n // Majority means more than 50%\n const majorityValid = validPropertyCount > properties.length / 2;\n /** If this looks like mostly CSS properties, parse as mixin instead */\n return !majorityValid;\n })();\n\n const usage = (ctx as RuleContext).detachedRulesetUsage ?? 'none';\n const forceMixinForDynamicUsage =\n usage === 'function-arg'\n || usage === 'mixin-arg'\n || usage === 'default-param';\n const shouldBeCollectionFinal = shouldBeCollection && !forceMixinForDynamicUsage;\n if (shouldBeCollectionFinal) {\n return new Collection(rules.value, rules.options, $.endRule(), $.context);\n }\n }\n\n // If anonToken exists, it's an anonymous mixin with (optional) parameters, return as Mixin\n return new Mixin({ params, rules }, undefined, $.endRule(), $.context);\n };\n}\n\n/**\n * Mostly copied from css importAtRule, but it maps\n * differently to Jess nodes depending on if it's meant\n * to be a Jess-style import or just an at-rule\n */\nexport function importAtRule(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const isCssUrl = (url: string, options: string[]) => {\n if (options.includes('inline')) {\n return false;\n }\n const lower = url.toLowerCase();\n const forcedLess = options.includes('less');\n if (forcedLess) {\n return false;\n }\n if (options.includes('css')) {\n return true;\n }\n if (/\\.css([?#].*)?$/.test(lower)) {\n return true;\n }\n if (/\\.less([?#].*)?$/.test(lower)) {\n return false;\n }\n // Remote imports default to CSS.\n if (lower.startsWith('http://') || lower.startsWith('https://') || lower.startsWith('//')) {\n return true;\n }\n return false;\n };\n\n $.startRule();\n\n let name = $.CONSUME(T.AtImport);\n\n let options: string[] = [];\n\n $.OPTION(() => {\n $.CONSUME(T.LParen);\n $.AT_LEAST_ONE_SEP({\n SEP: T.Comma,\n DEF: () => {\n let opt = $.CONSUME(T.PlainIdent);\n options.push(opt.image);\n }\n });\n $.CONSUME(T.RParen);\n });\n\n let urlNode: Quoted | Url = $.OR([\n { ALT: () => $.SUBRULE($.urlFunction, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE($.string, { ARGS: [ctx] }) }\n ]);\n\n let extraNodes: Node[] | undefined;\n $.OPTION2(() => {\n extraNodes = $.SUBRULE($.importPostlude, { ARGS: [{}] });\n });\n\n $.CONSUME(T.Semi);\n\n if (!$.RECORDING_PHASE) {\n let isAtRule: boolean | undefined;\n let postludeNode: Node | undefined;\n\n let url = urlNode.valueOf();\n isAtRule = isCssUrl(url, options);\n\n let preludeNodes: Node[] = [$.wrap(urlNode)];\n\n if (extraNodes && extraNodes.length) {\n if (isAtRule) {\n isAtRule = true;\n for (const n of extraNodes) {\n preludeNodes.push(n);\n }\n } else {\n const postludeLoc = $.getLocationFromNodes(extraNodes);\n postludeNode = new Sequence(extraNodes, undefined, postludeLoc, $.context);\n }\n }\n\n let location = $.endRule();\n if (isAtRule) {\n const prelude = new Sequence(preludeNodes, undefined, $.getLocationFromNodes(preludeNodes), $.context);\n const atRule = new AtRule({\n name: $.wrap(new Any(name.image, { role: 'atkeyword' }, $.getLocationInfo(name), $.context), true),\n prelude: prelude\n }, undefined, location, $.context);\n return atRule;\n }\n\n return new StyleImport({\n path: urlNode\n }, {\n type: 'import',\n importOptions: {\n type: options.includes('less') ? 'less' : undefined,\n reference: options.includes('reference'),\n once: !options.includes('multiple'),\n multiple: options.includes('multiple'),\n optional: options.includes('optional'),\n inline: options.includes('inline'),\n postlude: postludeNode\n }\n }, location, $.context);\n }\n };\n}\n\n/** Less variables */\nexport function varDeclarationOrCall(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n\n let name = $.SUBRULE($.varName, { ARGS: [{}] });\n let value: Node | undefined;\n let args: List | undefined;\n let important: IToken | undefined;\n\n $.OR([\n {\n /**\n * This is a variable declaration\n * Disallows `@atrule :foo;` because it resembles a pseudo-selector\n */\n ALT: () => {\n $.CONSUME(T.Colon);\n return $.OR2([\n {\n GATE: () => {\n const type = $.LA(1).tokenType;\n return type === T.AnonMixinStart || type === T.LCurly;\n },\n ALT: () => {\n value = $.SUBRULE($.anonymousMixinDefinition, { ARGS: [ctx] });\n $.OPTION(() => $.CONSUME(T.Semi));\n return value;\n }\n },\n {\n GATE: () => {\n const type = $.LA(1).tokenType;\n return type !== T.AnonMixinStart && type !== T.LCurly;\n },\n ALT: () => {\n value = $.SUBRULE($.valueList, { ARGS: [{ ...ctx, allowMixinCallWithoutAccessor: true }] });\n $.OPTION2(() => {\n important = $.CONSUME(T.Important);\n });\n return value;\n }\n }\n ]);\n }\n },\n /** This is a variable call. Allow optional whitespace between name and (. */\n {\n GATE: () => $.isType(T.LParen),\n /**\n * This is a change from Less 1.x-4.x\n * e.g.\n * ```\n * @dr: #(@var1, @var2) {\n * // ...\n * }\n * @dr(arg1, arg2);\n */\n ALT: () => {\n args = $.SUBRULE($.mixinArgs, { ARGS: [ctx] });\n return args;\n }\n }\n ]);\n\n let location = $.endRule();\n if ($.RECORDING_PHASE) {\n return;\n }\n let nameVal = getInterpolatedOrString(name!.image);\n let nameNode: Node;\n if (!(nameVal instanceof Interpolated)) {\n nameNode = new Any(nameVal, { role: 'ident' }, $.getLocationInfo(name!), $.context);\n } else {\n nameNode = nameVal;\n }\n /** An anonymous mixin call */\n if (!value) {\n // When @variable() is called, look up the variable first\n // The variable's value (which may be a Call node) will be executed\n const nameRef = new Reference({ key: nameNode }, { type: 'variable', role: 'name' });\n // Pass markImportant in options if !important is present\n const callOptions = important ? { markImportant: true } : undefined;\n const callNode = new Call({ name: nameRef, args }, callOptions, location, $.context);\n // Clear important since it's now on the Call\n if (important) {\n important = undefined;\n }\n // Variable calls are expressions at the outermost level (but not parenthesized).\n // e.g. `$media()`, NOT `$(media())`\n return new Expression(callNode, undefined, location, $.context);\n }\n\n // If the value is a Call node and we have !important, set markImportant on the Call\n // instead of on the VarDeclaration (mixin call semantics)\n if (important && value instanceof Call) {\n value.options = value.options || {};\n value.options.markImportant = true;\n important = undefined;\n }\n\n if (value && isLegacySelectorLikeValue(value)) {\n const varName = String(nameNode.valueOf());\n $.warnDeprecation(\n `Unquoted selector capture in '${varName}' is no longer supported. Use '*[ ... ]' (e.g. ${varName}: *[.a, .b]).`,\n $.LA(1),\n 'unquoted-selector-capture'\n );\n }\n\n return new VarDeclaration({\n name: $.wrap(nameNode, true) as any,\n value: $.wrap(value, true),\n important: important ? $.wrap(new Any(important.image, { role: 'flag' }, $.getLocationInfo(important), $.context), true) : undefined\n }, undefined, location, $.context);\n };\n}\n\nexport function selectorCapture(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n $.CONSUME(T.Star);\n // Use $.OR with a gate for a positive assertion\n const selector = $.OR([\n {\n GATE: $.noSep.bind($),\n ALT: () => {\n $.CONSUME(T.LSquare);\n const selector = $.SUBRULE($.forgivingSelectorList, { ARGS: [{ ...ctx, inner: true }] });\n $.CONSUME(T.RSquare);\n return selector;\n }\n }\n ]);\n\n const location = $.endRule();\n if ($.RECORDING_PHASE) {\n return;\n }\n return new SelectorCapture(\n $.wrap(selector, true),\n undefined,\n location,\n $.context\n );\n };\n}\n\nexport function valueSequence(this: P, _T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n let nodes: Node[] | undefined;\n if (!RECORDING_PHASE) {\n nodes = [];\n }\n\n {\n const exprCtx: RuleContext = { ...ctx, wrapInExpression: true };\n let value = $.SUBRULE2($.expressionSum, { ARGS: [exprCtx] });\n if (!RECORDING_PHASE) {\n value = wrapOuterExpressionIfNeeded.call($, value, exprCtx);\n nodes!.push(value);\n }\n }\n\n $.MANY(() => {\n const exprCtx: RuleContext = { ...ctx, wrapInExpression: true };\n let value = $.SUBRULE3($.expressionSum, { ARGS: [exprCtx] });\n if (!RECORDING_PHASE) {\n value = wrapOuterExpressionIfNeeded.call($, value, exprCtx);\n nodes!.push(value);\n }\n });\n\n if (RECORDING_PHASE) {\n return;\n }\n\n let location = $.endRule();\n if (nodes!.length === 1) {\n const single = nodes![0]!;\n return single;\n }\n const seq = new Sequence(nodes!, undefined, location, $.context);\n return seq;\n };\n}\n\nexport function squareValue(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n $.CONSUME(T.LSquare);\n let node: Node = $.OR([\n {\n GATE: () => !$.looseMode,\n ALT: () => {\n let ident = $.CONSUME(T.Ident);\n return new Any(ident.image, { role: 'ident' }, $.getLocationInfo(ident), $.context);\n }\n },\n {\n GATE: () => !!$.looseMode,\n ALT: () => {\n let nodes: Node[] = [];\n $.MANY(() => {\n let node = $.SUBRULE($.anyInnerValue, { ARGS: [ctx] });\n const wrapped = $.wrap(node);\n nodes.push(wrapped);\n });\n const seq = new Sequence(nodes, undefined, $.getLocationFromNodes(nodes), $.context);\n return seq;\n }\n }\n ]);\n $.CONSUME(T.RSquare);\n let location = $.endRule();\n const blk = new Block(node, { type: 'square' }, location, $.context);\n return blk;\n };\n}\n","// Values productions for LessRecursiveParser\n// Converted from Chevrotain-based productions.ts (lines 2060-3015)\nimport type { RuleContext, TokenMap } from '../lessRecursiveParser.js';\nimport type { IToken } from 'chevrotain';\nimport { productions as cssProductions } from '@jesscss/css-parser';\nimport {\n type TreeContext,\n type LocationInfo,\n type Operator,\n Node,\n Any,\n Block,\n List,\n Sequence,\n Call,\n Paren,\n Operation,\n Quoted,\n Interpolated,\n Reference,\n Url,\n Dimension,\n Num,\n Negative,\n Rest,\n Expression,\n INTERPOLATION_PLACEHOLDER,\n isNode,\n N\n} from '@jesscss/core';\nimport { getInterpolatedOrString } from '../utils.js';\n\n/** Use `any` for `this` to avoid structural incompatibility between LessRecursiveParser and CssRecursiveParser */\ntype P = any;\ntype Alt = Array<{ ALT: () => any; GATE?: () => boolean }>;\ntype AltContext = (ctx?: RuleContext) => Alt;\n\n// ── Save references to CSS production factories ────────────────────────\nconst cssNthValue = cssProductions.nthValue;\nconst cssKnownFunctions = cssProductions.knownFunctions;\nconst cssMathValue = cssProductions.mathValue;\n\n// ── Helpers ───────────────────────────────────────────────────────────\n\nfunction getParenFrames(ctx: RuleContext | undefined): boolean[] {\n return (ctx?.parenFrames as boolean[] | undefined) ?? [];\n}\n\nfunction withCalcFrame(ctx: RuleContext | undefined, delta: number): RuleContext {\n const calcFrames = ((ctx?.calcFrames as number | undefined) ?? 0) + delta;\n return { ...(ctx ?? {}), calcFrames };\n}\n\nfunction startsCustomValueToken($: P, T: TokenMap): boolean {\n return $.isType(T.LParen)\n || $.isType(T.FunctionStart)\n || $.isType(T.FunctionalPseudoClass)\n || $.isType(T.LSquare)\n || $.isType(T.LCurly)\n || $.isType(T.SingleQuoteStart)\n || $.isType(T.DoubleQuoteStart)\n || $.isType(T.Value)\n || $.isType(T.PlainIdent)\n || $.isType(T.AtKeyword)\n || $.isType(T.PropertyReference)\n || $.isType(T.CustomProperty)\n || $.isType(T.Dimension)\n || $.isType(T.Number)\n || $.isType(T.Color)\n || $.isType(T.UnicodeRange)\n || $.isType(T.Colon)\n || $.isType(T.Comma)\n || $.isType(T.Important)\n || $.isType(T.Unknown);\n}\n\nconst createInterpolatedReference = (\n prefix: string,\n value: string,\n location: LocationInfo,\n context: TreeContext\n): Reference => {\n const isProperty = prefix === '$';\n const key = isProperty\n ? new Quoted(value, { quote: '\\'' }, location, context)\n : value;\n return new Reference(\n { key },\n { type: isProperty ? 'property' : 'variable', role: 'ident' },\n location,\n context\n );\n};\n\n// ── Production rules ──────────────────────────────────────────────────\n\nexport function expressionSum(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n\n let left = $.SUBRULE($.expressionProduct, { ARGS: [ctx] });\n\n while (true) {\n let op: string | undefined;\n let right: Node | undefined;\n\n if ($.isType(T.Plus)) {\n const opToken = $.CONSUME(T.Plus);\n op = opToken.image;\n right = $.SUBRULE2($.expressionProduct, { ARGS: [ctx] });\n } else if ($.isType(T.Minus)) {\n const opToken = $.CONSUME(T.Minus);\n op = opToken.image;\n right = $.SUBRULE4($.expressionProduct, { ARGS: [ctx] });\n } else if ($.noSep() && $.matchToken($.LA(1), T.Signed)) {\n const tok = $.CONSUME(T.Signed);\n let startValue: Node | undefined;\n const str = tok.image;\n op = str[0];\n if (tok.payload && tok.payload[1]) {\n const dim = { number: parseFloat(tok.payload[0]), unit: tok.payload[1] };\n startValue = new Dimension(dim, undefined, $.getLocationInfo(tok), $.context);\n } else {\n const num = parseFloat(str);\n if (!Number.isNaN(num)) {\n startValue = new Num(num, undefined, $.getLocationInfo(tok), $.context);\n } else {\n startValue = $.processValueToken(tok);\n }\n }\n right = $.SUBRULE3($.expressionProduct, { ARGS: [{ ...ctx, startValue }] });\n } else {\n break;\n }\n\n const operation = new Operation(\n [$.wrap(left, true), op as Operator, $.wrap(right!)],\n undefined,\n $.getLocationFromNodes([left, right!]),\n $.context\n );\n left = operation;\n }\n\n $.endRule();\n\n return left;\n };\n}\n\nexport function expressionProduct(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n\n let left = ctx.startValue ?? $.SUBRULE($.expressionValue, { ARGS: [ctx] });\n\n while (true) {\n let op: IToken;\n\n if ($.isType(T.Star)) {\n op = $.CONSUME(T.Star);\n } else if ($.isType(T.Slash)) {\n op = $.CONSUME(T.Slash);\n } else if ($.isType(T.Percent)) {\n op = $.CONSUME(T.Percent);\n } else {\n break;\n }\n // Check for deprecated ./ operator\n if (op!.image === './') {\n $.warnDeprecation(\n './ operator is deprecated',\n op!,\n 'dot-slash-operator'\n );\n }\n let right: Node = $.SUBRULE2($.expressionValue, { ARGS: [ctx] });\n\n const operation = new Operation(\n [$.wrap(left, true), op!.image as Operator, $.wrap(right)],\n undefined,\n $.getLocationFromNodes([left, right]),\n $.context\n );\n left = operation;\n }\n\n $.endRule();\n\n return left;\n };\n}\n\nexport function customValue(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n if (\n $.isType(T.LParen)\n || $.isType(T.FunctionStart)\n || $.isType(T.FunctionalPseudoClass)\n || $.isType(T.LSquare)\n || $.isType(T.LCurly)\n ) {\n return $.SUBRULE($.customBlock, { ARGS: [ctx] });\n }\n if ($.isType(T.SingleQuoteStart) || $.isType(T.DoubleQuoteStart)) {\n return $.SUBRULE($.string, { ARGS: [ctx] });\n }\n\n let token: IToken;\n if ($.isType(T.Value)) {\n token = $.CONSUME(T.Value);\n } else if ($.isType(T.PlainIdent)) {\n token = $.CONSUME(T.PlainIdent);\n } else if ($.isType(T.AtKeyword)) {\n token = $.CONSUME(T.AtKeyword);\n } else if ($.isType(T.PropertyReference)) {\n token = $.CONSUME(T.PropertyReference);\n } else if ($.isType(T.CustomProperty)) {\n token = $.CONSUME(T.CustomProperty);\n } else if ($.isType(T.Dimension)) {\n token = $.CONSUME(T.Dimension);\n } else if ($.isType(T.Number)) {\n token = $.CONSUME(T.Number);\n } else if ($.isType(T.Color)) {\n token = $.CONSUME(T.Color);\n } else if ($.isType(T.UnicodeRange)) {\n token = $.CONSUME(T.UnicodeRange);\n } else if ($.isType(T.Colon)) {\n token = $.CONSUME(T.Colon);\n } else if ($.isType(T.Comma)) {\n token = $.CONSUME(T.Comma);\n } else if ($.isType(T.Important)) {\n token = $.CONSUME(T.Important);\n } else {\n token = $.CONSUME(T.Unknown);\n }\n\n if (!$.RECORDING_PHASE) {\n return $.wrap($.processValueToken(token, ctx), undefined, ctx);\n }\n };\n}\n\nexport function innerCustomValue(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n if ($.isType(T.Semi)) {\n const semi = $.CONSUME(T.Semi);\n if ($.RECORDING_PHASE) {\n return;\n }\n return $.wrap(new Any(semi.image, { role: 'semi' }, $.getLocationInfo(semi), $.context));\n }\n return $.SUBRULE($.customValue, { ARGS: [ctx] });\n };\n}\n\nexport function customBlock(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n\n let start: IToken | undefined;\n let end: IToken | undefined;\n let nodes: Node[] | undefined;\n if (!RECORDING_PHASE) {\n nodes = [];\n }\n\n if ($.isType(T.LParen)) {\n start = $.CONSUME(T.LParen);\n while (!$.isType(T.RParen) && (startsCustomValueToken($, T) || $.isType(T.Semi))) {\n const val = $.SUBRULE($.innerCustomValue, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n nodes!.push(val);\n }\n }\n end = $.CONSUME(T.RParen);\n } else if ($.isType(T.FunctionStart) || $.isType(T.FunctionalPseudoClass)) {\n start = $.isType(T.FunctionStart)\n ? $.CONSUME(T.FunctionStart)\n : $.CONSUME(T.FunctionalPseudoClass);\n while (!$.isType(T.RParen) && (startsCustomValueToken($, T) || $.isType(T.Semi))) {\n const val = $.SUBRULE2($.innerCustomValue, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n nodes!.push(val);\n }\n }\n end = $.CONSUME2(T.RParen);\n } else if ($.isType(T.LSquare)) {\n start = $.CONSUME(T.LSquare);\n while (!$.isType(T.RSquare) && (startsCustomValueToken($, T) || $.isType(T.Semi))) {\n const val = $.SUBRULE3($.innerCustomValue, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n nodes!.push(val);\n }\n }\n end = $.CONSUME(T.RSquare);\n } else {\n start = $.CONSUME(T.LCurly);\n while (!$.isType(T.RCurly) && (startsCustomValueToken($, T) || $.isType(T.Semi))) {\n const val = $.SUBRULE4($.innerCustomValue, { ARGS: [ctx] });\n if (!RECORDING_PHASE) {\n nodes!.push(val);\n }\n }\n end = $.CONSUME(T.RCurly);\n }\n\n if (RECORDING_PHASE) {\n return;\n }\n const location = $.endRule();\n let type: 'square' | 'curly' | undefined;\n switch (start!.image) {\n case '[':\n type = 'square';\n break;\n case '{':\n type = 'curly';\n break;\n }\n if (type) {\n const seqLoc = nodes!.length ? $.getLocationFromNodes(nodes!) : undefined;\n const seq = new Sequence(nodes!, undefined, seqLoc, $.context);\n return $.wrap(new Block($.wrap(seq, true, ctx), { type }, location, $.context), undefined, ctx);\n }\n const startNode = $.wrap(new Any(start!.image, { role: 'any' }, $.getLocationInfo(start!), $.context), undefined, ctx);\n const endNode = $.wrap(new Any(end!.image, { role: 'any' }, $.getLocationInfo(end!), $.context), undefined, ctx);\n return new Sequence([startNode, ...nodes!, endNode], undefined, location, $.context);\n };\n}\n\nexport function expressionValue(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n /** Can create a negative expression */\n let minus = $.OPTION(() => $.CONSUME(T.Minus));\n let node = $.OR([\n {\n ALT: () => {\n $.startRule();\n let escape: IToken | undefined;\n $.OPTION2(() => {\n escape = $.CONSUME(T.Tilde);\n });\n\n $.CONSUME(T.LParen);\n const innerCtx: RuleContext = {\n ...ctx,\n inner: true,\n allowComma: true,\n // Parentheses in Less enable \"math in parens\" semantics\n parenFrames: [...getParenFrames(ctx), true]\n };\n let node = $.SUBRULE($.valueList, { ARGS: [innerCtx] });\n\n // ~() paren escapes also support semicolons as separators: ~(1; 2; 3)\n let isSemiList = false;\n if (escape) {\n let semiNodes: Node[] = [];\n $.OPTION3(() => {\n $.CONSUME(T.Semi);\n isSemiList = true;\n semiNodes.push($.wrap(node, true));\n node = $.SUBRULE2($.valueList, { ARGS: [innerCtx] });\n semiNodes.push($.wrap(node, true));\n $.MANY({\n GATE: () => $.isType(T.Semi),\n DEF: () => {\n $.CONSUME2(T.Semi);\n node = $.SUBRULE3($.valueList, { ARGS: [innerCtx] });\n semiNodes.push($.wrap(node, true));\n }\n });\n });\n if (isSemiList) {\n node = new List(semiNodes, { sep: ';' });\n }\n }\n\n $.CONSUME(T.RParen);\n\n let location = $.endRule();\n node = $.wrap(node, 'both');\n return new Paren(node, { escaped: !!escape }, location, $.context);\n }\n },\n { ALT: () => $.SUBRULE($.value, { ARGS: [ctx] }) }\n ]);\n let location = $.endRule();\n if (minus) {\n return new Negative(node, undefined, location, $.context);\n }\n return node;\n };\n}\n\n/**\n * Add interpolation\n */\nexport function nthValue(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let nthValueAlt = (ctx: RuleContext = {}) => [\n { ALT: () => $.CONSUME(T.InterpolatedIdent) },\n { ALT: () => $.CONSUME(T.NthOdd) },\n { ALT: () => $.CONSUME(T.NthEven) },\n { ALT: () => $.CONSUME(T.Integer) },\n {\n ALT: () => {\n $.OR2([\n { ALT: () => $.CONSUME(T.NthSignedDimension) },\n { ALT: () => $.CONSUME(T.NthUnsignedDimension) },\n { ALT: () => $.CONSUME(T.NthSignedPlus) },\n { ALT: () => $.CONSUME(T.NthIdent) }\n ]);\n $.OPTION(() => {\n $.OR3([\n { ALT: () => $.CONSUME(T.SignedInt) },\n {\n ALT: () => {\n $.CONSUME(T.Minus);\n $.CONSUME(T.UnsignedInt);\n }\n }\n ]);\n });\n $.OPTION2(() => {\n $.CONSUME(T.Of);\n $.SUBRULE($.complexSelector, { ARGS: [ctx] });\n });\n }\n }\n ];\n\n return cssNthValue.call($, T, nthValueAlt)(ctx);\n };\n}\n\nexport function knownFunctions(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let functions = (ctx: RuleContext = {}) => [\n { ALT: () => $.SUBRULE($.urlFunction, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE2($.varFunction, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE3($.calcFunction, { ARGS: [ctx] }) },\n // colorFunction is already in cssKnownFunctions default, so we don't need to add it here\n { ALT: () => $.SUBRULE4($.ifFunction, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE5($.booleanFunction, { ARGS: [ctx] }) }\n ];\n\n return cssKnownFunctions.call($, T, functions)(ctx);\n };\n}\n\nexport function urlFunction(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n\n $.CONSUME(T.UrlStart);\n let node: Any | IToken | Node = $.OR([\n { ALT: () => $.SUBRULE($.string, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE($.varReference, { ARGS: [ctx] }) },\n { ALT: () => $.CONSUME(T.NonQuotedUrl) }\n ]);\n $.CONSUME(T.UrlEnd);\n\n if ($.RECORDING_PHASE) {\n return;\n }\n\n const location = $.endRule();\n if (!(node instanceof Node)) {\n const rawValue = node.image;\n const tokenLocation = $.getLocationInfo(node);\n if (rawValue.startsWith('@') || rawValue.startsWith('$')) {\n const resolved = getInterpolatedOrString(rawValue, tokenLocation, $.context);\n if (resolved instanceof Interpolated) {\n node = resolved;\n } else {\n node = new Reference(\n resolved,\n { type: rawValue.startsWith('$') ? 'property' : 'variable' },\n tokenLocation,\n $.context\n );\n }\n } else {\n node = new Any(rawValue, { role: 'urlvalue' }, tokenLocation, $.context);\n }\n }\n return new Url(node, undefined, location, $.context);\n };\n}\n\n/**\n * Override CSS calc() parsing so we can maintain parse-time `calcFrames`.\n * This is the parse-time analogue of `Call.evalNode`'s calcFrames++/--.\n */\nexport function calcFunction(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n\n $.CONSUME(T.Calc);\n const innerCtx = withCalcFrame(ctx, 1);\n const args = $.SUBRULE($.mathSum, { ARGS: [innerCtx] });\n $.CONSUME(T.RParen);\n\n const location = $.endRule();\n return new Call({\n name: 'calc',\n args: new List([args])\n }, undefined, location, $.context);\n };\n}\n\nexport function ifFunction(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n\n let name = $.CONSUME(T.IfFunction);\n let args = new List<Node>([]);\n let isCssBranch = false;\n const firstNode = $.SUBRULE($.guardInner, { ARGS: [{ ...ctx, inValueList: true }] });\n\n if ($.isType(T.Assign)) {\n isCssBranch = true;\n const branches: Node[] = [];\n const pushBranch = (condition: Node, value: Node) => {\n const sep = $.wrap(new Any(':', { role: 'operator' }, undefined, $.context), true);\n const loc = $.getLocationFromNodes([condition, value]);\n branches.push(new Sequence([$.wrap(condition, true), sep, $.wrap(value, true)], undefined, loc, $.context));\n };\n\n $.CONSUME(T.Assign);\n let branchValue = $.SUBRULE($.valueList, { ARGS: [{ ...ctx, inner: true }] });\n pushBranch(firstNode, branchValue);\n\n $.MANY({\n GATE: () => $.isType(T.Semi) && !$.isTypeAt(2, T.RParen),\n DEF: () => {\n $.CONSUME2(T.Semi);\n const condition = $.SUBRULE2($.guardInner, { ARGS: [{ ...ctx, inValueList: true }] });\n $.CONSUME2(T.Assign);\n const value = $.SUBRULE2($.valueList, { ARGS: [{ ...ctx, inner: true }] });\n pushBranch(condition, value);\n }\n });\n $.OPTION(() => $.CONSUME3(T.Semi));\n $.CONSUME2(T.RParen);\n\n const cssArgs = branches.length === 1\n ? branches[0]!\n : new List(branches, { sep: ';' }, $.getLocationFromNodes(branches), $.context);\n args = new List([cssArgs]);\n } else {\n isCssBranch = false;\n let node: Node = firstNode;\n const parenValue = node instanceof Paren ? node.get('value') : undefined;\n const condNode = parenValue instanceof Node ? parenValue : node;\n args = new List([condNode]);\n\n $.OR([\n {\n ALT: () => {\n $.CONSUME(T.Semi);\n node = $.SUBRULE2($.valueList, { ARGS: [{ ...ctx, allowAnonymousMixins: true }] });\n args = new List([...args.value, node], args.options, $.getLocationFromNodes([...args.value, node]), $.context);\n $.OPTION(() => {\n $.CONSUME4(T.Semi);\n node = $.SUBRULE3($.valueList, { ARGS: [{ ...ctx, allowAnonymousMixins: true }] });\n args = new List([...args.value, node], args.options, $.getLocationFromNodes([...args.value, node]), $.context);\n });\n }\n },\n {\n ALT: () => {\n $.CONSUME(T.Comma);\n node = $.SUBRULE($.callArgument, { ARGS: [{ ...ctx, allowAnonymousMixins: true }] });\n args = new List([...args.value, node], args.options, $.getLocationFromNodes([...args.value, node]), $.context);\n $.OPTION2(() => {\n $.CONSUME2(T.Comma);\n node = $.SUBRULE2($.callArgument, { ARGS: [{ ...ctx, allowAnonymousMixins: true }] });\n args = new List([...args.value, node], args.options, $.getLocationFromNodes([...args.value, node]), $.context);\n });\n }\n }\n ]);\n $.CONSUME3(T.RParen);\n }\n\n let location = $.endRule();\n let nameNode = new Reference('if', {\n type: 'function',\n fallbackValue: isCssBranch ? true : undefined\n }, $.getLocationInfo(name), $.context);\n const callNode = new Call({ name: nameNode, args }, undefined, location, $.context);\n return callNode;\n };\n}\n\nexport function booleanFunction(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n $.CONSUME(T.BooleanFunction);\n let arg: Node = $.SUBRULE($.guardInner, { ARGS: [{ ...ctx, inValueList: true }] });\n $.CONSUME(T.RParen);\n\n let location = $.endRule();\n const argValue = arg instanceof Paren ? arg.get('value') : undefined;\n const conditionNode = argValue instanceof Node ? argValue : arg;\n const exprNode = new Expression(conditionNode, { parens: true }, location, $.context);\n return exprNode;\n };\n}\n\nexport function varReference(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let node: Node | undefined = $.OR([\n {\n ALT: () => {\n let token = $.CONSUME(T.PropertyReference);\n if ($.RECORDING_PHASE) {\n return;\n }\n // Warn about $ident in custom property values - it's treated as literal text, not a property reference\n if (ctx.inCustomPropertyValue) {\n const atName = token.image;\n const ident = token.image.slice(1);\n $.warnDeprecation(\n `${atName} in custom property values is treated as literal text, not a property reference. Use \\${${ident}} if you want it to be evaluated.`,\n token,\n 'property-in-unknown-value'\n );\n return new Reference(\n { key: token.image.slice(1) },\n { type: 'property', role: 'ident' },\n $.getLocationInfo(token),\n $.context\n );\n }\n return new Reference(token.image.slice(1), { type: 'property' }, $.getLocationInfo(token), $.context);\n }\n },\n {\n ALT: () => {\n let token = $.CONSUME(T.NestedReference);\n if ($.RECORDING_PHASE) {\n return;\n }\n const raw = token.image;\n const type: 'variable' | 'property' = raw.startsWith('@') ? 'variable' : 'property';\n const key = getInterpolatedOrString(raw);\n if (ctx.inCustomPropertyValue && typeof key === 'string') {\n return new Reference({ key }, { type: 'variable', role: 'ident' }, $.getLocationInfo(token), $.context);\n }\n if (typeof key === 'string') {\n return new Reference(key, { type }, $.getLocationInfo(token), $.context);\n }\n return new Reference({ key }, { type }, $.getLocationInfo(token), $.context);\n }\n },\n {\n ALT: () => {\n let token = $.SUBRULE($.varName, { ARGS: [ctx] });\n if ($.RECORDING_PHASE) {\n return;\n }\n // Warn about @ident in custom property values - it's treated as literal text, not a variable reference\n if (ctx.inCustomPropertyValue) {\n const atName = token.image;\n const ident = token.image.slice(1);\n $.warnDeprecation(\n `${atName} in custom property values is treated as literal text, not a variable reference. Use @{${ident}} if you want it to be evaluated.`,\n token,\n 'variable-in-unknown-value'\n );\n return new Reference(\n { key: token.image.slice(1) },\n { type: 'variable', role: 'ident' },\n $.getLocationInfo(token),\n $.context\n );\n }\n return new Reference(token.image.slice(1), { type: 'variable' }, $.getLocationInfo(token), $.context);\n }\n }\n ]);\n $.OR2([\n {\n ALT: () => {\n /** This spreads a (list) value within a containing list when evaluated */\n let token = $.CONSUME(T.Ellipsis);\n if (!$.RECORDING_PHASE) {\n node = new Rest(node, undefined, $.getLocationFromNodes([node!, token]), $.context);\n }\n }\n },\n {\n /** Only variables can have accessors */\n GATE: () => {\n if (node?.options?.type !== 'variable') {\n return false;\n }\n let next = $.LA(1).tokenType;\n if (next !== T.LSquare && next !== T.LParen) {\n return false;\n }\n if (!$.noSep()) {\n return false;\n }\n return true;\n },\n ALT: () => {\n $.AT_LEAST_ONE({\n GATE: () => {\n let next = $.LA(1).tokenType;\n if (next !== T.LSquare && next !== T.LParen) {\n return false;\n }\n if (!$.noSep()) {\n return false;\n }\n return true;\n },\n DEF: () => {\n node = $.SUBRULE($.lookupOrCall, { ARGS: [{ ...ctx, node: node! }] });\n }\n });\n $.OPTION(() => {\n $.OPTION2(() => $.CONSUME(T.Gt));\n node = $.SUBRULE($.mixinReference, { ARGS: [{ ...ctx, node: node! }] });\n });\n }\n },\n { ALT: () => undefined }\n ]);\n\n return $.wrap(node!);\n };\n}\n\nexport function valueReference(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n return $.OR([\n { ALT: () => $.SUBRULE($.varReference, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE2($.mixinReference, { ARGS: [ctx] }) }\n ]);\n };\n}\n\nexport function functionCall(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const modernColorFunctions = new Set(['rgb', 'rgba', 'hsl', 'hsla']);\n const isModernColorCall = (name: string, args?: List<Node>) => {\n if (!modernColorFunctions.has(name.toLowerCase())) {\n return false;\n }\n if (!args || args.value.length !== 1) {\n return false;\n }\n const firstArg = args.value[0];\n return Boolean(isNode(firstArg, N.Sequence) && firstArg.value.length >= 2);\n };\n\n let funcAlt = (ctx: RuleContext = {}) => [\n {\n // Disambiguate known functions by their dedicated tokens\n GATE: () => {\n let tokenType = $.LA(1).tokenType;\n return tokenType === T.UrlStart\n || tokenType === T.Var\n || tokenType === T.Calc\n || tokenType === T.IfFunction\n || tokenType === T.BooleanFunction;\n },\n ALT: () => $.SUBRULE($.knownFunctions, { ARGS: [ctx] })\n },\n {\n // Generic function via FunctionStart token\n GATE: () => {\n let tokenType = $.LA(1).tokenType;\n return tokenType !== T.UrlStart\n && tokenType !== T.Var\n && tokenType !== T.Calc\n && tokenType !== T.IfFunction\n && tokenType !== T.BooleanFunction;\n },\n ALT: () => {\n $.startRule();\n const fnStart = $.CONSUME(T.FunctionStart);\n const fnNameForCtx = fnStart.image.slice(0, -1);\n let args: List<Node> | undefined;\n $.OPTION(() => args = $.SUBRULE2($.functionCallArgs, { ARGS: [{ ...ctx, currentFunctionName: fnNameForCtx }] }));\n $.CONSUME(T.RParen);\n const location = $.endRule();\n const nameValue = fnNameForCtx;\n if (nameValue === 'unit' && args?.value[1] instanceof Any) {\n const unitArg = args.value[1];\n const quotedUnit = new Quoted(unitArg.valueOf(), { quote: '\"' }, undefined, $.context);\n quotedUnit.pre = unitArg.pre;\n quotedUnit.post = unitArg.post;\n const newArgsData = [...args.value];\n newArgsData[1] = quotedUnit;\n args = new List(newArgsData, args.options, $.getLocationFromNodes(newArgsData), $.context);\n }\n const nameNode = new Reference(nameValue, { type: 'function', fallbackValue: true }, $.getLocationInfo(fnStart), $.context);\n /** Less / Sass functions we try to call that throw just get turned into calls. */\n const modernSyntax = isModernColorCall(nameValue, args);\n return new Call(\n { name: nameNode, args },\n { silentFail: true, ...(modernSyntax ? { modernSyntax: true } : {}) },\n location,\n $.context\n );\n }\n }\n ];\n\n return $.OR(funcAlt(ctx));\n };\n}\n\nexport function functionCallArgs(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n\n // Inside function arguments, allow inner tokens like ':'\n const prevInner = ctx.inner;\n ctx.inner = true;\n // Calls intentionally push a `false` paren frame (matches `Call.evalNode`)\n const argCtx: RuleContext = {\n ...ctx,\n allowComma: false,\n parenFrames: [...getParenFrames(ctx), false],\n detachedRulesetUsage: 'function-arg',\n inFunctionArgs: true\n };\n let commaNodes: Node[];\n let semiNodes: Node[] = [];\n let isSemiList = false;\n try {\n let node = $.SUBRULE($.callArgument, { ARGS: [argCtx] });\n\n commaNodes = [$.wrap(node, true)];\n\n // First, consume any comma-separated arguments\n $.MANY({\n GATE: () => $.isType(T.Comma),\n DEF: () => {\n $.CONSUME(T.Comma);\n node = $.SUBRULE2($.callArgument, { ARGS: [argCtx] });\n commaNodes!.push($.wrap(node, true));\n }\n });\n\n // Then, optionally switch to semicolon-separated list and continue with semicolons\n $.OPTION(() => {\n $.CONSUME(T.Semi);\n isSemiList = true;\n\n // Aggregate the previous set of comma-nodes as the first semi item\n if (commaNodes.length > 1) {\n semiNodes.push(new List(commaNodes, undefined, $.getLocationFromNodes(commaNodes), $.context));\n } else {\n semiNodes.push(commaNodes[0]!);\n }\n\n node = $.SUBRULE3($.callArgument, { ARGS: [{ ...argCtx, allowComma: true }] });\n semiNodes.push($.wrap(node, true));\n\n $.MANY2({\n GATE: () => $.isType(T.Semi),\n DEF: () => {\n $.CONSUME2(T.Semi);\n node = $.SUBRULE4($.callArgument, { ARGS: [{ ...argCtx, allowComma: true }] });\n semiNodes.push($.wrap(node, true));\n }\n });\n });\n } finally {\n ctx.inner = prevInner;\n }\n $.endRule();\n const nodes = isSemiList ? semiNodes! : commaNodes!;\n return new List(nodes, isSemiList ? { sep: ';' } : undefined);\n };\n}\n\nexport function value(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n if ($.isType(T.Percent)) {\n // no-op: preserved from original\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let _isMixinReference = undefined as boolean | undefined;\n const isMixinReference = () => {\n if (_isMixinReference === undefined) {\n let tt1 = $.LA(1).tokenType;\n let tt2 = $.LA(2).tokenType;\n /**\n * We'll allow a few \"bare\" mixin references without parens\n * or square brackets, but not if they'll conflict with\n * other syntax.\n */\n _isMixinReference =\n tt1 === T.DotName\n || tt1 === T.HashName\n || tt1 === T.InterpolatedSelector\n || (\n (\n tt1 === T.ColorIdentStart\n || tt1 === T.InterpolatedSelector\n ) && (\n tt2 === T.Gt\n || tt2 === T.DotName\n || tt2 === T.HashName\n || tt2 === T.InterpolatedSelector\n || (\n $.noSep(1)\n && (\n tt2 === T.LParen\n || tt2 === T.LSquare\n || tt2 === T.HashName\n || tt2 === T.DotName\n )\n )\n )\n );\n }\n return _isMixinReference;\n };\n let node: Node = $.OR([\n {\n GATE: () => $.check(T.FunctionStart),\n ALT: () => $.SUBRULE($.functionCall, { ARGS: [ctx] })\n },\n {\n GATE: () => $.isType(T.Star) && $.isTypeAt(2, T.LSquare),\n ALT: () => $.SUBRULE($.selectorCapture, { ARGS: [ctx] })\n },\n {\n GATE: isMixinReference,\n ALT: () => $.SUBRULE($.mixinReference, { ARGS: [ctx] })\n },\n {\n GATE: () => !isMixinReference(),\n ALT: () => $.CONSUME(T.Color)\n },\n {\n GATE: () => !isMixinReference(),\n ALT: () => $.CONSUME2(T.Ident)\n },\n { ALT: () => $.SUBRULE($.varReference, { ARGS: [ctx] }) },\n { ALT: () => $.CONSUME(T.DefaultGuardFunc) },\n { ALT: () => $.CONSUME(T.Dimension) },\n { ALT: () => $.CONSUME(T.Number) },\n {\n GATE: () => ctx.currentFunctionName === 'unit',\n ALT: () => $.CONSUME(T.Percent)\n },\n { ALT: () => $.CONSUME(T.UnicodeRange) },\n { ALT: () => $.SUBRULE($.string, { ARGS: [ctx] }) },\n { ALT: () => $.CONSUME(T.JavaScript) },\n /** Explicitly not marked as an ident */\n { ALT: () => $.CONSUME(T.When) },\n { ALT: () => $.SUBRULE($.squareValue, { ARGS: [ctx] }) },\n {\n GATE: () => $.looseMode && !!ctx.inner,\n ALT: () => $.CONSUME(T.Colon)\n },\n {\n /** e.g. alpha(opacity=@var) */\n GATE: () => $.looseMode && !!ctx.inFunctionArgs,\n ALT: () => $.CONSUME(T.Eq)\n },\n {\n GATE: () => $.looseMode,\n ALT: () => $.CONSUME(T.Unknown)\n },\n {\n /** e.g. progid:DXImageTransform.Microsoft.Blur(pixelradius=2) */\n GATE: () => $.legacyMode,\n ALT: () => $.CONSUME(T.LegacyMSFilter)\n }\n ]);\n if (!$.RECORDING_PHASE) {\n if (!(node instanceof Node)) {\n node = $.processValueToken(node);\n }\n return $.wrap(node);\n }\n };\n}\n\nexport function string(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let stringAlt = [\n {\n GATE: () => $.isType(T.SingleQuoteStart),\n ALT: () => {\n $.startRule();\n let quote: IToken = $.CONSUME(T.SingleQuoteStart);\n let contents: IToken | undefined;\n $.OPTION2(() => contents = $.CONSUME(T.SingleQuoteStringContents));\n $.CONSUME(T.SingleQuoteEnd);\n let quoteImg: string = quote.image;\n let escaped = false;\n if (quoteImg.startsWith('~')) {\n escaped = true;\n quoteImg = quoteImg.slice(1);\n }\n let location = $.endRule();\n let value = contents?.image;\n if (escaped && value) {\n value = value.replace(/\\\\(?:\\r\\n?|\\n|\\f)/g, '\\n');\n }\n\n const quoteChar = quoteImg as '\"' | '\\'';\n if (value && (value.includes('@{') || value.includes('${'))) {\n return new Quoted(processStringInterpolation(value, location, $.context), { quote: quoteChar, escaped }, location, $.context);\n }\n\n return new Quoted(new Any(value ?? '', { role: 'any' }), { quote: quoteChar, escaped }, location, $.context);\n }\n },\n {\n GATE: () => $.isType(T.DoubleQuoteStart),\n ALT: () => {\n $.startRule();\n let quote: IToken = $.CONSUME(T.DoubleQuoteStart);\n let contents: IToken | undefined;\n $.OPTION3(() => contents = $.CONSUME(T.DoubleQuoteStringContents));\n $.CONSUME(T.DoubleQuoteEnd);\n let quoteImg: string = quote.image;\n let escaped = false;\n if (quoteImg.startsWith('~')) {\n escaped = true;\n quoteImg = quoteImg.slice(1);\n }\n let location = $.endRule();\n let value = contents?.image;\n if (escaped && value) {\n value = value.replace(/\\\\(?:\\r\\n?|\\n|\\f)/g, '\\n');\n }\n\n const quoteChar = quoteImg as '\"' | '\\'';\n if (value && (value.includes('@{') || value.includes('${'))) {\n return new Quoted(processStringInterpolation(value, location, $.context), { quote: quoteChar, escaped }, location, $.context);\n }\n\n return new Quoted(new Any(value ?? '', { role: 'any' }), { quote: quoteChar, escaped }, location, $.context);\n }\n }\n ];\n\n return $.OR(stringAlt);\n };\n}\n\n// ── String interpolation helpers ──────────────────────────────────────\n\n/**\n * Find interpolation patterns like @{...} or ${...}, handling nested braces.\n * Returns an array of { start, end, prefix, content } for each match.\n */\nfunction findInterpolations(value: string): Array<{ start: number; end: number; prefix: string; content: string }> {\n const matches: Array<{ start: number; end: number; prefix: string; content: string }> = [];\n let i = 0;\n\n while (i < value.length) {\n // Look for @{ or ${\n if ((value[i] === '@' || value[i] === '$') && value[i + 1] === '{') {\n const prefix = value[i]!;\n const start = i;\n i += 2; // Skip @{ or ${\n let braceCount = 1;\n const contentStart = i;\n\n // Find matching closing brace, counting nested braces\n while (i < value.length && braceCount > 0) {\n if (value[i] === '{') {\n braceCount++;\n } else if (value[i] === '}') {\n braceCount--;\n }\n i++;\n }\n\n if (braceCount === 0) {\n const content = value.slice(contentStart, i - 1);\n matches.push({ start, end: i, prefix, content });\n }\n } else {\n i++;\n }\n }\n\n return matches;\n}\n\n// Helper function to process string interpolation (handles nested @{...} patterns)\nfunction processStringInterpolation(value: string, location: LocationInfo, context: TreeContext): Any | Interpolated {\n const matches = findInterpolations(value);\n\n if (matches.length === 0) {\n return new Any(value, { role: 'any' }, location, context);\n }\n\n const replacements: Node[] = [];\n let source = value;\n let offset = 0;\n\n for (const match of matches) {\n const adjustedStart = match.start - offset;\n const adjustedEnd = match.end - offset;\n const before = source.slice(0, adjustedStart);\n const after = source.slice(adjustedEnd);\n source = before + INTERPOLATION_PLACEHOLDER + after;\n offset += (match.end - match.start) - INTERPOLATION_PLACEHOLDER.length;\n\n // Recursively process the content in case it has nested interpolation\n const innerResult = processStringInterpolation(match.content, location, context);\n if (innerResult instanceof Interpolated) {\n // Nested interpolation in string contexts still resolves through a reference,\n // but must remain expression-wrapped in Jess output.\n const nestedRef = new Reference({ key: innerResult }, { type: 'variable', role: 'ident' }, location, context);\n replacements.push(new Expression(nestedRef, undefined, location, context));\n } else {\n // Simple interpolation reference\n replacements.push(createInterpolatedReference(match.prefix, match.content, location, context));\n }\n }\n\n return new Interpolated({ source, replacements }, { role: 'ident' }, location, context);\n}\n\nexport function mathValue(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let valueAlt = (ctx: RuleContext = {}) => [\n { ALT: () => $.CONSUME(T.AtKeyword) },\n { ALT: () => $.CONSUME(T.Number) },\n { ALT: () => $.CONSUME(T.Dimension) },\n // Allow identifiers like channel names in color space calcs (e.g., calc(l - 0.1))\n { ALT: () => $.CONSUME(T.Ident) },\n { ALT: () => $.SUBRULE($.functionCall, { ARGS: [ctx] }) },\n {\n /** Only allow escaped strings in calc */\n GATE: () => $.LA(1).image.startsWith('~'),\n ALT: () => $.SUBRULE2($.string, { ARGS: [ctx] })\n },\n {\n /** For some reason, e() goes here instead of $.function */\n GATE: () => !$.isTypeAt(2, T.LParen),\n ALT: () => $.CONSUME(T.MathConstant)\n },\n { ALT: () => $.SUBRULE($.mathParen, { ARGS: [ctx] }) }\n ];\n\n return cssMathValue.call($, T, valueAlt)(ctx);\n };\n}\n\nexport function mathProduct(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n\n let left: Node = $.SUBRULE($.mathValue, { ARGS: [ctx] });\n\n while ($.isType(T.Star) || $.isType(T.Divide)) {\n const op: IToken = $.isType(T.Star)\n ? $.CONSUME(T.Star)\n : $.CONSUME(T.Divide);\n const right: Node = $.SUBRULE2($.mathValue, { ARGS: [ctx] });\n\n if (!RECORDING_PHASE) {\n const opStr = op.image as Operator;\n left = new Operation([left, opStr, right], { inCalc: true }, undefined, $.context);\n }\n }\n\n if (RECORDING_PHASE) {\n return;\n }\n left._location = $.endRule();\n return left;\n };\n}\n\nexport function mathSum(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const RECORDING_PHASE = $.RECORDING_PHASE;\n $.startRule();\n\n let left: Node = $.SUBRULE($.mathProduct, { ARGS: [ctx] });\n\n $.MANY(() => {\n const op: IToken = $.CONSUME(T.AdditionOperator);\n const right: Node = $.SUBRULE2($.mathProduct, { ARGS: [ctx] });\n\n if (!RECORDING_PHASE) {\n const opStr = op.image as Operator;\n left = new Operation([left, opStr, right], { inCalc: true }, undefined, $.context);\n }\n });\n\n if (RECORDING_PHASE) {\n return;\n }\n left._location = $.endRule();\n return left;\n };\n}\n","import type { RuleContext } from '../lessRecursiveParser.js';\nimport type { TokenMap } from '../lessRecursiveParser.js';\nimport type { IToken } from 'chevrotain';\nimport { NoViableAltException } from 'chevrotain';\nimport { productions as cssProductions } from '@jesscss/css-parser';\nimport {\n type TreeContext,\n type LocationInfo,\n Node,\n Any,\n Condition,\n type ConditionOperator,\n DefaultGuard,\n Paren,\n List,\n Sequence,\n Call,\n Reference,\n Interpolated,\n Quoted,\n Rest,\n VarDeclaration,\n StyleImport,\n type Url,\n isNode,\n N,\n INTERPOLATION_PLACEHOLDER\n} from '@jesscss/core';\nimport { getInterpolatedOrString } from '../utils.js';\n\n/** Use `any` for `this` to avoid structural incompatibility between LessRecursiveParser and CssRecursiveParser */\ntype P = any;\n\nfunction getParenFrames(ctx: RuleContext | undefined): boolean[] {\n return (ctx?.parenFrames as boolean[] | undefined) ?? [];\n}\n\nconst interpolatedRegex = /([$@])\\{([^}]+)\\}/g;\n\nconst createInterpolatedReference = (\n prefix: string,\n value: string,\n location: LocationInfo,\n context: TreeContext\n): Reference => {\n const isProperty = prefix === '$';\n const key = isProperty\n ? new Quoted(value, { quote: '\\'' }, location, context)\n : value;\n return new Reference(\n { key },\n { type: isProperty ? 'property' : 'variable', role: 'ident' },\n location,\n context\n );\n};\n\nconst getInterpolated = (name: string, location: LocationInfo, context: TreeContext): Interpolated => {\n const replacements: Node[] = [];\n let result: RegExpExecArray | null;\n let source = name;\n interpolatedRegex.lastIndex = 0;\n while (result = interpolatedRegex.exec(name)) {\n const [match, propOrVar, value] = result;\n source = source.replace(match, INTERPOLATION_PLACEHOLDER);\n const reference = createInterpolatedReference(propOrVar!, value!, location, context);\n replacements.push(reference);\n }\n return new Interpolated({ source, replacements }, { role: 'ident' }, location, context);\n};\n\nfunction isDefaultGuardCall(node: Node | undefined): node is Call {\n if (!node || !isNode(node, N.Call)) {\n return false;\n }\n const callName = node.name;\n const callNameStr = String(\n (typeof callName === 'object' && callName !== null && 'valueOf' in callName)\n ? callName.valueOf()\n : callName ?? ''\n );\n if (callNameStr === 'default' || callNameStr === '??') {\n return true;\n }\n if (callName instanceof Reference) {\n const key = callName.key;\n const keyStr = String(\n (typeof key === 'object' && key !== null && 'valueOf' in key)\n ? key.valueOf()\n : key ?? ''\n );\n return keyStr === 'default' || keyStr === '??';\n }\n return false;\n}\n\n// Save CSS production factory for super calls\nconst cssUnknownAtRule = cssProductions.unknownAtRule;\n\nfunction isGuardComparisonToken(tt: unknown, T: TokenMap) {\n return tt === T.CompareOperator\n || tt === T.Eq\n || tt === T.Gt\n || tt === T.GtEq\n || tt === T.GtEqAlias\n || tt === T.Lt\n || tt === T.LtEq\n || tt === T.LtEqAlias;\n}\n\nfunction normalizeComparisonOperator(op: string): ConditionOperator {\n if (op === '=>') {\n return '>=';\n }\n if (op === '=<') {\n return '<=';\n }\n return op as ConditionOperator;\n}\n\nexport function guard(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.CONSUME(T.When);\n return $.OR([\n {\n GATE: () => !!ctx.inValueList,\n ALT: () => $.SUBRULE($.comparison, { ARGS: [ctx] })\n },\n {\n ALT: () => {\n ctx.allowComma = true;\n const node = $.SUBRULE($.guardOr, { ARGS: [ctx] });\n return node;\n }\n }\n ]);\n };\n}\n\n/**\n * 'or' expression\n * Allows an (outer) comma like historical media queries\n */\nexport function guardOr(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n\n let left = $.SUBRULE($.guardAnd, { ARGS: [ctx] });\n let right: Node | undefined;\n $.MANY({\n GATE: () => (ctx.allowComma && $.isType(T.Comma)) || $.isType(T.Or),\n DEF: () => {\n /**\n * Nest expressions within expressions for correct\n * order of operations.\n */\n $.OR([\n { ALT: () => $.CONSUME(T.Comma) },\n { ALT: () => $.CONSUME(T.Or) }\n ]);\n right = $.SUBRULE2($.guardAnd, { ARGS: [ctx] });\n let location = $.endRule();\n $.startRule();\n left = new Condition(\n [$.wrap(left, true), 'or', $.wrap(right!)],\n undefined,\n location,\n $.context\n );\n }\n });\n $.endRule();\n return left;\n };\n}\n\nexport function guardDefault(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let guard = $.OR([\n { ALT: () => $.CONSUME(T.DefaultGuardIdent) },\n { ALT: () => $.CONSUME(T.DefaultGuardFunc) }\n ]);\n if ($.RECORDING_PHASE) {\n return;\n }\n ctx.hasDefault = true;\n return new DefaultGuard(guard.image, undefined, $.getLocationInfo(guard), $.context);\n };\n}\n\n/**\n * 'and' and 'or' expressions\n *\n * In Media queries level 4, you cannot have\n * `([expr]) or ([expr]) and ([expr])` because\n * of evaluation order ambiguity.\n * However, Less allows it.\n */\nexport function guardAnd(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let left: Node;\n $.MANY_SEP({\n SEP: T.And,\n DEF: () => {\n let not: IToken | undefined;\n $.OPTION(() => not = $.CONSUME(T.Not));\n let allowComma = ctx.allowComma;\n ctx.allowComma = false;\n let right: Node;\n try {\n right = $.OR([\n { ALT: () => $.SUBRULE($.guardInParens, { ARGS: [ctx] }) },\n {\n GATE: () => {\n const tokenType = $.LA(1).tokenType;\n return tokenType !== T.Not\n && tokenType !== T.DefaultGuardFunc\n && tokenType !== T.DefaultGuardIdent;\n },\n ALT: () => $.SUBRULE($.expressionSum, { ARGS: [ctx] })\n }\n ]);\n $.OPTION2({\n GATE: () => isGuardComparisonToken($.LA(1).tokenType, T),\n DEF: () => {\n const op = $.CONSUME(T.CompareOperator);\n const compareRight = $.SUBRULE2($.expressionSum, { ARGS: [ctx] });\n if (!$.RECORDING_PHASE) {\n right = new Condition(\n [\n $.wrap(right, true),\n normalizeComparisonOperator(op.image),\n $.wrap(compareRight)\n ],\n undefined,\n $.getLocationFromNodes([right, compareRight]),\n $.context\n );\n }\n }\n });\n } finally {\n ctx.allowComma = allowComma;\n }\n if (!$.RECORDING_PHASE) {\n if (isDefaultGuardCall(right!)) {\n ctx.hasDefault = true;\n const location = Array.isArray(right!.location) && right!.location.length === 6\n ? right!.location as LocationInfo\n : undefined;\n right = new DefaultGuard('default()', undefined, location, $.context);\n }\n if (not) {\n let [,,, endOffset, endLine, endColumn] = right.location!;\n let [startOffset, startLine, startColumn] = $.getLocationInfo(not);\n right = new Condition(\n [$.wrap(right, true)],\n { negate: true },\n [startOffset!, startLine!, startColumn!, endOffset!, endLine!, endColumn!],\n $.context\n );\n }\n if (!left) {\n left = right;\n return;\n }\n left = new Condition(\n [$.wrap(left, true), 'and', $.wrap(right)],\n undefined,\n $.getLocationFromNodes([left, right]),\n $.context\n );\n }\n }\n });\n return left!;\n };\n}\n\nexport function guardInParens(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext) => {\n $.startRule();\n let node = $.OR([\n { ALT: () => $.SUBRULE($.guardDefault, { ARGS: [ctx] }) },\n {\n ALT: () => {\n $.CONSUME(T.LParen);\n let node = $.SUBRULE($.guardInner, { ARGS: [ctx] });\n $.CONSUME(T.RParen);\n return node;\n }\n }\n ]);\n\n if (isDefaultGuardCall(node)) {\n ctx.hasDefault = true;\n const location = Array.isArray(node.location) && node.location.length === 6\n ? node.location as LocationInfo\n : undefined;\n node = new DefaultGuard('default()', undefined, location, $.context);\n }\n node = $.wrap(node, 'both');\n return new Paren(node, undefined, $.endRule(), $.context);\n };\n}\n\n// The inner content of a guard inside parentheses\nexport function guardInner(this: P, _T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n return $.SUBRULE($.guardOr, { ARGS: [ctx] });\n };\n}\n\nexport function guardWithConditionValue(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n if ($.isType(T.DefaultGuardIdent) || $.isType(T.DefaultGuardFunc)) {\n $.OR([\n { ALT: () => $.CONSUME(T.DefaultGuardIdent) },\n { ALT: () => $.CONSUME(T.DefaultGuardFunc) }\n ]);\n return;\n }\n return $.SUBRULE($.guardInParens, { ARGS: [ctx] });\n };\n}\n\nexport function guardWithCondition(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.SUBRULE($.guardWithConditionValue, { ARGS: [ctx] });\n $.AT_LEAST_ONE(() => {\n $.OR([\n { ALT: () => $.CONSUME(T.Or) },\n { ALT: () => $.CONSUME(T.And) },\n { ALT: () => $.CONSUME(T.Comma) }\n ]);\n $.SUBRULE2($.guardWithConditionValue, { ARGS: [ctx] });\n });\n };\n}\n\n/**\n * Currently, Less only allows a single comparison expression,\n * unlike Media Queries Level 4, which allows a left and right\n * comparison.\n */\nexport function comparison(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let left = $.SUBRULE($.expressionSum, { ARGS: [ctx] });\n const op = $.CONSUME(T.CompareOperator);\n let right = $.SUBRULE2($.expressionSum, { ARGS: [ctx] });\n if (isDefaultGuardCall(right)) {\n ctx.hasDefault = true;\n const location = Array.isArray(right.location) && right.location.length === 6\n ? right.location as LocationInfo\n : undefined;\n right = new DefaultGuard('default()', undefined, location, $.context);\n }\n left = new Condition(\n [$.wrap(left, true), normalizeComparisonOperator(op.image), $.wrap(right)],\n undefined,\n $.getLocationFromNodes([left, right]),\n $.context\n );\n return left;\n };\n}\n\n/**\n * Less (perhaps unwisely) allows bubbling of normally document-root\n * at-rules, so we need to override CSS here.\n */\nexport function innerAtRule(this: P, _T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}): Node => {\n return $.OR([\n { ALT: () => $.SUBRULE($.mediaAtRule, { ARGS: [{ ...ctx, inner: true }] }) },\n { ALT: () => $.SUBRULE($.supportsAtRule, { ARGS: [{ ...ctx, inner: true }] }) },\n { ALT: () => $.SUBRULE($.layerAtRule, { ARGS: [{ ...ctx, inner: true }] }) },\n { ALT: () => $.SUBRULE($.containerAtRule, { ARGS: [{ ...ctx, inner: true }] }) },\n { ALT: () => $.SUBRULE($.keyframesAtRule, { ARGS: [{ ...ctx, inner: true }] }) },\n { ALT: () => $.SUBRULE($.documentAtRule, { ARGS: [{ ...ctx, inner: true }] }) },\n { ALT: () => $.SUBRULE($.importAtRule, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE($.pageAtRule, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE($.fontFaceAtRule, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE($.nestedAtRule, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE($.nonNestedAtRule, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE($.unknownAtRule, { ARGS: [{ ...ctx, inner: true }] }) }\n ]);\n };\n}\n\n/**\n * Less override: allow variable reference as the first segment of a layer-name\n * CSS: <ident> ('.' <ident>)*\n * Less: (<var-ref> | <ident>) ('.' <ident>)*\n */\nexport function layerName(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n let RECORDING_PHASE = $.RECORDING_PHASE;\n let nodes: Node[];\n if (!RECORDING_PHASE) {\n nodes = [];\n }\n\n // First segment: variable reference or plain ident\n const first = $.OR([\n { ALT: () => $.SUBRULE($.valueReference, { ARGS: [ctx] }) },\n {\n GATE: () => $.isType(T.Ident),\n ALT: () => $.CONSUME(T.Ident)\n }\n ]);\n\n if (!RECORDING_PHASE) {\n if (first instanceof Node) {\n nodes!.push($.wrap(first));\n } else {\n nodes!.push($.wrap($.processValueToken(first)));\n }\n }\n\n // Remaining segments: dot + ident (same as CSS)\n $.MANY({\n GATE: $.noSep.bind($),\n DEF: () => {\n const seg = $.CONSUME(T.DotName);\n if (!RECORDING_PHASE) {\n nodes!.push($.wrap($.processValueToken(seg)));\n }\n }\n });\n\n if (RECORDING_PHASE) {\n return;\n }\n const loc = $.endRule();\n return new Sequence(nodes!, undefined, loc, $.context);\n };\n}\n\n/**\n * Less override: allow variable reference for @keyframes name\n * CSS: Ident | String\n * Less: valueReference | Ident | String\n */\nexport function keyframesName(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let node: Node | undefined;\n $.OR([\n { ALT: () => node = $.SUBRULE($.valueReference, { ARGS: [ctx] }) },\n {\n GATE: () => $.isType(T.Ident) && !$.isType(T.InterpolatedIdent),\n ALT: () => {\n const tok = $.CONSUME(T.Ident);\n node = $.wrap($.processValueToken(tok));\n } },\n { ALT: () => node = $.SUBRULE($.string, { ARGS: [] }) }\n ]);\n return node!;\n };\n}\n\n/**\n * One of the rare rules that returns a token, because\n * other rules will transform it differently.\n */\nexport function mixinName(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n /** e.g. .mixin, #mixin */\n let name = $.OR([\n { ALT: () => $.CONSUME(T.HashName) },\n { ALT: () => $.CONSUME(T.ColorIdentStart) },\n { ALT: () => $.CONSUME(T.DotName) },\n { ALT: () => $.CONSUME(T.InterpolatedIdent) },\n { ALT: () => $.CONSUME(T.InterpolatedSelector) }\n ]);\n if ($.RECORDING_PHASE) {\n return;\n }\n const asReference = ctx.asReference;\n let nameNode: Node;\n let nameValue = name.image;\n let location = $.getLocationInfo(name);\n if (nameValue.includes('@') || nameValue.includes('$')) {\n const interpolated = getInterpolated(nameValue, location, $.context);\n nameNode = interpolated;\n if (asReference) {\n if (isNode(ctx.node, N.Reference) && ctx.node.options.type === 'mixin-ruleset') {\n nameNode = new Reference({ target: ctx.node, key: interpolated }, { type: 'mixin-ruleset', role: 'name' }, location, $.context);\n } else {\n const target = ctx.node as Node | undefined;\n nameNode = new Reference({ target: target instanceof Call ? target : target instanceof Reference ? target : undefined, key: interpolated }, { type: 'mixin-ruleset', role: 'name' }, location, $.context);\n }\n }\n } else {\n if (asReference) {\n // If target is a Reference with matching type, merge keys instead of nesting\n if (isNode(ctx.node, N.Reference) && ctx.node.options.type === 'mixin-ruleset') {\n const existingKey = ctx.node.key;\n let mergedKeys: string[];\n if (Array.isArray(existingKey)) {\n mergedKeys = [...existingKey];\n } else {\n mergedKeys = [String(existingKey)];\n }\n mergedKeys.push(nameValue);\n nameNode = new Reference(\n { key: mergedKeys.length === 1 ? mergedKeys[0]! : mergedKeys },\n { type: 'mixin-ruleset', role: 'name' },\n location,\n $.context\n );\n } else {\n const target = ctx.node as Node | undefined;\n nameNode = new Reference({ target: target instanceof Call ? target : target instanceof Reference ? target : undefined, key: nameValue }, { type: 'mixin-ruleset', role: 'name' }, location, $.context);\n }\n } else {\n nameNode = $.wrap(new Any(nameValue, { role: 'name' }, $.getLocationInfo(name), $.context), true);\n }\n }\n return nameNode;\n };\n}\n\n/**\n * Used within a value. These can be\n * chained more recursively, unlike\n * Less 1.x-4.x\n * e.g. .mixin1() > .mixin2[@val1].ns() > .sub-mixin[@val2]\n *\n * This production intelligently decides whether to produce a Call or Reference\n * based on whether there are parentheses at the end:\n * - foo: #id; // Reference\n * - foo: .class; // Reference\n * - foo: #id > .scoped; // Reference\n * - foo: #id > .scoped(); // Call\n * - foo: #id[]; // Reference with accessor\n * - foo: #id > .scoped[foo]; // Reference with accessor\n * - foo: #id > .scoped[@ref](); // Call with accessor\n */\nexport function mixinReference(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let leftNode = $.SUBRULE($.mixinName, { ARGS: [{ ...ctx, asReference: true }] });\n\n $.MANY({\n GATE: () => {\n let next = $.LA(1).tokenType;\n return $.noSep() && (next === T.LParen || next === T.LSquare);\n },\n DEF: () => {\n leftNode = $.SUBRULE($.lookupOrCall, { ARGS: [{ ...ctx, node: leftNode }] });\n }\n });\n\n $.OPTION(() => {\n $.OPTION2(() => $.CONSUME(T.Gt));\n leftNode = $.SUBRULE($.mixinReference, { ARGS: [{ ...ctx, node: leftNode }] });\n });\n\n return leftNode;\n };\n}\n\nexport function mixinArgs(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n let args: List | undefined;\n // Check for whitespace before the opening paren (before consuming)\n const hasWhitespace = !$.noSep();\n const openingParenToken = hasWhitespace ? $.LA(1) : undefined;\n\n $.CONSUME(T.LParen);\n // Clear ctx.node when parsing arguments - arguments should start fresh, not inherit the parent node\n // Calls intentionally push a `false` paren frame (matches `Call.evalNode`)\n const argCtx: RuleContext = {\n ...ctx,\n node: undefined,\n allowComma: false,\n parenFrames: [...getParenFrames(ctx), false],\n detachedRulesetUsage: ctx.isDefinition ? 'default-param' : 'mixin-arg'\n };\n if (!$.isType(T.RParen)) {\n args = $.SUBRULE($.mixinArgList, { ARGS: [argCtx] });\n }\n $.CONSUME(T.RParen);\n\n // Check for whitespace warning AFTER consuming closing paren\n // Now we can check what comes next to determine if it's actually a definition\n if (hasWhitespace && openingParenToken) {\n const nextAfterParens = $.LA(1).tokenType;\n const isActuallyDefinition = nextAfterParens === T.LCurly || nextAfterParens === T.When;\n // Only warn if it's NOT a definition (i.e., it's a mixin call)\n if (!isActuallyDefinition) {\n $.warnDeprecation(\n 'Whitespace between a mixin name and parentheses for a mixin call is deprecated',\n openingParenToken,\n 'mixin-call-whitespace'\n );\n }\n }\n\n return args;\n };\n}\n\nexport function lookupOrCall(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n return $.OR([\n {\n ALT: () => {\n let keyToken: IToken | undefined;\n $.CONSUME(T.LSquare);\n $.OPTION(() => keyToken = $.OR2([\n { ALT: () => $.CONSUME(T.NestedReference) },\n { ALT: () => $.CONSUME(T.AtKeyword) },\n { ALT: () => $.CONSUME(T.PropertyReference) },\n { ALT: () => $.CONSUME(T.InterpolatedIdent) },\n {\n GATE: () => !$.isType(T.NestedReference)\n && !$.isType(T.AtKeyword)\n && !$.isType(T.PropertyReference)\n && !$.isType(T.InterpolatedIdent)\n && $.isType(T.Ident),\n ALT: () => $.CONSUME(T.Ident)\n }\n ]));\n $.CONSUME(T.RSquare);\n if ($.RECORDING_PHASE) {\n return;\n }\n let ref: Reference;\n const targetNode = ctx.node;\n const target = targetNode instanceof Call ? targetNode : targetNode instanceof Reference ? targetNode : undefined;\n if (keyToken) {\n let tokenStr = keyToken.image;\n let type: 'variable' | 'property' = tokenStr.startsWith('@') ? 'variable' : 'property';\n if (keyToken.tokenType === T.NestedReference) {\n let tokenStr = keyToken.image;\n if (!tokenStr.startsWith('$') && !tokenStr.startsWith('@')) {\n tokenStr = '$' + tokenStr;\n }\n }\n let result = getInterpolatedOrString(tokenStr, $.getLocationInfo(keyToken), $.context);\n\n const targetType = isNode(target, N.Reference) ? target.options.type : undefined;\n const shouldMergeKeys = targetType === 'mixin' || targetType === 'mixin-ruleset' || targetType === 'ruleset';\n if (isNode(target, N.Reference) && target.options.type === type && typeof result === 'string' && shouldMergeKeys) {\n const existingKey = target.key;\n let mergedKeys: string[];\n if (Array.isArray(existingKey)) {\n mergedKeys = [...existingKey];\n } else {\n mergedKeys = [String(existingKey)];\n }\n mergedKeys.push(result);\n ref = new Reference(\n { key: mergedKeys.length === 1 ? mergedKeys[0]! : mergedKeys },\n { type },\n $.endRule(),\n $.context\n );\n } else {\n ref = new Reference({ target, key: result }, { type }, $.endRule(), $.context);\n }\n } else {\n ref = new Reference({ target, key: -1 }, { type: 'index' }, $.endRule(), $.context);\n }\n /** Reference targets will technically precede the reference, so we need to update the location to the target start location */\n if (target) {\n let [targetStartOffset, targetStartLine, targetStartColumn] = target.location!;\n ref.location[0] = targetStartOffset;\n ref.location[1] = targetStartLine;\n ref.location[2] = targetStartColumn;\n }\n return ref;\n }\n },\n {\n ALT: () => {\n let args = $.SUBRULE($.mixinArgs, { ARGS: [ctx] });\n if ($.RECORDING_PHASE) {\n return;\n }\n return new Call({ name: ctx.node!, args }, undefined, $.endRule(), $.context);\n }\n }\n ]);\n };\n}\n\n/**\n * @see https://lesscss.org/features/#mixins-feature-mixins-parametric-feature\n *\n * This rule is recursive to allow chevrotain-allstar (hopefully) to lookahead\n * and find semi-colon separators vs. commas.\n */\nexport function mixinArgList(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n const first = $.SUBRULE($.mixinArg, { ARGS: [ctx] });\n\n let commaNodes: Node[] | undefined = [$.wrap(first, true)];\n const semiNodes: Node[] = [];\n let isSemiList = false;\n\n const collapseCommaNodesIntoSemiNodes = (semi: IToken) => {\n if (!commaNodes) {\n return;\n }\n if (commaNodes.length > 1) {\n const [head, ...rest] = commaNodes;\n let hasDeclarations = false;\n if (head instanceof VarDeclaration) {\n const nodes = [head.value, ...rest];\n hasDeclarations = rest.some(n => n instanceof VarDeclaration);\n head.setData('value', new List(nodes, undefined, $.getLocationFromNodes(nodes), $.context));\n semiNodes.push(head);\n } else {\n hasDeclarations = commaNodes.some(n => n instanceof VarDeclaration);\n semiNodes.push(new List(commaNodes, undefined, $.getLocationFromNodes(commaNodes), $.context));\n }\n if (hasDeclarations) {\n const indexOfSemi = $.input.indexOf(semi);\n const previousToken = $.input[indexOfSemi - 1]!;\n $.SAVE_ERROR(\n new NoViableAltException(\n 'Cannot mix ; and , as delimiter types',\n semi,\n previousToken\n )\n );\n }\n } else {\n semiNodes.push(commaNodes[0]!);\n }\n commaNodes = undefined;\n };\n\n while ($.isType(T.Comma) || $.isType(T.Semi)) {\n if ($.isType(T.Comma)) {\n const comma = $.CONSUME(T.Comma);\n const node = $.SUBRULE2($.mixinArg, { ARGS: [ctx] });\n if (commaNodes) {\n commaNodes.push($.wrap(node, true));\n } else {\n $.SAVE_ERROR(\n new NoViableAltException(\n 'Cannot mix ; and , as delimiter types',\n comma,\n $.LA(0)\n )\n );\n semiNodes.push($.wrap(node, true));\n }\n continue;\n }\n\n const semi = $.CONSUME(T.Semi);\n isSemiList = true;\n collapseCommaNodesIntoSemiNodes(semi);\n\n if ($.isType(T.RParen)) {\n break;\n }\n\n const prevAllow = ctx.allowComma;\n ctx.allowComma = true;\n const node = $.SUBRULE3($.mixinArg, { ARGS: [ctx] });\n ctx.allowComma = prevAllow;\n semiNodes.push($.wrap(node, true));\n }\n\n let location = $.endRule();\n let nodes = isSemiList ? semiNodes : commaNodes!;\n let sep: ';' | ',' = isSemiList ? ';' : ',';\n const result: List = $.wrap(new List(nodes, { sep }, location, $.context), 'both');\n return result;\n };\n}\n\n/**\n * Less is more lenient about at-keywords. See lessTokens.ts for more details.\n */\nexport function varName(this: P, T: TokenMap) {\n const $ = this;\n return () => {\n // AtKeywordLessExtension is categorized as AtName in lessTokens.ts, so consuming\n // AtName alone preserves behavior while avoiding OR ambiguity warnings.\n return $.CONSUME(T.AtName);\n };\n}\n\n/**\n * Originally, we were creating alternatives for mixin calls and mixin definitions\n * that could mostly overlap, which led to longer parsing. Instead, we parse\n * as if it could be either, and then we disambiguate at the end.\n */\nexport function mixinArg(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const firstToken = $.LA(1);\n const atStart = $.matchToken(firstToken, T.AtName);\n const tt2 = $.LA(2).tokenType;\n const tt3 = $.LA(3).tokenType;\n const hasWsAfterName = tt2 === T.WS;\n const nextTokenType = hasWsAfterName ? tt3 : tt2;\n\n if (atStart && nextTokenType === T.Ellipsis) {\n $.startRule();\n const name = $.CONSUME(T.AtName);\n if (hasWsAfterName) {\n $.CONSUME(T.WS);\n }\n $.CONSUME(T.Ellipsis);\n if ($.RECORDING_PHASE) {\n return;\n }\n return new Rest(name.image.slice(1), undefined, $.endRule(), $.context);\n }\n\n if (atStart && nextTokenType === T.Colon) {\n $.startRule();\n const name = $.CONSUME2(T.AtName);\n if (hasWsAfterName) {\n $.CONSUME2(T.WS);\n }\n $.CONSUME(T.Colon);\n const value = $.SUBRULE3($.callArgument, { ARGS: [{ ...ctx, allowComma: !!ctx.allowComma, detachedRulesetUsage: 'default-param' }] });\n\n const location = $.endRule();\n if ($.RECORDING_PHASE) {\n return;\n }\n return new VarDeclaration({\n name: new Any(name.image.slice(1), { role: 'property' }, $.getLocationInfo(name), $.context),\n value\n }, { paramVar: true }, location, $.context);\n }\n\n if (atStart && (nextTokenType === T.RParen || nextTokenType === T.Comma || nextTokenType === T.Semi)) {\n $.startRule();\n const name = $.CONSUME3(T.AtName);\n if ($.RECORDING_PHASE) {\n return;\n }\n return new Any(name.image.slice(1), { role: 'name' }, $.endRule(), $.context);\n }\n\n if ($.isType(T.Ellipsis)) {\n const ellipsis = $.CONSUME2(T.Ellipsis);\n return new Rest(undefined, undefined, $.getLocationInfo(ellipsis), $.context);\n }\n\n return $.SUBRULE($.callArgument, { ARGS: [ctx] });\n };\n}\n\nexport function callArgument(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n return $.OR([\n {\n GATE: () => $.isType(T.AnonMixinStart) || $.isType(T.LCurly),\n ALT: () => $.SUBRULE($.anonymousMixinDefinition, { ARGS: [ctx] })\n },\n {\n GATE: () => !ctx.allowComma,\n ALT: () => $.SUBRULE($.valueSequence, { ARGS: [ctx] })\n },\n {\n GATE: () => !!ctx.allowComma,\n ALT: () => $.SUBRULE($.valueList, { ARGS: [ctx] })\n }\n ]);\n };\n}\n\n/**\n * Override unknownAtRule to handle @-export for stylesheet forwarding.\n * @-export is like @-compose but with forward semantics and no `with` support.\n */\nexport function unknownAtRule(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n const img = $.LA(1).image;\n if (img === '@-export') {\n return $.SUBRULE($.exportAtRule, { ARGS: [ctx] });\n }\n return cssUnknownAtRule.call($, T)(ctx);\n };\n}\n\n/**\n * Parse @-export './foo.jess' [as <namespace>]\n *\n * Creates a StyleImport with forward semantics (members not visible locally but transitive).\n * Does NOT support `with` (unlike @-compose).\n * Participates in evaldTrees caching like @-compose.\n */\nexport function exportAtRule(this: P, T: TokenMap) {\n const $ = this;\n return (ctx: RuleContext = {}) => {\n $.startRule();\n $.CONSUME(T.AtKeyword); // '@-export'\n\n // Parse the path (string or url)\n const pathNode: Quoted | Url = $.OR([\n { ALT: () => $.SUBRULE($.urlFunction, { ARGS: [ctx] }) },\n { ALT: () => $.SUBRULE($.string, { ARGS: [ctx] }) }\n ]);\n\n // Optional \"as <namespace>\"\n let namespace: string | undefined;\n $.OPTION(() => {\n const la = $.LA(1);\n if (!((la.tokenType === T.PlainIdent || la.tokenType === T.Ident) && la.image === 'as')) {\n return;\n }\n // Consume \"as\"\n if ($.isType(T.Ident)) {\n $.CONSUME(T.Ident);\n } else {\n $.CONSUME(T.PlainIdent);\n }\n // Consume namespace identifier\n const nsTok: IToken = $.isType(T.Ident)\n ? $.CONSUME(T.Ident)\n : $.CONSUME(T.PlainIdent);\n namespace = nsTok.image;\n });\n\n $.CONSUME(T.Semi);\n\n const loc = $.endRule();\n return new StyleImport(\n { path: pathNode },\n {\n type: 'compose',\n namespace,\n importOptions: {\n forward: true\n }\n },\n loc,\n $.context\n );\n };\n}\n","export {\n stylesheet, main, declarationList, declaration, mediaQuery, mediaCondition,\n mediaConditionWithoutOr, lessMediaQueryFromString, lessMediaQueryFromReference,\n lessMediaQueryTail,\n mediaInParens,\n mediaFeature, mfValue, mfNonIdentifierValue, wrappedDeclarationList,\n qualifiedRuleBody, qualifiedRule, mixinOrQualifiedRule\n} from './root.js';\n\nexport {\n relativeSelector, forgivingSelectorList, selectorList, compoundSelector, complexSelector, ampersandExtend,\n extend, simpleSelector, attributeSelector, anonymousMixinDefinition, importAtRule,\n varDeclarationOrCall, selectorCapture, valueSequence, squareValue\n} from './selectors.js';\n\nexport {\n expressionSum, expressionProduct, expressionValue, nthValue, knownFunctions,\n customValue, innerCustomValue, customBlock, mathProduct, mathSum,\n calcFunction, ifFunction, booleanFunction, urlFunction, varReference, valueReference,\n functionCall, functionCallArgs, value, string, mathValue\n} from './values.js';\n\nexport {\n guard, guardOr, guardDefault, guardAnd, guardInParens, guardInner,\n guardWithConditionValue, guardWithCondition, comparison, innerAtRule,\n layerName, keyframesName, mixinName, mixinReference, mixinArgs,\n lookupOrCall, mixinArgList, varName, mixinArg, callArgument,\n unknownAtRule, exportAtRule\n} from './guards.js';\n","import {\n type IToken,\n type TokenType,\n tokenMatcher\n} from 'chevrotain';\n\nimport {\n CssRecursiveParser,\n type CssRecursiveParserConfig,\n type RuleContext as CssRuleContext,\n type CssTokenType,\n productions as cssProductions\n} from '@jesscss/css-parser';\n\nimport {\n Reference,\n DefaultGuard,\n Interpolated,\n Any,\n Bool,\n type MathMode,\n type Node,\n type Extend,\n type ComplexSelector,\n type Selector\n} from '@jesscss/core';\nimport { getInterpolatedOrString } from './utils.js';\n\nimport { type LessExtraTokenType } from './lessTokens.js';\n\nimport * as productions from './productions/index.js';\n\nexport type LessParserConfig = CssRecursiveParserConfig & {\n /**\n * Is less strict with certain CSS rules and Less syntax\n * that the old Less parser allowed.\n *\n * @note This will also enable CSS legacyMode unless\n * legacyMode is explicitly false.\n */\n looseMode?: boolean;\n\n /**\n * Controls whether mixins and detached rulesets \"leak\" their inner rules.\n * When true (default):\n * - Mixins: Mixin and VarDeclaration nodes are 'public' and 'optional' respectively\n * - Detached rulesets: Mixin and VarDeclaration nodes are 'public' and 'private' respectively\n * When false:\n * - Both mixins and detached rulesets: Mixin and VarDeclaration nodes are 'private'\n */\n leakyRules?: boolean;\n\n /**\n * Less math evaluation mode. Used during parsing to decide whether a given\n * `Operation` should be represented as an `Expression` for Less→Jess conversion.\n *\n * Mirrors runtime behavior in `Context.shouldOperate()`.\n *\n * @default 'parens-division'\n */\n mathMode?: MathMode;\n\n /**\n * When enabled (default), the parser will wrap the *outermost* Less math/value\n * expressions (math operations, variable references, and chained mixin/variable\n * calls) in an `Expression({ parens: true })`.\n *\n * This is purely a parse-time AST shape choice to support Less→Jess conversion.\n *\n * @default true\n */\n wrapOuterExpressions?: boolean;\n};\n\n// Concrete TokenMap: union of CSS and Less token names\nexport type CombinedTokenMap = Record<CssTokenType, TokenType> & Record<LessExtraTokenType, TokenType>;\nexport type TokenMap = CombinedTokenMap;\n\nexport interface ExtendTarget {\n selector?: Selector;\n target: Selector;\n flag: IToken | undefined;\n}\n\nexport type RuleContext = CssRuleContext & {\n selector?: Selector;\n hasDefault?: boolean;\n allExtended?: boolean;\n isDefinition?: boolean;\n allowAnonymousMixins?: boolean;\n requireAccessorsAfterMixinCall?: boolean;\n inValueList?: boolean;\n allowComma?: boolean;\n node?: Node;\n ruleIsFinished?: boolean;\n sequences?: Array<ComplexSelector | Extend>;\n asReference?: boolean;\n extendTargets?: ExtendTarget[];\n extendNodes?: Extend[];\n inExtend?: boolean;\n wrapInExpression?: boolean;\n parenFrames?: boolean[];\n calcFrames?: number;\n detachedRulesetUsage?: 'function-arg' | 'mixin-arg' | 'default-param';\n inFunctionArgs?: boolean;\n allowMixinCallWithoutAccessor?: boolean;\n startValue?: Node;\n};\n\nexport class LessRecursiveParser extends CssRecursiveParser {\n declare T: TokenMap;\n looseMode: boolean;\n leakyRules: boolean;\n /** Warnings collected during parsing */\n warnings: Array<{ message: string; token?: IToken; deprecation?: string }> = [];\n\n /** See `LessParserConfig.mathMode` */\n mathMode: MathMode;\n /** See `LessParserConfig.wrapOuterExpressions` */\n wrapOuterExpressions: boolean;\n\n constructor(\n T: TokenMap,\n config: LessParserConfig = {}\n ) {\n let {\n legacyMode,\n looseMode = true,\n leakyRules = true,\n mathMode = 'parens-division',\n wrapOuterExpressions = true,\n ...rest\n } = config;\n legacyMode = legacyMode ?? looseMode;\n super(T, { legacyMode, ...rest });\n\n this.T = T;\n this.looseMode = looseMode;\n this.leakyRules = leakyRules;\n this.mathMode = mathMode;\n this.wrapOuterExpressions = wrapOuterExpressions;\n this.warnings = [];\n\n for (const [key, factory] of Object.entries(productions)) {\n if (typeof factory !== 'function') {\n continue;\n }\n const rule = (factory as Function).call(this, this.T);\n if (key in cssProductions) {\n this.OVERRIDE_RULE(key, rule);\n } else {\n this.RULE(key, rule);\n }\n }\n\n if (this.constructor === LessRecursiveParser) {\n this.performSelfAnalysis();\n }\n }\n\n protected override processValueToken(token: IToken, ctx?: RuleContext): Node {\n let tokenType = token.tokenType;\n const T = this.T;\n\n if (tokenType.name === 'AtKeyword' || tokenMatcher(token, T.AtKeyword)) {\n if (ctx?.inCustomPropertyValue) {\n const atName = token.image;\n const ident = token.image.slice(1);\n this.warnDeprecation(\n `\"${atName}\" in custom property values is treated as literal text, not a variable reference. Use \"\\@{${ident}}\" if you want it to be evaluated.`,\n token,\n 'variable-in-unknown-value'\n );\n return new Any(token.image, { role: 'any' }, this.getLocationInfo(token), this.context);\n }\n return new Reference(token.image.slice(1), { type: 'variable' }, this.getLocationInfo(token), this.context);\n } else if (tokenType.name === 'PropertyReference') {\n if (ctx?.inCustomPropertyValue) {\n const atName = token.image;\n const ident = token.image.slice(1);\n this.warnDeprecation(\n `\"${atName}\" in custom property values is treated as literal text, not a property reference. Use \"\\${${ident}}\" if you want it to be evaluated.`,\n token,\n 'property-in-unknown-value'\n );\n return new Any(token.image, { role: 'any' }, this.getLocationInfo(token), this.context);\n }\n return super.processValueToken(token, ctx);\n } else if (tokenType === T['DefaultGuardFunc']) {\n return new DefaultGuard(token.image, undefined, this.getLocationInfo(token), this.context);\n } else if (\n tokenType.name === 'JavaScript'\n || (T['JavaScript'] && tokenMatcher(token, T['JavaScript']))\n ) {\n throw new Error(\n 'Inline JavaScript using backticks is not supported. Use @use to import a JavaScript/TypeScript module instead. Script-module documentation is coming soon.'\n );\n } else if (tokenType === T['InterpolatedIdent']) {\n const result = getInterpolatedOrString(token.image, this.getLocationInfo(token), this.context);\n if (result instanceof Interpolated) {\n return result;\n } else {\n return new Any(result, { role: 'ident' }, this.getLocationInfo(token), this.context);\n }\n } else if (tokenType === T['PlainIdent']) {\n const image = token.image;\n if (image === 'true' || image === 'false') {\n return new Bool(image === 'true', undefined, this.getLocationInfo(token), this.context);\n }\n }\n return super.processValueToken(token, ctx);\n }\n\n override shouldTryQualifiedRuleInDeclarationList(): boolean {\n const {\n Ident,\n Assign,\n Colon,\n LCurly,\n Comma,\n LSquare,\n NthPseudoClass,\n SelectorPseudoClass,\n FunctionStart\n } = this.T;\n\n const isSelectorLikeContinuation = (offset: number): boolean => {\n const tok = this.LA(offset);\n return (\n tokenMatcher(tok, LCurly)\n || tokenMatcher(tok, Comma)\n || tokenMatcher(tok, this.T.Combinator)\n || tokenMatcher(tok, LSquare)\n || tokenMatcher(tok, Colon)\n || tokenMatcher(tok, NthPseudoClass)\n || tokenMatcher(tok, SelectorPseudoClass)\n );\n };\n\n if (!this.isTypeAt(1, Ident)) {\n return true;\n }\n if (!this.isTypeAt(2, Assign)) {\n return true;\n }\n if (this.hasWS(2)) {\n return false;\n }\n\n const tt3 = this.LA(3).tokenType;\n if (\n tt3 === Colon\n || tt3 === NthPseudoClass\n || tt3 === SelectorPseudoClass\n || tokenMatcher(this.LA(3), FunctionStart)\n ) {\n return true;\n }\n if (!tokenMatcher(this.LA(3), Ident)) {\n return false;\n }\n return isSelectorLikeContinuation(4);\n }\n\n warnDeprecation(message: string, token?: IToken, deprecationId?: string): void {\n this.warnings.push({ message, token, deprecation: deprecationId });\n }\n}\n","import { Lexer, type IToken, type IRecognitionException } from 'chevrotain';\nimport { lessTokens, lessFragments } from './lessTokens.js';\nimport { createLexerDefinition } from '@jesscss/css-parser';\nimport { LessRecursiveParser, type LessParserConfig, type TokenMap } from './lessRecursiveParser.js';\nimport type { Node, Rules, IParseResult, TreeContext } from '@jesscss/core';\n\nexport type LessRules = keyof {\n [K in keyof LessRecursiveParser as LessRecursiveParser[K] extends (...args: any[]) => Node ? K : never]: true;\n};\n\nexport type SyntacticContentAssistSuggestion = {\n nextTokenType: string;\n nextTokenLabel?: string;\n ruleStack: string[];\n};\n\n/**\n * Cached lexer + parser singletons. Chevrotain initialization (~500ms)\n * only happens once — config changes are applied via instance properties\n * before each parse.\n */\nlet cachedLexer: Lexer | undefined;\nlet cachedParser: LessRecursiveParser | undefined;\nlet cachedTokenMap: TokenMap | undefined;\n\nfunction getSharedLexerAndParser(config: LessParserConfig): { lexer: Lexer; parser: LessRecursiveParser } {\n if (!cachedLexer || !cachedParser) {\n const { lexer, T } = createLexerDefinition(\n lessFragments(),\n lessTokens()\n );\n cachedTokenMap = T as TokenMap;\n cachedLexer = new Lexer(lexer, {\n ensureOptimizations: true,\n skipValidations: process.env.TEST !== 'true'\n });\n cachedParser = new LessRecursiveParser(cachedTokenMap, config);\n }\n // Apply per-parse config to the cached parser instance\n const {\n looseMode = true,\n leakyRules = true,\n mathMode = 'parens-division',\n wrapOuterExpressions = true,\n legacyMode = looseMode\n } = config;\n cachedParser.looseMode = looseMode;\n cachedParser.leakyRules = leakyRules;\n cachedParser.mathMode = mathMode;\n cachedParser.wrapOuterExpressions = wrapOuterExpressions;\n cachedParser.legacyMode = legacyMode;\n\n return { lexer: cachedLexer, parser: cachedParser };\n}\n\n/**\n * Less parser using the new recursive-descent engine.\n * Keeps Chevrotain's lexer, replaces the parser.\n */\nexport class LessParser {\n lexer: Lexer;\n parser: LessRecursiveParser;\n\n constructor(\n config: LessParserConfig = {}\n ) {\n config = {\n looseMode: true,\n ...config\n };\n const shared = getSharedLexerAndParser(config);\n this.lexer = shared.lexer;\n this.parser = shared.parser;\n this.parse = this.parse.bind(this);\n }\n\n parse(text: string): IParseResult<Rules>;\n parse(text: string, rule: 'stylesheet'): IParseResult<Rules>;\n parse(text: string, rule: 'stylesheet', options: { context?: TreeContext }): IParseResult<Rules>;\n parse(text: string, rule?: LessRules, options?: { context?: TreeContext }): IParseResult;\n parse(text: string, rule: LessRules = 'stylesheet', options?: { context?: TreeContext }): IParseResult {\n const parser = this.parser;\n const lexerResult = this.lexer.tokenize(text);\n parser.warnings = [];\n if (options?.context) {\n parser.context = options.context;\n }\n parser.input = lexerResult.tokens;\n const ruleMethod = parser[rule as keyof typeof parser] as (() => Node) | undefined;\n if (typeof ruleMethod !== 'function') {\n throw new Error(`Unknown parser rule: ${rule}`);\n }\n const tree: Node = ruleMethod.call(parser);\n\n const warnings = [...parser.warnings];\n\n return {\n tree,\n lexerResult,\n errors: parser.errors,\n warnings\n };\n }\n\n /**\n * @todo Implement content assist for the new parser\n */\n suggest(text: string, init: { offset: number; rule?: LessRules }): SyntacticContentAssistSuggestion[] {\n return [];\n }\n}\n"],"mappings":"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"}