@generaltranslation/vue-extractor 0.0.0 → 0.1.0-iris.0
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/LICENSE.md +18 -102
- package/dist/detect.d.ts +8 -0
- package/dist/detect.js +2 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2 -1
- package/dist/inspect.d.ts +9 -0
- package/dist/inspect.js +2 -0
- package/dist/integration.d.ts +69 -0
- package/dist/integration.js +162 -0
- package/dist/integration.js.map +1 -0
- package/dist/internal/config/configFiles.d.ts +6 -0
- package/dist/internal/config/configFiles.js +34 -0
- package/dist/internal/config/configFiles.js.map +1 -0
- package/dist/internal/config/resolveVueCompilerOptions.d.ts +6 -0
- package/dist/internal/config/resolveVueCompilerOptions.js +74 -56
- package/dist/internal/config/resolveVueCompilerOptions.js.map +1 -1
- package/dist/internal/extractFromVueSource.d.ts +4 -3
- package/dist/internal/extractFromVueSource.js +255 -12
- package/dist/internal/extractFromVueSource.js.map +1 -1
- package/dist/internal/project/consumerUsage.d.ts +34 -0
- package/dist/internal/project/consumerUsage.js +1220 -0
- package/dist/internal/project/consumerUsage.js.map +1 -0
- package/dist/internal/project/detectVueProject.d.ts +13 -0
- package/dist/internal/project/detectVueProject.js +65 -0
- package/dist/internal/project/detectVueProject.js.map +1 -0
- package/dist/internal/project/extractFromVueProject.d.ts +10 -0
- package/dist/internal/project/extractFromVueProject.js +579 -0
- package/dist/internal/project/extractFromVueProject.js.map +1 -0
- package/dist/internal/project/inspectVueProject.d.ts +48 -0
- package/dist/internal/project/inspectVueProject.js +143 -0
- package/dist/internal/project/inspectVueProject.js.map +1 -0
- package/dist/internal/project/manifest.d.ts +64 -0
- package/dist/internal/project/manifest.js +270 -0
- package/dist/internal/project/manifest.js.map +1 -0
- package/dist/internal/project/mergeVueProjectExtraction.d.ts +18 -0
- package/dist/internal/project/mergeVueProjectExtraction.js +79 -0
- package/dist/internal/project/mergeVueProjectExtraction.js.map +1 -0
- package/dist/internal/project/moduleResolver.d.ts +18 -0
- package/dist/internal/project/moduleResolver.js +325 -0
- package/dist/internal/project/moduleResolver.js.map +1 -0
- package/dist/internal/project/scopes.d.ts +31 -0
- package/dist/internal/project/scopes.js +182 -0
- package/dist/internal/project/scopes.js.map +1 -0
- package/dist/internal/project/sourcePatterns.d.ts +4 -0
- package/dist/internal/project/sourcePatterns.js +32 -0
- package/dist/internal/project/sourcePatterns.js.map +1 -0
- package/dist/internal/project/viteAliases.d.ts +42 -0
- package/dist/internal/project/viteAliases.js +1020 -0
- package/dist/internal/project/viteAliases.js.map +1 -0
- package/dist/internal/project/vueSourceClassification.d.ts +13 -0
- package/dist/internal/project/vueSourceClassification.js +146 -0
- package/dist/internal/project/vueSourceClassification.js.map +1 -0
- package/dist/internal/project/workspaces.d.ts +31 -0
- package/dist/internal/project/workspaces.js +326 -0
- package/dist/internal/project/workspaces.js.map +1 -0
- package/dist/internal/project/wrapperProvenance.d.ts +21 -0
- package/dist/internal/project/wrapperProvenance.js +287 -0
- package/dist/internal/project/wrapperProvenance.js.map +1 -0
- package/dist/internal/script/analyze.js +252 -85
- package/dist/internal/script/analyze.js.map +1 -1
- package/dist/internal/script/jsx.d.ts +7 -4
- package/dist/internal/script/jsx.js +351 -79
- package/dist/internal/script/jsx.js.map +1 -1
- package/dist/internal/script/localModules.d.ts +23 -2
- package/dist/internal/script/localModules.js +533 -20
- package/dist/internal/script/localModules.js.map +1 -1
- package/dist/internal/script/model.d.ts +9 -2
- package/dist/internal/script/parser.js +2 -1
- package/dist/internal/script/parser.js.map +1 -1
- package/dist/internal/script/runtimeModules.d.ts +10 -0
- package/dist/internal/script/runtimeModules.js +27 -0
- package/dist/internal/script/runtimeModules.js.map +1 -0
- package/dist/internal/stringCalls.js +1 -1
- package/dist/internal/stringCalls.js.map +1 -1
- package/dist/internal/template.js +263 -141
- package/dist/internal/template.js.map +1 -1
- package/dist/internal/types.d.ts +4 -1
- package/dist/internal/utils.d.ts +14 -3
- package/dist/internal/utils.js +63 -3
- package/dist/internal/utils.js.map +1 -1
- package/dist/internal/vueCompiler.d.ts +9 -1
- package/dist/internal/vueCompiler.js +37 -14
- package/dist/internal/vueCompiler.js.map +1 -1
- package/dist/project.d.ts +11 -0
- package/dist/project.js +3 -0
- package/dist/types.d.ts +95 -4
- package/package.json +30 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveVueCompilerOptions.js","names":[],"sources":["../../../src/internal/config/resolveVueCompilerOptions.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { parse, type ParserPlugin } from '@babel/parser';\nimport traverseModule, {\n type Binding,\n type NodePath,\n type Scope,\n} from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\nimport type { VueCompilerOptions } from '../../types.js';\n\nconst traverse = traverseModule.default || traverseModule;\n\nconst VITE_CONFIG_FILES = [\n 'vite.config.js',\n 'vite.config.mjs',\n 'vite.config.ts',\n 'vite.config.cjs',\n 'vite.config.mts',\n 'vite.config.cts',\n] as const;\n\nconst NUXT_CONFIG_FILES = [\n 'nuxt.config.js',\n 'nuxt.config.ts',\n 'nuxt.config.mjs',\n 'nuxt.config.cjs',\n 'nuxt.config.mts',\n 'nuxt.config.cts',\n] as const;\n\nconst CUSTOM_VITE_CONFIG_EXTENSIONS = new Set([\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n]);\n\ntype CompilerOptionName = keyof VueCompilerOptions;\n\ntype OptionSource = {\n file: string;\n node?: t.Node;\n};\n\ntype CompilerOptionState = {\n options: VueCompilerOptions;\n sources: Partial<Record<CompilerOptionName, OptionSource>>;\n};\n\ntype ObjectEntry = {\n node: t.Node;\n scope: Scope;\n};\n\ntype StaticObject = {\n entries: Map<string, ObjectEntry>;\n};\n\ntype ObjectResolution =\n | { ok: true; value: StaticObject }\n | { ok: false; node: t.Node };\n\ntype ActiveConfigResolution =\n | { ok: true; value: ObjectEntry }\n | { ok: false; node: t.Node };\n\ntype ConfigHelperResolution = 'dynamic' | 'static' | undefined;\n\ntype ScopedPluginCall = {\n node: t.CallExpression | t.OptionalCallExpression;\n scope: Scope;\n};\n\ntype VitePluginContext = {\n moduleSource: '@vitejs/plugin-vue' | '@vitejs/plugin-vue-jsx';\n namespaceBindings: Set<Binding>;\n pluginBindings: Set<Binding>;\n referencePositions: number[];\n};\n\n/** Result of resolving hash-affecting options from project configuration. */\nexport type VueCompilerOptionsResolution = {\n /** Static compiler options that must be passed to Vue source extraction. */\n compilerOptions: VueCompilerOptions;\n /** Diagnostics that make extraction unsafe until the configuration is fixed. */\n errors: string[];\n};\n\n/** Controls project configuration discovery for compiler-option resolution. */\nexport type VueCompilerOptionsResolverOptions = {\n /** A single explicit Vite config path, resolved relative to the project root. */\n viteConfigPath?: string;\n};\n\n/**\n * Resolves hash-affecting Vue template compiler options without executing\n * project configuration files.\n *\n * Explicit `gt.config.json` values are combined with statically analyzable\n * Vite and Nuxt configuration. Conflicting, dynamic, or unsupported relevant\n * options produce errors so extraction never publishes hashes calculated with\n * compiler behavior that the runtime does not share.\n */\nexport function resolveVueCompilerOptions(\n cwd: string,\n explicitOptions: VueCompilerOptions | undefined,\n resolverOptions: VueCompilerOptionsResolverOptions = {}\n): VueCompilerOptionsResolution {\n const state: CompilerOptionState = { options: {}, sources: {} };\n const errors: string[] = [];\n\n readExplicitOptions(explicitOptions, state, errors);\n\n if (resolverOptions.viteConfigPath !== undefined) {\n const file = resolveCustomViteConfig(\n cwd,\n resolverOptions.viteConfigPath,\n errors\n );\n if (file) readViteConfig(file, state, errors);\n return { compilerOptions: state.options, errors };\n }\n\n const nuxtConfig = findFirstConfig(cwd, NUXT_CONFIG_FILES);\n const viteConfig = findFirstConfig(cwd, VITE_CONFIG_FILES);\n if (nuxtConfig && viteConfig) {\n errors.push(\n optionError(\n 'Found both Nuxt and Vite project config files',\n 'For direct Vite builds, set files.gt.parsingFlags.viteConfigPath to the active Vite config. For Nuxt builds, remove or relocate the inactive Vite config so the compiler configuration is unambiguous'\n )\n );\n return { compilerOptions: state.options, errors };\n }\n if (nuxtConfig) {\n readNuxtConfig(nuxtConfig, state, errors);\n return { compilerOptions: state.options, errors };\n }\n\n if (viteConfig) readViteConfig(viteConfig, state, errors);\n\n return { compilerOptions: state.options, errors };\n}\n\n/** Selects the first config file in the framework's documented lookup order. */\nfunction findFirstConfig(\n cwd: string,\n filenames: readonly string[]\n): string | undefined {\n for (const filename of filenames) {\n const file = path.resolve(cwd, filename);\n if (fs.existsSync(file)) return file;\n }\n return undefined;\n}\n\n/** Validates an explicit Vite config without searching or executing files. */\nfunction resolveCustomViteConfig(\n cwd: string,\n configuredPath: unknown,\n errors: string[]\n): string | undefined {\n if (typeof configuredPath !== 'string' || !configuredPath.trim()) {\n errors.push(\n optionError(\n 'Found an empty Vite config path',\n 'Set files.gt.parsingFlags.viteConfigPath to one in-project Vite config file'\n )\n );\n return undefined;\n }\n const root = path.resolve(cwd);\n const candidate = path.resolve(root, configuredPath);\n const relativeCandidate = path.relative(root, candidate);\n if (\n relativeCandidate.startsWith(`..${path.sep}`) ||\n relativeCandidate === '..' ||\n path.isAbsolute(relativeCandidate) ||\n relativeCandidate.split(path.sep).includes('node_modules')\n ) {\n errors.push(\n optionError(\n 'Found a Vite config path outside the project source boundary',\n 'Choose a Vite config file inside the project root and outside node_modules'\n )\n );\n return undefined;\n }\n if (\n !CUSTOM_VITE_CONFIG_EXTENSIONS.has(path.extname(candidate).toLowerCase())\n ) {\n errors.push(\n optionError(\n 'Found an unsupported Vite config file extension',\n 'Use a JavaScript or TypeScript Vite config file'\n )\n );\n return undefined;\n }\n if (!fs.existsSync(candidate) || !fs.statSync(candidate).isFile()) {\n errors.push(\n optionError(\n 'Could not find the configured Vite config file',\n 'Set files.gt.parsingFlags.viteConfigPath to an existing file inside the project root'\n )\n );\n return undefined;\n }\n\n const realRoot = fs.realpathSync(root);\n const realCandidate = fs.realpathSync(candidate);\n const realRelative = path.relative(realRoot, realCandidate);\n if (\n realRelative.startsWith(`..${path.sep}`) ||\n realRelative === '..' ||\n path.isAbsolute(realRelative) ||\n realRelative.split(path.sep).includes('node_modules')\n ) {\n errors.push(\n optionError(\n 'Found a Vite config path outside the project source boundary',\n 'Choose a Vite config file inside the project root and outside node_modules'\n )\n );\n return undefined;\n }\n return realCandidate;\n}\n\nfunction readExplicitOptions(\n input: VueCompilerOptions | undefined,\n state: CompilerOptionState,\n errors: string[]\n): void {\n if (input === undefined) return;\n if (!isRecord(input)) {\n errors.push(\n optionError(\n 'Found an invalid vueCompilerOptions parsing setting',\n 'Set files.gt.parsingFlags.vueCompilerOptions to an object containing only whitespace and delimiters'\n )\n );\n return;\n }\n\n for (const key of Object.keys(input)) {\n if (key !== 'whitespace' && key !== 'delimiters') {\n errors.push(\n optionError(\n `Found unsupported Vue compiler option \"${key}\" in gt.config.json`,\n 'Configure only whitespace and delimiters in files.gt.parsingFlags.vueCompilerOptions'\n )\n );\n }\n }\n\n if (input.whitespace !== undefined) {\n if (input.whitespace !== 'condense' && input.whitespace !== 'preserve') {\n errors.push(\n optionError(\n 'Found an invalid Vue whitespace compiler option in gt.config.json',\n 'Set whitespace to either \"condense\" or \"preserve\"'\n )\n );\n } else {\n mergeOption(\n state,\n 'whitespace',\n input.whitespace,\n { file: 'gt.config.json' },\n errors\n );\n }\n }\n\n if (input.delimiters !== undefined) {\n if (!isDelimiterPair(input.delimiters)) {\n errors.push(\n optionError(\n 'Found invalid Vue interpolation delimiters in gt.config.json',\n 'Set delimiters to exactly two non-empty strings, such as [\"[[\", \"]]\"]'\n )\n );\n } else {\n mergeOption(\n state,\n 'delimiters',\n input.delimiters,\n { file: 'gt.config.json' },\n errors\n );\n }\n }\n}\n\nfunction readViteConfig(\n file: string,\n state: CompilerOptionState,\n errors: string[]\n): void {\n const ast = parseConfig(file, errors);\n if (!ast) return;\n\n const pluginBindings = new Set<Binding>();\n const namespaceBindings = new Set<Binding>();\n const jsxPluginBindings = new Set<Binding>();\n const jsxNamespaceBindings = new Set<Binding>();\n const defineConfigBindings = new Set<Binding>();\n\n traverse(ast, {\n ImportDeclaration(importPath) {\n if (importPath.node.source.value === 'vite') {\n for (const specifierPath of importPath.get('specifiers')) {\n const specifier = specifierPath.node;\n if (\n specifier.type !== 'ImportSpecifier' ||\n (specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value) !== 'defineConfig'\n ) {\n continue;\n }\n const binding = specifierPath.scope.getBinding(specifier.local.name);\n if (binding) defineConfigBindings.add(binding);\n }\n return;\n }\n const moduleSource = importPath.node.source.value;\n if (\n moduleSource !== '@vitejs/plugin-vue' &&\n moduleSource !== '@vitejs/plugin-vue-jsx'\n ) {\n return;\n }\n const targetPluginBindings =\n moduleSource === '@vitejs/plugin-vue-jsx'\n ? jsxPluginBindings\n : pluginBindings;\n const targetNamespaceBindings =\n moduleSource === '@vitejs/plugin-vue-jsx'\n ? jsxNamespaceBindings\n : namespaceBindings;\n for (const specifierPath of importPath.get('specifiers')) {\n const specifier = specifierPath.node;\n const binding = specifierPath.scope.getBinding(specifier.local.name);\n if (!binding) continue;\n if (specifier.type === 'ImportNamespaceSpecifier') {\n targetNamespaceBindings.add(binding);\n } else if (\n specifier.type === 'ImportDefaultSpecifier' ||\n (specifier.type === 'ImportSpecifier' &&\n (specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value) === 'default')\n ) {\n targetPluginBindings.add(binding);\n }\n }\n },\n TSImportEqualsDeclaration(importPath) {\n const reference = importPath.node.moduleReference;\n if (\n reference.type !== 'TSExternalModuleReference' ||\n reference.expression.type !== 'StringLiteral' ||\n (reference.expression.value !== '@vitejs/plugin-vue' &&\n reference.expression.value !== '@vitejs/plugin-vue-jsx')\n ) {\n return;\n }\n const binding = importPath.scope.getBinding(importPath.node.id.name);\n if (!binding) return;\n if (reference.expression.value === '@vitejs/plugin-vue-jsx') {\n jsxNamespaceBindings.add(binding);\n } else {\n namespaceBindings.add(binding);\n }\n },\n VariableDeclarator(variablePath) {\n const vueRequireKind = getPluginVueRequireKind(\n variablePath.node.init,\n '@vitejs/plugin-vue'\n );\n const jsxRequireKind = getPluginVueRequireKind(\n variablePath.node.init,\n '@vitejs/plugin-vue-jsx'\n );\n const requireKind = vueRequireKind ?? jsxRequireKind;\n if (!requireKind) return;\n const targetPluginBindings = jsxRequireKind\n ? jsxPluginBindings\n : pluginBindings;\n const targetNamespaceBindings = jsxRequireKind\n ? jsxNamespaceBindings\n : namespaceBindings;\n if (variablePath.node.id.type === 'Identifier') {\n const binding = variablePath.scope.getBinding(\n variablePath.node.id.name\n );\n if (!binding) return;\n if (requireKind === 'namespace') targetNamespaceBindings.add(binding);\n else targetPluginBindings.add(binding);\n return;\n }\n if (\n requireKind !== 'namespace' ||\n variablePath.node.id.type !== 'ObjectPattern'\n ) {\n return;\n }\n for (const property of variablePath.node.id.properties) {\n if (\n property.type !== 'ObjectProperty' ||\n readPropertyKey(property) !== 'default'\n ) {\n continue;\n }\n const localName = readBindingIdentifier(property.value);\n const binding = localName\n ? variablePath.scope.getBinding(localName)\n : undefined;\n if (binding) targetPluginBindings.add(binding);\n }\n },\n });\n\n const activeExport = findActiveConfigExport(ast, file, errors);\n if (!activeExport) return;\n const functionReturns = collectFunctionReturns(ast);\n const configRoot = resolveActiveConfigRoot(\n activeExport.node,\n activeExport.scope,\n functionReturns,\n (callee, scope) =>\n resolveConfigHelperCall(callee, scope, defineConfigBindings, undefined),\n new Set()\n );\n if (!configRoot.ok) {\n errors.push(dynamicConfigError(file, configRoot.node));\n return;\n }\n\n const configObject = resolveStaticObject(\n configRoot.value.node,\n configRoot.value.scope,\n new Set()\n );\n if (!configObject.ok) {\n errors.push(dynamicConfigError(file, configObject.node));\n return;\n }\n const plugins = configObject.value.entries.get('plugins');\n if (!plugins) return;\n\n const pluginContext: VitePluginContext = {\n moduleSource: '@vitejs/plugin-vue',\n namespaceBindings,\n pluginBindings,\n referencePositions: [...pluginBindings, ...namespaceBindings].flatMap(\n (binding) =>\n binding.referencePaths\n .map((reference) => reference.node.start)\n .filter((position): position is number => position !== null)\n ),\n };\n const calls: ScopedPluginCall[] = [];\n const unresolved = collectActiveVuePluginCalls(\n plugins.node,\n plugins.scope,\n pluginContext,\n calls,\n new Set()\n );\n if (unresolved) {\n errors.push(dynamicConfigError(file, unresolved));\n return;\n }\n if (calls.length > 1) {\n errors.push(dynamicConfigError(file, calls[1]!.node));\n return;\n }\n const call = calls[0];\n if (call) {\n const argument = call.node.arguments[0];\n if (\n argument?.type === 'SpreadElement' ||\n argument?.type === 'ArgumentPlaceholder'\n ) {\n errors.push(dynamicConfigError(file, argument));\n return;\n }\n if (argument) {\n rejectCustomVueCompiler(argument, call.scope, file, errors);\n readNestedCompilerOptions(\n argument,\n call.scope,\n ['template', 'compilerOptions'],\n file,\n true,\n state,\n errors\n );\n }\n }\n\n const jsxPluginContext: VitePluginContext = {\n moduleSource: '@vitejs/plugin-vue-jsx',\n namespaceBindings: jsxNamespaceBindings,\n pluginBindings: jsxPluginBindings,\n referencePositions: [...jsxPluginBindings, ...jsxNamespaceBindings].flatMap(\n (binding) =>\n binding.referencePaths\n .map((reference) => reference.node.start)\n .filter((position): position is number => position !== null)\n ),\n };\n const jsxCalls: ScopedPluginCall[] = [];\n const unresolvedJSX = collectActiveVuePluginCalls(\n plugins.node,\n plugins.scope,\n jsxPluginContext,\n jsxCalls,\n new Set()\n );\n if (unresolvedJSX) {\n errors.push(dynamicVueJSXConfigError(file, unresolvedJSX));\n return;\n }\n if (jsxCalls.length > 1) {\n errors.push(dynamicVueJSXConfigError(file, jsxCalls[1]!.node));\n return;\n }\n if (jsxCalls[0]) readVueJSXPluginOptions(jsxCalls[0], file, errors);\n}\n\n/** Rejects Vite JSX options that can invalidate source-to-VNode parity. */\nfunction readVueJSXPluginOptions(\n call: ScopedPluginCall,\n file: string,\n errors: string[]\n): void {\n const argument = call.node.arguments[0];\n if (!argument) return;\n if (\n argument.type === 'SpreadElement' ||\n argument.type === 'ArgumentPlaceholder'\n ) {\n errors.push(dynamicVueJSXConfigError(file, argument));\n return;\n }\n const options = resolveStaticObject(argument, call.scope, new Set());\n if (!options.ok) {\n errors.push(dynamicVueJSXConfigError(file, options.node));\n return;\n }\n\n for (const [name, entry] of options.value.entries) {\n let supported = false;\n if (name === 'optimize') {\n // Optimization changes patch metadata only. The real dev/production\n // oracle proves both values preserve GT source data.\n supported =\n resolveStaticBoolean(entry.node, entry.scope, new Set()) !== undefined;\n } else if (name === 'transformOn') {\n supported =\n resolveStaticBoolean(entry.node, entry.scope, new Set()) === false;\n } else if (name === 'enableObjectSlots' || name === 'mergeProps') {\n supported =\n resolveStaticBoolean(entry.node, entry.scope, new Set()) === true;\n } else if (name === 'resolveType') {\n supported =\n resolveStaticBoolean(entry.node, entry.scope, new Set()) === false;\n } else if (name === 'pragma') {\n supported =\n resolveStaticString(entry.node, entry.scope, new Set()) === '';\n } else if (name === 'defineComponentName') {\n supported = isDefaultDefineComponentNames(\n entry.node,\n entry.scope,\n new Set()\n );\n } else if (name === 'babelPlugins') {\n supported = isDefinitelyEmptyArray(entry.node, entry.scope, new Set());\n } else if (name === 'tsPluginOptions') {\n const resolved = resolveStaticObject(entry.node, entry.scope, new Set());\n supported = resolved.ok && resolved.value.entries.size === 0;\n }\n if (supported) continue;\n errors.push(\n locatedOptionError(\n file,\n entry.node,\n `Found unsupported @vitejs/plugin-vue-jsx option \"${name}\"`,\n 'Use default-equivalent Vue JSX options; only a static optimize value may differ in files containing gt-vue translations'\n )\n );\n }\n}\n\n/** Resolves an immutable boolean option without coercing another type. */\nfunction resolveStaticBoolean(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean | undefined {\n const node = unwrapExpression(input);\n if (node.type === 'BooleanLiteral') return node.value;\n if (node.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding) || seen.has(binding)) {\n return undefined;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return resolveStaticBoolean(declaration.init, binding.path.scope, nextSeen);\n}\n\n/** Proves the explicit component-name option equals the plugin default. */\nfunction isDefaultDefineComponentNames(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean {\n const node = unwrapExpression(input);\n if (node.type === 'ArrayExpression') {\n return (\n node.elements.length === 1 &&\n node.elements[0]?.type === 'StringLiteral' &&\n node.elements[0].value === 'defineComponent'\n );\n }\n if (node.type !== 'Identifier') return false;\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding) || seen.has(binding)) {\n return false;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return false;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return isDefaultDefineComponentNames(\n declaration.init,\n binding.path.scope,\n nextSeen\n );\n}\n\n/** Proves an immutable config value is an empty array. */\nfunction isDefinitelyEmptyArray(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean {\n const node = unwrapExpression(input);\n if (node.type === 'ArrayExpression') return node.elements.length === 0;\n if (node.type !== 'Identifier') return false;\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding) || seen.has(binding)) {\n return false;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return false;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return isDefinitelyEmptyArray(declaration.init, binding.path.scope, nextSeen);\n}\n\n/**\n * Rejects Vite's custom compiler override because source-file resolution can\n * only prove parity with that app's `vue/compiler-sfc` export.\n */\nfunction rejectCustomVueCompiler(\n root: t.Node,\n scope: Scope,\n file: string,\n errors: string[]\n): void {\n const rootObject = resolveStaticObject(root, scope, new Set());\n if (!rootObject.ok) return;\n const compiler = rootObject.value.entries.get('compiler');\n if (!compiler) return;\n errors.push(\n locatedOptionError(\n file,\n compiler.node,\n 'Found a custom Vue compiler instance in the Vite plugin',\n \"Remove the compiler override so extraction and Vite both use the app's vue/compiler-sfc version\"\n )\n );\n}\n\nfunction readNuxtConfig(\n file: string,\n state: CompilerOptionState,\n errors: string[]\n): void {\n const ast = parseConfig(file, errors);\n if (!ast) return;\n\n const defineNuxtConfigBindings = new Set<Binding>();\n traverse(ast, {\n ImportDeclaration(importPath) {\n if (\n importPath.node.source.value !== 'nuxt/config' &&\n importPath.node.source.value !== 'nuxt' &&\n importPath.node.source.value !== '#imports'\n ) {\n return;\n }\n for (const specifierPath of importPath.get('specifiers')) {\n const specifier = specifierPath.node;\n if (\n specifier.type !== 'ImportSpecifier' ||\n (specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value) !== 'defineNuxtConfig'\n ) {\n continue;\n }\n const binding = specifierPath.scope.getBinding(specifier.local.name);\n if (binding) defineNuxtConfigBindings.add(binding);\n }\n },\n });\n\n const activeExport = findActiveConfigExport(ast, file, errors);\n if (!activeExport) return;\n const configRoot = resolveActiveConfigRoot(\n activeExport.node,\n activeExport.scope,\n collectFunctionReturns(ast),\n (callee, scope) =>\n resolveConfigHelperCall(\n callee,\n scope,\n defineNuxtConfigBindings,\n 'defineNuxtConfig'\n ),\n new Set()\n );\n if (!configRoot.ok) {\n errors.push(dynamicConfigError(file, configRoot.node));\n return;\n }\n const configObject = resolveStaticObject(\n configRoot.value.node,\n configRoot.value.scope,\n new Set()\n );\n if (!configObject.ok) {\n errors.push(dynamicConfigError(file, configObject.node));\n return;\n }\n const extendsEntry = configObject.value.entries.get('extends');\n if (\n extendsEntry &&\n !isDefinitelyEmptyNuxtExtends(extendsEntry.node, extendsEntry.scope)\n ) {\n errors.push(\n locatedOptionError(\n file,\n extendsEntry.node,\n 'Found Nuxt layer inheritance that could change Vue compiler options',\n 'Run extraction from a Nuxt configuration without inherited layers until gt-vue can resolve the complete layer chain safely'\n )\n );\n return;\n }\n const unsupportedSourceLayout = findUnsupportedNuxtSourceLayout(\n configObject.value\n );\n if (unsupportedSourceLayout) {\n errors.push(\n locatedOptionError(\n file,\n unsupportedSourceLayout,\n 'Found custom Nuxt source directories that default Vue discovery cannot scan safely',\n 'Use Nuxt source directories covered by the default app, src, pages, layouts, plugins, and related globs until custom directory discovery is supported'\n )\n );\n return;\n }\n readNestedCompilerOptions(\n configRoot.value.node,\n configRoot.value.scope,\n ['vue', 'compilerOptions'],\n file,\n true,\n state,\n errors\n );\n}\n\n/** Finds a Nuxt source-layout override not covered by default CLI globs. */\nfunction findUnsupportedNuxtSourceLayout(\n config: StaticObject\n): t.Node | undefined {\n const srcDir = config.entries.get('srcDir');\n if (srcDir) {\n const value = resolveStaticString(srcDir.node, srcDir.scope, new Set());\n const normalized = value\n ? path.posix.normalize(value.replaceAll('\\\\', '/')).replace(/\\/+$/, '') ||\n '.'\n : undefined;\n if (!normalized || !['.', 'app', 'src'].includes(normalized)) {\n return srcDir.node;\n }\n }\n\n const directoryOptions = config.entries.get('dir');\n if (directoryOptions) {\n const resolved = resolveStaticObject(\n directoryOptions.node,\n directoryOptions.scope,\n new Set()\n );\n if (!resolved.ok || resolved.value.entries.size > 0) {\n return directoryOptions.node;\n }\n }\n return undefined;\n}\n\n/** Returns true only when a Nuxt extends value provably selects no layers. */\nfunction isDefinitelyEmptyNuxtExtends(input: t.Node, scope: Scope): boolean {\n const node = unwrapExpression(input);\n if (node.type === 'NullLiteral') return true;\n if (node.type === 'ArrayExpression') return node.elements.length === 0;\n if (node.type !== 'Identifier') return false;\n if (node.name === 'undefined' && !scope.getBinding(node.name)) return true;\n const binding = scope.getBinding(node.name);\n const declaration = binding?.path.node;\n return !!(\n binding?.constant &&\n !bindingHasMutation(binding) &&\n declaration?.type === 'VariableDeclarator' &&\n declaration.init &&\n isDefinitelyEmptyNuxtExtends(declaration.init, binding.path.scope)\n );\n}\n\n/** Returns the one top-level export that the config loader evaluates. */\nfunction findActiveConfigExport(\n ast: t.File,\n file: string,\n errors: string[]\n): ObjectEntry | undefined {\n const esmExports: ObjectEntry[] = [];\n const commonJsExports = new Map<\n 'exports-default' | 'module-exports',\n ObjectEntry[]\n >();\n\n traverse(ast, {\n ExportDefaultDeclaration(exportPath) {\n esmExports.push({\n node: exportPath.node.declaration,\n scope: exportPath.scope,\n });\n },\n AssignmentExpression(assignmentPath) {\n if (\n assignmentPath.node.operator !== '=' ||\n assignmentPath.getFunctionParent() ||\n !assignmentPath.parentPath.isExpressionStatement() ||\n !assignmentPath.parentPath.parentPath?.isProgram()\n ) {\n return;\n }\n const kind = readCommonJsConfigExportKind(\n assignmentPath.node.left,\n assignmentPath.scope\n );\n if (!kind) return;\n const entries = commonJsExports.get(kind) ?? [];\n entries.push({\n node: assignmentPath.node.right,\n scope: assignmentPath.scope,\n });\n commonJsExports.set(kind, entries);\n },\n });\n\n const commonJsKinds = [...commonJsExports.keys()];\n if (\n esmExports.length > 1 ||\n (esmExports.length > 0 && commonJsKinds.length > 0) ||\n commonJsKinds.length > 1\n ) {\n const node =\n esmExports[1]?.node ??\n commonJsExports.get(commonJsKinds[1]!)?.[0]?.node ??\n esmExports[0]?.node ??\n ast.program;\n errors.push(dynamicConfigError(file, node));\n return undefined;\n }\n if (esmExports[0]) return esmExports[0];\n const commonJs = commonJsExports.get(commonJsKinds[0]!);\n return commonJs?.[commonJs.length - 1];\n}\n\n/** Records return expressions by their immediately containing function. */\nfunction collectFunctionReturns(ast: t.File): Map<t.Function, ObjectEntry[]> {\n const result = new Map<t.Function, ObjectEntry[]>();\n traverse(ast, {\n ReturnStatement(returnPath) {\n if (!returnPath.node.argument) return;\n const functionPath = returnPath.getFunctionParent();\n if (!functionPath) return;\n const entries = result.get(functionPath.node) ?? [];\n entries.push({ node: returnPath.node.argument, scope: returnPath.scope });\n result.set(functionPath.node, entries);\n },\n });\n return result;\n}\n\n/** Resolves an exported object or single-return config function statically. */\nfunction resolveActiveConfigRoot(\n input: t.Node,\n scope: Scope,\n functionReturns: Map<t.Function, ObjectEntry[]>,\n resolveHelper: (input: t.Node, scope: Scope) => ConfigHelperResolution,\n seen: Set<t.Node>\n): ActiveConfigResolution {\n const node = unwrapExpression(input);\n if (seen.has(node)) return { ok: false, node };\n const nextSeen = new Set(seen);\n nextSeen.add(node);\n\n if (node.type === 'ObjectExpression') {\n return { ok: true, value: { node, scope } };\n }\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding)) {\n return { ok: false, node };\n }\n if (binding.path.isFunctionDeclaration()) {\n return resolveActiveConfigRoot(\n binding.path.node,\n binding.path.scope,\n functionReturns,\n resolveHelper,\n nextSeen\n );\n }\n const declaration = binding.path.node;\n return declaration.type === 'VariableDeclarator' && declaration.init\n ? resolveActiveConfigRoot(\n declaration.init,\n binding.path.scope,\n functionReturns,\n resolveHelper,\n nextSeen\n )\n : { ok: false, node };\n }\n if (\n node.type === 'CallExpression' ||\n node.type === 'OptionalCallExpression'\n ) {\n const helper = resolveHelper(node.callee, scope);\n if (helper !== 'static') return { ok: false, node: node.callee };\n const argument = node.arguments[0];\n return argument &&\n argument.type !== 'SpreadElement' &&\n argument.type !== 'ArgumentPlaceholder'\n ? resolveActiveConfigRoot(\n argument,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n )\n : { ok: false, node };\n }\n if (\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionExpression' ||\n node.type === 'FunctionDeclaration'\n ) {\n if (\n node.type === 'ArrowFunctionExpression' &&\n node.body.type !== 'BlockStatement'\n ) {\n return resolveActiveConfigRoot(\n node.body,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n );\n }\n const returns = functionReturns.get(node) ?? [];\n return returns.length === 1\n ? resolveActiveConfigRoot(\n returns[0]!.node,\n returns[0]!.scope,\n functionReturns,\n resolveHelper,\n nextSeen\n )\n : { ok: false, node };\n }\n if (node.type === 'ConditionalExpression') {\n const condition = resolveStaticTruthiness(node.test, scope, new Set());\n return condition === undefined\n ? { ok: false, node }\n : resolveActiveConfigRoot(\n condition ? node.consequent : node.alternate,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n );\n }\n if (node.type === 'SequenceExpression') {\n const last = node.expressions[node.expressions.length - 1];\n return last\n ? resolveActiveConfigRoot(\n last,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n )\n : { ok: false, node };\n }\n if (node.type === 'AwaitExpression') {\n return resolveActiveConfigRoot(\n node.argument,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n );\n }\n return { ok: false, node };\n}\n\n/** Resolves imported/global config helpers and their immutable aliases. */\nfunction resolveConfigHelperCall(\n input: t.Node,\n scope: Scope,\n knownBindings: Set<Binding>,\n globalName: string | undefined,\n seen: Set<Binding> = new Set()\n): ConfigHelperResolution {\n const node = unwrapExpression(input);\n if (node.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(node.name);\n if (!binding) return node.name === globalName ? 'static' : undefined;\n if (knownBindings.has(binding)) return 'static';\n if (seen.has(binding)) return undefined;\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n const initialValue = resolveConfigHelperCall(\n declaration.init,\n binding.path.scope,\n knownBindings,\n globalName,\n nextSeen\n );\n return !binding.constant && initialValue ? 'dynamic' : initialValue;\n}\n\n/** Collects Vue plugin calls reachable through the active `plugins` value. */\nfunction collectActiveVuePluginCalls(\n input: t.Node,\n scope: Scope,\n context: VitePluginContext,\n calls: ScopedPluginCall[],\n seen: Set<Binding>\n): t.Node | undefined {\n const node = unwrapExpression(input);\n\n if (node.type === 'Identifier') {\n const value = resolvePluginVueValue(\n node,\n scope,\n context.pluginBindings,\n context.namespaceBindings,\n context.moduleSource,\n new Set()\n );\n if (value === 'dynamic' || value === 'default') return node;\n const binding = scope.getBinding(node.name);\n if (!binding || seen.has(binding)) {\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n if (bindingHasMutation(binding)) return node;\n if (!binding.constant) {\n return mayReferenceVuePlugin(\n declaration.init,\n binding.path.scope,\n context,\n new Set()\n )\n ? node\n : undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return collectActiveVuePluginCalls(\n declaration.init,\n binding.path.scope,\n context,\n calls,\n nextSeen\n );\n }\n if (node.type === 'ArrayExpression') {\n for (const element of node.elements) {\n if (!element) continue;\n const unresolved = collectActiveVuePluginCalls(\n element.type === 'SpreadElement' ? element.argument : element,\n scope,\n context,\n calls,\n seen\n );\n if (unresolved) return unresolved;\n }\n return undefined;\n }\n if (\n node.type === 'CallExpression' ||\n node.type === 'OptionalCallExpression'\n ) {\n const value = resolvePluginVueValue(\n node.callee,\n scope,\n context.pluginBindings,\n context.namespaceBindings,\n context.moduleSource,\n new Set()\n );\n if (value === 'dynamic') return node.callee;\n if (value === 'default') {\n calls.push({ node, scope });\n return undefined;\n }\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n if (node.type === 'ConditionalExpression') {\n const condition = resolveStaticTruthiness(node.test, scope, new Set());\n if (condition !== undefined) {\n return collectActiveVuePluginCalls(\n condition ? node.consequent : node.alternate,\n scope,\n context,\n calls,\n seen\n );\n }\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n if (node.type === 'LogicalExpression') {\n const left = resolveStaticTruthiness(node.left, scope, new Set());\n if (left !== undefined) {\n const selected =\n node.operator === '&&'\n ? left\n ? node.right\n : node.left\n : node.operator === '||'\n ? left\n ? node.left\n : node.right\n : undefined;\n if (selected) {\n return collectActiveVuePluginCalls(\n selected,\n scope,\n context,\n calls,\n seen\n );\n }\n }\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n if (node.type === 'SequenceExpression') {\n const last = node.expressions[node.expressions.length - 1];\n return last\n ? collectActiveVuePluginCalls(last, scope, context, calls, seen)\n : undefined;\n }\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n}\n\n/** Conservatively follows wrapper bindings that reference the Vue plugin. */\nfunction mayReferenceVuePlugin(\n input: t.Node,\n scope: Scope,\n context: VitePluginContext,\n seen: Set<Binding>\n): boolean {\n const node = unwrapExpression(input);\n const start = node.start;\n const end = node.end;\n if (\n typeof start === 'number' &&\n typeof end === 'number' &&\n context.referencePositions.some(\n (position) => position >= start && position <= end\n )\n ) {\n return true;\n }\n const target =\n node.type === 'Identifier'\n ? node\n : node.type === 'CallExpression' || node.type === 'OptionalCallExpression'\n ? unwrapExpression(node.callee)\n : undefined;\n if (target?.type !== 'Identifier') return false;\n const binding = scope.getBinding(target.name);\n if (!binding) return false;\n if (\n context.pluginBindings.has(binding) ||\n context.namespaceBindings.has(binding)\n ) {\n return true;\n }\n if (seen.has(binding)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n const declaration = binding.path.node;\n if (declaration.type === 'VariableDeclarator' && declaration.init) {\n return mayReferenceVuePlugin(\n declaration.init,\n binding.path.scope,\n context,\n nextSeen\n );\n }\n const declarationStart = declaration.start;\n const declarationEnd = declaration.end;\n return (\n typeof declarationStart === 'number' &&\n typeof declarationEnd === 'number' &&\n context.referencePositions.some(\n (position) => position >= declarationStart && position <= declarationEnd\n )\n );\n}\n\n/** Evaluates only primitive truthiness used to choose a static config branch. */\nfunction resolveStaticTruthiness(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean | undefined {\n const node = unwrapExpression(input);\n if (node.type === 'BooleanLiteral') return node.value;\n if (node.type === 'NullLiteral') return false;\n if (node.type === 'NumericLiteral') return !!node.value;\n if (node.type === 'BigIntLiteral') return node.value !== '0';\n if (node.type === 'StringLiteral') return node.value.length > 0;\n if (node.type === 'UnaryExpression' && node.operator === '!') {\n const value = resolveStaticTruthiness(node.argument, scope, seen);\n return value === undefined ? undefined : !value;\n }\n if (node.type !== 'Identifier') return undefined;\n if (node.name === 'undefined' && !scope.getBinding(node.name)) return false;\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding) || seen.has(binding)) {\n return undefined;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return resolveStaticTruthiness(\n declaration.init,\n binding.path.scope,\n nextSeen\n );\n}\n\nfunction readNestedCompilerOptions(\n root: t.Node,\n scope: Scope,\n keys: [string, string],\n file: string,\n failOnDynamicRoot: boolean,\n state: CompilerOptionState,\n errors: string[]\n): void {\n const rootObject = resolveStaticObject(root, scope, new Set());\n if (!rootObject.ok) {\n if (failOnDynamicRoot)\n errors.push(dynamicConfigError(file, rootObject.node));\n return;\n }\n\n const parentEntry = rootObject.value.entries.get(keys[0]);\n if (!parentEntry) return;\n const parentObject = resolveStaticObject(\n parentEntry.node,\n parentEntry.scope,\n new Set()\n );\n if (!parentObject.ok) {\n errors.push(dynamicConfigError(file, parentObject.node));\n return;\n }\n\n const compilerEntry = parentObject.value.entries.get(keys[1]);\n if (!compilerEntry) return;\n const compilerObject = resolveStaticObject(\n compilerEntry.node,\n compilerEntry.scope,\n new Set()\n );\n if (!compilerObject.ok) {\n errors.push(dynamicConfigError(file, compilerObject.node));\n return;\n }\n\n readCompilerOptionsObject(compilerObject.value, file, state, errors);\n}\n\nfunction readCompilerOptionsObject(\n object: StaticObject,\n file: string,\n state: CompilerOptionState,\n errors: string[]\n): void {\n for (const [key, entry] of object.entries) {\n if (key !== 'whitespace' && key !== 'delimiters') {\n errors.push(\n locatedOptionError(\n file,\n entry.node,\n `Found unsupported Vue compiler option \"${key}\"`,\n 'gt-vue extraction currently supports only static whitespace and delimiters compiler options'\n )\n );\n }\n }\n\n const whitespaceEntry = object.entries.get('whitespace');\n if (whitespaceEntry) {\n const value = resolveStaticString(\n whitespaceEntry.node,\n whitespaceEntry.scope,\n new Set()\n );\n if (value !== 'condense' && value !== 'preserve') {\n errors.push(dynamicConfigError(file, whitespaceEntry.node));\n } else {\n mergeOption(\n state,\n 'whitespace',\n value,\n { file, node: whitespaceEntry.node },\n errors\n );\n }\n }\n\n const delimitersEntry = object.entries.get('delimiters');\n if (delimitersEntry) {\n const value = resolveStaticDelimiters(\n delimitersEntry.node,\n delimitersEntry.scope,\n new Set()\n );\n if (!value) {\n errors.push(dynamicConfigError(file, delimitersEntry.node));\n } else {\n mergeOption(\n state,\n 'delimiters',\n value,\n { file, node: delimitersEntry.node },\n errors\n );\n }\n }\n}\n\nfunction resolveStaticObject(\n input: t.Node,\n scope: Scope,\n seen: Set<t.Node>\n): ObjectResolution {\n const node = unwrapExpression(input);\n if (seen.has(node)) return { ok: false, node };\n seen.add(node);\n\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n const declaration = binding?.path.node;\n if (\n !binding?.constant ||\n bindingHasMutation(binding) ||\n declaration?.type !== 'VariableDeclarator' ||\n !declaration.init\n ) {\n return { ok: false, node };\n }\n return resolveStaticObject(declaration.init, binding.path.scope, seen);\n }\n if (node.type !== 'ObjectExpression') return { ok: false, node };\n\n const entries = new Map<string, ObjectEntry>();\n for (const property of node.properties) {\n if (property.type === 'SpreadElement') {\n const spread = resolveStaticObject(property.argument, scope, seen);\n if (!spread.ok) return { ok: false, node: spread.node };\n for (const [key, entry] of spread.value.entries) entries.set(key, entry);\n continue;\n }\n const key = readPropertyKey(property);\n if (!key) return { ok: false, node: property };\n if (property.type !== 'ObjectProperty') {\n entries.set(key, { node: property, scope });\n continue;\n }\n entries.set(key, { node: property.value, scope });\n }\n return { ok: true, value: { entries } };\n}\n\nfunction resolveStaticString(\n input: t.Node,\n scope: Scope,\n seen: Set<t.Node>\n): string | undefined {\n const node = unwrapExpression(input);\n if (seen.has(node)) return undefined;\n seen.add(node);\n if (node.type === 'StringLiteral') return node.value;\n if (node.type === 'TemplateLiteral' && node.expressions.length === 0) {\n return node.quasis\n .map((quasi) => quasi.value.cooked ?? quasi.value.raw)\n .join('');\n }\n if (node.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(node.name);\n const declaration = binding?.path.node;\n return binding?.constant &&\n !bindingHasMutation(binding) &&\n declaration?.type === 'VariableDeclarator' &&\n declaration.init\n ? resolveStaticString(declaration.init, binding.path.scope, seen)\n : undefined;\n}\n\nfunction resolveStaticDelimiters(\n input: t.Node,\n scope: Scope,\n seen: Set<t.Node>\n): [string, string] | undefined {\n const node = unwrapExpression(input);\n if (seen.has(node)) return undefined;\n seen.add(node);\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n const declaration = binding?.path.node;\n return binding?.constant &&\n !bindingHasMutation(binding) &&\n declaration?.type === 'VariableDeclarator' &&\n declaration.init\n ? resolveStaticDelimiters(declaration.init, binding.path.scope, seen)\n : undefined;\n }\n if (node.type !== 'ArrayExpression' || node.elements.length !== 2) {\n return undefined;\n }\n const values = node.elements.map((element) =>\n element && element.type !== 'SpreadElement'\n ? resolveStaticString(element, scope, new Set())\n : undefined\n );\n return isDelimiterPair(values) ? values : undefined;\n}\n\nfunction unwrapExpression(input: t.Node): t.Node {\n let node = input;\n while (\n node.type === 'TSAsExpression' ||\n node.type === 'TSSatisfiesExpression' ||\n node.type === 'TSTypeAssertion' ||\n node.type === 'TSNonNullExpression' ||\n node.type === 'TypeCastExpression' ||\n node.type === 'ParenthesizedExpression'\n ) {\n node = node.expression;\n }\n return node;\n}\n\nfunction readPropertyKey(\n property: t.ObjectMethod | t.ObjectProperty\n): string | undefined {\n if (!property.computed && property.key.type === 'Identifier') {\n return property.key.name;\n }\n if (property.key.type === 'StringLiteral') return property.key.value;\n return undefined;\n}\n\nfunction getPluginVueRequireKind(\n input: t.Expression | null | undefined,\n moduleSource: '@vitejs/plugin-vue' | '@vitejs/plugin-vue-jsx'\n): 'default' | 'namespace' | undefined {\n if (!input) return undefined;\n const node = unwrapExpression(input);\n if (\n node.type === 'CallExpression' &&\n node.callee.type === 'Identifier' &&\n node.callee.name === 'require' &&\n node.arguments[0]?.type === 'StringLiteral' &&\n node.arguments[0].value === moduleSource\n ) {\n return 'namespace';\n }\n if (\n (node.type === 'MemberExpression' ||\n node.type === 'OptionalMemberExpression') &&\n isDefaultMember(node)\n ) {\n return getPluginVueRequireKind(node.object as t.Expression, moduleSource)\n ? 'default'\n : undefined;\n }\n return undefined;\n}\n\n/** Resolves immutable aliases of the Vue Vite plugin without executing config. */\nfunction resolvePluginVueValue(\n input: t.Node,\n scope: Scope,\n pluginBindings: Set<Binding>,\n namespaceBindings: Set<Binding>,\n moduleSource: '@vitejs/plugin-vue' | '@vitejs/plugin-vue-jsx',\n seen: Set<Binding>\n): 'default' | 'dynamic' | 'namespace' | undefined {\n const node = unwrapExpression(input);\n const requireKind =\n node.type === 'CallExpression' ||\n node.type === 'MemberExpression' ||\n node.type === 'OptionalMemberExpression'\n ? getPluginVueRequireKind(node, moduleSource)\n : undefined;\n if (requireKind) return requireKind;\n\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n if (!binding) return undefined;\n if (pluginBindings.has(binding)) return 'default';\n if (namespaceBindings.has(binding)) return 'namespace';\n if (seen.has(binding)) return undefined;\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n const initialValue = resolvePluginVueValue(\n declaration.init,\n binding.path.scope,\n pluginBindings,\n namespaceBindings,\n moduleSource,\n nextSeen\n );\n return !binding.constant && initialValue ? 'dynamic' : initialValue;\n }\n if (\n (node.type === 'MemberExpression' ||\n node.type === 'OptionalMemberExpression') &&\n isDefaultMember(node)\n ) {\n const objectValue = resolvePluginVueValue(\n node.object,\n scope,\n pluginBindings,\n namespaceBindings,\n moduleSource,\n seen\n );\n if (objectValue === 'dynamic') return 'dynamic';\n if (objectValue === 'namespace') return 'default';\n }\n return undefined;\n}\n\n/** Recognizes every static spelling of a module namespace default export. */\nfunction isDefaultMember(\n node: t.MemberExpression | t.OptionalMemberExpression\n): boolean {\n return (\n (!node.computed &&\n node.property.type === 'Identifier' &&\n node.property.name === 'default') ||\n (node.computed &&\n node.property.type === 'StringLiteral' &&\n node.property.value === 'default')\n );\n}\n\n/** Classifies supported unshadowed CommonJS config exports. */\nfunction readCommonJsConfigExportKind(\n node: t.Node,\n scope: Scope\n): 'exports-default' | 'module-exports' | undefined {\n if (\n node.type !== 'MemberExpression' ||\n node.object.type !== 'Identifier' ||\n !(\n (!node.computed && node.property.type === 'Identifier') ||\n (node.computed && node.property.type === 'StringLiteral')\n )\n ) {\n return undefined;\n }\n const property =\n node.property.type === 'Identifier'\n ? node.property.name\n : node.property.value;\n if (\n node.object.name === 'module' &&\n property === 'exports' &&\n !scope.getBinding('module')\n ) {\n return 'module-exports';\n }\n return node.object.name === 'exports' &&\n property === 'default' &&\n !scope.getBinding('exports')\n ? 'exports-default'\n : undefined;\n}\n\nfunction readBindingIdentifier(node: t.Node): string | undefined {\n if (node.type === 'Identifier') return node.name;\n return node.type === 'AssignmentPattern' && node.left.type === 'Identifier'\n ? node.left.name\n : undefined;\n}\n\nconst MUTATING_METHODS = new Set([\n 'clear',\n 'copyWithin',\n 'delete',\n 'fill',\n 'pop',\n 'push',\n 'reverse',\n 'set',\n 'shift',\n 'sort',\n 'splice',\n 'unshift',\n]);\n\n/** Detects property, collection, and alias mutations Babel does not mark constant. */\nfunction bindingHasMutation(\n binding: Binding,\n seen: Set<Binding> = new Set()\n): boolean {\n if (seen.has(binding)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n\n for (const reference of binding.referencePaths) {\n let current = reference as NodePath<t.Node>;\n while (\n current.parentPath &&\n (current.parentPath.isMemberExpression() ||\n current.parentPath.isOptionalMemberExpression()) &&\n current.parentPath.node.object === current.node\n ) {\n current = current.parentPath as NodePath<t.Node>;\n }\n\n const parent = current.parentPath;\n if (\n (parent?.isAssignmentExpression() && parent.node.left === current.node) ||\n (parent?.isUpdateExpression() && parent.node.argument === current.node) ||\n (parent?.isUnaryExpression({ operator: 'delete' }) &&\n parent.node.argument === current.node)\n ) {\n return true;\n }\n\n if (parent?.isCallExpression() || parent?.isOptionalCallExpression()) {\n if (\n parent.node.callee === current.node &&\n (current.isMemberExpression() ||\n current.isOptionalMemberExpression()) &&\n MUTATING_METHODS.has(readStaticMemberName(current.node) ?? '')\n ) {\n return true;\n }\n if (\n parent.node.arguments[0] === current.node &&\n isGlobalMutationCall(parent.node.callee, parent.scope)\n ) {\n return true;\n }\n if (\n parent.node.arguments.some((argument) => argument === current.node) &&\n !isKnownReadOnlyConfigConsumer(parent.node, current.node, parent.scope)\n ) {\n return true;\n }\n }\n\n const aliasParent = reference.parentPath;\n if (\n aliasParent?.isVariableDeclarator() &&\n aliasParent.node.init === reference.node &&\n aliasParent.node.id.type === 'Identifier'\n ) {\n const alias = aliasParent.scope.getBinding(aliasParent.node.id.name);\n if (alias && bindingHasMutation(alias, nextSeen)) return true;\n }\n if (\n aliasParent?.isVariableDeclarator() &&\n aliasParent.node.init === reference.node &&\n aliasParent.node.id.type !== 'Identifier'\n ) {\n for (const name of collectBindingNames(aliasParent.node.id)) {\n const alias = aliasParent.scope.getBinding(name);\n if (alias && bindingHasMutation(alias, nextSeen)) return true;\n }\n }\n if (\n parent?.isAssignmentExpression({ operator: '=' }) &&\n parent.node.right === current.node\n ) {\n for (const name of collectBindingNames(parent.node.left)) {\n const alias = parent.scope.getBinding(name);\n if (alias && bindingHasMutation(alias, nextSeen)) return true;\n }\n }\n }\n return false;\n}\n\nfunction collectBindingNames(input: t.Node): string[] {\n if (input.type === 'Identifier') return [input.name];\n if (input.type === 'AssignmentPattern') {\n return collectBindingNames(input.left);\n }\n if (input.type === 'RestElement') return collectBindingNames(input.argument);\n if (input.type === 'ArrayPattern') {\n return input.elements.flatMap((element) =>\n element ? collectBindingNames(element) : []\n );\n }\n if (input.type === 'ObjectPattern') {\n return input.properties.flatMap((property) =>\n property.type === 'RestElement'\n ? collectBindingNames(property.argument)\n : collectBindingNames(property.value)\n );\n }\n return [];\n}\n\nfunction readStaticMemberName(\n node: t.MemberExpression | t.OptionalMemberExpression\n): string | undefined {\n if (!node.computed && node.property.type === 'Identifier') {\n return node.property.name;\n }\n return node.computed && node.property.type === 'StringLiteral'\n ? node.property.value\n : undefined;\n}\n\nfunction isGlobalMutationCall(input: t.Node, scope: Scope): boolean {\n const node = unwrapExpression(input);\n if (\n node.type !== 'MemberExpression' &&\n node.type !== 'OptionalMemberExpression'\n ) {\n return false;\n }\n const method = readStaticMemberName(node);\n if (node.object.type !== 'Identifier' || scope.getBinding(node.object.name)) {\n return false;\n }\n return (\n (node.object.name === 'Object' &&\n (method === 'assign' ||\n method === 'defineProperty' ||\n method === 'defineProperties')) ||\n (node.object.name === 'Reflect' &&\n (method === 'set' || method === 'deleteProperty'))\n );\n}\n\nfunction isKnownReadOnlyConfigConsumer(\n call: t.CallExpression | t.OptionalCallExpression,\n argument: t.Node,\n scope: Scope\n): boolean {\n if (resolveKnownConfigConsumer(call.callee, scope, new Set())) return true;\n const callee = unwrapExpression(call.callee);\n if (\n callee.type !== 'MemberExpression' &&\n callee.type !== 'OptionalMemberExpression'\n ) {\n return false;\n }\n const method = readStaticMemberName(callee);\n if (\n callee.object.type !== 'Identifier' ||\n scope.getBinding(callee.object.name)\n ) {\n return false;\n }\n const argumentIndex = call.arguments.findIndex(\n (candidate) => candidate === argument\n );\n if (callee.object.name === 'Object') {\n if (method === 'assign') return argumentIndex > 0;\n return new Set([\n 'entries',\n 'freeze',\n 'getOwnPropertyDescriptor',\n 'getOwnPropertyDescriptors',\n 'getOwnPropertyNames',\n 'getOwnPropertySymbols',\n 'isExtensible',\n 'isFrozen',\n 'isSealed',\n 'keys',\n 'preventExtensions',\n 'seal',\n 'values',\n ]).has(method ?? '');\n }\n return (\n (callee.object.name === 'Array' && method === 'isArray') ||\n (callee.object.name === 'JSON' && method === 'stringify')\n );\n}\n\nfunction resolveKnownConfigConsumer(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean {\n const node = unwrapExpression(input);\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n if (!binding) return node.name === 'defineNuxtConfig';\n if (seen.has(binding)) return false;\n if (binding.path.isImportDefaultSpecifier()) {\n const declaration = binding.path.parentPath;\n return (\n declaration.isImportDeclaration() &&\n (declaration.node.source.value === '@vitejs/plugin-vue' ||\n declaration.node.source.value === '@vitejs/plugin-vue-jsx')\n );\n }\n if (binding.path.isImportSpecifier()) {\n const declaration = binding.path.parentPath;\n if (!declaration.isImportDeclaration()) return false;\n const imported = binding.path.node.imported;\n const name =\n imported.type === 'Identifier' ? imported.name : imported.value;\n const source = declaration.node.source.value;\n return (\n ((source === '@vitejs/plugin-vue' ||\n source === '@vitejs/plugin-vue-jsx') &&\n name === 'default') ||\n (source === 'vite' && name === 'defineConfig') ||\n ((source === 'nuxt' ||\n source === 'nuxt/config' ||\n source === '#imports') &&\n name === 'defineNuxtConfig')\n );\n }\n const declaration = binding.path.node;\n if (\n binding.constant &&\n declaration.type === 'VariableDeclarator' &&\n declaration.init\n ) {\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return resolveKnownConfigConsumer(\n declaration.init,\n binding.path.scope,\n nextSeen\n );\n }\n return false;\n }\n return (\n (node.type === 'MemberExpression' ||\n node.type === 'OptionalMemberExpression') &&\n isDefaultMember(node) &&\n (getPluginVueRequireKind(node as t.Expression, '@vitejs/plugin-vue') ===\n 'default' ||\n getPluginVueRequireKind(\n node as t.Expression,\n '@vitejs/plugin-vue-jsx'\n ) === 'default')\n );\n}\n\nfunction parseConfig(file: string, errors: string[]): t.File | undefined {\n const source = fs.readFileSync(file, 'utf8');\n try {\n return parse(source, {\n sourceType: 'unambiguous',\n plugins: parserPlugins(file),\n });\n } catch (error) {\n if (\n !/compilerOptions|whitespace|delimiters|@vitejs\\/plugin-vue-jsx|babelPlugins|pragma/.test(\n source\n )\n ) {\n return undefined;\n }\n const syntaxError = error as SyntaxError & {\n loc?: { column: number; line: number };\n };\n errors.push(\n withLocation(\n file,\n createDiagnosticMessage({\n whatHappened:\n 'Could not parse a project configuration containing Vue compiler options',\n details: syntaxError.message,\n fix: 'Use a statically analyzable Vite or Nuxt configuration, or configure files.gt.parsingFlags.vueCompilerOptions explicitly',\n }),\n syntaxError.loc\n ? `${syntaxError.loc.line}:${syntaxError.loc.column + 1}`\n : undefined\n )\n );\n return undefined;\n }\n}\n\nfunction parserPlugins(file: string): ParserPlugin[] {\n const extension = path.extname(file).toLowerCase();\n const plugins: ParserPlugin[] = [];\n if (\n extension === '.ts' ||\n extension === '.mts' ||\n extension === '.cts' ||\n extension === '.tsx'\n ) {\n plugins.push('typescript', 'decorators-legacy');\n }\n if (extension === '.jsx' || extension === '.tsx') plugins.push('jsx');\n return plugins;\n}\n\nfunction mergeOption<K extends CompilerOptionName>(\n state: CompilerOptionState,\n key: K,\n value: Required<Pick<VueCompilerOptions, K>>[K],\n source: OptionSource,\n errors: string[]\n): void {\n const existing = state.options[key];\n if (existing !== undefined && !sameOption(existing, value)) {\n errors.push(\n locatedOptionError(\n source.file,\n source.node,\n `Found conflicting Vue ${key} compiler options`,\n 'Use the same Vue compiler options in the project configuration and files.gt.parsingFlags.vueCompilerOptions'\n )\n );\n return;\n }\n Object.assign(state.options, { [key]: value });\n state.sources[key] ??= source;\n}\n\nfunction sameOption(\n first: VueCompilerOptions[CompilerOptionName],\n second: VueCompilerOptions[CompilerOptionName]\n): boolean {\n return Array.isArray(first) && Array.isArray(second)\n ? first[0] === second[0] && first[1] === second[1]\n : first === second;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isDelimiterPair(value: unknown): value is [string, string] {\n return (\n Array.isArray(value) &&\n value.length === 2 &&\n value.every(\n (delimiter) => typeof delimiter === 'string' && delimiter.length > 0\n )\n );\n}\n\nfunction dynamicConfigError(file: string, node: t.Node): string {\n return locatedOptionError(\n file,\n node,\n 'Could not statically resolve Vue compiler options',\n 'Use static object and string literals for Vue whitespace and delimiters compiler options so extraction hashes match the compiled app'\n );\n}\n\nfunction dynamicVueJSXConfigError(file: string, node: t.Node): string {\n return locatedOptionError(\n file,\n node,\n 'Could not statically resolve @vitejs/plugin-vue-jsx options',\n 'Use one statically configured Vue JSX plugin with the default VNode transform so extraction hashes match the compiled app'\n );\n}\n\nfunction locatedOptionError(\n file: string,\n node: t.Node | undefined,\n whatHappened: string,\n fix: string\n): string {\n return withLocation(\n file,\n createDiagnosticMessage({ whatHappened, fix }),\n node?.loc\n ? `${node.loc.start.line}:${node.loc.start.column + 1}`\n : undefined\n );\n}\n\nfunction optionError(whatHappened: string, fix: string): string {\n return createDiagnosticMessage({ whatHappened, fix });\n}\n\nfunction withLocation(\n file: string,\n message: string,\n location?: string\n): string {\n return `${file}${location ? ` (${location})` : ''}: ${message}`;\n}\n"],"mappings":";;;;;;AAYA,MAAM,WAAW,eAAe,WAAW;AAE3C,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,gCAAgC,IAAI,IAAI;CAC5C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;;;;;;;;;AAoEF,SAAgB,0BACd,KACA,iBACA,kBAAqD,EAAE,EACzB;CAC9B,MAAM,QAA6B;EAAE,SAAS,EAAE;EAAE,SAAS,EAAE;EAAE;CAC/D,MAAM,SAAmB,EAAE;AAE3B,qBAAoB,iBAAiB,OAAO,OAAO;AAEnD,KAAI,gBAAgB,mBAAmB,KAAA,GAAW;EAChD,MAAM,OAAO,wBACX,KACA,gBAAgB,gBAChB,OACD;AACD,MAAI,KAAM,gBAAe,MAAM,OAAO,OAAO;AAC7C,SAAO;GAAE,iBAAiB,MAAM;GAAS;GAAQ;;CAGnD,MAAM,aAAa,gBAAgB,KAAK,kBAAkB;CAC1D,MAAM,aAAa,gBAAgB,KAAK,kBAAkB;AAC1D,KAAI,cAAc,YAAY;AAC5B,SAAO,KACL,YACE,iDACA,wMACD,CACF;AACD,SAAO;GAAE,iBAAiB,MAAM;GAAS;GAAQ;;AAEnD,KAAI,YAAY;AACd,iBAAe,YAAY,OAAO,OAAO;AACzC,SAAO;GAAE,iBAAiB,MAAM;GAAS;GAAQ;;AAGnD,KAAI,WAAY,gBAAe,YAAY,OAAO,OAAO;AAEzD,QAAO;EAAE,iBAAiB,MAAM;EAAS;EAAQ;;;AAInD,SAAS,gBACP,KACA,WACoB;AACpB,MAAK,MAAM,YAAY,WAAW;EAChC,MAAM,OAAO,KAAK,QAAQ,KAAK,SAAS;AACxC,MAAI,GAAG,WAAW,KAAK,CAAE,QAAO;;;;AAMpC,SAAS,wBACP,KACA,gBACA,QACoB;AACpB,KAAI,OAAO,mBAAmB,YAAY,CAAC,eAAe,MAAM,EAAE;AAChE,SAAO,KACL,YACE,mCACA,8EACD,CACF;AACD;;CAEF,MAAM,OAAO,KAAK,QAAQ,IAAI;CAC9B,MAAM,YAAY,KAAK,QAAQ,MAAM,eAAe;CACpD,MAAM,oBAAoB,KAAK,SAAS,MAAM,UAAU;AACxD,KACE,kBAAkB,WAAW,KAAK,KAAK,MAAM,IAC7C,sBAAsB,QACtB,KAAK,WAAW,kBAAkB,IAClC,kBAAkB,MAAM,KAAK,IAAI,CAAC,SAAS,eAAe,EAC1D;AACA,SAAO,KACL,YACE,gEACA,6EACD,CACF;AACD;;AAEF,KACE,CAAC,8BAA8B,IAAI,KAAK,QAAQ,UAAU,CAAC,aAAa,CAAC,EACzE;AACA,SAAO,KACL,YACE,mDACA,kDACD,CACF;AACD;;AAEF,KAAI,CAAC,GAAG,WAAW,UAAU,IAAI,CAAC,GAAG,SAAS,UAAU,CAAC,QAAQ,EAAE;AACjE,SAAO,KACL,YACE,kDACA,uFACD,CACF;AACD;;CAGF,MAAM,WAAW,GAAG,aAAa,KAAK;CACtC,MAAM,gBAAgB,GAAG,aAAa,UAAU;CAChD,MAAM,eAAe,KAAK,SAAS,UAAU,cAAc;AAC3D,KACE,aAAa,WAAW,KAAK,KAAK,MAAM,IACxC,iBAAiB,QACjB,KAAK,WAAW,aAAa,IAC7B,aAAa,MAAM,KAAK,IAAI,CAAC,SAAS,eAAe,EACrD;AACA,SAAO,KACL,YACE,gEACA,6EACD,CACF;AACD;;AAEF,QAAO;;AAGT,SAAS,oBACP,OACA,OACA,QACM;AACN,KAAI,UAAU,KAAA,EAAW;AACzB,KAAI,CAAC,SAAS,MAAM,EAAE;AACpB,SAAO,KACL,YACE,uDACA,sGACD,CACF;AACD;;AAGF,MAAK,MAAM,OAAO,OAAO,KAAK,MAAM,CAClC,KAAI,QAAQ,gBAAgB,QAAQ,aAClC,QAAO,KACL,YACE,0CAA0C,IAAI,sBAC9C,uFACD,CACF;AAIL,KAAI,MAAM,eAAe,KAAA,EACvB,KAAI,MAAM,eAAe,cAAc,MAAM,eAAe,WAC1D,QAAO,KACL,YACE,qEACA,wDACD,CACF;KAED,aACE,OACA,cACA,MAAM,YACN,EAAE,MAAM,kBAAkB,EAC1B,OACD;AAIL,KAAI,MAAM,eAAe,KAAA,EACvB,KAAI,CAAC,gBAAgB,MAAM,WAAW,CACpC,QAAO,KACL,YACE,gEACA,4EACD,CACF;KAED,aACE,OACA,cACA,MAAM,YACN,EAAE,MAAM,kBAAkB,EAC1B,OACD;;AAKP,SAAS,eACP,MACA,OACA,QACM;CACN,MAAM,MAAM,YAAY,MAAM,OAAO;AACrC,KAAI,CAAC,IAAK;CAEV,MAAM,iCAAiB,IAAI,KAAc;CACzC,MAAM,oCAAoB,IAAI,KAAc;CAC5C,MAAM,oCAAoB,IAAI,KAAc;CAC5C,MAAM,uCAAuB,IAAI,KAAc;CAC/C,MAAM,uCAAuB,IAAI,KAAc;AAE/C,UAAS,KAAK;EACZ,kBAAkB,YAAY;AAC5B,OAAI,WAAW,KAAK,OAAO,UAAU,QAAQ;AAC3C,SAAK,MAAM,iBAAiB,WAAW,IAAI,aAAa,EAAE;KACxD,MAAM,YAAY,cAAc;AAChC,SACE,UAAU,SAAS,sBAClB,UAAU,SAAS,SAAS,eACzB,UAAU,SAAS,OACnB,UAAU,SAAS,WAAW,eAElC;KAEF,MAAM,UAAU,cAAc,MAAM,WAAW,UAAU,MAAM,KAAK;AACpE,SAAI,QAAS,sBAAqB,IAAI,QAAQ;;AAEhD;;GAEF,MAAM,eAAe,WAAW,KAAK,OAAO;AAC5C,OACE,iBAAiB,wBACjB,iBAAiB,yBAEjB;GAEF,MAAM,uBACJ,iBAAiB,2BACb,oBACA;GACN,MAAM,0BACJ,iBAAiB,2BACb,uBACA;AACN,QAAK,MAAM,iBAAiB,WAAW,IAAI,aAAa,EAAE;IACxD,MAAM,YAAY,cAAc;IAChC,MAAM,UAAU,cAAc,MAAM,WAAW,UAAU,MAAM,KAAK;AACpE,QAAI,CAAC,QAAS;AACd,QAAI,UAAU,SAAS,2BACrB,yBAAwB,IAAI,QAAQ;aAEpC,UAAU,SAAS,4BAClB,UAAU,SAAS,sBACjB,UAAU,SAAS,SAAS,eACzB,UAAU,SAAS,OACnB,UAAU,SAAS,WAAW,UAEpC,sBAAqB,IAAI,QAAQ;;;EAIvC,0BAA0B,YAAY;GACpC,MAAM,YAAY,WAAW,KAAK;AAClC,OACE,UAAU,SAAS,+BACnB,UAAU,WAAW,SAAS,mBAC7B,UAAU,WAAW,UAAU,wBAC9B,UAAU,WAAW,UAAU,yBAEjC;GAEF,MAAM,UAAU,WAAW,MAAM,WAAW,WAAW,KAAK,GAAG,KAAK;AACpE,OAAI,CAAC,QAAS;AACd,OAAI,UAAU,WAAW,UAAU,yBACjC,sBAAqB,IAAI,QAAQ;OAEjC,mBAAkB,IAAI,QAAQ;;EAGlC,mBAAmB,cAAc;GAC/B,MAAM,iBAAiB,wBACrB,aAAa,KAAK,MAClB,qBACD;GACD,MAAM,iBAAiB,wBACrB,aAAa,KAAK,MAClB,yBACD;GACD,MAAM,cAAc,kBAAkB;AACtC,OAAI,CAAC,YAAa;GAClB,MAAM,uBAAuB,iBACzB,oBACA;GACJ,MAAM,0BAA0B,iBAC5B,uBACA;AACJ,OAAI,aAAa,KAAK,GAAG,SAAS,cAAc;IAC9C,MAAM,UAAU,aAAa,MAAM,WACjC,aAAa,KAAK,GAAG,KACtB;AACD,QAAI,CAAC,QAAS;AACd,QAAI,gBAAgB,YAAa,yBAAwB,IAAI,QAAQ;QAChE,sBAAqB,IAAI,QAAQ;AACtC;;AAEF,OACE,gBAAgB,eAChB,aAAa,KAAK,GAAG,SAAS,gBAE9B;AAEF,QAAK,MAAM,YAAY,aAAa,KAAK,GAAG,YAAY;AACtD,QACE,SAAS,SAAS,oBAClB,gBAAgB,SAAS,KAAK,UAE9B;IAEF,MAAM,YAAY,sBAAsB,SAAS,MAAM;IACvD,MAAM,UAAU,YACZ,aAAa,MAAM,WAAW,UAAU,GACxC,KAAA;AACJ,QAAI,QAAS,sBAAqB,IAAI,QAAQ;;;EAGnD,CAAC;CAEF,MAAM,eAAe,uBAAuB,KAAK,MAAM,OAAO;AAC9D,KAAI,CAAC,aAAc;CACnB,MAAM,kBAAkB,uBAAuB,IAAI;CACnD,MAAM,aAAa,wBACjB,aAAa,MACb,aAAa,OACb,kBACC,QAAQ,UACP,wBAAwB,QAAQ,OAAO,sBAAsB,KAAA,EAAU,kBACzE,IAAI,KAAK,CACV;AACD,KAAI,CAAC,WAAW,IAAI;AAClB,SAAO,KAAK,mBAAmB,MAAM,WAAW,KAAK,CAAC;AACtD;;CAGF,MAAM,eAAe,oBACnB,WAAW,MAAM,MACjB,WAAW,MAAM,uBACjB,IAAI,KAAK,CACV;AACD,KAAI,CAAC,aAAa,IAAI;AACpB,SAAO,KAAK,mBAAmB,MAAM,aAAa,KAAK,CAAC;AACxD;;CAEF,MAAM,UAAU,aAAa,MAAM,QAAQ,IAAI,UAAU;AACzD,KAAI,CAAC,QAAS;CAEd,MAAM,gBAAmC;EACvC,cAAc;EACd;EACA;EACA,oBAAoB,CAAC,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,SAC3D,YACC,QAAQ,eACL,KAAK,cAAc,UAAU,KAAK,MAAM,CACxC,QAAQ,aAAiC,aAAa,KAAK,CACjE;EACF;CACD,MAAM,QAA4B,EAAE;CACpC,MAAM,aAAa,4BACjB,QAAQ,MACR,QAAQ,OACR,eACA,uBACA,IAAI,KAAK,CACV;AACD,KAAI,YAAY;AACd,SAAO,KAAK,mBAAmB,MAAM,WAAW,CAAC;AACjD;;AAEF,KAAI,MAAM,SAAS,GAAG;AACpB,SAAO,KAAK,mBAAmB,MAAM,MAAM,GAAI,KAAK,CAAC;AACrD;;CAEF,MAAM,OAAO,MAAM;AACnB,KAAI,MAAM;EACR,MAAM,WAAW,KAAK,KAAK,UAAU;AACrC,MACE,UAAU,SAAS,mBACnB,UAAU,SAAS,uBACnB;AACA,UAAO,KAAK,mBAAmB,MAAM,SAAS,CAAC;AAC/C;;AAEF,MAAI,UAAU;AACZ,2BAAwB,UAAU,KAAK,OAAO,MAAM,OAAO;AAC3D,6BACE,UACA,KAAK,OACL,CAAC,YAAY,kBAAkB,EAC/B,MACA,MACA,OACA,OACD;;;CAIL,MAAM,mBAAsC;EAC1C,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,oBAAoB,CAAC,GAAG,mBAAmB,GAAG,qBAAqB,CAAC,SACjE,YACC,QAAQ,eACL,KAAK,cAAc,UAAU,KAAK,MAAM,CACxC,QAAQ,aAAiC,aAAa,KAAK,CACjE;EACF;CACD,MAAM,WAA+B,EAAE;CACvC,MAAM,gBAAgB,4BACpB,QAAQ,MACR,QAAQ,OACR,kBACA,0BACA,IAAI,KAAK,CACV;AACD,KAAI,eAAe;AACjB,SAAO,KAAK,yBAAyB,MAAM,cAAc,CAAC;AAC1D;;AAEF,KAAI,SAAS,SAAS,GAAG;AACvB,SAAO,KAAK,yBAAyB,MAAM,SAAS,GAAI,KAAK,CAAC;AAC9D;;AAEF,KAAI,SAAS,GAAI,yBAAwB,SAAS,IAAI,MAAM,OAAO;;;AAIrE,SAAS,wBACP,MACA,MACA,QACM;CACN,MAAM,WAAW,KAAK,KAAK,UAAU;AACrC,KAAI,CAAC,SAAU;AACf,KACE,SAAS,SAAS,mBAClB,SAAS,SAAS,uBAClB;AACA,SAAO,KAAK,yBAAyB,MAAM,SAAS,CAAC;AACrD;;CAEF,MAAM,UAAU,oBAAoB,UAAU,KAAK,uBAAO,IAAI,KAAK,CAAC;AACpE,KAAI,CAAC,QAAQ,IAAI;AACf,SAAO,KAAK,yBAAyB,MAAM,QAAQ,KAAK,CAAC;AACzD;;AAGF,MAAK,MAAM,CAAC,MAAM,UAAU,QAAQ,MAAM,SAAS;EACjD,IAAI,YAAY;AAChB,MAAI,SAAS,WAGX,aACE,qBAAqB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK,KAAA;WACtD,SAAS,cAClB,aACE,qBAAqB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK;WACtD,SAAS,uBAAuB,SAAS,aAClD,aACE,qBAAqB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK;WACtD,SAAS,cAClB,aACE,qBAAqB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK;WACtD,SAAS,SAClB,aACE,oBAAoB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK;WACrD,SAAS,sBAClB,aAAY,8BACV,MAAM,MACN,MAAM,uBACN,IAAI,KAAK,CACV;WACQ,SAAS,eAClB,aAAY,uBAAuB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC;WAC7D,SAAS,mBAAmB;GACrC,MAAM,WAAW,oBAAoB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC;AACxE,eAAY,SAAS,MAAM,SAAS,MAAM,QAAQ,SAAS;;AAE7D,MAAI,UAAW;AACf,SAAO,KACL,mBACE,MACA,MAAM,MACN,oDAAoD,KAAK,IACzD,0HACD,CACF;;;;AAKL,SAAS,qBACP,OACA,OACA,MACqB;CACrB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,iBAAkB,QAAO,KAAK;AAChD,KAAI,KAAK,SAAS,aAAc,QAAO,KAAA;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,IAAI,KAAK,IAAI,QAAQ,CACxE;CAEF,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D;CAEF,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AACrB,QAAO,qBAAqB,YAAY,MAAM,QAAQ,KAAK,OAAO,SAAS;;;AAI7E,SAAS,8BACP,OACA,OACA,MACS;CACT,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,kBAChB,QACE,KAAK,SAAS,WAAW,KACzB,KAAK,SAAS,IAAI,SAAS,mBAC3B,KAAK,SAAS,GAAG,UAAU;AAG/B,KAAI,KAAK,SAAS,aAAc,QAAO;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,IAAI,KAAK,IAAI,QAAQ,CACxE,QAAO;CAET,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D,QAAO;CAET,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AACrB,QAAO,8BACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACD;;;AAIH,SAAS,uBACP,OACA,OACA,MACS;CACT,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,kBAAmB,QAAO,KAAK,SAAS,WAAW;AACrE,KAAI,KAAK,SAAS,aAAc,QAAO;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,IAAI,KAAK,IAAI,QAAQ,CACxE,QAAO;CAET,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D,QAAO;CAET,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AACrB,QAAO,uBAAuB,YAAY,MAAM,QAAQ,KAAK,OAAO,SAAS;;;;;;AAO/E,SAAS,wBACP,MACA,OACA,MACA,QACM;CACN,MAAM,aAAa,oBAAoB,MAAM,uBAAO,IAAI,KAAK,CAAC;AAC9D,KAAI,CAAC,WAAW,GAAI;CACpB,MAAM,WAAW,WAAW,MAAM,QAAQ,IAAI,WAAW;AACzD,KAAI,CAAC,SAAU;AACf,QAAO,KACL,mBACE,MACA,SAAS,MACT,2DACA,kGACD,CACF;;AAGH,SAAS,eACP,MACA,OACA,QACM;CACN,MAAM,MAAM,YAAY,MAAM,OAAO;AACrC,KAAI,CAAC,IAAK;CAEV,MAAM,2CAA2B,IAAI,KAAc;AACnD,UAAS,KAAK,EACZ,kBAAkB,YAAY;AAC5B,MACE,WAAW,KAAK,OAAO,UAAU,iBACjC,WAAW,KAAK,OAAO,UAAU,UACjC,WAAW,KAAK,OAAO,UAAU,WAEjC;AAEF,OAAK,MAAM,iBAAiB,WAAW,IAAI,aAAa,EAAE;GACxD,MAAM,YAAY,cAAc;AAChC,OACE,UAAU,SAAS,sBAClB,UAAU,SAAS,SAAS,eACzB,UAAU,SAAS,OACnB,UAAU,SAAS,WAAW,mBAElC;GAEF,MAAM,UAAU,cAAc,MAAM,WAAW,UAAU,MAAM,KAAK;AACpE,OAAI,QAAS,0BAAyB,IAAI,QAAQ;;IAGvD,CAAC;CAEF,MAAM,eAAe,uBAAuB,KAAK,MAAM,OAAO;AAC9D,KAAI,CAAC,aAAc;CACnB,MAAM,aAAa,wBACjB,aAAa,MACb,aAAa,OACb,uBAAuB,IAAI,GAC1B,QAAQ,UACP,wBACE,QACA,OACA,0BACA,mBACD,kBACH,IAAI,KAAK,CACV;AACD,KAAI,CAAC,WAAW,IAAI;AAClB,SAAO,KAAK,mBAAmB,MAAM,WAAW,KAAK,CAAC;AACtD;;CAEF,MAAM,eAAe,oBACnB,WAAW,MAAM,MACjB,WAAW,MAAM,uBACjB,IAAI,KAAK,CACV;AACD,KAAI,CAAC,aAAa,IAAI;AACpB,SAAO,KAAK,mBAAmB,MAAM,aAAa,KAAK,CAAC;AACxD;;CAEF,MAAM,eAAe,aAAa,MAAM,QAAQ,IAAI,UAAU;AAC9D,KACE,gBACA,CAAC,6BAA6B,aAAa,MAAM,aAAa,MAAM,EACpE;AACA,SAAO,KACL,mBACE,MACA,aAAa,MACb,uEACA,6HACD,CACF;AACD;;CAEF,MAAM,0BAA0B,gCAC9B,aAAa,MACd;AACD,KAAI,yBAAyB;AAC3B,SAAO,KACL,mBACE,MACA,yBACA,sFACA,wJACD,CACF;AACD;;AAEF,2BACE,WAAW,MAAM,MACjB,WAAW,MAAM,OACjB,CAAC,OAAO,kBAAkB,EAC1B,MACA,MACA,OACA,OACD;;;AAIH,SAAS,gCACP,QACoB;CACpB,MAAM,SAAS,OAAO,QAAQ,IAAI,SAAS;AAC3C,KAAI,QAAQ;EACV,MAAM,QAAQ,oBAAoB,OAAO,MAAM,OAAO,uBAAO,IAAI,KAAK,CAAC;EACvE,MAAM,aAAa,QACf,KAAK,MAAM,UAAU,MAAM,WAAW,MAAM,IAAI,CAAC,CAAC,QAAQ,QAAQ,GAAG,IACrE,MACA,KAAA;AACJ,MAAI,CAAC,cAAc,CAAC;GAAC;GAAK;GAAO;GAAM,CAAC,SAAS,WAAW,CAC1D,QAAO,OAAO;;CAIlB,MAAM,mBAAmB,OAAO,QAAQ,IAAI,MAAM;AAClD,KAAI,kBAAkB;EACpB,MAAM,WAAW,oBACf,iBAAiB,MACjB,iBAAiB,uBACjB,IAAI,KAAK,CACV;AACD,MAAI,CAAC,SAAS,MAAM,SAAS,MAAM,QAAQ,OAAO,EAChD,QAAO,iBAAiB;;;;AAO9B,SAAS,6BAA6B,OAAe,OAAuB;CAC1E,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,cAAe,QAAO;AACxC,KAAI,KAAK,SAAS,kBAAmB,QAAO,KAAK,SAAS,WAAW;AACrE,KAAI,KAAK,SAAS,aAAc,QAAO;AACvC,KAAI,KAAK,SAAS,eAAe,CAAC,MAAM,WAAW,KAAK,KAAK,CAAE,QAAO;CACtE,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;CAC3C,MAAM,cAAc,SAAS,KAAK;AAClC,QAAO,CAAC,EACN,SAAS,YACT,CAAC,mBAAmB,QAAQ,IAC5B,aAAa,SAAS,wBACtB,YAAY,QACZ,6BAA6B,YAAY,MAAM,QAAQ,KAAK,MAAM;;;AAKtE,SAAS,uBACP,KACA,MACA,QACyB;CACzB,MAAM,aAA4B,EAAE;CACpC,MAAM,kCAAkB,IAAI,KAGzB;AAEH,UAAS,KAAK;EACZ,yBAAyB,YAAY;AACnC,cAAW,KAAK;IACd,MAAM,WAAW,KAAK;IACtB,OAAO,WAAW;IACnB,CAAC;;EAEJ,qBAAqB,gBAAgB;AACnC,OACE,eAAe,KAAK,aAAa,OACjC,eAAe,mBAAmB,IAClC,CAAC,eAAe,WAAW,uBAAuB,IAClD,CAAC,eAAe,WAAW,YAAY,WAAW,CAElD;GAEF,MAAM,OAAO,6BACX,eAAe,KAAK,MACpB,eAAe,MAChB;AACD,OAAI,CAAC,KAAM;GACX,MAAM,UAAU,gBAAgB,IAAI,KAAK,IAAI,EAAE;AAC/C,WAAQ,KAAK;IACX,MAAM,eAAe,KAAK;IAC1B,OAAO,eAAe;IACvB,CAAC;AACF,mBAAgB,IAAI,MAAM,QAAQ;;EAErC,CAAC;CAEF,MAAM,gBAAgB,CAAC,GAAG,gBAAgB,MAAM,CAAC;AACjD,KACE,WAAW,SAAS,KACnB,WAAW,SAAS,KAAK,cAAc,SAAS,KACjD,cAAc,SAAS,GACvB;EACA,MAAM,OACJ,WAAW,IAAI,QACf,gBAAgB,IAAI,cAAc,GAAI,GAAG,IAAI,QAC7C,WAAW,IAAI,QACf,IAAI;AACN,SAAO,KAAK,mBAAmB,MAAM,KAAK,CAAC;AAC3C;;AAEF,KAAI,WAAW,GAAI,QAAO,WAAW;CACrC,MAAM,WAAW,gBAAgB,IAAI,cAAc,GAAI;AACvD,QAAO,WAAW,SAAS,SAAS;;;AAItC,SAAS,uBAAuB,KAA6C;CAC3E,MAAM,yBAAS,IAAI,KAAgC;AACnD,UAAS,KAAK,EACZ,gBAAgB,YAAY;AAC1B,MAAI,CAAC,WAAW,KAAK,SAAU;EAC/B,MAAM,eAAe,WAAW,mBAAmB;AACnD,MAAI,CAAC,aAAc;EACnB,MAAM,UAAU,OAAO,IAAI,aAAa,KAAK,IAAI,EAAE;AACnD,UAAQ,KAAK;GAAE,MAAM,WAAW,KAAK;GAAU,OAAO,WAAW;GAAO,CAAC;AACzE,SAAO,IAAI,aAAa,MAAM,QAAQ;IAEzC,CAAC;AACF,QAAO;;;AAIT,SAAS,wBACP,OACA,OACA,iBACA,eACA,MACwB;CACxB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,IAAI,KAAK,CAAE,QAAO;EAAE,IAAI;EAAO;EAAM;CAC9C,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,KAAK;AAElB,KAAI,KAAK,SAAS,mBAChB,QAAO;EAAE,IAAI;EAAM,OAAO;GAAE;GAAM;GAAO;EAAE;AAE7C,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,MAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,CACnD,QAAO;GAAE,IAAI;GAAO;GAAM;AAE5B,MAAI,QAAQ,KAAK,uBAAuB,CACtC,QAAO,wBACL,QAAQ,KAAK,MACb,QAAQ,KAAK,OACb,iBACA,eACA,SACD;EAEH,MAAM,cAAc,QAAQ,KAAK;AACjC,SAAO,YAAY,SAAS,wBAAwB,YAAY,OAC5D,wBACE,YAAY,MACZ,QAAQ,KAAK,OACb,iBACA,eACA,SACD,GACD;GAAE,IAAI;GAAO;GAAM;;AAEzB,KACE,KAAK,SAAS,oBACd,KAAK,SAAS,0BACd;AAEA,MADe,cAAc,KAAK,QAAQ,MAChC,KAAK,SAAU,QAAO;GAAE,IAAI;GAAO,MAAM,KAAK;GAAQ;EAChE,MAAM,WAAW,KAAK,UAAU;AAChC,SAAO,YACL,SAAS,SAAS,mBAClB,SAAS,SAAS,wBAChB,wBACE,UACA,OACA,iBACA,eACA,SACD,GACD;GAAE,IAAI;GAAO;GAAM;;AAEzB,KACE,KAAK,SAAS,6BACd,KAAK,SAAS,wBACd,KAAK,SAAS,uBACd;AACA,MACE,KAAK,SAAS,6BACd,KAAK,KAAK,SAAS,iBAEnB,QAAO,wBACL,KAAK,MACL,OACA,iBACA,eACA,SACD;EAEH,MAAM,UAAU,gBAAgB,IAAI,KAAK,IAAI,EAAE;AAC/C,SAAO,QAAQ,WAAW,IACtB,wBACE,QAAQ,GAAI,MACZ,QAAQ,GAAI,OACZ,iBACA,eACA,SACD,GACD;GAAE,IAAI;GAAO;GAAM;;AAEzB,KAAI,KAAK,SAAS,yBAAyB;EACzC,MAAM,YAAY,wBAAwB,KAAK,MAAM,uBAAO,IAAI,KAAK,CAAC;AACtE,SAAO,cAAc,KAAA,IACjB;GAAE,IAAI;GAAO;GAAM,GACnB,wBACE,YAAY,KAAK,aAAa,KAAK,WACnC,OACA,iBACA,eACA,SACD;;AAEP,KAAI,KAAK,SAAS,sBAAsB;EACtC,MAAM,OAAO,KAAK,YAAY,KAAK,YAAY,SAAS;AACxD,SAAO,OACH,wBACE,MACA,OACA,iBACA,eACA,SACD,GACD;GAAE,IAAI;GAAO;GAAM;;AAEzB,KAAI,KAAK,SAAS,kBAChB,QAAO,wBACL,KAAK,UACL,OACA,iBACA,eACA,SACD;AAEH,QAAO;EAAE,IAAI;EAAO;EAAM;;;AAI5B,SAAS,wBACP,OACA,OACA,eACA,YACA,uBAAqB,IAAI,KAAK,EACN;CACxB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,aAAc,QAAO,KAAA;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,QAAS,QAAO,KAAK,SAAS,aAAa,WAAW,KAAA;AAC3D,KAAI,cAAc,IAAI,QAAQ,CAAE,QAAO;AACvC,KAAI,KAAK,IAAI,QAAQ,CAAE,QAAO,KAAA;CAC9B,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D;CAEF,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;CACrB,MAAM,eAAe,wBACnB,YAAY,MACZ,QAAQ,KAAK,OACb,eACA,YACA,SACD;AACD,QAAO,CAAC,QAAQ,YAAY,eAAe,YAAY;;;AAIzD,SAAS,4BACP,OACA,OACA,SACA,OACA,MACoB;CACpB,MAAM,OAAO,iBAAiB,MAAM;AAEpC,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,QAAQ,sBACZ,MACA,OACA,QAAQ,gBACR,QAAQ,mBACR,QAAQ,8BACR,IAAI,KAAK,CACV;AACD,MAAI,UAAU,aAAa,UAAU,UAAW,QAAO;EACvD,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,MAAI,CAAC,WAAW,KAAK,IAAI,QAAQ,CAC/B,QAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;EAEN,MAAM,cAAc,QAAQ,KAAK;AACjC,MAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D,QAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;AAEN,MAAI,mBAAmB,QAAQ,CAAE,QAAO;AACxC,MAAI,CAAC,QAAQ,SACX,QAAO,sBACL,YAAY,MACZ,QAAQ,KAAK,OACb,yBACA,IAAI,KAAK,CACV,GACG,OACA,KAAA;EAEN,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,WAAS,IAAI,QAAQ;AACrB,SAAO,4BACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACA,OACA,SACD;;AAEH,KAAI,KAAK,SAAS,mBAAmB;AACnC,OAAK,MAAM,WAAW,KAAK,UAAU;AACnC,OAAI,CAAC,QAAS;GACd,MAAM,aAAa,4BACjB,QAAQ,SAAS,kBAAkB,QAAQ,WAAW,SACtD,OACA,SACA,OACA,KACD;AACD,OAAI,WAAY,QAAO;;AAEzB;;AAEF,KACE,KAAK,SAAS,oBACd,KAAK,SAAS,0BACd;EACA,MAAM,QAAQ,sBACZ,KAAK,QACL,OACA,QAAQ,gBACR,QAAQ,mBACR,QAAQ,8BACR,IAAI,KAAK,CACV;AACD,MAAI,UAAU,UAAW,QAAO,KAAK;AACrC,MAAI,UAAU,WAAW;AACvB,SAAM,KAAK;IAAE;IAAM;IAAO,CAAC;AAC3B;;AAEF,SAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;;AAEN,KAAI,KAAK,SAAS,yBAAyB;EACzC,MAAM,YAAY,wBAAwB,KAAK,MAAM,uBAAO,IAAI,KAAK,CAAC;AACtE,MAAI,cAAc,KAAA,EAChB,QAAO,4BACL,YAAY,KAAK,aAAa,KAAK,WACnC,OACA,SACA,OACA,KACD;AAEH,SAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;;AAEN,KAAI,KAAK,SAAS,qBAAqB;EACrC,MAAM,OAAO,wBAAwB,KAAK,MAAM,uBAAO,IAAI,KAAK,CAAC;AACjE,MAAI,SAAS,KAAA,GAAW;GACtB,MAAM,WACJ,KAAK,aAAa,OACd,OACE,KAAK,QACL,KAAK,OACP,KAAK,aAAa,OAChB,OACE,KAAK,OACL,KAAK,QACP,KAAA;AACR,OAAI,SACF,QAAO,4BACL,UACA,OACA,SACA,OACA,KACD;;AAGL,SAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;;AAEN,KAAI,KAAK,SAAS,sBAAsB;EACtC,MAAM,OAAO,KAAK,YAAY,KAAK,YAAY,SAAS;AACxD,SAAO,OACH,4BAA4B,MAAM,OAAO,SAAS,OAAO,KAAK,GAC9D,KAAA;;AAEN,QAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;;;AAIN,SAAS,sBACP,OACA,OACA,SACA,MACS;CACT,MAAM,OAAO,iBAAiB,MAAM;CACpC,MAAM,QAAQ,KAAK;CACnB,MAAM,MAAM,KAAK;AACjB,KACE,OAAO,UAAU,YACjB,OAAO,QAAQ,YACf,QAAQ,mBAAmB,MACxB,aAAa,YAAY,SAAS,YAAY,IAChD,CAED,QAAO;CAET,MAAM,SACJ,KAAK,SAAS,eACV,OACA,KAAK,SAAS,oBAAoB,KAAK,SAAS,2BAC9C,iBAAiB,KAAK,OAAO,GAC7B,KAAA;AACR,KAAI,QAAQ,SAAS,aAAc,QAAO;CAC1C,MAAM,UAAU,MAAM,WAAW,OAAO,KAAK;AAC7C,KAAI,CAAC,QAAS,QAAO;AACrB,KACE,QAAQ,eAAe,IAAI,QAAQ,IACnC,QAAQ,kBAAkB,IAAI,QAAQ,CAEtC,QAAO;AAET,KAAI,KAAK,IAAI,QAAQ,CAAE,QAAO;CAC9B,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;CACrB,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,YAAY,KAC3D,QAAO,sBACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACA,SACD;CAEH,MAAM,mBAAmB,YAAY;CACrC,MAAM,iBAAiB,YAAY;AACnC,QACE,OAAO,qBAAqB,YAC5B,OAAO,mBAAmB,YAC1B,QAAQ,mBAAmB,MACxB,aAAa,YAAY,oBAAoB,YAAY,eAC3D;;;AAKL,SAAS,wBACP,OACA,OACA,MACqB;CACrB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,iBAAkB,QAAO,KAAK;AAChD,KAAI,KAAK,SAAS,cAAe,QAAO;AACxC,KAAI,KAAK,SAAS,iBAAkB,QAAO,CAAC,CAAC,KAAK;AAClD,KAAI,KAAK,SAAS,gBAAiB,QAAO,KAAK,UAAU;AACzD,KAAI,KAAK,SAAS,gBAAiB,QAAO,KAAK,MAAM,SAAS;AAC9D,KAAI,KAAK,SAAS,qBAAqB,KAAK,aAAa,KAAK;EAC5D,MAAM,QAAQ,wBAAwB,KAAK,UAAU,OAAO,KAAK;AACjE,SAAO,UAAU,KAAA,IAAY,KAAA,IAAY,CAAC;;AAE5C,KAAI,KAAK,SAAS,aAAc,QAAO,KAAA;AACvC,KAAI,KAAK,SAAS,eAAe,CAAC,MAAM,WAAW,KAAK,KAAK,CAAE,QAAO;CACtE,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,IAAI,KAAK,IAAI,QAAQ,CACxE;CAEF,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D;CAEF,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AACrB,QAAO,wBACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACD;;AAGH,SAAS,0BACP,MACA,OACA,MACA,MACA,mBACA,OACA,QACM;CACN,MAAM,aAAa,oBAAoB,MAAM,uBAAO,IAAI,KAAK,CAAC;AAC9D,KAAI,CAAC,WAAW,IAAI;AAClB,MAAI,kBACF,QAAO,KAAK,mBAAmB,MAAM,WAAW,KAAK,CAAC;AACxD;;CAGF,MAAM,cAAc,WAAW,MAAM,QAAQ,IAAI,KAAK,GAAG;AACzD,KAAI,CAAC,YAAa;CAClB,MAAM,eAAe,oBACnB,YAAY,MACZ,YAAY,uBACZ,IAAI,KAAK,CACV;AACD,KAAI,CAAC,aAAa,IAAI;AACpB,SAAO,KAAK,mBAAmB,MAAM,aAAa,KAAK,CAAC;AACxD;;CAGF,MAAM,gBAAgB,aAAa,MAAM,QAAQ,IAAI,KAAK,GAAG;AAC7D,KAAI,CAAC,cAAe;CACpB,MAAM,iBAAiB,oBACrB,cAAc,MACd,cAAc,uBACd,IAAI,KAAK,CACV;AACD,KAAI,CAAC,eAAe,IAAI;AACtB,SAAO,KAAK,mBAAmB,MAAM,eAAe,KAAK,CAAC;AAC1D;;AAGF,2BAA0B,eAAe,OAAO,MAAM,OAAO,OAAO;;AAGtE,SAAS,0BACP,QACA,MACA,OACA,QACM;AACN,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAChC,KAAI,QAAQ,gBAAgB,QAAQ,aAClC,QAAO,KACL,mBACE,MACA,MAAM,MACN,0CAA0C,IAAI,IAC9C,8FACD,CACF;CAIL,MAAM,kBAAkB,OAAO,QAAQ,IAAI,aAAa;AACxD,KAAI,iBAAiB;EACnB,MAAM,QAAQ,oBACZ,gBAAgB,MAChB,gBAAgB,uBAChB,IAAI,KAAK,CACV;AACD,MAAI,UAAU,cAAc,UAAU,WACpC,QAAO,KAAK,mBAAmB,MAAM,gBAAgB,KAAK,CAAC;MAE3D,aACE,OACA,cACA,OACA;GAAE;GAAM,MAAM,gBAAgB;GAAM,EACpC,OACD;;CAIL,MAAM,kBAAkB,OAAO,QAAQ,IAAI,aAAa;AACxD,KAAI,iBAAiB;EACnB,MAAM,QAAQ,wBACZ,gBAAgB,MAChB,gBAAgB,uBAChB,IAAI,KAAK,CACV;AACD,MAAI,CAAC,MACH,QAAO,KAAK,mBAAmB,MAAM,gBAAgB,KAAK,CAAC;MAE3D,aACE,OACA,cACA,OACA;GAAE;GAAM,MAAM,gBAAgB;GAAM,EACpC,OACD;;;AAKP,SAAS,oBACP,OACA,OACA,MACkB;CAClB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,IAAI,KAAK,CAAE,QAAO;EAAE,IAAI;EAAO;EAAM;AAC9C,MAAK,IAAI,KAAK;AAEd,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;EAC3C,MAAM,cAAc,SAAS,KAAK;AAClC,MACE,CAAC,SAAS,YACV,mBAAmB,QAAQ,IAC3B,aAAa,SAAS,wBACtB,CAAC,YAAY,KAEb,QAAO;GAAE,IAAI;GAAO;GAAM;AAE5B,SAAO,oBAAoB,YAAY,MAAM,QAAQ,KAAK,OAAO,KAAK;;AAExE,KAAI,KAAK,SAAS,mBAAoB,QAAO;EAAE,IAAI;EAAO;EAAM;CAEhE,MAAM,0BAAU,IAAI,KAA0B;AAC9C,MAAK,MAAM,YAAY,KAAK,YAAY;AACtC,MAAI,SAAS,SAAS,iBAAiB;GACrC,MAAM,SAAS,oBAAoB,SAAS,UAAU,OAAO,KAAK;AAClE,OAAI,CAAC,OAAO,GAAI,QAAO;IAAE,IAAI;IAAO,MAAM,OAAO;IAAM;AACvD,QAAK,MAAM,CAAC,KAAK,UAAU,OAAO,MAAM,QAAS,SAAQ,IAAI,KAAK,MAAM;AACxE;;EAEF,MAAM,MAAM,gBAAgB,SAAS;AACrC,MAAI,CAAC,IAAK,QAAO;GAAE,IAAI;GAAO,MAAM;GAAU;AAC9C,MAAI,SAAS,SAAS,kBAAkB;AACtC,WAAQ,IAAI,KAAK;IAAE,MAAM;IAAU;IAAO,CAAC;AAC3C;;AAEF,UAAQ,IAAI,KAAK;GAAE,MAAM,SAAS;GAAO;GAAO,CAAC;;AAEnD,QAAO;EAAE,IAAI;EAAM,OAAO,EAAE,SAAS;EAAE;;AAGzC,SAAS,oBACP,OACA,OACA,MACoB;CACpB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,IAAI,KAAK,CAAE,QAAO,KAAA;AAC3B,MAAK,IAAI,KAAK;AACd,KAAI,KAAK,SAAS,gBAAiB,QAAO,KAAK;AAC/C,KAAI,KAAK,SAAS,qBAAqB,KAAK,YAAY,WAAW,EACjE,QAAO,KAAK,OACT,KAAK,UAAU,MAAM,MAAM,UAAU,MAAM,MAAM,IAAI,CACrD,KAAK,GAAG;AAEb,KAAI,KAAK,SAAS,aAAc,QAAO,KAAA;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;CAC3C,MAAM,cAAc,SAAS,KAAK;AAClC,QAAO,SAAS,YACd,CAAC,mBAAmB,QAAQ,IAC5B,aAAa,SAAS,wBACtB,YAAY,OACV,oBAAoB,YAAY,MAAM,QAAQ,KAAK,OAAO,KAAK,GAC/D,KAAA;;AAGN,SAAS,wBACP,OACA,OACA,MAC8B;CAC9B,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,IAAI,KAAK,CAAE,QAAO,KAAA;AAC3B,MAAK,IAAI,KAAK;AACd,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;EAC3C,MAAM,cAAc,SAAS,KAAK;AAClC,SAAO,SAAS,YACd,CAAC,mBAAmB,QAAQ,IAC5B,aAAa,SAAS,wBACtB,YAAY,OACV,wBAAwB,YAAY,MAAM,QAAQ,KAAK,OAAO,KAAK,GACnE,KAAA;;AAEN,KAAI,KAAK,SAAS,qBAAqB,KAAK,SAAS,WAAW,EAC9D;CAEF,MAAM,SAAS,KAAK,SAAS,KAAK,YAChC,WAAW,QAAQ,SAAS,kBACxB,oBAAoB,SAAS,uBAAO,IAAI,KAAK,CAAC,GAC9C,KAAA,EACL;AACD,QAAO,gBAAgB,OAAO,GAAG,SAAS,KAAA;;AAG5C,SAAS,iBAAiB,OAAuB;CAC/C,IAAI,OAAO;AACX,QACE,KAAK,SAAS,oBACd,KAAK,SAAS,2BACd,KAAK,SAAS,qBACd,KAAK,SAAS,yBACd,KAAK,SAAS,wBACd,KAAK,SAAS,0BAEd,QAAO,KAAK;AAEd,QAAO;;AAGT,SAAS,gBACP,UACoB;AACpB,KAAI,CAAC,SAAS,YAAY,SAAS,IAAI,SAAS,aAC9C,QAAO,SAAS,IAAI;AAEtB,KAAI,SAAS,IAAI,SAAS,gBAAiB,QAAO,SAAS,IAAI;;AAIjE,SAAS,wBACP,OACA,cACqC;AACrC,KAAI,CAAC,MAAO,QAAO,KAAA;CACnB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KACE,KAAK,SAAS,oBACd,KAAK,OAAO,SAAS,gBACrB,KAAK,OAAO,SAAS,aACrB,KAAK,UAAU,IAAI,SAAS,mBAC5B,KAAK,UAAU,GAAG,UAAU,aAE5B,QAAO;AAET,MACG,KAAK,SAAS,sBACb,KAAK,SAAS,+BAChB,gBAAgB,KAAK,CAErB,QAAO,wBAAwB,KAAK,QAAwB,aAAa,GACrE,YACA,KAAA;;;AAMR,SAAS,sBACP,OACA,OACA,gBACA,mBACA,cACA,MACiD;CACjD,MAAM,OAAO,iBAAiB,MAAM;CACpC,MAAM,cACJ,KAAK,SAAS,oBACd,KAAK,SAAS,sBACd,KAAK,SAAS,6BACV,wBAAwB,MAAM,aAAa,GAC3C,KAAA;AACN,KAAI,YAAa,QAAO;AAExB,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,MAAI,CAAC,QAAS,QAAO,KAAA;AACrB,MAAI,eAAe,IAAI,QAAQ,CAAE,QAAO;AACxC,MAAI,kBAAkB,IAAI,QAAQ,CAAE,QAAO;AAC3C,MAAI,KAAK,IAAI,QAAQ,CAAE,QAAO,KAAA;EAC9B,MAAM,cAAc,QAAQ,KAAK;AACjC,MAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D;EAEF,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,WAAS,IAAI,QAAQ;EACrB,MAAM,eAAe,sBACnB,YAAY,MACZ,QAAQ,KAAK,OACb,gBACA,mBACA,cACA,SACD;AACD,SAAO,CAAC,QAAQ,YAAY,eAAe,YAAY;;AAEzD,MACG,KAAK,SAAS,sBACb,KAAK,SAAS,+BAChB,gBAAgB,KAAK,EACrB;EACA,MAAM,cAAc,sBAClB,KAAK,QACL,OACA,gBACA,mBACA,cACA,KACD;AACD,MAAI,gBAAgB,UAAW,QAAO;AACtC,MAAI,gBAAgB,YAAa,QAAO;;;;AAM5C,SAAS,gBACP,MACS;AACT,QACG,CAAC,KAAK,YACL,KAAK,SAAS,SAAS,gBACvB,KAAK,SAAS,SAAS,aACxB,KAAK,YACJ,KAAK,SAAS,SAAS,mBACvB,KAAK,SAAS,UAAU;;;AAK9B,SAAS,6BACP,MACA,OACkD;AAClD,KACE,KAAK,SAAS,sBACd,KAAK,OAAO,SAAS,gBACrB,EACG,CAAC,KAAK,YAAY,KAAK,SAAS,SAAS,gBACzC,KAAK,YAAY,KAAK,SAAS,SAAS,iBAG3C;CAEF,MAAM,WACJ,KAAK,SAAS,SAAS,eACnB,KAAK,SAAS,OACd,KAAK,SAAS;AACpB,KACE,KAAK,OAAO,SAAS,YACrB,aAAa,aACb,CAAC,MAAM,WAAW,SAAS,CAE3B,QAAO;AAET,QAAO,KAAK,OAAO,SAAS,aAC1B,aAAa,aACb,CAAC,MAAM,WAAW,UAAU,GAC1B,oBACA,KAAA;;AAGN,SAAS,sBAAsB,MAAkC;AAC/D,KAAI,KAAK,SAAS,aAAc,QAAO,KAAK;AAC5C,QAAO,KAAK,SAAS,uBAAuB,KAAK,KAAK,SAAS,eAC3D,KAAK,KAAK,OACV,KAAA;;AAGN,MAAM,mBAAmB,IAAI,IAAI;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,SAAS,mBACP,SACA,uBAAqB,IAAI,KAAK,EACrB;AACT,KAAI,KAAK,IAAI,QAAQ,CAAE,QAAO;CAC9B,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AAErB,MAAK,MAAM,aAAa,QAAQ,gBAAgB;EAC9C,IAAI,UAAU;AACd,SACE,QAAQ,eACP,QAAQ,WAAW,oBAAoB,IACtC,QAAQ,WAAW,4BAA4B,KACjD,QAAQ,WAAW,KAAK,WAAW,QAAQ,KAE3C,WAAU,QAAQ;EAGpB,MAAM,SAAS,QAAQ;AACvB,MACG,QAAQ,wBAAwB,IAAI,OAAO,KAAK,SAAS,QAAQ,QACjE,QAAQ,oBAAoB,IAAI,OAAO,KAAK,aAAa,QAAQ,QACjE,QAAQ,kBAAkB,EAAE,UAAU,UAAU,CAAC,IAChD,OAAO,KAAK,aAAa,QAAQ,KAEnC,QAAO;AAGT,MAAI,QAAQ,kBAAkB,IAAI,QAAQ,0BAA0B,EAAE;AACpE,OACE,OAAO,KAAK,WAAW,QAAQ,SAC9B,QAAQ,oBAAoB,IAC3B,QAAQ,4BAA4B,KACtC,iBAAiB,IAAI,qBAAqB,QAAQ,KAAK,IAAI,GAAG,CAE9D,QAAO;AAET,OACE,OAAO,KAAK,UAAU,OAAO,QAAQ,QACrC,qBAAqB,OAAO,KAAK,QAAQ,OAAO,MAAM,CAEtD,QAAO;AAET,OACE,OAAO,KAAK,UAAU,MAAM,aAAa,aAAa,QAAQ,KAAK,IACnE,CAAC,8BAA8B,OAAO,MAAM,QAAQ,MAAM,OAAO,MAAM,CAEvE,QAAO;;EAIX,MAAM,cAAc,UAAU;AAC9B,MACE,aAAa,sBAAsB,IACnC,YAAY,KAAK,SAAS,UAAU,QACpC,YAAY,KAAK,GAAG,SAAS,cAC7B;GACA,MAAM,QAAQ,YAAY,MAAM,WAAW,YAAY,KAAK,GAAG,KAAK;AACpE,OAAI,SAAS,mBAAmB,OAAO,SAAS,CAAE,QAAO;;AAE3D,MACE,aAAa,sBAAsB,IACnC,YAAY,KAAK,SAAS,UAAU,QACpC,YAAY,KAAK,GAAG,SAAS,aAE7B,MAAK,MAAM,QAAQ,oBAAoB,YAAY,KAAK,GAAG,EAAE;GAC3D,MAAM,QAAQ,YAAY,MAAM,WAAW,KAAK;AAChD,OAAI,SAAS,mBAAmB,OAAO,SAAS,CAAE,QAAO;;AAG7D,MACE,QAAQ,uBAAuB,EAAE,UAAU,KAAK,CAAC,IACjD,OAAO,KAAK,UAAU,QAAQ,KAE9B,MAAK,MAAM,QAAQ,oBAAoB,OAAO,KAAK,KAAK,EAAE;GACxD,MAAM,QAAQ,OAAO,MAAM,WAAW,KAAK;AAC3C,OAAI,SAAS,mBAAmB,OAAO,SAAS,CAAE,QAAO;;;AAI/D,QAAO;;AAGT,SAAS,oBAAoB,OAAyB;AACpD,KAAI,MAAM,SAAS,aAAc,QAAO,CAAC,MAAM,KAAK;AACpD,KAAI,MAAM,SAAS,oBACjB,QAAO,oBAAoB,MAAM,KAAK;AAExC,KAAI,MAAM,SAAS,cAAe,QAAO,oBAAoB,MAAM,SAAS;AAC5E,KAAI,MAAM,SAAS,eACjB,QAAO,MAAM,SAAS,SAAS,YAC7B,UAAU,oBAAoB,QAAQ,GAAG,EAAE,CAC5C;AAEH,KAAI,MAAM,SAAS,gBACjB,QAAO,MAAM,WAAW,SAAS,aAC/B,SAAS,SAAS,gBACd,oBAAoB,SAAS,SAAS,GACtC,oBAAoB,SAAS,MAAM,CACxC;AAEH,QAAO,EAAE;;AAGX,SAAS,qBACP,MACoB;AACpB,KAAI,CAAC,KAAK,YAAY,KAAK,SAAS,SAAS,aAC3C,QAAO,KAAK,SAAS;AAEvB,QAAO,KAAK,YAAY,KAAK,SAAS,SAAS,kBAC3C,KAAK,SAAS,QACd,KAAA;;AAGN,SAAS,qBAAqB,OAAe,OAAuB;CAClE,MAAM,OAAO,iBAAiB,MAAM;AACpC,KACE,KAAK,SAAS,sBACd,KAAK,SAAS,2BAEd,QAAO;CAET,MAAM,SAAS,qBAAqB,KAAK;AACzC,KAAI,KAAK,OAAO,SAAS,gBAAgB,MAAM,WAAW,KAAK,OAAO,KAAK,CACzE,QAAO;AAET,QACG,KAAK,OAAO,SAAS,aACnB,WAAW,YACV,WAAW,oBACX,WAAW,uBACd,KAAK,OAAO,SAAS,cACnB,WAAW,SAAS,WAAW;;AAItC,SAAS,8BACP,MACA,UACA,OACS;AACT,KAAI,2BAA2B,KAAK,QAAQ,uBAAO,IAAI,KAAK,CAAC,CAAE,QAAO;CACtE,MAAM,SAAS,iBAAiB,KAAK,OAAO;AAC5C,KACE,OAAO,SAAS,sBAChB,OAAO,SAAS,2BAEhB,QAAO;CAET,MAAM,SAAS,qBAAqB,OAAO;AAC3C,KACE,OAAO,OAAO,SAAS,gBACvB,MAAM,WAAW,OAAO,OAAO,KAAK,CAEpC,QAAO;CAET,MAAM,gBAAgB,KAAK,UAAU,WAClC,cAAc,cAAc,SAC9B;AACD,KAAI,OAAO,OAAO,SAAS,UAAU;AACnC,MAAI,WAAW,SAAU,QAAO,gBAAgB;AAChD,SAAO,IAAI,IAAI;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,CAAC,IAAI,UAAU,GAAG;;AAEtB,QACG,OAAO,OAAO,SAAS,WAAW,WAAW,aAC7C,OAAO,OAAO,SAAS,UAAU,WAAW;;AAIjD,SAAS,2BACP,OACA,OACA,MACS;CACT,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,MAAI,CAAC,QAAS,QAAO,KAAK,SAAS;AACnC,MAAI,KAAK,IAAI,QAAQ,CAAE,QAAO;AAC9B,MAAI,QAAQ,KAAK,0BAA0B,EAAE;GAC3C,MAAM,cAAc,QAAQ,KAAK;AACjC,UACE,YAAY,qBAAqB,KAChC,YAAY,KAAK,OAAO,UAAU,wBACjC,YAAY,KAAK,OAAO,UAAU;;AAGxC,MAAI,QAAQ,KAAK,mBAAmB,EAAE;GACpC,MAAM,cAAc,QAAQ,KAAK;AACjC,OAAI,CAAC,YAAY,qBAAqB,CAAE,QAAO;GAC/C,MAAM,WAAW,QAAQ,KAAK,KAAK;GACnC,MAAM,OACJ,SAAS,SAAS,eAAe,SAAS,OAAO,SAAS;GAC5D,MAAM,SAAS,YAAY,KAAK,OAAO;AACvC,WACI,WAAW,wBACX,WAAW,6BACX,SAAS,aACV,WAAW,UAAU,SAAS,mBAC7B,WAAW,UACX,WAAW,iBACX,WAAW,eACX,SAAS;;EAGf,MAAM,cAAc,QAAQ,KAAK;AACjC,MACE,QAAQ,YACR,YAAY,SAAS,wBACrB,YAAY,MACZ;GACA,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,YAAS,IAAI,QAAQ;AACrB,UAAO,2BACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACD;;AAEH,SAAO;;AAET,SACG,KAAK,SAAS,sBACb,KAAK,SAAS,+BAChB,gBAAgB,KAAK,KACpB,wBAAwB,MAAsB,qBAAqB,KAClE,aACA,wBACE,MACA,yBACD,KAAK;;AAIZ,SAAS,YAAY,MAAc,QAAsC;CACvE,MAAM,SAAS,GAAG,aAAa,MAAM,OAAO;AAC5C,KAAI;AACF,SAAO,MAAM,QAAQ;GACnB,YAAY;GACZ,SAAS,cAAc,KAAK;GAC7B,CAAC;UACK,OAAO;AACd,MACE,CAAC,oFAAoF,KACnF,OACD,CAED;EAEF,MAAM,cAAc;AAGpB,SAAO,KACL,aACE,MACA,wBAAwB;GACtB,cACE;GACF,SAAS,YAAY;GACrB,KAAK;GACN,CAAC,EACF,YAAY,MACR,GAAG,YAAY,IAAI,KAAK,GAAG,YAAY,IAAI,SAAS,MACpD,KAAA,EACL,CACF;AACD;;;AAIJ,SAAS,cAAc,MAA8B;CACnD,MAAM,YAAY,KAAK,QAAQ,KAAK,CAAC,aAAa;CAClD,MAAM,UAA0B,EAAE;AAClC,KACE,cAAc,SACd,cAAc,UACd,cAAc,UACd,cAAc,OAEd,SAAQ,KAAK,cAAc,oBAAoB;AAEjD,KAAI,cAAc,UAAU,cAAc,OAAQ,SAAQ,KAAK,MAAM;AACrE,QAAO;;AAGT,SAAS,YACP,OACA,KACA,OACA,QACA,QACM;CACN,MAAM,WAAW,MAAM,QAAQ;AAC/B,KAAI,aAAa,KAAA,KAAa,CAAC,WAAW,UAAU,MAAM,EAAE;AAC1D,SAAO,KACL,mBACE,OAAO,MACP,OAAO,MACP,yBAAyB,IAAI,oBAC7B,8GACD,CACF;AACD;;AAEF,QAAO,OAAO,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;AAC9C,OAAM,QAAQ,SAAS;;AAGzB,SAAS,WACP,OACA,QACS;AACT,QAAO,MAAM,QAAQ,MAAM,IAAI,MAAM,QAAQ,OAAO,GAChD,MAAM,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,KAC9C,UAAU;;AAGhB,SAAS,SAAS,OAAkD;AAClE,QAAO,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM;;AAGtE,SAAS,gBAAgB,OAA2C;AAClE,QACE,MAAM,QAAQ,MAAM,IACpB,MAAM,WAAW,KACjB,MAAM,OACH,cAAc,OAAO,cAAc,YAAY,UAAU,SAAS,EACpE;;AAIL,SAAS,mBAAmB,MAAc,MAAsB;AAC9D,QAAO,mBACL,MACA,MACA,qDACA,uIACD;;AAGH,SAAS,yBAAyB,MAAc,MAAsB;AACpE,QAAO,mBACL,MACA,MACA,+DACA,4HACD;;AAGH,SAAS,mBACP,MACA,MACA,cACA,KACQ;AACR,QAAO,aACL,MACA,wBAAwB;EAAE;EAAc;EAAK,CAAC,EAC9C,MAAM,MACF,GAAG,KAAK,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI,MAAM,SAAS,MAClD,KAAA,EACL;;AAGH,SAAS,YAAY,cAAsB,KAAqB;AAC9D,QAAO,wBAAwB;EAAE;EAAc;EAAK,CAAC;;AAGvD,SAAS,aACP,MACA,SACA,UACQ;AACR,QAAO,GAAG,OAAO,WAAW,KAAK,SAAS,KAAK,GAAG,IAAI"}
|
|
1
|
+
{"version":3,"file":"resolveVueCompilerOptions.js","names":[],"sources":["../../../src/internal/config/resolveVueCompilerOptions.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { parse, type ParserPlugin } from '@babel/parser';\nimport traverseModule, {\n type Binding,\n type NodePath,\n type Scope,\n} from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport {\n createDiagnosticMessage,\n formatDiagnosticErrorDetails,\n} from 'generaltranslation/internal';\nimport type { VueCompilerOptions } from '../../types.js';\nimport {\n NUXT_CONFIG_FILES,\n VITE_CONFIG_EXTENSIONS,\n VITE_CONFIG_FILES,\n} from './configFiles.js';\n\nconst traverse = traverseModule.default || traverseModule;\n\ntype CompilerOptionName = keyof VueCompilerOptions;\n\ntype OptionSource = {\n file: string;\n node?: t.Node;\n};\n\ntype CompilerOptionState = {\n options: VueCompilerOptions;\n sources: Partial<Record<CompilerOptionName, OptionSource>>;\n};\n\ntype ObjectEntry = {\n node: t.Node;\n scope: Scope;\n};\n\ntype StaticObject = {\n entries: Map<string, ObjectEntry>;\n};\n\ntype ObjectResolution =\n | { ok: true; value: StaticObject }\n | { ok: false; node: t.Node };\n\ntype ActiveConfigResolution =\n | { ok: true; value: ObjectEntry }\n | { ok: false; node: t.Node };\n\ntype ConfigHelperResolution = 'dynamic' | 'static' | undefined;\n\ntype ScopedPluginCall = {\n node: t.CallExpression | t.OptionalCallExpression;\n scope: Scope;\n};\n\ntype VitePluginContext = {\n moduleSource: '@vitejs/plugin-vue' | '@vitejs/plugin-vue-jsx';\n namespaceBindings: Set<Binding>;\n pluginBindings: Set<Binding>;\n referencePositions: number[];\n};\n\n/** Result of resolving hash-affecting options from project configuration. */\nexport type VueCompilerOptionsResolution = {\n /** Static compiler options that must be passed to Vue source extraction. */\n compilerOptions: VueCompilerOptions;\n /** Diagnostics that make extraction unsafe until the configuration is fixed. */\n errors: string[];\n};\n\n/** Controls project configuration discovery for compiler-option resolution. */\nexport type VueCompilerOptionsResolverOptions = {\n /** A single explicit Vite config path, resolved relative to the project root. */\n viteConfigPath?: string;\n /**\n * Whether caller-supplied source globs already cover custom Nuxt layouts.\n * This relaxes only layout validation; discovered config remains mandatory\n * to read and parse successfully.\n */\n sourceDiscoveryIsExplicit?: boolean;\n};\n\n/**\n * Resolves hash-affecting Vue template compiler options without executing\n * project configuration files.\n *\n * Explicit `gt.config.json` values are combined with statically analyzable\n * Vite and Nuxt configuration. Conflicting, dynamic, or unsupported relevant\n * options produce errors so extraction never publishes hashes calculated with\n * compiler behavior that the runtime does not share.\n */\nexport function resolveVueCompilerOptions(\n cwd: string,\n explicitOptions: VueCompilerOptions | undefined,\n resolverOptions: VueCompilerOptionsResolverOptions = {}\n): VueCompilerOptionsResolution {\n const state: CompilerOptionState = { options: {}, sources: {} };\n const errors: string[] = [];\n\n readExplicitOptions(explicitOptions, state, errors);\n\n if (resolverOptions.viteConfigPath !== undefined) {\n const file = resolveCustomViteConfig(\n cwd,\n resolverOptions.viteConfigPath,\n errors\n );\n if (file) readViteConfig(file, state, errors, true);\n return { compilerOptions: state.options, errors };\n }\n\n const nuxtConfig = findFirstConfig(cwd, NUXT_CONFIG_FILES, errors);\n const viteConfig = findFirstConfig(cwd, VITE_CONFIG_FILES, errors);\n if (nuxtConfig && viteConfig) {\n errors.push(\n optionError(\n 'Found both Nuxt and Vite project config files',\n 'For direct Vite builds, set files.gt.parsingFlags.viteConfigPath to the active Vite config. For Nuxt builds, remove or relocate the inactive Vite config so the compiler configuration is unambiguous'\n )\n );\n return { compilerOptions: state.options, errors };\n }\n if (nuxtConfig) {\n readNuxtConfig(\n nuxtConfig,\n state,\n errors,\n resolverOptions.sourceDiscoveryIsExplicit ?? false\n );\n return { compilerOptions: state.options, errors };\n }\n\n if (viteConfig) {\n readViteConfig(\n viteConfig,\n state,\n errors,\n resolverOptions.sourceDiscoveryIsExplicit ?? false\n );\n }\n\n return { compilerOptions: state.options, errors };\n}\n\n/** Selects the first config file in the framework's documented lookup order. */\nfunction findFirstConfig(\n cwd: string,\n filenames: readonly string[],\n errors: string[]\n): string | undefined {\n for (const filename of filenames) {\n const resolution = inspectConfigFile(\n path.resolve(cwd),\n path.resolve(cwd, filename),\n false,\n errors\n );\n if (resolution.kind === 'file') return resolution.file;\n if (resolution.kind === 'invalid') return undefined;\n }\n return undefined;\n}\n\n/** Validates an explicit Vite config without searching or executing files. */\nfunction resolveCustomViteConfig(\n cwd: string,\n configuredPath: unknown,\n errors: string[]\n): string | undefined {\n if (typeof configuredPath !== 'string' || !configuredPath.trim()) {\n errors.push(\n optionError(\n 'Found an empty Vite config path',\n 'Set files.gt.parsingFlags.viteConfigPath to one in-project Vite config file'\n )\n );\n return undefined;\n }\n const root = path.resolve(cwd);\n const candidate = path.resolve(root, configuredPath);\n const relativeCandidate = path.relative(root, candidate);\n if (\n relativeCandidate.startsWith(`..${path.sep}`) ||\n relativeCandidate === '..' ||\n path.isAbsolute(relativeCandidate) ||\n relativeCandidate.split(path.sep).includes('node_modules')\n ) {\n errors.push(\n optionError(\n 'Found a Vite config path outside the project source boundary',\n 'Choose a Vite config file inside the project root and outside node_modules'\n )\n );\n return undefined;\n }\n if (!VITE_CONFIG_EXTENSIONS.has(path.extname(candidate).toLowerCase())) {\n errors.push(\n optionError(\n 'Found an unsupported Vite config file extension',\n 'Use a JavaScript or TypeScript Vite config file'\n )\n );\n return undefined;\n }\n const resolution = inspectConfigFile(root, candidate, true, errors);\n return resolution.kind === 'file' ? resolution.file : undefined;\n}\n\ntype ConfigFileResolution =\n | { kind: 'file'; file: string }\n | { kind: 'invalid' }\n | { kind: 'missing' };\n\n/** Validates one config candidate without letting filesystem races escape. */\nfunction inspectConfigFile(\n root: string,\n candidate: string,\n missingIsError: boolean,\n errors: string[]\n): ConfigFileResolution {\n let candidateWasFound = false;\n try {\n const stats = fs.statSync(candidate);\n candidateWasFound = true;\n if (!stats.isFile()) {\n errors.push(\n configFileDiagnostic(\n 'Found a Vue project config path that is not a regular file',\n 'Replace it with a readable JavaScript or TypeScript config file',\n candidate\n )\n );\n return { kind: 'invalid' };\n }\n\n fs.accessSync(candidate, fs.constants.R_OK);\n const realRoot = fs.realpathSync(root);\n const realCandidate = fs.realpathSync(candidate);\n const realRelative = path.relative(realRoot, realCandidate);\n if (\n realRelative.startsWith(`..${path.sep}`) ||\n realRelative === '..' ||\n path.isAbsolute(realRelative) ||\n realRelative.split(path.sep).includes('node_modules')\n ) {\n errors.push(\n optionError(\n 'Found a Vue project config path outside the project source boundary',\n 'Choose a project config file inside the project root and outside node_modules'\n )\n );\n return { kind: 'invalid' };\n }\n return { kind: 'file', file: realCandidate };\n } catch (error) {\n if (isMissingPathError(error) && !missingIsError && !candidateWasFound) {\n return { kind: 'missing' };\n }\n if (isMissingPathError(error) && missingIsError && !candidateWasFound) {\n errors.push(\n configFileDiagnostic(\n 'Could not find the configured Vite config file',\n 'Set files.gt.parsingFlags.viteConfigPath to an existing file inside the project root',\n candidate,\n error\n )\n );\n } else {\n errors.push(\n configFileDiagnostic(\n 'Could not read the Vue project config file',\n 'Restore read access to the config file and try extraction again',\n candidate,\n error\n )\n );\n }\n return { kind: 'invalid' };\n }\n}\n\nfunction isMissingPathError(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as { code?: unknown }).code === 'ENOENT'\n );\n}\n\nfunction readExplicitOptions(\n input: VueCompilerOptions | undefined,\n state: CompilerOptionState,\n errors: string[]\n): void {\n if (input === undefined) return;\n if (!isRecord(input)) {\n errors.push(\n optionError(\n 'Found an invalid vueCompilerOptions parsing setting',\n 'Set files.gt.parsingFlags.vueCompilerOptions to an object containing only whitespace and delimiters'\n )\n );\n return;\n }\n\n for (const key of Object.keys(input)) {\n if (key !== 'whitespace' && key !== 'delimiters') {\n errors.push(\n optionError(\n `Found unsupported Vue compiler option \"${key}\" in gt.config.json`,\n 'Configure only whitespace and delimiters in files.gt.parsingFlags.vueCompilerOptions'\n )\n );\n }\n }\n\n if (input.whitespace !== undefined) {\n if (input.whitespace !== 'condense' && input.whitespace !== 'preserve') {\n errors.push(\n optionError(\n 'Found an invalid Vue whitespace compiler option in gt.config.json',\n 'Set whitespace to either \"condense\" or \"preserve\"'\n )\n );\n } else {\n mergeOption(\n state,\n 'whitespace',\n input.whitespace,\n { file: 'gt.config.json' },\n errors\n );\n }\n }\n\n if (input.delimiters !== undefined) {\n if (!isDelimiterPair(input.delimiters)) {\n errors.push(\n optionError(\n 'Found invalid Vue interpolation delimiters in gt.config.json',\n 'Set delimiters to exactly two non-empty strings, such as [\"[[\", \"]]\"]'\n )\n );\n } else {\n mergeOption(\n state,\n 'delimiters',\n input.delimiters,\n { file: 'gt.config.json' },\n errors\n );\n }\n }\n}\n\nfunction readViteConfig(\n file: string,\n state: CompilerOptionState,\n errors: string[],\n reportAllSyntaxErrors: boolean\n): void {\n const ast = parseConfig(file, errors, reportAllSyntaxErrors);\n if (!ast) return;\n\n const pluginBindings = new Set<Binding>();\n const namespaceBindings = new Set<Binding>();\n const jsxPluginBindings = new Set<Binding>();\n const jsxNamespaceBindings = new Set<Binding>();\n const defineConfigBindings = new Set<Binding>();\n\n traverse(ast, {\n ImportDeclaration(importPath) {\n if (importPath.node.source.value === 'vite') {\n for (const specifierPath of importPath.get('specifiers')) {\n const specifier = specifierPath.node;\n if (\n specifier.type !== 'ImportSpecifier' ||\n (specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value) !== 'defineConfig'\n ) {\n continue;\n }\n const binding = specifierPath.scope.getBinding(specifier.local.name);\n if (binding) defineConfigBindings.add(binding);\n }\n return;\n }\n const moduleSource = importPath.node.source.value;\n if (\n moduleSource !== '@vitejs/plugin-vue' &&\n moduleSource !== '@vitejs/plugin-vue-jsx'\n ) {\n return;\n }\n const targetPluginBindings =\n moduleSource === '@vitejs/plugin-vue-jsx'\n ? jsxPluginBindings\n : pluginBindings;\n const targetNamespaceBindings =\n moduleSource === '@vitejs/plugin-vue-jsx'\n ? jsxNamespaceBindings\n : namespaceBindings;\n for (const specifierPath of importPath.get('specifiers')) {\n const specifier = specifierPath.node;\n const binding = specifierPath.scope.getBinding(specifier.local.name);\n if (!binding) continue;\n if (specifier.type === 'ImportNamespaceSpecifier') {\n targetNamespaceBindings.add(binding);\n } else if (\n specifier.type === 'ImportDefaultSpecifier' ||\n (specifier.type === 'ImportSpecifier' &&\n (specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value) === 'default')\n ) {\n targetPluginBindings.add(binding);\n }\n }\n },\n TSImportEqualsDeclaration(importPath) {\n const reference = importPath.node.moduleReference;\n if (\n reference.type !== 'TSExternalModuleReference' ||\n reference.expression.type !== 'StringLiteral' ||\n (reference.expression.value !== '@vitejs/plugin-vue' &&\n reference.expression.value !== '@vitejs/plugin-vue-jsx')\n ) {\n return;\n }\n const binding = importPath.scope.getBinding(importPath.node.id.name);\n if (!binding) return;\n if (reference.expression.value === '@vitejs/plugin-vue-jsx') {\n jsxNamespaceBindings.add(binding);\n } else {\n namespaceBindings.add(binding);\n }\n },\n VariableDeclarator(variablePath) {\n const vueRequireKind = getPluginVueRequireKind(\n variablePath.node.init,\n '@vitejs/plugin-vue'\n );\n const jsxRequireKind = getPluginVueRequireKind(\n variablePath.node.init,\n '@vitejs/plugin-vue-jsx'\n );\n const requireKind = vueRequireKind ?? jsxRequireKind;\n if (!requireKind) return;\n const targetPluginBindings = jsxRequireKind\n ? jsxPluginBindings\n : pluginBindings;\n const targetNamespaceBindings = jsxRequireKind\n ? jsxNamespaceBindings\n : namespaceBindings;\n if (variablePath.node.id.type === 'Identifier') {\n const binding = variablePath.scope.getBinding(\n variablePath.node.id.name\n );\n if (!binding) return;\n if (requireKind === 'namespace') targetNamespaceBindings.add(binding);\n else targetPluginBindings.add(binding);\n return;\n }\n if (\n requireKind !== 'namespace' ||\n variablePath.node.id.type !== 'ObjectPattern'\n ) {\n return;\n }\n for (const property of variablePath.node.id.properties) {\n if (\n property.type !== 'ObjectProperty' ||\n readPropertyKey(property) !== 'default'\n ) {\n continue;\n }\n const localName = readBindingIdentifier(property.value);\n const binding = localName\n ? variablePath.scope.getBinding(localName)\n : undefined;\n if (binding) targetPluginBindings.add(binding);\n }\n },\n });\n\n const activeExport = findActiveConfigExport(ast, file, errors);\n if (!activeExport) return;\n const functionReturns = collectFunctionReturns(ast);\n const configRoot = resolveActiveConfigRoot(\n activeExport.node,\n activeExport.scope,\n functionReturns,\n (callee, scope) =>\n resolveConfigHelperCall(callee, scope, defineConfigBindings, undefined),\n new Set()\n );\n if (!configRoot.ok) {\n errors.push(dynamicConfigError(file, configRoot.node));\n return;\n }\n\n const configObject = resolveStaticObject(\n configRoot.value.node,\n configRoot.value.scope,\n new Set()\n );\n if (!configObject.ok) {\n errors.push(dynamicConfigError(file, configObject.node));\n return;\n }\n const plugins = configObject.value.entries.get('plugins');\n if (!plugins) return;\n\n const pluginContext: VitePluginContext = {\n moduleSource: '@vitejs/plugin-vue',\n namespaceBindings,\n pluginBindings,\n referencePositions: [...pluginBindings, ...namespaceBindings].flatMap(\n (binding) =>\n binding.referencePaths\n .map((reference) => reference.node.start)\n .filter((position): position is number => position !== null)\n ),\n };\n const calls: ScopedPluginCall[] = [];\n const unresolved = collectActiveVuePluginCalls(\n plugins.node,\n plugins.scope,\n pluginContext,\n calls,\n new Set()\n );\n if (unresolved) {\n errors.push(dynamicConfigError(file, unresolved));\n return;\n }\n if (calls.length > 1) {\n errors.push(dynamicConfigError(file, calls[1]!.node));\n return;\n }\n const call = calls[0];\n if (call) {\n const argument = call.node.arguments[0];\n if (\n argument?.type === 'SpreadElement' ||\n argument?.type === 'ArgumentPlaceholder'\n ) {\n errors.push(dynamicConfigError(file, argument));\n return;\n }\n if (argument) {\n rejectCustomVueCompiler(argument, call.scope, file, errors);\n readNestedCompilerOptions(\n argument,\n call.scope,\n ['template', 'compilerOptions'],\n file,\n true,\n state,\n errors\n );\n }\n }\n\n const jsxPluginContext: VitePluginContext = {\n moduleSource: '@vitejs/plugin-vue-jsx',\n namespaceBindings: jsxNamespaceBindings,\n pluginBindings: jsxPluginBindings,\n referencePositions: [...jsxPluginBindings, ...jsxNamespaceBindings].flatMap(\n (binding) =>\n binding.referencePaths\n .map((reference) => reference.node.start)\n .filter((position): position is number => position !== null)\n ),\n };\n const jsxCalls: ScopedPluginCall[] = [];\n const unresolvedJSX = collectActiveVuePluginCalls(\n plugins.node,\n plugins.scope,\n jsxPluginContext,\n jsxCalls,\n new Set()\n );\n if (unresolvedJSX) {\n errors.push(dynamicVueJSXConfigError(file, unresolvedJSX));\n return;\n }\n if (jsxCalls.length > 1) {\n errors.push(dynamicVueJSXConfigError(file, jsxCalls[1]!.node));\n return;\n }\n if (jsxCalls[0]) readVueJSXPluginOptions(jsxCalls[0], file, errors);\n}\n\n/** Rejects Vite JSX options that can invalidate source-to-VNode parity. */\nfunction readVueJSXPluginOptions(\n call: ScopedPluginCall,\n file: string,\n errors: string[]\n): void {\n const argument = call.node.arguments[0];\n if (!argument) return;\n if (\n argument.type === 'SpreadElement' ||\n argument.type === 'ArgumentPlaceholder'\n ) {\n errors.push(dynamicVueJSXConfigError(file, argument));\n return;\n }\n const options = resolveStaticObject(argument, call.scope, new Set());\n if (!options.ok) {\n errors.push(dynamicVueJSXConfigError(file, options.node));\n return;\n }\n\n for (const [name, entry] of options.value.entries) {\n let supported = false;\n if (name === 'optimize') {\n // Optimization changes patch metadata only. The real dev/production\n // oracle proves both values preserve GT source data.\n supported =\n resolveStaticBoolean(entry.node, entry.scope, new Set()) !== undefined;\n } else if (name === 'transformOn') {\n supported =\n resolveStaticBoolean(entry.node, entry.scope, new Set()) === false;\n } else if (name === 'enableObjectSlots' || name === 'mergeProps') {\n supported =\n resolveStaticBoolean(entry.node, entry.scope, new Set()) === true;\n } else if (name === 'resolveType') {\n supported =\n resolveStaticBoolean(entry.node, entry.scope, new Set()) === false;\n } else if (name === 'pragma') {\n supported =\n resolveStaticString(entry.node, entry.scope, new Set()) === '';\n } else if (name === 'defineComponentName') {\n supported = isDefaultDefineComponentNames(\n entry.node,\n entry.scope,\n new Set()\n );\n } else if (name === 'babelPlugins') {\n supported = isDefinitelyEmptyArray(entry.node, entry.scope, new Set());\n } else if (name === 'tsPluginOptions') {\n const resolved = resolveStaticObject(entry.node, entry.scope, new Set());\n supported = resolved.ok && resolved.value.entries.size === 0;\n }\n if (supported) continue;\n errors.push(\n locatedOptionError(\n file,\n entry.node,\n `Found unsupported @vitejs/plugin-vue-jsx option \"${name}\"`,\n 'Use default-equivalent Vue JSX options; only a static optimize value may differ in files containing gt-vue translations'\n )\n );\n }\n}\n\n/** Resolves an immutable boolean option without coercing another type. */\nfunction resolveStaticBoolean(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean | undefined {\n const node = unwrapExpression(input);\n if (node.type === 'BooleanLiteral') return node.value;\n if (node.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding) || seen.has(binding)) {\n return undefined;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return resolveStaticBoolean(declaration.init, binding.path.scope, nextSeen);\n}\n\n/** Proves the explicit component-name option equals the plugin default. */\nfunction isDefaultDefineComponentNames(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean {\n const node = unwrapExpression(input);\n if (node.type === 'ArrayExpression') {\n return (\n node.elements.length === 1 &&\n node.elements[0]?.type === 'StringLiteral' &&\n node.elements[0].value === 'defineComponent'\n );\n }\n if (node.type !== 'Identifier') return false;\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding) || seen.has(binding)) {\n return false;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return false;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return isDefaultDefineComponentNames(\n declaration.init,\n binding.path.scope,\n nextSeen\n );\n}\n\n/** Proves an immutable config value is an empty array. */\nfunction isDefinitelyEmptyArray(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean {\n const node = unwrapExpression(input);\n if (node.type === 'ArrayExpression') return node.elements.length === 0;\n if (node.type !== 'Identifier') return false;\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding) || seen.has(binding)) {\n return false;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return false;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return isDefinitelyEmptyArray(declaration.init, binding.path.scope, nextSeen);\n}\n\n/**\n * Rejects Vite's custom compiler override because source-file resolution can\n * only prove parity with that app's `vue/compiler-sfc` export.\n */\nfunction rejectCustomVueCompiler(\n root: t.Node,\n scope: Scope,\n file: string,\n errors: string[]\n): void {\n const rootObject = resolveStaticObject(root, scope, new Set());\n if (!rootObject.ok) return;\n const compiler = rootObject.value.entries.get('compiler');\n if (!compiler) return;\n errors.push(\n locatedOptionError(\n file,\n compiler.node,\n 'Found a custom Vue compiler instance in the Vite plugin',\n \"Remove the compiler override so extraction and Vite both use the app's vue/compiler-sfc version\"\n )\n );\n}\n\nfunction readNuxtConfig(\n file: string,\n state: CompilerOptionState,\n errors: string[],\n sourceDiscoveryIsExplicit: boolean\n): void {\n const ast = parseConfig(file, errors, sourceDiscoveryIsExplicit);\n if (!ast) return;\n\n const defineNuxtConfigBindings = new Set<Binding>();\n traverse(ast, {\n ImportDeclaration(importPath) {\n if (\n importPath.node.source.value !== 'nuxt/config' &&\n importPath.node.source.value !== 'nuxt' &&\n importPath.node.source.value !== '#imports'\n ) {\n return;\n }\n for (const specifierPath of importPath.get('specifiers')) {\n const specifier = specifierPath.node;\n if (\n specifier.type !== 'ImportSpecifier' ||\n (specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value) !== 'defineNuxtConfig'\n ) {\n continue;\n }\n const binding = specifierPath.scope.getBinding(specifier.local.name);\n if (binding) defineNuxtConfigBindings.add(binding);\n }\n },\n });\n\n const activeExport = findActiveConfigExport(ast, file, errors);\n if (!activeExport) return;\n const configRoot = resolveActiveConfigRoot(\n activeExport.node,\n activeExport.scope,\n collectFunctionReturns(ast),\n (callee, scope) =>\n resolveConfigHelperCall(\n callee,\n scope,\n defineNuxtConfigBindings,\n 'defineNuxtConfig'\n ),\n new Set()\n );\n if (!configRoot.ok) {\n errors.push(dynamicConfigError(file, configRoot.node));\n return;\n }\n const configObject = resolveStaticObject(\n configRoot.value.node,\n configRoot.value.scope,\n new Set()\n );\n if (!configObject.ok) {\n errors.push(dynamicConfigError(file, configObject.node));\n return;\n }\n const extendsEntry = configObject.value.entries.get('extends');\n if (\n extendsEntry &&\n !isDefinitelyEmptyNuxtExtends(extendsEntry.node, extendsEntry.scope)\n ) {\n errors.push(\n locatedOptionError(\n file,\n extendsEntry.node,\n 'Found Nuxt layer inheritance that could change Vue compiler options',\n 'Run extraction from a Nuxt configuration without inherited layers until gt-vue can resolve the complete layer chain safely'\n )\n );\n return;\n }\n const unsupportedSourceLayout = sourceDiscoveryIsExplicit\n ? undefined\n : findUnsupportedNuxtSourceLayout(configObject.value);\n if (unsupportedSourceLayout) {\n errors.push(\n locatedOptionError(\n file,\n unsupportedSourceLayout,\n 'Found custom Nuxt source directories that default Vue discovery cannot scan safely',\n 'Use Nuxt source directories covered by the default app, src, pages, layouts, plugins, and related globs until custom directory discovery is supported'\n )\n );\n return;\n }\n readNestedCompilerOptions(\n configRoot.value.node,\n configRoot.value.scope,\n ['vue', 'compilerOptions'],\n file,\n true,\n state,\n errors\n );\n}\n\n/** Finds a Nuxt source-layout override not covered by default CLI globs. */\nfunction findUnsupportedNuxtSourceLayout(\n config: StaticObject\n): t.Node | undefined {\n const srcDir = config.entries.get('srcDir');\n if (srcDir) {\n const value = resolveStaticString(srcDir.node, srcDir.scope, new Set());\n const normalized = value\n ? path.posix.normalize(value.replaceAll('\\\\', '/')).replace(/\\/+$/, '') ||\n '.'\n : undefined;\n if (!normalized || !['.', 'app', 'src'].includes(normalized)) {\n return srcDir.node;\n }\n }\n\n const directoryOptions = config.entries.get('dir');\n if (directoryOptions) {\n const resolved = resolveStaticObject(\n directoryOptions.node,\n directoryOptions.scope,\n new Set()\n );\n if (!resolved.ok || resolved.value.entries.size > 0) {\n return directoryOptions.node;\n }\n }\n return undefined;\n}\n\n/** Returns true only when a Nuxt extends value provably selects no layers. */\nfunction isDefinitelyEmptyNuxtExtends(input: t.Node, scope: Scope): boolean {\n const node = unwrapExpression(input);\n if (node.type === 'NullLiteral') return true;\n if (node.type === 'ArrayExpression') return node.elements.length === 0;\n if (node.type !== 'Identifier') return false;\n if (node.name === 'undefined' && !scope.getBinding(node.name)) return true;\n const binding = scope.getBinding(node.name);\n const declaration = binding?.path.node;\n return !!(\n binding?.constant &&\n !bindingHasMutation(binding) &&\n declaration?.type === 'VariableDeclarator' &&\n declaration.init &&\n isDefinitelyEmptyNuxtExtends(declaration.init, binding.path.scope)\n );\n}\n\n/** Returns the one top-level export that the config loader evaluates. */\nfunction findActiveConfigExport(\n ast: t.File,\n file: string,\n errors: string[]\n): ObjectEntry | undefined {\n const esmExports: ObjectEntry[] = [];\n const commonJsExports = new Map<\n 'exports-default' | 'module-exports',\n ObjectEntry[]\n >();\n\n traverse(ast, {\n ExportDefaultDeclaration(exportPath) {\n esmExports.push({\n node: exportPath.node.declaration,\n scope: exportPath.scope,\n });\n },\n AssignmentExpression(assignmentPath) {\n if (\n assignmentPath.node.operator !== '=' ||\n assignmentPath.getFunctionParent() ||\n !assignmentPath.parentPath.isExpressionStatement() ||\n !assignmentPath.parentPath.parentPath?.isProgram()\n ) {\n return;\n }\n const kind = readCommonJsConfigExportKind(\n assignmentPath.node.left,\n assignmentPath.scope\n );\n if (!kind) return;\n const entries = commonJsExports.get(kind) ?? [];\n entries.push({\n node: assignmentPath.node.right,\n scope: assignmentPath.scope,\n });\n commonJsExports.set(kind, entries);\n },\n });\n\n const commonJsKinds = [...commonJsExports.keys()];\n if (\n esmExports.length > 1 ||\n (esmExports.length > 0 && commonJsKinds.length > 0) ||\n commonJsKinds.length > 1\n ) {\n const node =\n esmExports[1]?.node ??\n commonJsExports.get(commonJsKinds[1]!)?.[0]?.node ??\n esmExports[0]?.node ??\n ast.program;\n errors.push(dynamicConfigError(file, node));\n return undefined;\n }\n if (esmExports[0]) return esmExports[0];\n const commonJs = commonJsExports.get(commonJsKinds[0]!);\n return commonJs?.[commonJs.length - 1];\n}\n\n/** Records return expressions by their immediately containing function. */\nfunction collectFunctionReturns(ast: t.File): Map<t.Function, ObjectEntry[]> {\n const result = new Map<t.Function, ObjectEntry[]>();\n traverse(ast, {\n ReturnStatement(returnPath) {\n if (!returnPath.node.argument) return;\n const functionPath = returnPath.getFunctionParent();\n if (!functionPath) return;\n const entries = result.get(functionPath.node) ?? [];\n entries.push({ node: returnPath.node.argument, scope: returnPath.scope });\n result.set(functionPath.node, entries);\n },\n });\n return result;\n}\n\n/** Resolves an exported object or single-return config function statically. */\nfunction resolveActiveConfigRoot(\n input: t.Node,\n scope: Scope,\n functionReturns: Map<t.Function, ObjectEntry[]>,\n resolveHelper: (input: t.Node, scope: Scope) => ConfigHelperResolution,\n seen: Set<t.Node>\n): ActiveConfigResolution {\n const node = unwrapExpression(input);\n if (seen.has(node)) return { ok: false, node };\n const nextSeen = new Set(seen);\n nextSeen.add(node);\n\n if (node.type === 'ObjectExpression') {\n return { ok: true, value: { node, scope } };\n }\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding)) {\n return { ok: false, node };\n }\n if (binding.path.isFunctionDeclaration()) {\n return resolveActiveConfigRoot(\n binding.path.node,\n binding.path.scope,\n functionReturns,\n resolveHelper,\n nextSeen\n );\n }\n const declaration = binding.path.node;\n return declaration.type === 'VariableDeclarator' && declaration.init\n ? resolveActiveConfigRoot(\n declaration.init,\n binding.path.scope,\n functionReturns,\n resolveHelper,\n nextSeen\n )\n : { ok: false, node };\n }\n if (\n node.type === 'CallExpression' ||\n node.type === 'OptionalCallExpression'\n ) {\n const helper = resolveHelper(node.callee, scope);\n if (helper !== 'static') return { ok: false, node: node.callee };\n const argument = node.arguments[0];\n return argument &&\n argument.type !== 'SpreadElement' &&\n argument.type !== 'ArgumentPlaceholder'\n ? resolveActiveConfigRoot(\n argument,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n )\n : { ok: false, node };\n }\n if (\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionExpression' ||\n node.type === 'FunctionDeclaration'\n ) {\n if (\n node.type === 'ArrowFunctionExpression' &&\n node.body.type !== 'BlockStatement'\n ) {\n return resolveActiveConfigRoot(\n node.body,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n );\n }\n const returns = functionReturns.get(node) ?? [];\n return returns.length === 1\n ? resolveActiveConfigRoot(\n returns[0]!.node,\n returns[0]!.scope,\n functionReturns,\n resolveHelper,\n nextSeen\n )\n : { ok: false, node };\n }\n if (node.type === 'ConditionalExpression') {\n const condition = resolveStaticTruthiness(node.test, scope, new Set());\n return condition === undefined\n ? { ok: false, node }\n : resolveActiveConfigRoot(\n condition ? node.consequent : node.alternate,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n );\n }\n if (node.type === 'SequenceExpression') {\n const last = node.expressions[node.expressions.length - 1];\n return last\n ? resolveActiveConfigRoot(\n last,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n )\n : { ok: false, node };\n }\n if (node.type === 'AwaitExpression') {\n return resolveActiveConfigRoot(\n node.argument,\n scope,\n functionReturns,\n resolveHelper,\n nextSeen\n );\n }\n return { ok: false, node };\n}\n\n/** Resolves imported/global config helpers and their immutable aliases. */\nfunction resolveConfigHelperCall(\n input: t.Node,\n scope: Scope,\n knownBindings: Set<Binding>,\n globalName: string | undefined,\n seen: Set<Binding> = new Set()\n): ConfigHelperResolution {\n const node = unwrapExpression(input);\n if (node.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(node.name);\n if (!binding) return node.name === globalName ? 'static' : undefined;\n if (knownBindings.has(binding)) return 'static';\n if (seen.has(binding)) return undefined;\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n const initialValue = resolveConfigHelperCall(\n declaration.init,\n binding.path.scope,\n knownBindings,\n globalName,\n nextSeen\n );\n return !binding.constant && initialValue ? 'dynamic' : initialValue;\n}\n\n/** Collects Vue plugin calls reachable through the active `plugins` value. */\nfunction collectActiveVuePluginCalls(\n input: t.Node,\n scope: Scope,\n context: VitePluginContext,\n calls: ScopedPluginCall[],\n seen: Set<Binding>\n): t.Node | undefined {\n const node = unwrapExpression(input);\n\n if (node.type === 'Identifier') {\n const value = resolvePluginVueValue(\n node,\n scope,\n context.pluginBindings,\n context.namespaceBindings,\n context.moduleSource,\n new Set()\n );\n if (value === 'dynamic' || value === 'default') return node;\n const binding = scope.getBinding(node.name);\n if (!binding || seen.has(binding)) {\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n if (bindingHasMutation(binding)) return node;\n if (!binding.constant) {\n return mayReferenceVuePlugin(\n declaration.init,\n binding.path.scope,\n context,\n new Set()\n )\n ? node\n : undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return collectActiveVuePluginCalls(\n declaration.init,\n binding.path.scope,\n context,\n calls,\n nextSeen\n );\n }\n if (node.type === 'ArrayExpression') {\n for (const element of node.elements) {\n if (!element) continue;\n const unresolved = collectActiveVuePluginCalls(\n element.type === 'SpreadElement' ? element.argument : element,\n scope,\n context,\n calls,\n seen\n );\n if (unresolved) return unresolved;\n }\n return undefined;\n }\n if (\n node.type === 'CallExpression' ||\n node.type === 'OptionalCallExpression'\n ) {\n const value = resolvePluginVueValue(\n node.callee,\n scope,\n context.pluginBindings,\n context.namespaceBindings,\n context.moduleSource,\n new Set()\n );\n if (value === 'dynamic') return node.callee;\n if (value === 'default') {\n calls.push({ node, scope });\n return undefined;\n }\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n if (node.type === 'ConditionalExpression') {\n const condition = resolveStaticTruthiness(node.test, scope, new Set());\n if (condition !== undefined) {\n return collectActiveVuePluginCalls(\n condition ? node.consequent : node.alternate,\n scope,\n context,\n calls,\n seen\n );\n }\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n if (node.type === 'LogicalExpression') {\n const left = resolveStaticTruthiness(node.left, scope, new Set());\n if (left !== undefined) {\n const selected =\n node.operator === '&&'\n ? left\n ? node.right\n : node.left\n : node.operator === '||'\n ? left\n ? node.left\n : node.right\n : undefined;\n if (selected) {\n return collectActiveVuePluginCalls(\n selected,\n scope,\n context,\n calls,\n seen\n );\n }\n }\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n }\n if (node.type === 'SequenceExpression') {\n const last = node.expressions[node.expressions.length - 1];\n return last\n ? collectActiveVuePluginCalls(last, scope, context, calls, seen)\n : undefined;\n }\n return mayReferenceVuePlugin(node, scope, context, new Set())\n ? node\n : undefined;\n}\n\n/** Conservatively follows wrapper bindings that reference the Vue plugin. */\nfunction mayReferenceVuePlugin(\n input: t.Node,\n scope: Scope,\n context: VitePluginContext,\n seen: Set<Binding>\n): boolean {\n const node = unwrapExpression(input);\n const start = node.start;\n const end = node.end;\n if (\n typeof start === 'number' &&\n typeof end === 'number' &&\n context.referencePositions.some(\n (position) => position >= start && position <= end\n )\n ) {\n return true;\n }\n const target =\n node.type === 'Identifier'\n ? node\n : node.type === 'CallExpression' || node.type === 'OptionalCallExpression'\n ? unwrapExpression(node.callee)\n : undefined;\n if (target?.type !== 'Identifier') return false;\n const binding = scope.getBinding(target.name);\n if (!binding) return false;\n if (\n context.pluginBindings.has(binding) ||\n context.namespaceBindings.has(binding)\n ) {\n return true;\n }\n if (seen.has(binding)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n const declaration = binding.path.node;\n if (declaration.type === 'VariableDeclarator' && declaration.init) {\n return mayReferenceVuePlugin(\n declaration.init,\n binding.path.scope,\n context,\n nextSeen\n );\n }\n const declarationStart = declaration.start;\n const declarationEnd = declaration.end;\n return (\n typeof declarationStart === 'number' &&\n typeof declarationEnd === 'number' &&\n context.referencePositions.some(\n (position) => position >= declarationStart && position <= declarationEnd\n )\n );\n}\n\n/** Evaluates only primitive truthiness used to choose a static config branch. */\nfunction resolveStaticTruthiness(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean | undefined {\n const node = unwrapExpression(input);\n if (node.type === 'BooleanLiteral') return node.value;\n if (node.type === 'NullLiteral') return false;\n if (node.type === 'NumericLiteral') return !!node.value;\n if (node.type === 'BigIntLiteral') return node.value !== '0';\n if (node.type === 'StringLiteral') return node.value.length > 0;\n if (node.type === 'UnaryExpression' && node.operator === '!') {\n const value = resolveStaticTruthiness(node.argument, scope, seen);\n return value === undefined ? undefined : !value;\n }\n if (node.type !== 'Identifier') return undefined;\n if (node.name === 'undefined' && !scope.getBinding(node.name)) return false;\n const binding = scope.getBinding(node.name);\n if (!binding?.constant || bindingHasMutation(binding) || seen.has(binding)) {\n return undefined;\n }\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return resolveStaticTruthiness(\n declaration.init,\n binding.path.scope,\n nextSeen\n );\n}\n\nfunction readNestedCompilerOptions(\n root: t.Node,\n scope: Scope,\n keys: [string, string],\n file: string,\n failOnDynamicRoot: boolean,\n state: CompilerOptionState,\n errors: string[]\n): void {\n const rootObject = resolveStaticObject(root, scope, new Set());\n if (!rootObject.ok) {\n if (failOnDynamicRoot)\n errors.push(dynamicConfigError(file, rootObject.node));\n return;\n }\n\n const parentEntry = rootObject.value.entries.get(keys[0]);\n if (!parentEntry) return;\n const parentObject = resolveStaticObject(\n parentEntry.node,\n parentEntry.scope,\n new Set()\n );\n if (!parentObject.ok) {\n errors.push(dynamicConfigError(file, parentObject.node));\n return;\n }\n\n const compilerEntry = parentObject.value.entries.get(keys[1]);\n if (!compilerEntry) return;\n const compilerObject = resolveStaticObject(\n compilerEntry.node,\n compilerEntry.scope,\n new Set()\n );\n if (!compilerObject.ok) {\n errors.push(dynamicConfigError(file, compilerObject.node));\n return;\n }\n\n readCompilerOptionsObject(compilerObject.value, file, state, errors);\n}\n\nfunction readCompilerOptionsObject(\n object: StaticObject,\n file: string,\n state: CompilerOptionState,\n errors: string[]\n): void {\n for (const [key, entry] of object.entries) {\n if (key !== 'whitespace' && key !== 'delimiters') {\n errors.push(\n locatedOptionError(\n file,\n entry.node,\n `Found unsupported Vue compiler option \"${key}\"`,\n 'gt-vue extraction currently supports only static whitespace and delimiters compiler options'\n )\n );\n }\n }\n\n const whitespaceEntry = object.entries.get('whitespace');\n if (whitespaceEntry) {\n const value = resolveStaticString(\n whitespaceEntry.node,\n whitespaceEntry.scope,\n new Set()\n );\n if (value !== 'condense' && value !== 'preserve') {\n errors.push(dynamicConfigError(file, whitespaceEntry.node));\n } else {\n mergeOption(\n state,\n 'whitespace',\n value,\n { file, node: whitespaceEntry.node },\n errors\n );\n }\n }\n\n const delimitersEntry = object.entries.get('delimiters');\n if (delimitersEntry) {\n const value = resolveStaticDelimiters(\n delimitersEntry.node,\n delimitersEntry.scope,\n new Set()\n );\n if (!value) {\n errors.push(dynamicConfigError(file, delimitersEntry.node));\n } else {\n mergeOption(\n state,\n 'delimiters',\n value,\n { file, node: delimitersEntry.node },\n errors\n );\n }\n }\n}\n\nfunction resolveStaticObject(\n input: t.Node,\n scope: Scope,\n seen: Set<t.Node>\n): ObjectResolution {\n const node = unwrapExpression(input);\n if (seen.has(node)) return { ok: false, node };\n seen.add(node);\n\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n const declaration = binding?.path.node;\n if (\n !binding?.constant ||\n bindingHasMutation(binding) ||\n declaration?.type !== 'VariableDeclarator' ||\n !declaration.init\n ) {\n return { ok: false, node };\n }\n return resolveStaticObject(declaration.init, binding.path.scope, seen);\n }\n if (node.type !== 'ObjectExpression') return { ok: false, node };\n\n const entries = new Map<string, ObjectEntry>();\n for (const property of node.properties) {\n if (property.type === 'SpreadElement') {\n const spread = resolveStaticObject(property.argument, scope, seen);\n if (!spread.ok) return { ok: false, node: spread.node };\n for (const [key, entry] of spread.value.entries) entries.set(key, entry);\n continue;\n }\n const key = readPropertyKey(property);\n if (!key) return { ok: false, node: property };\n if (property.type !== 'ObjectProperty') {\n entries.set(key, { node: property, scope });\n continue;\n }\n entries.set(key, { node: property.value, scope });\n }\n return { ok: true, value: { entries } };\n}\n\nfunction resolveStaticString(\n input: t.Node,\n scope: Scope,\n seen: Set<t.Node>\n): string | undefined {\n const node = unwrapExpression(input);\n if (seen.has(node)) return undefined;\n seen.add(node);\n if (node.type === 'StringLiteral') return node.value;\n if (node.type === 'TemplateLiteral' && node.expressions.length === 0) {\n return node.quasis\n .map((quasi) => quasi.value.cooked ?? quasi.value.raw)\n .join('');\n }\n if (node.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(node.name);\n const declaration = binding?.path.node;\n return binding?.constant &&\n !bindingHasMutation(binding) &&\n declaration?.type === 'VariableDeclarator' &&\n declaration.init\n ? resolveStaticString(declaration.init, binding.path.scope, seen)\n : undefined;\n}\n\nfunction resolveStaticDelimiters(\n input: t.Node,\n scope: Scope,\n seen: Set<t.Node>\n): [string, string] | undefined {\n const node = unwrapExpression(input);\n if (seen.has(node)) return undefined;\n seen.add(node);\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n const declaration = binding?.path.node;\n return binding?.constant &&\n !bindingHasMutation(binding) &&\n declaration?.type === 'VariableDeclarator' &&\n declaration.init\n ? resolveStaticDelimiters(declaration.init, binding.path.scope, seen)\n : undefined;\n }\n if (node.type !== 'ArrayExpression' || node.elements.length !== 2) {\n return undefined;\n }\n const values = node.elements.map((element) =>\n element && element.type !== 'SpreadElement'\n ? resolveStaticString(element, scope, new Set())\n : undefined\n );\n return isDelimiterPair(values) ? values : undefined;\n}\n\nfunction unwrapExpression(input: t.Node): t.Node {\n let node = input;\n while (\n node.type === 'TSAsExpression' ||\n node.type === 'TSSatisfiesExpression' ||\n node.type === 'TSTypeAssertion' ||\n node.type === 'TSNonNullExpression' ||\n node.type === 'TypeCastExpression' ||\n node.type === 'ParenthesizedExpression'\n ) {\n node = node.expression;\n }\n return node;\n}\n\nfunction readPropertyKey(\n property: t.ObjectMethod | t.ObjectProperty\n): string | undefined {\n if (!property.computed && property.key.type === 'Identifier') {\n return property.key.name;\n }\n if (property.key.type === 'StringLiteral') return property.key.value;\n return undefined;\n}\n\nfunction getPluginVueRequireKind(\n input: t.Expression | null | undefined,\n moduleSource: '@vitejs/plugin-vue' | '@vitejs/plugin-vue-jsx'\n): 'default' | 'namespace' | undefined {\n if (!input) return undefined;\n const node = unwrapExpression(input);\n if (\n node.type === 'CallExpression' &&\n node.callee.type === 'Identifier' &&\n node.callee.name === 'require' &&\n node.arguments[0]?.type === 'StringLiteral' &&\n node.arguments[0].value === moduleSource\n ) {\n return 'namespace';\n }\n if (\n (node.type === 'MemberExpression' ||\n node.type === 'OptionalMemberExpression') &&\n isDefaultMember(node)\n ) {\n return getPluginVueRequireKind(node.object as t.Expression, moduleSource)\n ? 'default'\n : undefined;\n }\n return undefined;\n}\n\n/** Resolves immutable aliases of the Vue Vite plugin without executing config. */\nfunction resolvePluginVueValue(\n input: t.Node,\n scope: Scope,\n pluginBindings: Set<Binding>,\n namespaceBindings: Set<Binding>,\n moduleSource: '@vitejs/plugin-vue' | '@vitejs/plugin-vue-jsx',\n seen: Set<Binding>\n): 'default' | 'dynamic' | 'namespace' | undefined {\n const node = unwrapExpression(input);\n const requireKind =\n node.type === 'CallExpression' ||\n node.type === 'MemberExpression' ||\n node.type === 'OptionalMemberExpression'\n ? getPluginVueRequireKind(node, moduleSource)\n : undefined;\n if (requireKind) return requireKind;\n\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n if (!binding) return undefined;\n if (pluginBindings.has(binding)) return 'default';\n if (namespaceBindings.has(binding)) return 'namespace';\n if (seen.has(binding)) return undefined;\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return undefined;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n const initialValue = resolvePluginVueValue(\n declaration.init,\n binding.path.scope,\n pluginBindings,\n namespaceBindings,\n moduleSource,\n nextSeen\n );\n return !binding.constant && initialValue ? 'dynamic' : initialValue;\n }\n if (\n (node.type === 'MemberExpression' ||\n node.type === 'OptionalMemberExpression') &&\n isDefaultMember(node)\n ) {\n const objectValue = resolvePluginVueValue(\n node.object,\n scope,\n pluginBindings,\n namespaceBindings,\n moduleSource,\n seen\n );\n if (objectValue === 'dynamic') return 'dynamic';\n if (objectValue === 'namespace') return 'default';\n }\n return undefined;\n}\n\n/** Recognizes every static spelling of a module namespace default export. */\nfunction isDefaultMember(\n node: t.MemberExpression | t.OptionalMemberExpression\n): boolean {\n return (\n (!node.computed &&\n node.property.type === 'Identifier' &&\n node.property.name === 'default') ||\n (node.computed &&\n node.property.type === 'StringLiteral' &&\n node.property.value === 'default')\n );\n}\n\n/** Classifies supported unshadowed CommonJS config exports. */\nfunction readCommonJsConfigExportKind(\n node: t.Node,\n scope: Scope\n): 'exports-default' | 'module-exports' | undefined {\n if (\n node.type !== 'MemberExpression' ||\n node.object.type !== 'Identifier' ||\n !(\n (!node.computed && node.property.type === 'Identifier') ||\n (node.computed && node.property.type === 'StringLiteral')\n )\n ) {\n return undefined;\n }\n const property =\n node.property.type === 'Identifier'\n ? node.property.name\n : node.property.value;\n if (\n node.object.name === 'module' &&\n property === 'exports' &&\n !scope.getBinding('module')\n ) {\n return 'module-exports';\n }\n return node.object.name === 'exports' &&\n property === 'default' &&\n !scope.getBinding('exports')\n ? 'exports-default'\n : undefined;\n}\n\nfunction readBindingIdentifier(node: t.Node): string | undefined {\n if (node.type === 'Identifier') return node.name;\n return node.type === 'AssignmentPattern' && node.left.type === 'Identifier'\n ? node.left.name\n : undefined;\n}\n\nconst MUTATING_METHODS = new Set([\n 'clear',\n 'copyWithin',\n 'delete',\n 'fill',\n 'pop',\n 'push',\n 'reverse',\n 'set',\n 'shift',\n 'sort',\n 'splice',\n 'unshift',\n]);\n\n/** Detects property, collection, and alias mutations Babel does not mark constant. */\nfunction bindingHasMutation(\n binding: Binding,\n seen: Set<Binding> = new Set()\n): boolean {\n if (seen.has(binding)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n\n for (const reference of binding.referencePaths) {\n let current = reference as NodePath<t.Node>;\n while (\n current.parentPath &&\n (current.parentPath.isMemberExpression() ||\n current.parentPath.isOptionalMemberExpression()) &&\n current.parentPath.node.object === current.node\n ) {\n current = current.parentPath as NodePath<t.Node>;\n }\n\n const parent = current.parentPath;\n if (\n (parent?.isAssignmentExpression() && parent.node.left === current.node) ||\n (parent?.isUpdateExpression() && parent.node.argument === current.node) ||\n (parent?.isUnaryExpression({ operator: 'delete' }) &&\n parent.node.argument === current.node)\n ) {\n return true;\n }\n\n if (parent?.isCallExpression() || parent?.isOptionalCallExpression()) {\n if (\n parent.node.callee === current.node &&\n (current.isMemberExpression() ||\n current.isOptionalMemberExpression()) &&\n MUTATING_METHODS.has(readStaticMemberName(current.node) ?? '')\n ) {\n return true;\n }\n if (\n parent.node.arguments[0] === current.node &&\n isGlobalMutationCall(parent.node.callee, parent.scope)\n ) {\n return true;\n }\n if (\n parent.node.arguments.some((argument) => argument === current.node) &&\n !isKnownReadOnlyConfigConsumer(parent.node, current.node, parent.scope)\n ) {\n return true;\n }\n }\n\n const aliasParent = reference.parentPath;\n if (\n aliasParent?.isVariableDeclarator() &&\n aliasParent.node.init === reference.node &&\n aliasParent.node.id.type === 'Identifier'\n ) {\n const alias = aliasParent.scope.getBinding(aliasParent.node.id.name);\n if (alias && bindingHasMutation(alias, nextSeen)) return true;\n }\n if (\n aliasParent?.isVariableDeclarator() &&\n aliasParent.node.init === reference.node &&\n aliasParent.node.id.type !== 'Identifier'\n ) {\n for (const name of collectBindingNames(aliasParent.node.id)) {\n const alias = aliasParent.scope.getBinding(name);\n if (alias && bindingHasMutation(alias, nextSeen)) return true;\n }\n }\n if (\n parent?.isAssignmentExpression({ operator: '=' }) &&\n parent.node.right === current.node\n ) {\n for (const name of collectBindingNames(parent.node.left)) {\n const alias = parent.scope.getBinding(name);\n if (alias && bindingHasMutation(alias, nextSeen)) return true;\n }\n }\n }\n return false;\n}\n\nfunction collectBindingNames(input: t.Node): string[] {\n if (input.type === 'Identifier') return [input.name];\n if (input.type === 'AssignmentPattern') {\n return collectBindingNames(input.left);\n }\n if (input.type === 'RestElement') return collectBindingNames(input.argument);\n if (input.type === 'ArrayPattern') {\n return input.elements.flatMap((element) =>\n element ? collectBindingNames(element) : []\n );\n }\n if (input.type === 'ObjectPattern') {\n return input.properties.flatMap((property) =>\n property.type === 'RestElement'\n ? collectBindingNames(property.argument)\n : collectBindingNames(property.value)\n );\n }\n return [];\n}\n\nfunction readStaticMemberName(\n node: t.MemberExpression | t.OptionalMemberExpression\n): string | undefined {\n if (!node.computed && node.property.type === 'Identifier') {\n return node.property.name;\n }\n return node.computed && node.property.type === 'StringLiteral'\n ? node.property.value\n : undefined;\n}\n\nfunction isGlobalMutationCall(input: t.Node, scope: Scope): boolean {\n const node = unwrapExpression(input);\n if (\n node.type !== 'MemberExpression' &&\n node.type !== 'OptionalMemberExpression'\n ) {\n return false;\n }\n const method = readStaticMemberName(node);\n if (node.object.type !== 'Identifier' || scope.getBinding(node.object.name)) {\n return false;\n }\n return (\n (node.object.name === 'Object' &&\n (method === 'assign' ||\n method === 'defineProperty' ||\n method === 'defineProperties')) ||\n (node.object.name === 'Reflect' &&\n (method === 'set' || method === 'deleteProperty'))\n );\n}\n\nfunction isKnownReadOnlyConfigConsumer(\n call: t.CallExpression | t.OptionalCallExpression,\n argument: t.Node,\n scope: Scope\n): boolean {\n if (resolveKnownConfigConsumer(call.callee, scope, new Set())) return true;\n const callee = unwrapExpression(call.callee);\n if (\n callee.type !== 'MemberExpression' &&\n callee.type !== 'OptionalMemberExpression'\n ) {\n return false;\n }\n const method = readStaticMemberName(callee);\n if (\n callee.object.type !== 'Identifier' ||\n scope.getBinding(callee.object.name)\n ) {\n return false;\n }\n const argumentIndex = call.arguments.findIndex(\n (candidate) => candidate === argument\n );\n if (callee.object.name === 'Object') {\n if (method === 'assign') return argumentIndex > 0;\n return new Set([\n 'entries',\n 'freeze',\n 'getOwnPropertyDescriptor',\n 'getOwnPropertyDescriptors',\n 'getOwnPropertyNames',\n 'getOwnPropertySymbols',\n 'isExtensible',\n 'isFrozen',\n 'isSealed',\n 'keys',\n 'preventExtensions',\n 'seal',\n 'values',\n ]).has(method ?? '');\n }\n return (\n (callee.object.name === 'Array' && method === 'isArray') ||\n (callee.object.name === 'JSON' && method === 'stringify')\n );\n}\n\nfunction resolveKnownConfigConsumer(\n input: t.Node,\n scope: Scope,\n seen: Set<Binding>\n): boolean {\n const node = unwrapExpression(input);\n if (node.type === 'Identifier') {\n const binding = scope.getBinding(node.name);\n if (!binding) return node.name === 'defineNuxtConfig';\n if (seen.has(binding)) return false;\n if (binding.path.isImportDefaultSpecifier()) {\n const declaration = binding.path.parentPath;\n return (\n declaration.isImportDeclaration() &&\n (declaration.node.source.value === '@vitejs/plugin-vue' ||\n declaration.node.source.value === '@vitejs/plugin-vue-jsx')\n );\n }\n if (binding.path.isImportSpecifier()) {\n const declaration = binding.path.parentPath;\n if (!declaration.isImportDeclaration()) return false;\n const imported = binding.path.node.imported;\n const name =\n imported.type === 'Identifier' ? imported.name : imported.value;\n const source = declaration.node.source.value;\n return (\n ((source === '@vitejs/plugin-vue' ||\n source === '@vitejs/plugin-vue-jsx') &&\n name === 'default') ||\n (source === 'vite' && name === 'defineConfig') ||\n ((source === 'nuxt' ||\n source === 'nuxt/config' ||\n source === '#imports') &&\n name === 'defineNuxtConfig')\n );\n }\n const declaration = binding.path.node;\n if (\n binding.constant &&\n declaration.type === 'VariableDeclarator' &&\n declaration.init\n ) {\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n return resolveKnownConfigConsumer(\n declaration.init,\n binding.path.scope,\n nextSeen\n );\n }\n return false;\n }\n return (\n (node.type === 'MemberExpression' ||\n node.type === 'OptionalMemberExpression') &&\n isDefaultMember(node) &&\n (getPluginVueRequireKind(node as t.Expression, '@vitejs/plugin-vue') ===\n 'default' ||\n getPluginVueRequireKind(\n node as t.Expression,\n '@vitejs/plugin-vue-jsx'\n ) === 'default')\n );\n}\n\n/**\n * Parses one project config without executing it. Automatic discovery keeps\n * ignoring malformed configs that contain no Vue-relevant setting, while an\n * explicit config or source scope reports every syntax error.\n */\nfunction parseConfig(\n file: string,\n errors: string[],\n reportAllSyntaxErrors: boolean\n): t.File | undefined {\n let source: string;\n try {\n source = fs.readFileSync(file, 'utf8');\n } catch (error) {\n errors.push(\n configFileDiagnostic(\n 'Could not read the Vue project config file',\n 'Restore the config file and its read permissions, then try extraction again',\n file,\n error\n )\n );\n return undefined;\n }\n\n try {\n return parse(source, {\n sourceType: 'unambiguous',\n plugins: parserPlugins(file),\n });\n } catch (error) {\n if (\n !reportAllSyntaxErrors &&\n !/compilerOptions|whitespace|delimiters|@vitejs\\/plugin-vue-jsx|babelPlugins|pragma/.test(\n source\n )\n ) {\n return undefined;\n }\n const syntaxError = error as SyntaxError & {\n loc?: { column: number; line: number };\n };\n errors.push(\n withLocation(\n file,\n createDiagnosticMessage({\n whatHappened: reportAllSyntaxErrors\n ? 'Could not parse the Vue project config file'\n : 'Could not parse a project configuration containing Vue compiler options',\n details: syntaxError.message,\n fix: 'Use a statically analyzable Vite or Nuxt configuration, or configure files.gt.parsingFlags.vueCompilerOptions explicitly',\n }),\n syntaxError.loc\n ? `${syntaxError.loc.line}:${syntaxError.loc.column + 1}`\n : undefined\n )\n );\n return undefined;\n }\n}\n\nfunction parserPlugins(file: string): ParserPlugin[] {\n const extension = path.extname(file).toLowerCase();\n const plugins: ParserPlugin[] = [];\n if (\n extension === '.ts' ||\n extension === '.mts' ||\n extension === '.cts' ||\n extension === '.tsx'\n ) {\n plugins.push('typescript', 'decorators-legacy');\n }\n if (extension === '.jsx' || extension === '.tsx') plugins.push('jsx');\n return plugins;\n}\n\nfunction mergeOption<K extends CompilerOptionName>(\n state: CompilerOptionState,\n key: K,\n value: Required<Pick<VueCompilerOptions, K>>[K],\n source: OptionSource,\n errors: string[]\n): void {\n const existing = state.options[key];\n if (existing !== undefined && !sameOption(existing, value)) {\n errors.push(\n locatedOptionError(\n source.file,\n source.node,\n `Found conflicting Vue ${key} compiler options`,\n 'Use the same Vue compiler options in the project configuration and files.gt.parsingFlags.vueCompilerOptions'\n )\n );\n return;\n }\n Object.assign(state.options, { [key]: value });\n state.sources[key] ??= source;\n}\n\nfunction sameOption(\n first: VueCompilerOptions[CompilerOptionName],\n second: VueCompilerOptions[CompilerOptionName]\n): boolean {\n return Array.isArray(first) && Array.isArray(second)\n ? first[0] === second[0] && first[1] === second[1]\n : first === second;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isDelimiterPair(value: unknown): value is [string, string] {\n return (\n Array.isArray(value) &&\n value.length === 2 &&\n value.every(\n (delimiter) => typeof delimiter === 'string' && delimiter.length > 0\n )\n );\n}\n\nfunction dynamicConfigError(file: string, node: t.Node): string {\n return locatedOptionError(\n file,\n node,\n 'Could not statically resolve Vue compiler options',\n 'Use static object and string literals for Vue whitespace and delimiters compiler options so extraction hashes match the compiled app'\n );\n}\n\nfunction dynamicVueJSXConfigError(file: string, node: t.Node): string {\n return locatedOptionError(\n file,\n node,\n 'Could not statically resolve @vitejs/plugin-vue-jsx options',\n 'Use one statically configured Vue JSX plugin with the default VNode transform so extraction hashes match the compiled app'\n );\n}\n\nfunction locatedOptionError(\n file: string,\n node: t.Node | undefined,\n whatHappened: string,\n fix: string\n): string {\n return withLocation(\n file,\n createDiagnosticMessage({ whatHappened, fix }),\n node?.loc\n ? `${node.loc.start.line}:${node.loc.start.column + 1}`\n : undefined\n );\n}\n\nfunction optionError(whatHappened: string, fix: string): string {\n return createDiagnosticMessage({ whatHappened, fix });\n}\n\n/** Formats a filesystem-backed config diagnostic without leaking an exception. */\nfunction configFileDiagnostic(\n whatHappened: string,\n fix: string,\n file: string,\n error?: unknown\n): string {\n const errorDetails =\n error === undefined ? undefined : formatDiagnosticErrorDetails(error);\n const details = [file, ...(errorDetails === undefined ? [] : [errorDetails])];\n return createDiagnosticMessage({ whatHappened, fix, details });\n}\n\nfunction withLocation(\n file: string,\n message: string,\n location?: string\n): string {\n return `${file}${location ? ` (${location})` : ''}: ${message}`;\n}\n"],"mappings":";;;;;;;AAoBA,MAAM,WAAW,eAAe,WAAW;;;;;;;;;;AA0E3C,SAAgB,0BACd,KACA,iBACA,kBAAqD,EAAE,EACzB;CAC9B,MAAM,QAA6B;EAAE,SAAS,EAAE;EAAE,SAAS,EAAE;EAAE;CAC/D,MAAM,SAAmB,EAAE;AAE3B,qBAAoB,iBAAiB,OAAO,OAAO;AAEnD,KAAI,gBAAgB,mBAAmB,KAAA,GAAW;EAChD,MAAM,OAAO,wBACX,KACA,gBAAgB,gBAChB,OACD;AACD,MAAI,KAAM,gBAAe,MAAM,OAAO,QAAQ,KAAK;AACnD,SAAO;GAAE,iBAAiB,MAAM;GAAS;GAAQ;;CAGnD,MAAM,aAAa,gBAAgB,KAAK,mBAAmB,OAAO;CAClE,MAAM,aAAa,gBAAgB,KAAK,mBAAmB,OAAO;AAClE,KAAI,cAAc,YAAY;AAC5B,SAAO,KACL,YACE,iDACA,wMACD,CACF;AACD,SAAO;GAAE,iBAAiB,MAAM;GAAS;GAAQ;;AAEnD,KAAI,YAAY;AACd,iBACE,YACA,OACA,QACA,gBAAgB,6BAA6B,MAC9C;AACD,SAAO;GAAE,iBAAiB,MAAM;GAAS;GAAQ;;AAGnD,KAAI,WACF,gBACE,YACA,OACA,QACA,gBAAgB,6BAA6B,MAC9C;AAGH,QAAO;EAAE,iBAAiB,MAAM;EAAS;EAAQ;;;AAInD,SAAS,gBACP,KACA,WACA,QACoB;AACpB,MAAK,MAAM,YAAY,WAAW;EAChC,MAAM,aAAa,kBACjB,KAAK,QAAQ,IAAI,EACjB,KAAK,QAAQ,KAAK,SAAS,EAC3B,OACA,OACD;AACD,MAAI,WAAW,SAAS,OAAQ,QAAO,WAAW;AAClD,MAAI,WAAW,SAAS,UAAW,QAAO,KAAA;;;;AAM9C,SAAS,wBACP,KACA,gBACA,QACoB;AACpB,KAAI,OAAO,mBAAmB,YAAY,CAAC,eAAe,MAAM,EAAE;AAChE,SAAO,KACL,YACE,mCACA,8EACD,CACF;AACD;;CAEF,MAAM,OAAO,KAAK,QAAQ,IAAI;CAC9B,MAAM,YAAY,KAAK,QAAQ,MAAM,eAAe;CACpD,MAAM,oBAAoB,KAAK,SAAS,MAAM,UAAU;AACxD,KACE,kBAAkB,WAAW,KAAK,KAAK,MAAM,IAC7C,sBAAsB,QACtB,KAAK,WAAW,kBAAkB,IAClC,kBAAkB,MAAM,KAAK,IAAI,CAAC,SAAS,eAAe,EAC1D;AACA,SAAO,KACL,YACE,gEACA,6EACD,CACF;AACD;;AAEF,KAAI,CAAC,uBAAuB,IAAI,KAAK,QAAQ,UAAU,CAAC,aAAa,CAAC,EAAE;AACtE,SAAO,KACL,YACE,mDACA,kDACD,CACF;AACD;;CAEF,MAAM,aAAa,kBAAkB,MAAM,WAAW,MAAM,OAAO;AACnE,QAAO,WAAW,SAAS,SAAS,WAAW,OAAO,KAAA;;;AASxD,SAAS,kBACP,MACA,WACA,gBACA,QACsB;CACtB,IAAI,oBAAoB;AACxB,KAAI;EACF,MAAM,QAAQ,GAAG,SAAS,UAAU;AACpC,sBAAoB;AACpB,MAAI,CAAC,MAAM,QAAQ,EAAE;AACnB,UAAO,KACL,qBACE,8DACA,mEACA,UACD,CACF;AACD,UAAO,EAAE,MAAM,WAAW;;AAG5B,KAAG,WAAW,WAAW,GAAG,UAAU,KAAK;EAC3C,MAAM,WAAW,GAAG,aAAa,KAAK;EACtC,MAAM,gBAAgB,GAAG,aAAa,UAAU;EAChD,MAAM,eAAe,KAAK,SAAS,UAAU,cAAc;AAC3D,MACE,aAAa,WAAW,KAAK,KAAK,MAAM,IACxC,iBAAiB,QACjB,KAAK,WAAW,aAAa,IAC7B,aAAa,MAAM,KAAK,IAAI,CAAC,SAAS,eAAe,EACrD;AACA,UAAO,KACL,YACE,uEACA,gFACD,CACF;AACD,UAAO,EAAE,MAAM,WAAW;;AAE5B,SAAO;GAAE,MAAM;GAAQ,MAAM;GAAe;UACrC,OAAO;AACd,MAAI,mBAAmB,MAAM,IAAI,CAAC,kBAAkB,CAAC,kBACnD,QAAO,EAAE,MAAM,WAAW;AAE5B,MAAI,mBAAmB,MAAM,IAAI,kBAAkB,CAAC,kBAClD,QAAO,KACL,qBACE,kDACA,wFACA,WACA,MACD,CACF;MAED,QAAO,KACL,qBACE,8CACA,mEACA,WACA,MACD,CACF;AAEH,SAAO,EAAE,MAAM,WAAW;;;AAI9B,SAAS,mBAAmB,OAAyB;AACnD,QACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAA6B,SAAS;;AAI3C,SAAS,oBACP,OACA,OACA,QACM;AACN,KAAI,UAAU,KAAA,EAAW;AACzB,KAAI,CAAC,SAAS,MAAM,EAAE;AACpB,SAAO,KACL,YACE,uDACA,sGACD,CACF;AACD;;AAGF,MAAK,MAAM,OAAO,OAAO,KAAK,MAAM,CAClC,KAAI,QAAQ,gBAAgB,QAAQ,aAClC,QAAO,KACL,YACE,0CAA0C,IAAI,sBAC9C,uFACD,CACF;AAIL,KAAI,MAAM,eAAe,KAAA,EACvB,KAAI,MAAM,eAAe,cAAc,MAAM,eAAe,WAC1D,QAAO,KACL,YACE,qEACA,wDACD,CACF;KAED,aACE,OACA,cACA,MAAM,YACN,EAAE,MAAM,kBAAkB,EAC1B,OACD;AAIL,KAAI,MAAM,eAAe,KAAA,EACvB,KAAI,CAAC,gBAAgB,MAAM,WAAW,CACpC,QAAO,KACL,YACE,gEACA,4EACD,CACF;KAED,aACE,OACA,cACA,MAAM,YACN,EAAE,MAAM,kBAAkB,EAC1B,OACD;;AAKP,SAAS,eACP,MACA,OACA,QACA,uBACM;CACN,MAAM,MAAM,YAAY,MAAM,QAAQ,sBAAsB;AAC5D,KAAI,CAAC,IAAK;CAEV,MAAM,iCAAiB,IAAI,KAAc;CACzC,MAAM,oCAAoB,IAAI,KAAc;CAC5C,MAAM,oCAAoB,IAAI,KAAc;CAC5C,MAAM,uCAAuB,IAAI,KAAc;CAC/C,MAAM,uCAAuB,IAAI,KAAc;AAE/C,UAAS,KAAK;EACZ,kBAAkB,YAAY;AAC5B,OAAI,WAAW,KAAK,OAAO,UAAU,QAAQ;AAC3C,SAAK,MAAM,iBAAiB,WAAW,IAAI,aAAa,EAAE;KACxD,MAAM,YAAY,cAAc;AAChC,SACE,UAAU,SAAS,sBAClB,UAAU,SAAS,SAAS,eACzB,UAAU,SAAS,OACnB,UAAU,SAAS,WAAW,eAElC;KAEF,MAAM,UAAU,cAAc,MAAM,WAAW,UAAU,MAAM,KAAK;AACpE,SAAI,QAAS,sBAAqB,IAAI,QAAQ;;AAEhD;;GAEF,MAAM,eAAe,WAAW,KAAK,OAAO;AAC5C,OACE,iBAAiB,wBACjB,iBAAiB,yBAEjB;GAEF,MAAM,uBACJ,iBAAiB,2BACb,oBACA;GACN,MAAM,0BACJ,iBAAiB,2BACb,uBACA;AACN,QAAK,MAAM,iBAAiB,WAAW,IAAI,aAAa,EAAE;IACxD,MAAM,YAAY,cAAc;IAChC,MAAM,UAAU,cAAc,MAAM,WAAW,UAAU,MAAM,KAAK;AACpE,QAAI,CAAC,QAAS;AACd,QAAI,UAAU,SAAS,2BACrB,yBAAwB,IAAI,QAAQ;aAEpC,UAAU,SAAS,4BAClB,UAAU,SAAS,sBACjB,UAAU,SAAS,SAAS,eACzB,UAAU,SAAS,OACnB,UAAU,SAAS,WAAW,UAEpC,sBAAqB,IAAI,QAAQ;;;EAIvC,0BAA0B,YAAY;GACpC,MAAM,YAAY,WAAW,KAAK;AAClC,OACE,UAAU,SAAS,+BACnB,UAAU,WAAW,SAAS,mBAC7B,UAAU,WAAW,UAAU,wBAC9B,UAAU,WAAW,UAAU,yBAEjC;GAEF,MAAM,UAAU,WAAW,MAAM,WAAW,WAAW,KAAK,GAAG,KAAK;AACpE,OAAI,CAAC,QAAS;AACd,OAAI,UAAU,WAAW,UAAU,yBACjC,sBAAqB,IAAI,QAAQ;OAEjC,mBAAkB,IAAI,QAAQ;;EAGlC,mBAAmB,cAAc;GAC/B,MAAM,iBAAiB,wBACrB,aAAa,KAAK,MAClB,qBACD;GACD,MAAM,iBAAiB,wBACrB,aAAa,KAAK,MAClB,yBACD;GACD,MAAM,cAAc,kBAAkB;AACtC,OAAI,CAAC,YAAa;GAClB,MAAM,uBAAuB,iBACzB,oBACA;GACJ,MAAM,0BAA0B,iBAC5B,uBACA;AACJ,OAAI,aAAa,KAAK,GAAG,SAAS,cAAc;IAC9C,MAAM,UAAU,aAAa,MAAM,WACjC,aAAa,KAAK,GAAG,KACtB;AACD,QAAI,CAAC,QAAS;AACd,QAAI,gBAAgB,YAAa,yBAAwB,IAAI,QAAQ;QAChE,sBAAqB,IAAI,QAAQ;AACtC;;AAEF,OACE,gBAAgB,eAChB,aAAa,KAAK,GAAG,SAAS,gBAE9B;AAEF,QAAK,MAAM,YAAY,aAAa,KAAK,GAAG,YAAY;AACtD,QACE,SAAS,SAAS,oBAClB,gBAAgB,SAAS,KAAK,UAE9B;IAEF,MAAM,YAAY,sBAAsB,SAAS,MAAM;IACvD,MAAM,UAAU,YACZ,aAAa,MAAM,WAAW,UAAU,GACxC,KAAA;AACJ,QAAI,QAAS,sBAAqB,IAAI,QAAQ;;;EAGnD,CAAC;CAEF,MAAM,eAAe,uBAAuB,KAAK,MAAM,OAAO;AAC9D,KAAI,CAAC,aAAc;CACnB,MAAM,kBAAkB,uBAAuB,IAAI;CACnD,MAAM,aAAa,wBACjB,aAAa,MACb,aAAa,OACb,kBACC,QAAQ,UACP,wBAAwB,QAAQ,OAAO,sBAAsB,KAAA,EAAU,kBACzE,IAAI,KAAK,CACV;AACD,KAAI,CAAC,WAAW,IAAI;AAClB,SAAO,KAAK,mBAAmB,MAAM,WAAW,KAAK,CAAC;AACtD;;CAGF,MAAM,eAAe,oBACnB,WAAW,MAAM,MACjB,WAAW,MAAM,uBACjB,IAAI,KAAK,CACV;AACD,KAAI,CAAC,aAAa,IAAI;AACpB,SAAO,KAAK,mBAAmB,MAAM,aAAa,KAAK,CAAC;AACxD;;CAEF,MAAM,UAAU,aAAa,MAAM,QAAQ,IAAI,UAAU;AACzD,KAAI,CAAC,QAAS;CAEd,MAAM,gBAAmC;EACvC,cAAc;EACd;EACA;EACA,oBAAoB,CAAC,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,SAC3D,YACC,QAAQ,eACL,KAAK,cAAc,UAAU,KAAK,MAAM,CACxC,QAAQ,aAAiC,aAAa,KAAK,CACjE;EACF;CACD,MAAM,QAA4B,EAAE;CACpC,MAAM,aAAa,4BACjB,QAAQ,MACR,QAAQ,OACR,eACA,uBACA,IAAI,KAAK,CACV;AACD,KAAI,YAAY;AACd,SAAO,KAAK,mBAAmB,MAAM,WAAW,CAAC;AACjD;;AAEF,KAAI,MAAM,SAAS,GAAG;AACpB,SAAO,KAAK,mBAAmB,MAAM,MAAM,GAAI,KAAK,CAAC;AACrD;;CAEF,MAAM,OAAO,MAAM;AACnB,KAAI,MAAM;EACR,MAAM,WAAW,KAAK,KAAK,UAAU;AACrC,MACE,UAAU,SAAS,mBACnB,UAAU,SAAS,uBACnB;AACA,UAAO,KAAK,mBAAmB,MAAM,SAAS,CAAC;AAC/C;;AAEF,MAAI,UAAU;AACZ,2BAAwB,UAAU,KAAK,OAAO,MAAM,OAAO;AAC3D,6BACE,UACA,KAAK,OACL,CAAC,YAAY,kBAAkB,EAC/B,MACA,MACA,OACA,OACD;;;CAIL,MAAM,mBAAsC;EAC1C,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,oBAAoB,CAAC,GAAG,mBAAmB,GAAG,qBAAqB,CAAC,SACjE,YACC,QAAQ,eACL,KAAK,cAAc,UAAU,KAAK,MAAM,CACxC,QAAQ,aAAiC,aAAa,KAAK,CACjE;EACF;CACD,MAAM,WAA+B,EAAE;CACvC,MAAM,gBAAgB,4BACpB,QAAQ,MACR,QAAQ,OACR,kBACA,0BACA,IAAI,KAAK,CACV;AACD,KAAI,eAAe;AACjB,SAAO,KAAK,yBAAyB,MAAM,cAAc,CAAC;AAC1D;;AAEF,KAAI,SAAS,SAAS,GAAG;AACvB,SAAO,KAAK,yBAAyB,MAAM,SAAS,GAAI,KAAK,CAAC;AAC9D;;AAEF,KAAI,SAAS,GAAI,yBAAwB,SAAS,IAAI,MAAM,OAAO;;;AAIrE,SAAS,wBACP,MACA,MACA,QACM;CACN,MAAM,WAAW,KAAK,KAAK,UAAU;AACrC,KAAI,CAAC,SAAU;AACf,KACE,SAAS,SAAS,mBAClB,SAAS,SAAS,uBAClB;AACA,SAAO,KAAK,yBAAyB,MAAM,SAAS,CAAC;AACrD;;CAEF,MAAM,UAAU,oBAAoB,UAAU,KAAK,uBAAO,IAAI,KAAK,CAAC;AACpE,KAAI,CAAC,QAAQ,IAAI;AACf,SAAO,KAAK,yBAAyB,MAAM,QAAQ,KAAK,CAAC;AACzD;;AAGF,MAAK,MAAM,CAAC,MAAM,UAAU,QAAQ,MAAM,SAAS;EACjD,IAAI,YAAY;AAChB,MAAI,SAAS,WAGX,aACE,qBAAqB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK,KAAA;WACtD,SAAS,cAClB,aACE,qBAAqB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK;WACtD,SAAS,uBAAuB,SAAS,aAClD,aACE,qBAAqB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK;WACtD,SAAS,cAClB,aACE,qBAAqB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK;WACtD,SAAS,SAClB,aACE,oBAAoB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC,KAAK;WACrD,SAAS,sBAClB,aAAY,8BACV,MAAM,MACN,MAAM,uBACN,IAAI,KAAK,CACV;WACQ,SAAS,eAClB,aAAY,uBAAuB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC;WAC7D,SAAS,mBAAmB;GACrC,MAAM,WAAW,oBAAoB,MAAM,MAAM,MAAM,uBAAO,IAAI,KAAK,CAAC;AACxE,eAAY,SAAS,MAAM,SAAS,MAAM,QAAQ,SAAS;;AAE7D,MAAI,UAAW;AACf,SAAO,KACL,mBACE,MACA,MAAM,MACN,oDAAoD,KAAK,IACzD,0HACD,CACF;;;;AAKL,SAAS,qBACP,OACA,OACA,MACqB;CACrB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,iBAAkB,QAAO,KAAK;AAChD,KAAI,KAAK,SAAS,aAAc,QAAO,KAAA;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,IAAI,KAAK,IAAI,QAAQ,CACxE;CAEF,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D;CAEF,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AACrB,QAAO,qBAAqB,YAAY,MAAM,QAAQ,KAAK,OAAO,SAAS;;;AAI7E,SAAS,8BACP,OACA,OACA,MACS;CACT,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,kBAChB,QACE,KAAK,SAAS,WAAW,KACzB,KAAK,SAAS,IAAI,SAAS,mBAC3B,KAAK,SAAS,GAAG,UAAU;AAG/B,KAAI,KAAK,SAAS,aAAc,QAAO;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,IAAI,KAAK,IAAI,QAAQ,CACxE,QAAO;CAET,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D,QAAO;CAET,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AACrB,QAAO,8BACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACD;;;AAIH,SAAS,uBACP,OACA,OACA,MACS;CACT,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,kBAAmB,QAAO,KAAK,SAAS,WAAW;AACrE,KAAI,KAAK,SAAS,aAAc,QAAO;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,IAAI,KAAK,IAAI,QAAQ,CACxE,QAAO;CAET,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D,QAAO;CAET,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AACrB,QAAO,uBAAuB,YAAY,MAAM,QAAQ,KAAK,OAAO,SAAS;;;;;;AAO/E,SAAS,wBACP,MACA,OACA,MACA,QACM;CACN,MAAM,aAAa,oBAAoB,MAAM,uBAAO,IAAI,KAAK,CAAC;AAC9D,KAAI,CAAC,WAAW,GAAI;CACpB,MAAM,WAAW,WAAW,MAAM,QAAQ,IAAI,WAAW;AACzD,KAAI,CAAC,SAAU;AACf,QAAO,KACL,mBACE,MACA,SAAS,MACT,2DACA,kGACD,CACF;;AAGH,SAAS,eACP,MACA,OACA,QACA,2BACM;CACN,MAAM,MAAM,YAAY,MAAM,QAAQ,0BAA0B;AAChE,KAAI,CAAC,IAAK;CAEV,MAAM,2CAA2B,IAAI,KAAc;AACnD,UAAS,KAAK,EACZ,kBAAkB,YAAY;AAC5B,MACE,WAAW,KAAK,OAAO,UAAU,iBACjC,WAAW,KAAK,OAAO,UAAU,UACjC,WAAW,KAAK,OAAO,UAAU,WAEjC;AAEF,OAAK,MAAM,iBAAiB,WAAW,IAAI,aAAa,EAAE;GACxD,MAAM,YAAY,cAAc;AAChC,OACE,UAAU,SAAS,sBAClB,UAAU,SAAS,SAAS,eACzB,UAAU,SAAS,OACnB,UAAU,SAAS,WAAW,mBAElC;GAEF,MAAM,UAAU,cAAc,MAAM,WAAW,UAAU,MAAM,KAAK;AACpE,OAAI,QAAS,0BAAyB,IAAI,QAAQ;;IAGvD,CAAC;CAEF,MAAM,eAAe,uBAAuB,KAAK,MAAM,OAAO;AAC9D,KAAI,CAAC,aAAc;CACnB,MAAM,aAAa,wBACjB,aAAa,MACb,aAAa,OACb,uBAAuB,IAAI,GAC1B,QAAQ,UACP,wBACE,QACA,OACA,0BACA,mBACD,kBACH,IAAI,KAAK,CACV;AACD,KAAI,CAAC,WAAW,IAAI;AAClB,SAAO,KAAK,mBAAmB,MAAM,WAAW,KAAK,CAAC;AACtD;;CAEF,MAAM,eAAe,oBACnB,WAAW,MAAM,MACjB,WAAW,MAAM,uBACjB,IAAI,KAAK,CACV;AACD,KAAI,CAAC,aAAa,IAAI;AACpB,SAAO,KAAK,mBAAmB,MAAM,aAAa,KAAK,CAAC;AACxD;;CAEF,MAAM,eAAe,aAAa,MAAM,QAAQ,IAAI,UAAU;AAC9D,KACE,gBACA,CAAC,6BAA6B,aAAa,MAAM,aAAa,MAAM,EACpE;AACA,SAAO,KACL,mBACE,MACA,aAAa,MACb,uEACA,6HACD,CACF;AACD;;CAEF,MAAM,0BAA0B,4BAC5B,KAAA,IACA,gCAAgC,aAAa,MAAM;AACvD,KAAI,yBAAyB;AAC3B,SAAO,KACL,mBACE,MACA,yBACA,sFACA,wJACD,CACF;AACD;;AAEF,2BACE,WAAW,MAAM,MACjB,WAAW,MAAM,OACjB,CAAC,OAAO,kBAAkB,EAC1B,MACA,MACA,OACA,OACD;;;AAIH,SAAS,gCACP,QACoB;CACpB,MAAM,SAAS,OAAO,QAAQ,IAAI,SAAS;AAC3C,KAAI,QAAQ;EACV,MAAM,QAAQ,oBAAoB,OAAO,MAAM,OAAO,uBAAO,IAAI,KAAK,CAAC;EACvE,MAAM,aAAa,QACf,KAAK,MAAM,UAAU,MAAM,WAAW,MAAM,IAAI,CAAC,CAAC,QAAQ,QAAQ,GAAG,IACrE,MACA,KAAA;AACJ,MAAI,CAAC,cAAc,CAAC;GAAC;GAAK;GAAO;GAAM,CAAC,SAAS,WAAW,CAC1D,QAAO,OAAO;;CAIlB,MAAM,mBAAmB,OAAO,QAAQ,IAAI,MAAM;AAClD,KAAI,kBAAkB;EACpB,MAAM,WAAW,oBACf,iBAAiB,MACjB,iBAAiB,uBACjB,IAAI,KAAK,CACV;AACD,MAAI,CAAC,SAAS,MAAM,SAAS,MAAM,QAAQ,OAAO,EAChD,QAAO,iBAAiB;;;;AAO9B,SAAS,6BAA6B,OAAe,OAAuB;CAC1E,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,cAAe,QAAO;AACxC,KAAI,KAAK,SAAS,kBAAmB,QAAO,KAAK,SAAS,WAAW;AACrE,KAAI,KAAK,SAAS,aAAc,QAAO;AACvC,KAAI,KAAK,SAAS,eAAe,CAAC,MAAM,WAAW,KAAK,KAAK,CAAE,QAAO;CACtE,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;CAC3C,MAAM,cAAc,SAAS,KAAK;AAClC,QAAO,CAAC,EACN,SAAS,YACT,CAAC,mBAAmB,QAAQ,IAC5B,aAAa,SAAS,wBACtB,YAAY,QACZ,6BAA6B,YAAY,MAAM,QAAQ,KAAK,MAAM;;;AAKtE,SAAS,uBACP,KACA,MACA,QACyB;CACzB,MAAM,aAA4B,EAAE;CACpC,MAAM,kCAAkB,IAAI,KAGzB;AAEH,UAAS,KAAK;EACZ,yBAAyB,YAAY;AACnC,cAAW,KAAK;IACd,MAAM,WAAW,KAAK;IACtB,OAAO,WAAW;IACnB,CAAC;;EAEJ,qBAAqB,gBAAgB;AACnC,OACE,eAAe,KAAK,aAAa,OACjC,eAAe,mBAAmB,IAClC,CAAC,eAAe,WAAW,uBAAuB,IAClD,CAAC,eAAe,WAAW,YAAY,WAAW,CAElD;GAEF,MAAM,OAAO,6BACX,eAAe,KAAK,MACpB,eAAe,MAChB;AACD,OAAI,CAAC,KAAM;GACX,MAAM,UAAU,gBAAgB,IAAI,KAAK,IAAI,EAAE;AAC/C,WAAQ,KAAK;IACX,MAAM,eAAe,KAAK;IAC1B,OAAO,eAAe;IACvB,CAAC;AACF,mBAAgB,IAAI,MAAM,QAAQ;;EAErC,CAAC;CAEF,MAAM,gBAAgB,CAAC,GAAG,gBAAgB,MAAM,CAAC;AACjD,KACE,WAAW,SAAS,KACnB,WAAW,SAAS,KAAK,cAAc,SAAS,KACjD,cAAc,SAAS,GACvB;EACA,MAAM,OACJ,WAAW,IAAI,QACf,gBAAgB,IAAI,cAAc,GAAI,GAAG,IAAI,QAC7C,WAAW,IAAI,QACf,IAAI;AACN,SAAO,KAAK,mBAAmB,MAAM,KAAK,CAAC;AAC3C;;AAEF,KAAI,WAAW,GAAI,QAAO,WAAW;CACrC,MAAM,WAAW,gBAAgB,IAAI,cAAc,GAAI;AACvD,QAAO,WAAW,SAAS,SAAS;;;AAItC,SAAS,uBAAuB,KAA6C;CAC3E,MAAM,yBAAS,IAAI,KAAgC;AACnD,UAAS,KAAK,EACZ,gBAAgB,YAAY;AAC1B,MAAI,CAAC,WAAW,KAAK,SAAU;EAC/B,MAAM,eAAe,WAAW,mBAAmB;AACnD,MAAI,CAAC,aAAc;EACnB,MAAM,UAAU,OAAO,IAAI,aAAa,KAAK,IAAI,EAAE;AACnD,UAAQ,KAAK;GAAE,MAAM,WAAW,KAAK;GAAU,OAAO,WAAW;GAAO,CAAC;AACzE,SAAO,IAAI,aAAa,MAAM,QAAQ;IAEzC,CAAC;AACF,QAAO;;;AAIT,SAAS,wBACP,OACA,OACA,iBACA,eACA,MACwB;CACxB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,IAAI,KAAK,CAAE,QAAO;EAAE,IAAI;EAAO;EAAM;CAC9C,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,KAAK;AAElB,KAAI,KAAK,SAAS,mBAChB,QAAO;EAAE,IAAI;EAAM,OAAO;GAAE;GAAM;GAAO;EAAE;AAE7C,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,MAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,CACnD,QAAO;GAAE,IAAI;GAAO;GAAM;AAE5B,MAAI,QAAQ,KAAK,uBAAuB,CACtC,QAAO,wBACL,QAAQ,KAAK,MACb,QAAQ,KAAK,OACb,iBACA,eACA,SACD;EAEH,MAAM,cAAc,QAAQ,KAAK;AACjC,SAAO,YAAY,SAAS,wBAAwB,YAAY,OAC5D,wBACE,YAAY,MACZ,QAAQ,KAAK,OACb,iBACA,eACA,SACD,GACD;GAAE,IAAI;GAAO;GAAM;;AAEzB,KACE,KAAK,SAAS,oBACd,KAAK,SAAS,0BACd;AAEA,MADe,cAAc,KAAK,QAAQ,MAChC,KAAK,SAAU,QAAO;GAAE,IAAI;GAAO,MAAM,KAAK;GAAQ;EAChE,MAAM,WAAW,KAAK,UAAU;AAChC,SAAO,YACL,SAAS,SAAS,mBAClB,SAAS,SAAS,wBAChB,wBACE,UACA,OACA,iBACA,eACA,SACD,GACD;GAAE,IAAI;GAAO;GAAM;;AAEzB,KACE,KAAK,SAAS,6BACd,KAAK,SAAS,wBACd,KAAK,SAAS,uBACd;AACA,MACE,KAAK,SAAS,6BACd,KAAK,KAAK,SAAS,iBAEnB,QAAO,wBACL,KAAK,MACL,OACA,iBACA,eACA,SACD;EAEH,MAAM,UAAU,gBAAgB,IAAI,KAAK,IAAI,EAAE;AAC/C,SAAO,QAAQ,WAAW,IACtB,wBACE,QAAQ,GAAI,MACZ,QAAQ,GAAI,OACZ,iBACA,eACA,SACD,GACD;GAAE,IAAI;GAAO;GAAM;;AAEzB,KAAI,KAAK,SAAS,yBAAyB;EACzC,MAAM,YAAY,wBAAwB,KAAK,MAAM,uBAAO,IAAI,KAAK,CAAC;AACtE,SAAO,cAAc,KAAA,IACjB;GAAE,IAAI;GAAO;GAAM,GACnB,wBACE,YAAY,KAAK,aAAa,KAAK,WACnC,OACA,iBACA,eACA,SACD;;AAEP,KAAI,KAAK,SAAS,sBAAsB;EACtC,MAAM,OAAO,KAAK,YAAY,KAAK,YAAY,SAAS;AACxD,SAAO,OACH,wBACE,MACA,OACA,iBACA,eACA,SACD,GACD;GAAE,IAAI;GAAO;GAAM;;AAEzB,KAAI,KAAK,SAAS,kBAChB,QAAO,wBACL,KAAK,UACL,OACA,iBACA,eACA,SACD;AAEH,QAAO;EAAE,IAAI;EAAO;EAAM;;;AAI5B,SAAS,wBACP,OACA,OACA,eACA,YACA,uBAAqB,IAAI,KAAK,EACN;CACxB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,aAAc,QAAO,KAAA;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,QAAS,QAAO,KAAK,SAAS,aAAa,WAAW,KAAA;AAC3D,KAAI,cAAc,IAAI,QAAQ,CAAE,QAAO;AACvC,KAAI,KAAK,IAAI,QAAQ,CAAE,QAAO,KAAA;CAC9B,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D;CAEF,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;CACrB,MAAM,eAAe,wBACnB,YAAY,MACZ,QAAQ,KAAK,OACb,eACA,YACA,SACD;AACD,QAAO,CAAC,QAAQ,YAAY,eAAe,YAAY;;;AAIzD,SAAS,4BACP,OACA,OACA,SACA,OACA,MACoB;CACpB,MAAM,OAAO,iBAAiB,MAAM;AAEpC,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,QAAQ,sBACZ,MACA,OACA,QAAQ,gBACR,QAAQ,mBACR,QAAQ,8BACR,IAAI,KAAK,CACV;AACD,MAAI,UAAU,aAAa,UAAU,UAAW,QAAO;EACvD,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,MAAI,CAAC,WAAW,KAAK,IAAI,QAAQ,CAC/B,QAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;EAEN,MAAM,cAAc,QAAQ,KAAK;AACjC,MAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D,QAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;AAEN,MAAI,mBAAmB,QAAQ,CAAE,QAAO;AACxC,MAAI,CAAC,QAAQ,SACX,QAAO,sBACL,YAAY,MACZ,QAAQ,KAAK,OACb,yBACA,IAAI,KAAK,CACV,GACG,OACA,KAAA;EAEN,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,WAAS,IAAI,QAAQ;AACrB,SAAO,4BACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACA,OACA,SACD;;AAEH,KAAI,KAAK,SAAS,mBAAmB;AACnC,OAAK,MAAM,WAAW,KAAK,UAAU;AACnC,OAAI,CAAC,QAAS;GACd,MAAM,aAAa,4BACjB,QAAQ,SAAS,kBAAkB,QAAQ,WAAW,SACtD,OACA,SACA,OACA,KACD;AACD,OAAI,WAAY,QAAO;;AAEzB;;AAEF,KACE,KAAK,SAAS,oBACd,KAAK,SAAS,0BACd;EACA,MAAM,QAAQ,sBACZ,KAAK,QACL,OACA,QAAQ,gBACR,QAAQ,mBACR,QAAQ,8BACR,IAAI,KAAK,CACV;AACD,MAAI,UAAU,UAAW,QAAO,KAAK;AACrC,MAAI,UAAU,WAAW;AACvB,SAAM,KAAK;IAAE;IAAM;IAAO,CAAC;AAC3B;;AAEF,SAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;;AAEN,KAAI,KAAK,SAAS,yBAAyB;EACzC,MAAM,YAAY,wBAAwB,KAAK,MAAM,uBAAO,IAAI,KAAK,CAAC;AACtE,MAAI,cAAc,KAAA,EAChB,QAAO,4BACL,YAAY,KAAK,aAAa,KAAK,WACnC,OACA,SACA,OACA,KACD;AAEH,SAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;;AAEN,KAAI,KAAK,SAAS,qBAAqB;EACrC,MAAM,OAAO,wBAAwB,KAAK,MAAM,uBAAO,IAAI,KAAK,CAAC;AACjE,MAAI,SAAS,KAAA,GAAW;GACtB,MAAM,WACJ,KAAK,aAAa,OACd,OACE,KAAK,QACL,KAAK,OACP,KAAK,aAAa,OAChB,OACE,KAAK,OACL,KAAK,QACP,KAAA;AACR,OAAI,SACF,QAAO,4BACL,UACA,OACA,SACA,OACA,KACD;;AAGL,SAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;;AAEN,KAAI,KAAK,SAAS,sBAAsB;EACtC,MAAM,OAAO,KAAK,YAAY,KAAK,YAAY,SAAS;AACxD,SAAO,OACH,4BAA4B,MAAM,OAAO,SAAS,OAAO,KAAK,GAC9D,KAAA;;AAEN,QAAO,sBAAsB,MAAM,OAAO,yBAAS,IAAI,KAAK,CAAC,GACzD,OACA,KAAA;;;AAIN,SAAS,sBACP,OACA,OACA,SACA,MACS;CACT,MAAM,OAAO,iBAAiB,MAAM;CACpC,MAAM,QAAQ,KAAK;CACnB,MAAM,MAAM,KAAK;AACjB,KACE,OAAO,UAAU,YACjB,OAAO,QAAQ,YACf,QAAQ,mBAAmB,MACxB,aAAa,YAAY,SAAS,YAAY,IAChD,CAED,QAAO;CAET,MAAM,SACJ,KAAK,SAAS,eACV,OACA,KAAK,SAAS,oBAAoB,KAAK,SAAS,2BAC9C,iBAAiB,KAAK,OAAO,GAC7B,KAAA;AACR,KAAI,QAAQ,SAAS,aAAc,QAAO;CAC1C,MAAM,UAAU,MAAM,WAAW,OAAO,KAAK;AAC7C,KAAI,CAAC,QAAS,QAAO;AACrB,KACE,QAAQ,eAAe,IAAI,QAAQ,IACnC,QAAQ,kBAAkB,IAAI,QAAQ,CAEtC,QAAO;AAET,KAAI,KAAK,IAAI,QAAQ,CAAE,QAAO;CAC9B,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;CACrB,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,YAAY,KAC3D,QAAO,sBACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACA,SACD;CAEH,MAAM,mBAAmB,YAAY;CACrC,MAAM,iBAAiB,YAAY;AACnC,QACE,OAAO,qBAAqB,YAC5B,OAAO,mBAAmB,YAC1B,QAAQ,mBAAmB,MACxB,aAAa,YAAY,oBAAoB,YAAY,eAC3D;;;AAKL,SAAS,wBACP,OACA,OACA,MACqB;CACrB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,iBAAkB,QAAO,KAAK;AAChD,KAAI,KAAK,SAAS,cAAe,QAAO;AACxC,KAAI,KAAK,SAAS,iBAAkB,QAAO,CAAC,CAAC,KAAK;AAClD,KAAI,KAAK,SAAS,gBAAiB,QAAO,KAAK,UAAU;AACzD,KAAI,KAAK,SAAS,gBAAiB,QAAO,KAAK,MAAM,SAAS;AAC9D,KAAI,KAAK,SAAS,qBAAqB,KAAK,aAAa,KAAK;EAC5D,MAAM,QAAQ,wBAAwB,KAAK,UAAU,OAAO,KAAK;AACjE,SAAO,UAAU,KAAA,IAAY,KAAA,IAAY,CAAC;;AAE5C,KAAI,KAAK,SAAS,aAAc,QAAO,KAAA;AACvC,KAAI,KAAK,SAAS,eAAe,CAAC,MAAM,WAAW,KAAK,KAAK,CAAE,QAAO;CACtE,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,KAAI,CAAC,SAAS,YAAY,mBAAmB,QAAQ,IAAI,KAAK,IAAI,QAAQ,CACxE;CAEF,MAAM,cAAc,QAAQ,KAAK;AACjC,KAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D;CAEF,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AACrB,QAAO,wBACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACD;;AAGH,SAAS,0BACP,MACA,OACA,MACA,MACA,mBACA,OACA,QACM;CACN,MAAM,aAAa,oBAAoB,MAAM,uBAAO,IAAI,KAAK,CAAC;AAC9D,KAAI,CAAC,WAAW,IAAI;AAClB,MAAI,kBACF,QAAO,KAAK,mBAAmB,MAAM,WAAW,KAAK,CAAC;AACxD;;CAGF,MAAM,cAAc,WAAW,MAAM,QAAQ,IAAI,KAAK,GAAG;AACzD,KAAI,CAAC,YAAa;CAClB,MAAM,eAAe,oBACnB,YAAY,MACZ,YAAY,uBACZ,IAAI,KAAK,CACV;AACD,KAAI,CAAC,aAAa,IAAI;AACpB,SAAO,KAAK,mBAAmB,MAAM,aAAa,KAAK,CAAC;AACxD;;CAGF,MAAM,gBAAgB,aAAa,MAAM,QAAQ,IAAI,KAAK,GAAG;AAC7D,KAAI,CAAC,cAAe;CACpB,MAAM,iBAAiB,oBACrB,cAAc,MACd,cAAc,uBACd,IAAI,KAAK,CACV;AACD,KAAI,CAAC,eAAe,IAAI;AACtB,SAAO,KAAK,mBAAmB,MAAM,eAAe,KAAK,CAAC;AAC1D;;AAGF,2BAA0B,eAAe,OAAO,MAAM,OAAO,OAAO;;AAGtE,SAAS,0BACP,QACA,MACA,OACA,QACM;AACN,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAChC,KAAI,QAAQ,gBAAgB,QAAQ,aAClC,QAAO,KACL,mBACE,MACA,MAAM,MACN,0CAA0C,IAAI,IAC9C,8FACD,CACF;CAIL,MAAM,kBAAkB,OAAO,QAAQ,IAAI,aAAa;AACxD,KAAI,iBAAiB;EACnB,MAAM,QAAQ,oBACZ,gBAAgB,MAChB,gBAAgB,uBAChB,IAAI,KAAK,CACV;AACD,MAAI,UAAU,cAAc,UAAU,WACpC,QAAO,KAAK,mBAAmB,MAAM,gBAAgB,KAAK,CAAC;MAE3D,aACE,OACA,cACA,OACA;GAAE;GAAM,MAAM,gBAAgB;GAAM,EACpC,OACD;;CAIL,MAAM,kBAAkB,OAAO,QAAQ,IAAI,aAAa;AACxD,KAAI,iBAAiB;EACnB,MAAM,QAAQ,wBACZ,gBAAgB,MAChB,gBAAgB,uBAChB,IAAI,KAAK,CACV;AACD,MAAI,CAAC,MACH,QAAO,KAAK,mBAAmB,MAAM,gBAAgB,KAAK,CAAC;MAE3D,aACE,OACA,cACA,OACA;GAAE;GAAM,MAAM,gBAAgB;GAAM,EACpC,OACD;;;AAKP,SAAS,oBACP,OACA,OACA,MACkB;CAClB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,IAAI,KAAK,CAAE,QAAO;EAAE,IAAI;EAAO;EAAM;AAC9C,MAAK,IAAI,KAAK;AAEd,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;EAC3C,MAAM,cAAc,SAAS,KAAK;AAClC,MACE,CAAC,SAAS,YACV,mBAAmB,QAAQ,IAC3B,aAAa,SAAS,wBACtB,CAAC,YAAY,KAEb,QAAO;GAAE,IAAI;GAAO;GAAM;AAE5B,SAAO,oBAAoB,YAAY,MAAM,QAAQ,KAAK,OAAO,KAAK;;AAExE,KAAI,KAAK,SAAS,mBAAoB,QAAO;EAAE,IAAI;EAAO;EAAM;CAEhE,MAAM,0BAAU,IAAI,KAA0B;AAC9C,MAAK,MAAM,YAAY,KAAK,YAAY;AACtC,MAAI,SAAS,SAAS,iBAAiB;GACrC,MAAM,SAAS,oBAAoB,SAAS,UAAU,OAAO,KAAK;AAClE,OAAI,CAAC,OAAO,GAAI,QAAO;IAAE,IAAI;IAAO,MAAM,OAAO;IAAM;AACvD,QAAK,MAAM,CAAC,KAAK,UAAU,OAAO,MAAM,QAAS,SAAQ,IAAI,KAAK,MAAM;AACxE;;EAEF,MAAM,MAAM,gBAAgB,SAAS;AACrC,MAAI,CAAC,IAAK,QAAO;GAAE,IAAI;GAAO,MAAM;GAAU;AAC9C,MAAI,SAAS,SAAS,kBAAkB;AACtC,WAAQ,IAAI,KAAK;IAAE,MAAM;IAAU;IAAO,CAAC;AAC3C;;AAEF,UAAQ,IAAI,KAAK;GAAE,MAAM,SAAS;GAAO;GAAO,CAAC;;AAEnD,QAAO;EAAE,IAAI;EAAM,OAAO,EAAE,SAAS;EAAE;;AAGzC,SAAS,oBACP,OACA,OACA,MACoB;CACpB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,IAAI,KAAK,CAAE,QAAO,KAAA;AAC3B,MAAK,IAAI,KAAK;AACd,KAAI,KAAK,SAAS,gBAAiB,QAAO,KAAK;AAC/C,KAAI,KAAK,SAAS,qBAAqB,KAAK,YAAY,WAAW,EACjE,QAAO,KAAK,OACT,KAAK,UAAU,MAAM,MAAM,UAAU,MAAM,MAAM,IAAI,CACrD,KAAK,GAAG;AAEb,KAAI,KAAK,SAAS,aAAc,QAAO,KAAA;CACvC,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;CAC3C,MAAM,cAAc,SAAS,KAAK;AAClC,QAAO,SAAS,YACd,CAAC,mBAAmB,QAAQ,IAC5B,aAAa,SAAS,wBACtB,YAAY,OACV,oBAAoB,YAAY,MAAM,QAAQ,KAAK,OAAO,KAAK,GAC/D,KAAA;;AAGN,SAAS,wBACP,OACA,OACA,MAC8B;CAC9B,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,IAAI,KAAK,CAAE,QAAO,KAAA;AAC3B,MAAK,IAAI,KAAK;AACd,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;EAC3C,MAAM,cAAc,SAAS,KAAK;AAClC,SAAO,SAAS,YACd,CAAC,mBAAmB,QAAQ,IAC5B,aAAa,SAAS,wBACtB,YAAY,OACV,wBAAwB,YAAY,MAAM,QAAQ,KAAK,OAAO,KAAK,GACnE,KAAA;;AAEN,KAAI,KAAK,SAAS,qBAAqB,KAAK,SAAS,WAAW,EAC9D;CAEF,MAAM,SAAS,KAAK,SAAS,KAAK,YAChC,WAAW,QAAQ,SAAS,kBACxB,oBAAoB,SAAS,uBAAO,IAAI,KAAK,CAAC,GAC9C,KAAA,EACL;AACD,QAAO,gBAAgB,OAAO,GAAG,SAAS,KAAA;;AAG5C,SAAS,iBAAiB,OAAuB;CAC/C,IAAI,OAAO;AACX,QACE,KAAK,SAAS,oBACd,KAAK,SAAS,2BACd,KAAK,SAAS,qBACd,KAAK,SAAS,yBACd,KAAK,SAAS,wBACd,KAAK,SAAS,0BAEd,QAAO,KAAK;AAEd,QAAO;;AAGT,SAAS,gBACP,UACoB;AACpB,KAAI,CAAC,SAAS,YAAY,SAAS,IAAI,SAAS,aAC9C,QAAO,SAAS,IAAI;AAEtB,KAAI,SAAS,IAAI,SAAS,gBAAiB,QAAO,SAAS,IAAI;;AAIjE,SAAS,wBACP,OACA,cACqC;AACrC,KAAI,CAAC,MAAO,QAAO,KAAA;CACnB,MAAM,OAAO,iBAAiB,MAAM;AACpC,KACE,KAAK,SAAS,oBACd,KAAK,OAAO,SAAS,gBACrB,KAAK,OAAO,SAAS,aACrB,KAAK,UAAU,IAAI,SAAS,mBAC5B,KAAK,UAAU,GAAG,UAAU,aAE5B,QAAO;AAET,MACG,KAAK,SAAS,sBACb,KAAK,SAAS,+BAChB,gBAAgB,KAAK,CAErB,QAAO,wBAAwB,KAAK,QAAwB,aAAa,GACrE,YACA,KAAA;;;AAMR,SAAS,sBACP,OACA,OACA,gBACA,mBACA,cACA,MACiD;CACjD,MAAM,OAAO,iBAAiB,MAAM;CACpC,MAAM,cACJ,KAAK,SAAS,oBACd,KAAK,SAAS,sBACd,KAAK,SAAS,6BACV,wBAAwB,MAAM,aAAa,GAC3C,KAAA;AACN,KAAI,YAAa,QAAO;AAExB,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,MAAI,CAAC,QAAS,QAAO,KAAA;AACrB,MAAI,eAAe,IAAI,QAAQ,CAAE,QAAO;AACxC,MAAI,kBAAkB,IAAI,QAAQ,CAAE,QAAO;AAC3C,MAAI,KAAK,IAAI,QAAQ,CAAE,QAAO,KAAA;EAC9B,MAAM,cAAc,QAAQ,KAAK;AACjC,MAAI,YAAY,SAAS,wBAAwB,CAAC,YAAY,KAC5D;EAEF,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,WAAS,IAAI,QAAQ;EACrB,MAAM,eAAe,sBACnB,YAAY,MACZ,QAAQ,KAAK,OACb,gBACA,mBACA,cACA,SACD;AACD,SAAO,CAAC,QAAQ,YAAY,eAAe,YAAY;;AAEzD,MACG,KAAK,SAAS,sBACb,KAAK,SAAS,+BAChB,gBAAgB,KAAK,EACrB;EACA,MAAM,cAAc,sBAClB,KAAK,QACL,OACA,gBACA,mBACA,cACA,KACD;AACD,MAAI,gBAAgB,UAAW,QAAO;AACtC,MAAI,gBAAgB,YAAa,QAAO;;;;AAM5C,SAAS,gBACP,MACS;AACT,QACG,CAAC,KAAK,YACL,KAAK,SAAS,SAAS,gBACvB,KAAK,SAAS,SAAS,aACxB,KAAK,YACJ,KAAK,SAAS,SAAS,mBACvB,KAAK,SAAS,UAAU;;;AAK9B,SAAS,6BACP,MACA,OACkD;AAClD,KACE,KAAK,SAAS,sBACd,KAAK,OAAO,SAAS,gBACrB,EACG,CAAC,KAAK,YAAY,KAAK,SAAS,SAAS,gBACzC,KAAK,YAAY,KAAK,SAAS,SAAS,iBAG3C;CAEF,MAAM,WACJ,KAAK,SAAS,SAAS,eACnB,KAAK,SAAS,OACd,KAAK,SAAS;AACpB,KACE,KAAK,OAAO,SAAS,YACrB,aAAa,aACb,CAAC,MAAM,WAAW,SAAS,CAE3B,QAAO;AAET,QAAO,KAAK,OAAO,SAAS,aAC1B,aAAa,aACb,CAAC,MAAM,WAAW,UAAU,GAC1B,oBACA,KAAA;;AAGN,SAAS,sBAAsB,MAAkC;AAC/D,KAAI,KAAK,SAAS,aAAc,QAAO,KAAK;AAC5C,QAAO,KAAK,SAAS,uBAAuB,KAAK,KAAK,SAAS,eAC3D,KAAK,KAAK,OACV,KAAA;;AAGN,MAAM,mBAAmB,IAAI,IAAI;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,SAAS,mBACP,SACA,uBAAqB,IAAI,KAAK,EACrB;AACT,KAAI,KAAK,IAAI,QAAQ,CAAE,QAAO;CAC9B,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAS,IAAI,QAAQ;AAErB,MAAK,MAAM,aAAa,QAAQ,gBAAgB;EAC9C,IAAI,UAAU;AACd,SACE,QAAQ,eACP,QAAQ,WAAW,oBAAoB,IACtC,QAAQ,WAAW,4BAA4B,KACjD,QAAQ,WAAW,KAAK,WAAW,QAAQ,KAE3C,WAAU,QAAQ;EAGpB,MAAM,SAAS,QAAQ;AACvB,MACG,QAAQ,wBAAwB,IAAI,OAAO,KAAK,SAAS,QAAQ,QACjE,QAAQ,oBAAoB,IAAI,OAAO,KAAK,aAAa,QAAQ,QACjE,QAAQ,kBAAkB,EAAE,UAAU,UAAU,CAAC,IAChD,OAAO,KAAK,aAAa,QAAQ,KAEnC,QAAO;AAGT,MAAI,QAAQ,kBAAkB,IAAI,QAAQ,0BAA0B,EAAE;AACpE,OACE,OAAO,KAAK,WAAW,QAAQ,SAC9B,QAAQ,oBAAoB,IAC3B,QAAQ,4BAA4B,KACtC,iBAAiB,IAAI,qBAAqB,QAAQ,KAAK,IAAI,GAAG,CAE9D,QAAO;AAET,OACE,OAAO,KAAK,UAAU,OAAO,QAAQ,QACrC,qBAAqB,OAAO,KAAK,QAAQ,OAAO,MAAM,CAEtD,QAAO;AAET,OACE,OAAO,KAAK,UAAU,MAAM,aAAa,aAAa,QAAQ,KAAK,IACnE,CAAC,8BAA8B,OAAO,MAAM,QAAQ,MAAM,OAAO,MAAM,CAEvE,QAAO;;EAIX,MAAM,cAAc,UAAU;AAC9B,MACE,aAAa,sBAAsB,IACnC,YAAY,KAAK,SAAS,UAAU,QACpC,YAAY,KAAK,GAAG,SAAS,cAC7B;GACA,MAAM,QAAQ,YAAY,MAAM,WAAW,YAAY,KAAK,GAAG,KAAK;AACpE,OAAI,SAAS,mBAAmB,OAAO,SAAS,CAAE,QAAO;;AAE3D,MACE,aAAa,sBAAsB,IACnC,YAAY,KAAK,SAAS,UAAU,QACpC,YAAY,KAAK,GAAG,SAAS,aAE7B,MAAK,MAAM,QAAQ,oBAAoB,YAAY,KAAK,GAAG,EAAE;GAC3D,MAAM,QAAQ,YAAY,MAAM,WAAW,KAAK;AAChD,OAAI,SAAS,mBAAmB,OAAO,SAAS,CAAE,QAAO;;AAG7D,MACE,QAAQ,uBAAuB,EAAE,UAAU,KAAK,CAAC,IACjD,OAAO,KAAK,UAAU,QAAQ,KAE9B,MAAK,MAAM,QAAQ,oBAAoB,OAAO,KAAK,KAAK,EAAE;GACxD,MAAM,QAAQ,OAAO,MAAM,WAAW,KAAK;AAC3C,OAAI,SAAS,mBAAmB,OAAO,SAAS,CAAE,QAAO;;;AAI/D,QAAO;;AAGT,SAAS,oBAAoB,OAAyB;AACpD,KAAI,MAAM,SAAS,aAAc,QAAO,CAAC,MAAM,KAAK;AACpD,KAAI,MAAM,SAAS,oBACjB,QAAO,oBAAoB,MAAM,KAAK;AAExC,KAAI,MAAM,SAAS,cAAe,QAAO,oBAAoB,MAAM,SAAS;AAC5E,KAAI,MAAM,SAAS,eACjB,QAAO,MAAM,SAAS,SAAS,YAC7B,UAAU,oBAAoB,QAAQ,GAAG,EAAE,CAC5C;AAEH,KAAI,MAAM,SAAS,gBACjB,QAAO,MAAM,WAAW,SAAS,aAC/B,SAAS,SAAS,gBACd,oBAAoB,SAAS,SAAS,GACtC,oBAAoB,SAAS,MAAM,CACxC;AAEH,QAAO,EAAE;;AAGX,SAAS,qBACP,MACoB;AACpB,KAAI,CAAC,KAAK,YAAY,KAAK,SAAS,SAAS,aAC3C,QAAO,KAAK,SAAS;AAEvB,QAAO,KAAK,YAAY,KAAK,SAAS,SAAS,kBAC3C,KAAK,SAAS,QACd,KAAA;;AAGN,SAAS,qBAAqB,OAAe,OAAuB;CAClE,MAAM,OAAO,iBAAiB,MAAM;AACpC,KACE,KAAK,SAAS,sBACd,KAAK,SAAS,2BAEd,QAAO;CAET,MAAM,SAAS,qBAAqB,KAAK;AACzC,KAAI,KAAK,OAAO,SAAS,gBAAgB,MAAM,WAAW,KAAK,OAAO,KAAK,CACzE,QAAO;AAET,QACG,KAAK,OAAO,SAAS,aACnB,WAAW,YACV,WAAW,oBACX,WAAW,uBACd,KAAK,OAAO,SAAS,cACnB,WAAW,SAAS,WAAW;;AAItC,SAAS,8BACP,MACA,UACA,OACS;AACT,KAAI,2BAA2B,KAAK,QAAQ,uBAAO,IAAI,KAAK,CAAC,CAAE,QAAO;CACtE,MAAM,SAAS,iBAAiB,KAAK,OAAO;AAC5C,KACE,OAAO,SAAS,sBAChB,OAAO,SAAS,2BAEhB,QAAO;CAET,MAAM,SAAS,qBAAqB,OAAO;AAC3C,KACE,OAAO,OAAO,SAAS,gBACvB,MAAM,WAAW,OAAO,OAAO,KAAK,CAEpC,QAAO;CAET,MAAM,gBAAgB,KAAK,UAAU,WAClC,cAAc,cAAc,SAC9B;AACD,KAAI,OAAO,OAAO,SAAS,UAAU;AACnC,MAAI,WAAW,SAAU,QAAO,gBAAgB;AAChD,SAAO,IAAI,IAAI;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,CAAC,IAAI,UAAU,GAAG;;AAEtB,QACG,OAAO,OAAO,SAAS,WAAW,WAAW,aAC7C,OAAO,OAAO,SAAS,UAAU,WAAW;;AAIjD,SAAS,2BACP,OACA,OACA,MACS;CACT,MAAM,OAAO,iBAAiB,MAAM;AACpC,KAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,UAAU,MAAM,WAAW,KAAK,KAAK;AAC3C,MAAI,CAAC,QAAS,QAAO,KAAK,SAAS;AACnC,MAAI,KAAK,IAAI,QAAQ,CAAE,QAAO;AAC9B,MAAI,QAAQ,KAAK,0BAA0B,EAAE;GAC3C,MAAM,cAAc,QAAQ,KAAK;AACjC,UACE,YAAY,qBAAqB,KAChC,YAAY,KAAK,OAAO,UAAU,wBACjC,YAAY,KAAK,OAAO,UAAU;;AAGxC,MAAI,QAAQ,KAAK,mBAAmB,EAAE;GACpC,MAAM,cAAc,QAAQ,KAAK;AACjC,OAAI,CAAC,YAAY,qBAAqB,CAAE,QAAO;GAC/C,MAAM,WAAW,QAAQ,KAAK,KAAK;GACnC,MAAM,OACJ,SAAS,SAAS,eAAe,SAAS,OAAO,SAAS;GAC5D,MAAM,SAAS,YAAY,KAAK,OAAO;AACvC,WACI,WAAW,wBACX,WAAW,6BACX,SAAS,aACV,WAAW,UAAU,SAAS,mBAC7B,WAAW,UACX,WAAW,iBACX,WAAW,eACX,SAAS;;EAGf,MAAM,cAAc,QAAQ,KAAK;AACjC,MACE,QAAQ,YACR,YAAY,SAAS,wBACrB,YAAY,MACZ;GACA,MAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,YAAS,IAAI,QAAQ;AACrB,UAAO,2BACL,YAAY,MACZ,QAAQ,KAAK,OACb,SACD;;AAEH,SAAO;;AAET,SACG,KAAK,SAAS,sBACb,KAAK,SAAS,+BAChB,gBAAgB,KAAK,KACpB,wBAAwB,MAAsB,qBAAqB,KAClE,aACA,wBACE,MACA,yBACD,KAAK;;;;;;;AASZ,SAAS,YACP,MACA,QACA,uBACoB;CACpB,IAAI;AACJ,KAAI;AACF,WAAS,GAAG,aAAa,MAAM,OAAO;UAC/B,OAAO;AACd,SAAO,KACL,qBACE,8CACA,+EACA,MACA,MACD,CACF;AACD;;AAGF,KAAI;AACF,SAAO,MAAM,QAAQ;GACnB,YAAY;GACZ,SAAS,cAAc,KAAK;GAC7B,CAAC;UACK,OAAO;AACd,MACE,CAAC,yBACD,CAAC,oFAAoF,KACnF,OACD,CAED;EAEF,MAAM,cAAc;AAGpB,SAAO,KACL,aACE,MACA,wBAAwB;GACtB,cAAc,wBACV,gDACA;GACJ,SAAS,YAAY;GACrB,KAAK;GACN,CAAC,EACF,YAAY,MACR,GAAG,YAAY,IAAI,KAAK,GAAG,YAAY,IAAI,SAAS,MACpD,KAAA,EACL,CACF;AACD;;;AAIJ,SAAS,cAAc,MAA8B;CACnD,MAAM,YAAY,KAAK,QAAQ,KAAK,CAAC,aAAa;CAClD,MAAM,UAA0B,EAAE;AAClC,KACE,cAAc,SACd,cAAc,UACd,cAAc,UACd,cAAc,OAEd,SAAQ,KAAK,cAAc,oBAAoB;AAEjD,KAAI,cAAc,UAAU,cAAc,OAAQ,SAAQ,KAAK,MAAM;AACrE,QAAO;;AAGT,SAAS,YACP,OACA,KACA,OACA,QACA,QACM;CACN,MAAM,WAAW,MAAM,QAAQ;AAC/B,KAAI,aAAa,KAAA,KAAa,CAAC,WAAW,UAAU,MAAM,EAAE;AAC1D,SAAO,KACL,mBACE,OAAO,MACP,OAAO,MACP,yBAAyB,IAAI,oBAC7B,8GACD,CACF;AACD;;AAEF,QAAO,OAAO,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;AAC9C,OAAM,QAAQ,SAAS;;AAGzB,SAAS,WACP,OACA,QACS;AACT,QAAO,MAAM,QAAQ,MAAM,IAAI,MAAM,QAAQ,OAAO,GAChD,MAAM,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,KAC9C,UAAU;;AAGhB,SAAS,SAAS,OAAkD;AAClE,QAAO,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM;;AAGtE,SAAS,gBAAgB,OAA2C;AAClE,QACE,MAAM,QAAQ,MAAM,IACpB,MAAM,WAAW,KACjB,MAAM,OACH,cAAc,OAAO,cAAc,YAAY,UAAU,SAAS,EACpE;;AAIL,SAAS,mBAAmB,MAAc,MAAsB;AAC9D,QAAO,mBACL,MACA,MACA,qDACA,uIACD;;AAGH,SAAS,yBAAyB,MAAc,MAAsB;AACpE,QAAO,mBACL,MACA,MACA,+DACA,4HACD;;AAGH,SAAS,mBACP,MACA,MACA,cACA,KACQ;AACR,QAAO,aACL,MACA,wBAAwB;EAAE;EAAc;EAAK,CAAC,EAC9C,MAAM,MACF,GAAG,KAAK,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI,MAAM,SAAS,MAClD,KAAA,EACL;;AAGH,SAAS,YAAY,cAAsB,KAAqB;AAC9D,QAAO,wBAAwB;EAAE;EAAc;EAAK,CAAC;;;AAIvD,SAAS,qBACP,cACA,KACA,MACA,OACQ;CACR,MAAM,eACJ,UAAU,KAAA,IAAY,KAAA,IAAY,6BAA6B,MAAM;AAEvE,QAAO,wBAAwB;EAAE;EAAc;EAAK,SAAA,CADnC,MAAM,GAAI,iBAAiB,KAAA,IAAY,EAAE,GAAG,CAAC,aAAa,CAChB;EAAE,CAAC;;AAGhE,SAAS,aACP,MACA,SACA,UACQ;AACR,QAAO,GAAG,OAAO,WAAW,KAAK,SAAS,KAAK,GAAG,IAAI"}
|
|
@@ -2,8 +2,9 @@ import type { VueExtractionOptions, VueExtractionOutput } from '../types.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Extracts General Translation content from one Vue SFC or JavaScript file.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* This low-level API lets callers parse an individual in-memory source file.
|
|
6
|
+
* Use `@generaltranslation/vue-extractor/project` when discovery, I/O,
|
|
7
|
+
* compiler configuration, hashing, and deduplication should be handled by the
|
|
8
|
+
* package as one project-level operation.
|
|
8
9
|
*/
|
|
9
10
|
export declare function extractFromVueSource(sourceCode: string, filePath: string, options?: VueExtractionOptions): Promise<VueExtractionOutput>;
|