@litsx/babel-preset-litsx 0.3.0 → 0.4.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-litsx-element-candidates-JMFlPFXK.cjs","sources":["../../src/internal/transform-litsx-element-candidates.js"],"sourcesContent":["import helperPluginUtils from \"@babel/helper-plugin-utils\";\nimport babelTraverse from \"@babel/traverse\";\nimport jsxSyntaxPlugin from \"@babel/plugin-syntax-jsx\";\nimport parser from \"@litsx/babel-parser\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { normalizeFilePath } from \"@litsx/typescript-session\";\nimport { ensureTypescriptModule } from \"./transform-litsx-properties.js\";\n\nconst { declare } = helperPluginUtils;\nconst traverse = babelTraverse.default || babelTraverse;\nconst IMPORT_RESOLUTION_EXTENSIONS = [\n \".litsx\",\n \".litsx.jsx\",\n \".jsx\",\n \".js\",\n \".tsx\",\n \".ts\",\n];\nconst DEFAULT_MODULE_RESOLUTION_OPTIONS = {\n moduleResolution: 100,\n allowJs: true,\n checkJs: false,\n jsx: 1,\n target: 99,\n module: 99,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n};\n\nlet t;\n\nexport function setElementCandidatesBabelTypes(nextTypes) {\n t = nextTypes;\n}\n\nfunction isInsideFunctionOrClass(path) {\n return path.findParent(\n (p) =>\n p.isFunctionDeclaration() ||\n p.isFunctionExpression() ||\n p.isArrowFunctionExpression() ||\n p.isClassDeclaration()\n );\n}\n\nfunction isRelativeSpecifier(value) {\n return typeof value === \"string\" && (\n value.startsWith(\"./\") ||\n value.startsWith(\"../\") ||\n value.startsWith(\"/\")\n );\n}\n\nfunction createEmptyCandidateResult() {\n return {\n localCandidates: new Set(),\n importedCandidates: new Map(),\n };\n}\n\nfunction cloneCandidateResult(result) {\n return {\n localCandidates: new Set(result?.localCandidates || []),\n importedCandidates: new Map(result?.importedCandidates || []),\n };\n}\n\nfunction mergeCandidateResults(target, source) {\n source.localCandidates.forEach((candidate) => target.localCandidates.add(candidate));\n source.importedCandidates.forEach((candidate, key) => {\n if (!target.importedCandidates.has(key)) {\n target.importedCandidates.set(key, candidate);\n }\n });\n}\n\nfunction toImportRecordKey(record) {\n return `${record.sourceFile}:${record.importedName}:${record.tagName}`;\n}\n\nfunction toRelativeModuleSpecifier(fromFilename, targetFilename) {\n const fromDir = path.dirname(fromFilename);\n let relativePath = normalizeFilePath(path.relative(fromDir, targetFilename));\n\n if (!relativePath.startsWith(\".\") && !relativePath.startsWith(\"/\")) {\n relativePath = `./${relativePath}`;\n }\n\n return relativePath;\n}\n\nfunction hasSupportedExtension(filePath) {\n return IMPORT_RESOLUTION_EXTENSIONS.some((extension) => filePath.endsWith(extension));\n}\n\nfunction resolveImportSource(fromFilename, sourceValue, context) {\n const cacheKey = `${normalizeFilePath(fromFilename)}::${sourceValue}`;\n if (context.resolvedImportCache.has(cacheKey)) {\n return context.resolvedImportCache.get(cacheKey);\n }\n\n const existingFile = (candidatePath) => {\n try {\n return fs.existsSync(candidatePath) && fs.statSync(candidatePath).isFile();\n } catch {\n return false;\n }\n };\n\n const resolveWithExtensions = (basePath) => {\n const normalizedBasePath = normalizeFilePath(basePath);\n const candidates = [];\n\n if (hasSupportedExtension(normalizedBasePath)) {\n candidates.push(normalizedBasePath);\n } else {\n IMPORT_RESOLUTION_EXTENSIONS.forEach((extension) => {\n candidates.push(`${normalizedBasePath}${extension}`);\n });\n IMPORT_RESOLUTION_EXTENSIONS.forEach((extension) => {\n candidates.push(normalizeFilePath(path.join(normalizedBasePath, `index${extension}`)));\n });\n }\n\n return candidates.find(existingFile) || null;\n };\n\n const resolvePathAlias = () => {\n const compilerOptions = context.getCompilerOptions?.(fromFilename) || {};\n const baseUrl = compilerOptions.baseUrl\n ? normalizeFilePath(\n path.isAbsolute(compilerOptions.baseUrl)\n ? compilerOptions.baseUrl\n : path.resolve(path.dirname(fromFilename), compilerOptions.baseUrl)\n )\n : normalizeFilePath(path.dirname(fromFilename));\n const pathMappings = compilerOptions.paths || {};\n\n for (const [pattern, substitutions] of Object.entries(pathMappings)) {\n const starIndex = pattern.indexOf(\"*\");\n const isStarPattern = starIndex !== -1;\n const prefix = isStarPattern ? pattern.slice(0, starIndex) : pattern;\n const suffix = isStarPattern ? pattern.slice(starIndex + 1) : \"\";\n\n if (isStarPattern) {\n if (!sourceValue.startsWith(prefix) || !sourceValue.endsWith(suffix)) {\n continue;\n }\n } else if (sourceValue !== pattern) {\n continue;\n }\n\n const wildcardValue = isStarPattern\n ? sourceValue.slice(prefix.length, sourceValue.length - suffix.length)\n : \"\";\n\n for (const substitution of substitutions || []) {\n const substituted = isStarPattern\n ? substitution.replace(\"*\", wildcardValue)\n : substitution;\n const candidateBase = path.isAbsolute(substituted)\n ? substituted\n : path.join(baseUrl, substituted);\n const resolvedPath = resolveWithExtensions(candidateBase);\n if (resolvedPath) {\n return resolvedPath;\n }\n }\n }\n\n return null;\n };\n\n let resolved = null;\n if (fromFilename && isRelativeSpecifier(sourceValue)) {\n resolved = resolveWithExtensions(\n path.resolve(path.dirname(fromFilename), sourceValue)\n );\n } else if (fromFilename) {\n resolved = resolvePathAlias();\n if (!resolved) {\n const ts = ensureTypescriptModule();\n const compilerOptions = context.getCompilerOptions?.(fromFilename) || DEFAULT_MODULE_RESOLUTION_OPTIONS;\n const moduleResolutionHost = context.getModuleResolutionHost?.(fromFilename) || ts.sys;\n try {\n const resolution = ts.resolveModuleName(\n sourceValue,\n normalizeFilePath(fromFilename),\n compilerOptions,\n moduleResolutionHost\n );\n const resolvedFileName = resolution?.resolvedModule?.resolvedFileName;\n if (resolvedFileName) {\n resolved = resolveWithExtensions(resolvedFileName) || normalizeFilePath(resolvedFileName);\n }\n } catch {\n resolved = null;\n }\n }\n }\n\n context.resolvedImportCache.set(cacheKey, resolved);\n return resolved;\n}\n\nfunction createCompilerContextResolver(options = {}) {\n const providedTypescriptSession =\n options?.typescriptSession?.projectSession || options?.typescriptSession || null;\n\n const compilerOptionsCache = new Map();\n const moduleResolutionHostCache = new Map();\n\n function getProgramForFile(filename) {\n if (!providedTypescriptSession?.getProgram || !filename) {\n return null;\n }\n\n try {\n if (providedTypescriptSession.kind === \"project\") {\n return providedTypescriptSession.getProgram();\n }\n\n if (providedTypescriptSession.kind === \"standalone\") {\n return providedTypescriptSession.getProgram(normalizeFilePath(filename));\n }\n } catch {\n return null;\n }\n\n return null;\n }\n\n return {\n getCompilerOptions(filename) {\n const cacheKey = normalizeFilePath(filename);\n if (compilerOptionsCache.has(cacheKey)) {\n return compilerOptionsCache.get(cacheKey);\n }\n\n const program = getProgramForFile(filename);\n const compilerOptions = program?.getCompilerOptions?.() || DEFAULT_MODULE_RESOLUTION_OPTIONS;\n compilerOptionsCache.set(cacheKey, compilerOptions);\n return compilerOptions;\n },\n getModuleResolutionHost(filename) {\n const cacheKey = normalizeFilePath(filename);\n if (moduleResolutionHostCache.has(cacheKey)) {\n return moduleResolutionHostCache.get(cacheKey);\n }\n\n const ts = ensureTypescriptModule();\n const program = getProgramForFile(filename);\n const host = providedTypescriptSession?.host || ts.sys;\n moduleResolutionHostCache.set(cacheKey, host);\n return host;\n },\n };\n}\n\nfunction getOrCreateAvailableNames(programPath) {\n const cached = programPath.getData(\"__litsxAvailableNames\");\n if (cached) {\n return cached;\n }\n\n const availableNames = new Set();\n programPath.get(\"body\").forEach((nodePath) => {\n if (nodePath.isImportDeclaration()) {\n nodePath.node.specifiers.forEach((specifier) => {\n if (specifier.local?.name) {\n availableNames.add(specifier.local.name);\n }\n });\n return;\n }\n\n if (nodePath.isClassDeclaration() && nodePath.node.id?.name) {\n availableNames.add(nodePath.node.id.name);\n return;\n }\n\n if (\n (nodePath.isExportNamedDeclaration() || nodePath.isExportDefaultDeclaration()) &&\n nodePath.get(\"declaration\")?.isClassDeclaration?.() &&\n nodePath.node.declaration?.id?.name\n ) {\n availableNames.add(nodePath.node.declaration.id.name);\n return;\n }\n\n if (nodePath.isFunctionDeclaration() && nodePath.node.id?.name) {\n availableNames.add(nodePath.node.id.name);\n return;\n }\n\n if (\n (nodePath.isExportNamedDeclaration() || nodePath.isExportDefaultDeclaration()) &&\n nodePath.get(\"declaration\")?.isFunctionDeclaration?.() &&\n nodePath.node.declaration?.id?.name\n ) {\n availableNames.add(nodePath.node.declaration.id.name);\n return;\n }\n\n if (\n (nodePath.isExportNamedDeclaration() || nodePath.isExportDefaultDeclaration()) &&\n nodePath.get(\"declaration\")?.isVariableDeclaration?.()\n ) {\n nodePath.get(\"declaration.declarations\").forEach((declaratorPath) => {\n const declarator = declaratorPath.node;\n if (t.isIdentifier(declarator.id)) {\n availableNames.add(declarator.id.name);\n }\n });\n return;\n }\n\n if (!nodePath.isVariableDeclaration()) return;\n nodePath.get(\"declarations\").forEach((declaratorPath) => {\n const declarator = declaratorPath.node;\n if (t.isIdentifier(declarator.id)) {\n availableNames.add(declarator.id.name);\n }\n });\n });\n\n programPath.setData(\"__litsxAvailableNames\", availableNames);\n return availableNames;\n}\n\nfunction getOrCreateHelperPaths(programPath) {\n const cached = programPath.getData(\"__litsxHelperPaths\");\n if (cached) {\n return cached;\n }\n\n const helperPaths = new Map();\n programPath.get(\"body\").forEach((nodePath) => {\n if (nodePath.isFunctionDeclaration() && nodePath.node.id?.name) {\n helperPaths.set(nodePath.node.id.name, nodePath);\n return;\n }\n\n if (\n (nodePath.isExportNamedDeclaration() || nodePath.isExportDefaultDeclaration()) &&\n nodePath.get(\"declaration\")?.isFunctionDeclaration?.() &&\n nodePath.node.declaration?.id?.name\n ) {\n helperPaths.set(nodePath.node.declaration.id.name, nodePath.get(\"declaration\"));\n return;\n }\n\n if (\n (nodePath.isExportNamedDeclaration() || nodePath.isExportDefaultDeclaration()) &&\n nodePath.get(\"declaration\")?.isVariableDeclaration?.()\n ) {\n nodePath.get(\"declaration.declarations\").forEach((declaratorPath) => {\n const declarator = declaratorPath.node;\n if (!t.isIdentifier(declarator.id)) {\n return;\n }\n\n const initPath = declaratorPath.get(\"init\");\n if (\n initPath?.isArrowFunctionExpression?.() ||\n initPath?.isFunctionExpression?.()\n ) {\n helperPaths.set(declarator.id.name, initPath);\n }\n });\n return;\n }\n\n if (!nodePath.isVariableDeclaration()) return;\n nodePath.get(\"declarations\").forEach((declaratorPath) => {\n const declarator = declaratorPath.node;\n if (!t.isIdentifier(declarator.id)) {\n return;\n }\n\n const initPath = declaratorPath.get(\"init\");\n if (\n initPath?.isArrowFunctionExpression?.() ||\n initPath?.isFunctionExpression?.()\n ) {\n helperPaths.set(declarator.id.name, initPath);\n }\n });\n });\n\n programPath.setData(\"__litsxHelperPaths\", helperPaths);\n return helperPaths;\n}\n\nfunction buildModuleAnalysis(programPath, filename, context) {\n const availableNames = getOrCreateAvailableNames(programPath);\n const helperPaths = getOrCreateHelperPaths(programPath);\n const importBindings = new Map();\n const exportBindings = new Map();\n\n programPath.get(\"body\").forEach((nodePath) => {\n if (nodePath.isImportDeclaration()) {\n const sourceValue = nodePath.node.source.value;\n const resolvedSource = resolveImportSource(filename, sourceValue, context);\n\n nodePath.node.specifiers.forEach((specifier) => {\n if (!specifier.local?.name) {\n return;\n }\n\n let importedName = null;\n if (specifier.type === \"ImportDefaultSpecifier\") {\n importedName = \"default\";\n } else if (specifier.type === \"ImportSpecifier\") {\n importedName = specifier.imported?.name ?? specifier.imported?.value ?? null;\n } else if (specifier.type === \"ImportNamespaceSpecifier\") {\n importedName = \"*\";\n }\n\n importBindings.set(specifier.local.name, {\n localName: specifier.local.name,\n importedName,\n sourceValue,\n resolvedSource,\n });\n });\n\n return;\n }\n\n if (nodePath.isExportNamedDeclaration()) {\n const declarationPath = nodePath.get(\"declaration\");\n if (declarationPath?.node) {\n if (declarationPath.isFunctionDeclaration() || declarationPath.isClassDeclaration()) {\n const localName = declarationPath.node.id?.name;\n if (localName) {\n exportBindings.set(localName, { localName });\n }\n } else if (declarationPath.isVariableDeclaration()) {\n declarationPath.get(\"declarations\").forEach((declaratorPath) => {\n const localName = declaratorPath.node.id?.name;\n if (localName) {\n exportBindings.set(localName, { localName });\n }\n });\n }\n }\n\n nodePath.get(\"specifiers\").forEach((specifierPath) => {\n const exportedName =\n specifierPath.node.exported?.name ?? specifierPath.node.exported?.value ?? null;\n if (!exportedName) {\n return;\n }\n\n const sourceValue = nodePath.node.source?.value ?? null;\n if (sourceValue) {\n const localName =\n specifierPath.node.local?.name ?? specifierPath.node.local?.value ?? exportedName;\n exportBindings.set(exportedName, {\n reexportSource: resolveImportSource(filename, sourceValue, context),\n importedName: localName === \"default\" ? \"default\" : localName,\n });\n return;\n }\n\n const localName =\n specifierPath.node.local?.name ?? specifierPath.node.local?.value ?? null;\n if (localName) {\n exportBindings.set(exportedName, { localName });\n }\n });\n\n return;\n }\n\n if (!nodePath.isExportDefaultDeclaration()) {\n return;\n }\n\n const declarationPath = nodePath.get(\"declaration\");\n if (declarationPath.isIdentifier()) {\n exportBindings.set(\"default\", { localName: declarationPath.node.name });\n return;\n }\n\n if (\n declarationPath.isFunctionDeclaration() ||\n declarationPath.isClassDeclaration()\n ) {\n const localName = declarationPath.node.id?.name;\n if (localName) {\n exportBindings.set(\"default\", { localName });\n } else {\n exportBindings.set(\"default\", { path: declarationPath });\n }\n return;\n }\n\n if (\n declarationPath.isArrowFunctionExpression() ||\n declarationPath.isFunctionExpression()\n ) {\n exportBindings.set(\"default\", { path: declarationPath });\n }\n });\n\n return {\n filename,\n programPath,\n availableNames,\n helperPaths,\n importBindings,\n exportBindings,\n compatPascalNames: new Set(),\n };\n}\n\nfunction getOrCreateModuleAnalysis(filename, context) {\n const normalizedFilename = normalizeFilePath(filename);\n if (!normalizedFilename) {\n return null;\n }\n\n if (context.moduleAnalysisCache.has(normalizedFilename)) {\n return context.moduleAnalysisCache.get(normalizedFilename);\n }\n\n let source;\n try {\n source = fs.readFileSync(normalizedFilename, \"utf8\");\n } catch {\n return null;\n }\n\n let programPath = null;\n try {\n const ast = parser.parse(source, { sourceType: \"module\" });\n traverse(ast, {\n Program(path) {\n if (!programPath) {\n programPath = path;\n path.scope.crawl();\n }\n },\n });\n } catch {\n return null;\n }\n\n if (!programPath) {\n return null;\n }\n\n const analysis = buildModuleAnalysis(programPath, normalizedFilename, context);\n context.moduleAnalysisCache.set(normalizedFilename, analysis);\n return analysis;\n}\n\nfunction isCapitalizedName(name) {\n if (typeof name !== \"string\" || name.length === 0) {\n return false;\n }\n\n const first = name[0];\n return first === first.toUpperCase() && first !== first.toLowerCase();\n}\n\nfunction isProgramLevelBinding(binding) {\n return binding?.scope?.path?.isProgram?.() === true;\n}\n\nfunction validateComponentName(nameNode, pathForErrors, context) {\n if (!nameNode || nameNode.type !== \"JSXIdentifier\") return null;\n const originalName = nameNode.__scopedOriginal || nameNode.name;\n if (!isCapitalizedName(originalName)) return null;\n\n const binding = pathForErrors?.scope?.getBinding?.(originalName) || null;\n if (!binding) {\n if (context.availableNames.has(originalName)) {\n return originalName;\n }\n if (context.compatPascalNames.has(originalName)) {\n return null;\n }\n if (context.options?.allowUnknownPascalCase === true) {\n return null;\n }\n throw (pathForErrors?.buildCodeFrameError?.(\n `Unknown LitSX component \"${originalName}\". Add an import or declare it in this module before using it in JSX.`\n ) || new Error(\n `Unknown LitSX component \"${originalName}\". Add an import or declare it in this module before using it in JSX.`\n ));\n }\n\n if (!isProgramLevelBinding(binding)) {\n return null;\n }\n\n return originalName;\n}\n\nfunction resolveImportedHelper(moduleAnalysis, helperName, context, seen = new Set()) {\n const importInfo = moduleAnalysis.importBindings.get(helperName);\n if (!importInfo?.resolvedSource || importInfo.importedName === \"*\") {\n return null;\n }\n\n const visitedKey = `${moduleAnalysis.filename}:${helperName}:${importInfo.resolvedSource}:${importInfo.importedName}`;\n if (seen.has(visitedKey)) {\n return null;\n }\n const nextSeen = new Set(seen);\n nextSeen.add(visitedKey);\n\n const importedModule = getOrCreateModuleAnalysis(importInfo.resolvedSource, context);\n if (!importedModule) {\n return null;\n }\n\n return resolveExportedHelper(importedModule, importInfo.importedName, context, nextSeen);\n}\n\nfunction resolveExportedHelper(moduleAnalysis, exportedName, context, seen = new Set()) {\n const exportInfo = moduleAnalysis.exportBindings.get(exportedName);\n if (!exportInfo) {\n return null;\n }\n\n if (exportInfo.path?.node) {\n return {\n moduleAnalysis,\n path: exportInfo.path,\n };\n }\n\n if (exportInfo.localName) {\n const helperPath = moduleAnalysis.helperPaths.get(exportInfo.localName);\n if (!helperPath?.node) {\n if (moduleAnalysis.importBindings.has(exportInfo.localName)) {\n return resolveImportedHelper(moduleAnalysis, exportInfo.localName, context, seen);\n }\n return null;\n }\n return {\n moduleAnalysis,\n path: helperPath,\n };\n }\n\n if (exportInfo.reexportSource) {\n const reexportedModule = getOrCreateModuleAnalysis(exportInfo.reexportSource, context);\n if (!reexportedModule) {\n return null;\n }\n return resolveExportedHelper(\n reexportedModule,\n exportInfo.importedName,\n context,\n seen\n );\n }\n\n return null;\n}\n\nfunction resolveImportedElementRequirement(candidateName, moduleAnalysis, context, rootFilename) {\n const binding = moduleAnalysis.programPath.scope.getBinding(candidateName);\n if (!binding || !isProgramLevelBinding(binding)) {\n return null;\n }\n\n if (\n binding.path.isImportSpecifier?.() ||\n binding.path.isImportDefaultSpecifier?.()\n ) {\n const importInfo = moduleAnalysis.importBindings.get(candidateName);\n if (!importInfo?.resolvedSource || importInfo.importedName === \"*\") {\n return null;\n }\n\n return {\n sourceFile: importInfo.resolvedSource,\n sourceSpecifier: isRelativeSpecifier(importInfo.sourceValue)\n ? null\n : importInfo.sourceValue,\n importedName: importInfo.importedName,\n originalName: candidateName,\n tagName: candidateName.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase(),\n rootFilename,\n };\n }\n\n const exportInfo =\n moduleAnalysis.exportBindings.get(candidateName) ||\n moduleAnalysis.exportBindings.get(\"default\");\n if (!exportInfo) {\n throw new Error(\n `Imported renderer helper transitively renders \"${candidateName}\" from \"${moduleAnalysis.filename}\", but that symbol is not exported and cannot be added to static elements in \"${rootFilename}\".`\n );\n }\n\n const importedName = exportInfo.localName === candidateName\n ? candidateName\n : [...moduleAnalysis.exportBindings.entries()].find(\n ([, entry]) => entry.localName === candidateName\n )?.[0] ?? null;\n\n if (!importedName) {\n throw new Error(\n `Imported renderer helper transitively renders \"${candidateName}\" from \"${moduleAnalysis.filename}\", but that symbol cannot be resolved as an importable export for \"${rootFilename}\".`\n );\n }\n\n return {\n sourceFile: moduleAnalysis.filename,\n sourceSpecifier: null,\n importedName,\n originalName: candidateName,\n tagName: candidateName.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase(),\n rootFilename,\n };\n}\n\nfunction collectCandidateResult(functionPath, programPath, options = {}) {\n const result = createEmptyCandidateResult();\n if (!programPath || !functionPath?.node) return result;\n programPath.scope.crawl();\n const compilationSession = options.__litsxCompilationSession || null;\n\n const rootFilename = normalizeFilePath(\n options.filename || programPath.hub.file?.opts?.filename || \"\"\n );\n const helperCandidateCache =\n programPath.getData(\"__litsxHelperCandidateCache\") || new WeakMap();\n programPath.setData(\"__litsxHelperCandidateCache\", helperCandidateCache);\n const moduleAnalysisCache =\n compilationSession?.importedModuleAnalysisCache ||\n programPath.getData(\"__litsxImportedModuleAnalyses\") ||\n new Map();\n programPath.setData(\"__litsxImportedModuleAnalyses\", moduleAnalysisCache);\n const resolvedImportCache =\n compilationSession?.resolvedImportCache ||\n programPath.getData(\"__litsxResolvedImports\") ||\n new Map();\n programPath.setData(\"__litsxResolvedImports\", resolvedImportCache);\n\n const rootModule = {\n filename: rootFilename,\n programPath,\n availableNames: getOrCreateAvailableNames(programPath),\n helperPaths: getOrCreateHelperPaths(programPath),\n compatPascalNames: programPath.getData(\"__litsxCompatPascalNames\") || new Set(),\n importBindings: new Map(),\n exportBindings: new Map(),\n };\n\n programPath.get(\"body\").forEach((nodePath) => {\n if (!nodePath.isImportDeclaration()) {\n return;\n }\n\n const sourceValue = nodePath.node.source.value;\n const resolvedSource = resolveImportSource(rootFilename, sourceValue, {\n moduleAnalysisCache,\n resolvedImportCache,\n });\n\n nodePath.node.specifiers.forEach((specifier) => {\n if (!specifier.local?.name) {\n return;\n }\n\n let importedName = null;\n if (specifier.type === \"ImportDefaultSpecifier\") {\n importedName = \"default\";\n } else if (specifier.type === \"ImportSpecifier\") {\n importedName = specifier.imported?.name ?? specifier.imported?.value ?? null;\n } else if (specifier.type === \"ImportNamespaceSpecifier\") {\n importedName = \"*\";\n }\n\n rootModule.importBindings.set(specifier.local.name, {\n localName: specifier.local.name,\n importedName,\n sourceValue,\n resolvedSource,\n });\n });\n });\n\n const context = {\n rootFilename,\n rootModule,\n options,\n helperCandidateCache,\n moduleAnalysisCache,\n resolvedImportCache,\n ...createCompilerContextResolver(options),\n };\n\n function scanFunction(path, moduleAnalysis, seen = new Set()) {\n if (!path?.node) {\n return createEmptyCandidateResult();\n }\n\n if (context.helperCandidateCache.has(path.node)) {\n return cloneCandidateResult(context.helperCandidateCache.get(path.node));\n }\n\n if (seen.has(path.node)) {\n return createEmptyCandidateResult();\n }\n\n const nextSeen = new Set(seen);\n nextSeen.add(path.node);\n const localResult = createEmptyCandidateResult();\n const referencedHelpers = [];\n const scanContext = {\n availableNames: moduleAnalysis.availableNames,\n helperPaths: moduleAnalysis.helperPaths,\n compatPascalNames: moduleAnalysis.compatPascalNames,\n options,\n };\n\n path.traverse({\n JSXOpeningElement(jsxPath) {\n const candidate = validateComponentName(jsxPath.node.name, jsxPath, scanContext);\n if (candidate) {\n if (moduleAnalysis.filename === context.rootFilename) {\n localResult.localCandidates.add(candidate);\n } else {\n const requirement = resolveImportedElementRequirement(\n candidate,\n moduleAnalysis,\n context,\n context.rootFilename\n );\n if (requirement) {\n localResult.importedCandidates.set(\n toImportRecordKey(requirement),\n requirement\n );\n }\n }\n }\n },\n JSXClosingElement(jsxPath) {\n validateComponentName(jsxPath.node.name, jsxPath, scanContext);\n },\n Identifier(identifierPath) {\n if (!identifierPath.isReferencedIdentifier()) {\n return;\n }\n\n if (moduleAnalysis.helperPaths.has(identifierPath.node.name)) {\n referencedHelpers.push({\n moduleAnalysis,\n path: moduleAnalysis.helperPaths.get(identifierPath.node.name),\n });\n return;\n }\n\n const binding = identifierPath.scope.getBinding(identifierPath.node.name);\n if (!binding) {\n return;\n }\n\n if (\n !binding.path.isImportSpecifier?.() &&\n !binding.path.isImportDefaultSpecifier?.()\n ) {\n return;\n }\n\n const resolvedHelper = resolveImportedHelper(\n moduleAnalysis,\n identifierPath.node.name,\n context\n );\n if (!resolvedHelper?.path?.node) {\n return;\n }\n\n referencedHelpers.push(resolvedHelper);\n },\n });\n\n referencedHelpers.forEach((helperEntry) => {\n const helperCandidates = scanFunction(\n helperEntry.path,\n helperEntry.moduleAnalysis,\n nextSeen\n );\n mergeCandidateResults(localResult, helperCandidates);\n });\n\n context.helperCandidateCache.set(path.node, cloneCandidateResult(localResult));\n return localResult;\n }\n\n return scanFunction(functionPath, rootModule);\n}\n\nexport function getAnnotatedElementCandidates(path, programPath, options = {}) {\n if (path?.node?._litsxElementCandidates instanceof Set) {\n return new Set(path.node._litsxElementCandidates);\n }\n\n return collectCandidateResult(path, programPath, options).localCandidates;\n}\n\nexport function getAnnotatedImportedElementCandidates(path, programPath, options = {}) {\n if (Array.isArray(path?.node?._litsxImportedElementCandidates)) {\n return [...path.node._litsxImportedElementCandidates];\n }\n\n return [...collectCandidateResult(path, programPath, options).importedCandidates.values()];\n}\n\nexport function importedBindingNeedsRendererContext(programPath, localName, options = {}) {\n if (!programPath?.node || !localName) {\n return false;\n }\n\n programPath.scope.crawl();\n const compilationSession = options.__litsxCompilationSession || null;\n const rootFilename = normalizeFilePath(\n options.filename || programPath.hub.file?.opts?.filename || \"\"\n );\n const helperCandidateCache =\n programPath.getData(\"__litsxHelperCandidateCache\") || new WeakMap();\n programPath.setData(\"__litsxHelperCandidateCache\", helperCandidateCache);\n const moduleAnalysisCache =\n compilationSession?.importedModuleAnalysisCache ||\n programPath.getData(\"__litsxImportedModuleAnalyses\") ||\n new Map();\n programPath.setData(\"__litsxImportedModuleAnalyses\", moduleAnalysisCache);\n const resolvedImportCache =\n compilationSession?.resolvedImportCache ||\n programPath.getData(\"__litsxResolvedImports\") ||\n new Map();\n programPath.setData(\"__litsxResolvedImports\", resolvedImportCache);\n\n const rootModule = {\n filename: rootFilename,\n programPath,\n availableNames: getOrCreateAvailableNames(programPath),\n helperPaths: getOrCreateHelperPaths(programPath),\n compatPascalNames: programPath.getData(\"__litsxCompatPascalNames\") || new Set(),\n importBindings: new Map(),\n exportBindings: new Map(),\n };\n\n programPath.get(\"body\").forEach((nodePath) => {\n if (!nodePath.isImportDeclaration()) {\n return;\n }\n\n const sourceValue = nodePath.node.source.value;\n const resolvedSource = resolveImportSource(rootFilename, sourceValue, {\n moduleAnalysisCache,\n resolvedImportCache,\n });\n\n nodePath.node.specifiers.forEach((specifier) => {\n if (!specifier.local?.name) {\n return;\n }\n\n let importedName = null;\n if (specifier.type === \"ImportDefaultSpecifier\") {\n importedName = \"default\";\n } else if (specifier.type === \"ImportSpecifier\") {\n importedName = specifier.imported?.name ?? specifier.imported?.value ?? null;\n } else if (specifier.type === \"ImportNamespaceSpecifier\") {\n importedName = \"*\";\n }\n\n rootModule.importBindings.set(specifier.local.name, {\n localName: specifier.local.name,\n importedName,\n sourceValue,\n resolvedSource,\n });\n });\n });\n\n const context = {\n rootFilename,\n rootModule,\n options,\n helperCandidateCache,\n moduleAnalysisCache,\n resolvedImportCache,\n ...createCompilerContextResolver(options),\n };\n\n const resolvedHelper = resolveImportedHelper(rootModule, localName, context);\n if (!resolvedHelper?.path?.node) {\n return false;\n }\n\n function scanFunction(path, moduleAnalysis, seen = new Set()) {\n if (!path?.node) {\n return false;\n }\n\n const cacheKey = path.node;\n if (context.helperCandidateCache.has(cacheKey)) {\n const cached = context.helperCandidateCache.get(cacheKey);\n return cached.localCandidates.size > 0 || cached.importedCandidates.size > 0;\n }\n\n if (seen.has(path.node)) {\n return false;\n }\n\n const nextSeen = new Set(seen);\n nextSeen.add(path.node);\n let needsContext = false;\n const referencedHelpers = [];\n const scanContext = {\n availableNames: moduleAnalysis.availableNames,\n helperPaths: moduleAnalysis.helperPaths,\n compatPascalNames: moduleAnalysis.compatPascalNames,\n options,\n };\n\n path.traverse({\n JSXOpeningElement(jsxPath) {\n const candidate = validateComponentName(jsxPath.node.name, jsxPath, scanContext);\n if (candidate) {\n needsContext = true;\n }\n },\n JSXClosingElement(jsxPath) {\n validateComponentName(jsxPath.node.name, jsxPath, scanContext);\n },\n Identifier(identifierPath) {\n if (!identifierPath.isReferencedIdentifier()) {\n return;\n }\n\n if (moduleAnalysis.helperPaths.has(identifierPath.node.name)) {\n referencedHelpers.push({\n moduleAnalysis,\n path: moduleAnalysis.helperPaths.get(identifierPath.node.name),\n });\n return;\n }\n\n const binding = identifierPath.scope.getBinding(identifierPath.node.name);\n if (\n !binding ||\n (\n !binding.path.isImportSpecifier?.() &&\n !binding.path.isImportDefaultSpecifier?.()\n )\n ) {\n return;\n }\n\n const importedHelper = resolveImportedHelper(\n moduleAnalysis,\n identifierPath.node.name,\n context\n );\n if (importedHelper?.path?.node) {\n referencedHelpers.push(importedHelper);\n }\n },\n });\n\n if (!needsContext) {\n needsContext = referencedHelpers.some((helperEntry) =>\n scanFunction(helperEntry.path, helperEntry.moduleAnalysis, nextSeen)\n );\n }\n\n context.helperCandidateCache.set(cacheKey, needsContext\n ? {\n localCandidates: new Set([\"__context\"]),\n importedCandidates: new Map(),\n }\n : createEmptyCandidateResult()\n );\n\n return needsContext;\n }\n\n return scanFunction(resolvedHelper.path, resolvedHelper.moduleAnalysis);\n}\n\nexport default declare((api) => {\n api.assertVersion(7);\n t = api.types;\n\n return {\n name: \"transform-litsx-element-candidates\",\n inherits: jsxSyntaxPlugin.default || jsxSyntaxPlugin,\n visitor: {\n Program: {\n enter(path) {\n path.scope.crawl();\n path.setData(\"__litsxAvailableNames\", null);\n path.setData(\"__litsxHelperPaths\", null);\n path.setData(\"__litsxHelperCandidateCache\", new WeakMap());\n path.setData(\"__litsxImportedModuleAnalyses\", new Map());\n path.setData(\"__litsxResolvedImports\", new Map());\n },\n },\n FunctionDeclaration: {\n exit(path, state) {\n if (isInsideFunctionOrClass(path)) {\n return;\n }\n\n const programPath = path.findParent((entry) => entry.isProgram());\n const result = collectCandidateResult(\n path,\n programPath,\n {\n ...(state.opts || {}),\n filename: state.file?.opts?.filename || \"\",\n }\n );\n path.node._litsxElementCandidates = result.localCandidates;\n path.node._litsxImportedElementCandidates = [...result.importedCandidates.values()];\n },\n },\n ArrowFunctionExpression: {\n exit(path, state) {\n if (isInsideFunctionOrClass(path)) {\n return;\n }\n\n const programPath = path.findParent((entry) => entry.isProgram());\n const result = collectCandidateResult(\n path,\n programPath,\n {\n ...(state.opts || {}),\n filename: state.file?.opts?.filename || \"\",\n }\n );\n path.node._litsxElementCandidates = result.localCandidates;\n path.node._litsxImportedElementCandidates = [...result.importedCandidates.values()];\n },\n },\n FunctionExpression: {\n exit(path, state) {\n if (isInsideFunctionOrClass(path)) {\n return;\n }\n\n const programPath = path.findParent((entry) => entry.isProgram());\n const result = collectCandidateResult(\n path,\n programPath,\n {\n ...(state.opts || {}),\n filename: state.file?.opts?.filename || \"\",\n }\n );\n path.node._litsxElementCandidates = result.localCandidates;\n path.node._litsxImportedElementCandidates = [...result.importedCandidates.values()];\n },\n },\n },\n };\n});\n"],"names":["normalizeFilePath","ensureTypescriptModule"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litsx/babel-preset-litsx",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Canonical native Babel preset for LitSX-authored source",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -73,13 +73,15 @@
73
73
  "dependencies": {
74
74
  "@babel/helper-plugin-utils": "^7.28.6",
75
75
  "@babel/plugin-syntax-jsx": "^7.28.6",
76
+ "@babel/traverse": "^7.28.5",
77
+ "@litsx/babel-parser": "^0.2.1",
76
78
  "@litsx/babel-plugin-shared-hooks": "^0.2.1",
77
79
  "@litsx/babel-plugin-transform-jsx-html-template": "^0.3.0",
78
80
  "@litsx/babel-plugin-transform-litsx-scoped-elements": "^0.2.1",
79
81
  "@litsx/typescript-session": "^0.2.1"
80
82
  },
81
83
  "scripts": {
82
- "build": "../../node_modules/.bin/rollup --config rollup.config.mjs",
84
+ "build": "../../node_modules/.bin/rollup --config rollup.config.js",
83
85
  "prepack": "yarn build"
84
86
  }
85
87
  }
@@ -22,9 +22,6 @@ import {
22
22
  setWrapperUtilsBabelTypes,
23
23
  } from "./transform-litsx-wrapper-utils.js";
24
24
  import {
25
- createComponentInstanceRefSyncStatement,
26
- hasRefProp,
27
- lowerForwardedElementRefs,
28
25
  setRefsBabelTypes,
29
26
  } from "./transform-litsx-refs.js";
30
27
  import {
@@ -33,10 +30,20 @@ import {
33
30
  setClassGenerationBabelTypes,
34
31
  } from "./transform-litsx-class-generation.js";
35
32
  import {
36
- replaceParamReferences,
37
33
  setParamRewriteBabelTypes,
38
- transformJSXExpressions,
39
34
  } from "./transform-litsx-param-rewrites.js";
35
+ import {
36
+ setRendererCallsBabelTypes,
37
+ } from "./transform-litsx-renderer-calls.js";
38
+ import {
39
+ getAnnotatedElementCandidates,
40
+ getAnnotatedImportedElementCandidates,
41
+ setElementCandidatesBabelTypes,
42
+ } from "./transform-litsx-element-candidates.js";
43
+ import {
44
+ prepareComponentRender,
45
+ setRenderBodyBabelTypes,
46
+ } from "./transform-litsx-render-body.js";
40
47
  import {
41
48
  finalizeProgram,
42
49
  setProgramBabelTypes,
@@ -64,6 +71,9 @@ export function createTransformFunctionToClassPlugin(defaultPluginOptions = {})
64
71
  setRefsBabelTypes(t);
65
72
  setClassGenerationBabelTypes(t);
66
73
  setParamRewriteBabelTypes(t);
74
+ setRendererCallsBabelTypes(t);
75
+ setElementCandidatesBabelTypes(t);
76
+ setRenderBodyBabelTypes(t);
67
77
  setProgramBabelTypes(t);
68
78
  const resolvedPluginOptions = {
69
79
  ...defaultPluginOptions,
@@ -365,8 +375,8 @@ function getTypeResolverForFunction(functionPath, state) {
365
375
 
366
376
  function transformFunction(functionPath, programPath, className, options = {}) {
367
377
  const { node } = functionPath;
368
- const elementCandidates = collectElementCandidates(functionPath, programPath, options);
369
- const forwardRefOptions = options.forwardRef || null;
378
+ const elementCandidates = getAnnotatedElementCandidates(functionPath, programPath, options);
379
+ const importedElementCandidates = getAnnotatedImportedElementCandidates(functionPath, programPath, options);
370
380
  let resolvedName = className;
371
381
  if (!resolvedName && node && node.id && t.isIdentifier(node.id)) {
372
382
  resolvedName = node.id.name;
@@ -392,19 +402,21 @@ function transformFunction(functionPath, programPath, className, options = {}) {
392
402
  assertStaticHoistsStayTopLevel(functionPath);
393
403
  collectNativeClassNameWarnings(functionPath, options.warn, options);
394
404
 
395
- let returnStatement;
396
- functionPath.traverse({
397
- ReturnStatement(returnPath) {
398
- if (t.isJSXElement(returnPath.node.argument)) {
399
- returnStatement = returnPath.node;
400
- transformJSXExpressions(returnPath, bindings, options.state ?? null);
401
- }
402
- },
403
- });
405
+ const renderPreparation = prepareComponentRender(
406
+ functionPath,
407
+ node,
408
+ propertyNames,
409
+ bindings,
410
+ nestedInitializers,
411
+ options
412
+ );
404
413
 
405
- if (!returnStatement) return;
414
+ if (!renderPreparation?.returnStatement) return;
406
415
 
407
- const capturedPropAliasStatements = replaceParamReferences(functionPath, bindings, propertyNames);
416
+ const {
417
+ needsCallbackRef,
418
+ prefixStatements,
419
+ } = renderPreparation;
408
420
 
409
421
  const usedNames = new Set([
410
422
  ...Object.keys(functionPath.scope.bindings || {}),
@@ -414,41 +426,12 @@ function transformFunction(functionPath, programPath, className, options = {}) {
414
426
  ]);
415
427
 
416
428
  const handlerInfos = processHandlers(functionPath, usedNames);
417
-
418
429
  const renderStatements = t.isBlockStatement(node.body)
419
430
  ? [...node.body.body]
420
431
  : [t.returnStatement(node.body)];
421
432
 
422
- const resolvedRefPropName = forwardRefOptions?.propName ||
423
- (propertyNames.has("ref") || hasRefProp(functionPath) ? "ref" : null);
424
- let needsCallbackRef = false;
425
-
426
- if (resolvedRefPropName) {
427
- renderStatements.unshift(
428
- ...lowerForwardedElementRefs(functionPath, resolvedRefPropName)
429
- );
430
- needsCallbackRef = renderStatements.some(
431
- (statement) =>
432
- t.isExpressionStatement(statement) &&
433
- t.isCallExpression(statement.expression) &&
434
- t.isIdentifier(statement.expression.callee, { name: "useCallbackRef" })
435
- ) || needsCallbackRef;
436
- }
437
-
438
- if (resolvedRefPropName && !forwardRefOptions) {
439
- renderStatements.unshift(createComponentInstanceRefSyncStatement());
440
- needsCallbackRef = true;
441
- }
442
-
443
- if (capturedPropAliasStatements.length > 0) {
444
- renderStatements.unshift(...capturedPropAliasStatements);
445
- }
446
-
447
- if (nestedInitializers.length > 0) {
448
- const initializerStatements = nestedInitializers.map(({ pattern, root, defaultValue }) =>
449
- createNestedInitializerStatement(pattern, root, defaultValue, t)
450
- );
451
- renderStatements.unshift(...initializerStatements);
433
+ if (prefixStatements.length > 0) {
434
+ renderStatements.unshift(...prefixStatements);
452
435
  }
453
436
 
454
437
  const classMembers = [];
@@ -497,6 +480,20 @@ function transformFunction(functionPath, programPath, className, options = {}) {
497
480
  elementCandidates.forEach((candidate) => elementSet.add(candidate));
498
481
  }
499
482
 
483
+ if (classNode && importedElementCandidates.length > 0) {
484
+ classNode._litsxImportedElementCandidates ||= [];
485
+ importedElementCandidates.forEach((candidate) => {
486
+ if (!classNode._litsxImportedElementCandidates.some(
487
+ (entry) =>
488
+ entry.sourceFile === candidate.sourceFile &&
489
+ entry.importedName === candidate.importedName &&
490
+ entry.tagName === candidate.tagName
491
+ )) {
492
+ classNode._litsxImportedElementCandidates.push(candidate);
493
+ }
494
+ });
495
+ }
496
+
500
497
  return classNode;
501
498
  }
502
499
 
@@ -513,185 +510,3 @@ function ensureClassIdentifier(classNode, fallbackName) {
513
510
  classNode.id = identifier;
514
511
  return identifier;
515
512
  }
516
-
517
- function createThisMemberExpression(propName) {
518
- return t.memberExpression(t.thisExpression(), t.identifier(propName));
519
- }
520
-
521
- function createNestedInitializerStatement(pattern, root, defaultValue, t) {
522
- const rootAccess = createThisMemberExpression(root);
523
- let sourceExpression = rootAccess;
524
-
525
- if (defaultValue) {
526
- sourceExpression = t.logicalExpression(
527
- "??",
528
- t.cloneNode(rootAccess),
529
- t.cloneNode(defaultValue)
530
- );
531
- }
532
-
533
- return t.variableDeclaration("const", [
534
- t.variableDeclarator(t.cloneNode(pattern), sourceExpression),
535
- ]);
536
- }
537
-
538
- function collectElementCandidates(functionPath, programPath, options = {}) {
539
- const candidates = new Set();
540
- if (!programPath) return candidates;
541
- programPath.scope.crawl();
542
- const compatPascalNames =
543
- programPath.getData("__litsxCompatPascalNames") || new Set();
544
-
545
- const availableNames = new Set();
546
- const helperPaths = new Map();
547
- programPath.get("body").forEach((nodePath) => {
548
- if (nodePath.isImportDeclaration()) {
549
- nodePath.node.specifiers.forEach((specifier) => {
550
- if (specifier.local?.name) {
551
- availableNames.add(specifier.local.name);
552
- }
553
- });
554
- return;
555
- }
556
-
557
- if (nodePath.isClassDeclaration() && nodePath.node.id?.name) {
558
- availableNames.add(nodePath.node.id.name);
559
- return;
560
- }
561
-
562
- if (
563
- (nodePath.isExportNamedDeclaration() || nodePath.isExportDefaultDeclaration()) &&
564
- nodePath.get("declaration")?.isClassDeclaration?.() &&
565
- nodePath.node.declaration?.id?.name
566
- ) {
567
- availableNames.add(nodePath.node.declaration.id.name);
568
- return;
569
- }
570
-
571
- if (nodePath.isFunctionDeclaration() && nodePath.node.id?.name) {
572
- availableNames.add(nodePath.node.id.name);
573
- helperPaths.set(nodePath.node.id.name, nodePath);
574
- return;
575
- }
576
-
577
- if (!nodePath.isVariableDeclaration()) return;
578
- nodePath.get("declarations").forEach((declaratorPath) => {
579
- const declarator = declaratorPath.node;
580
- if (!t.isIdentifier(declarator.id)) {
581
- return;
582
- }
583
-
584
- availableNames.add(declarator.id.name);
585
-
586
- const initPath = declaratorPath.get("init");
587
- if (
588
- initPath?.isArrowFunctionExpression?.() ||
589
- initPath?.isFunctionExpression?.()
590
- ) {
591
- helperPaths.set(declarator.id.name, initPath);
592
- }
593
- });
594
- });
595
-
596
- const helperCandidateCache = new Map();
597
-
598
- function isCapitalizedName(name) {
599
- if (typeof name !== "string" || name.length === 0) {
600
- return false;
601
- }
602
-
603
- const first = name[0];
604
- return first === first.toUpperCase() && first !== first.toLowerCase();
605
- }
606
-
607
- function toKebab(name) {
608
- return name.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
609
- }
610
-
611
- function isProgramLevelBinding(binding) {
612
- return binding?.scope?.path?.isProgram?.() === true;
613
- }
614
-
615
- function maybeRewriteComponentName(nameNode, pathForErrors = null) {
616
- if (!nameNode || nameNode.type !== "JSXIdentifier") return null;
617
- const originalName = nameNode.__scopedOriginal || nameNode.name;
618
- if (!isCapitalizedName(originalName)) return null;
619
- const binding = pathForErrors?.scope?.getBinding?.(originalName) || null;
620
- if (!binding) {
621
- if (availableNames.has(originalName)) {
622
- return originalName;
623
- }
624
- if (compatPascalNames.has(originalName)) {
625
- return null;
626
- }
627
- if (options?.allowUnknownPascalCase === true) {
628
- return null;
629
- }
630
- throw (pathForErrors?.buildCodeFrameError?.(
631
- `Unknown LitSX component "${originalName}". Add an import or declare it in this module before using it in JSX.`
632
- ) || new Error(
633
- `Unknown LitSX component "${originalName}". Add an import or declare it in this module before using it in JSX.`
634
- ));
635
- }
636
-
637
- if (!isProgramLevelBinding(binding)) {
638
- return null;
639
- }
640
-
641
- return originalName;
642
- }
643
-
644
- function scanFunction(path, seen = new Set()) {
645
- if (!path?.node) {
646
- return new Set();
647
- }
648
-
649
- if (helperCandidateCache.has(path.node)) {
650
- return new Set(helperCandidateCache.get(path.node));
651
- }
652
-
653
- if (seen.has(path.node)) {
654
- return new Set();
655
- }
656
-
657
- const nextSeen = new Set(seen);
658
- nextSeen.add(path.node);
659
- const localCandidates = new Set();
660
- const referencedHelpers = new Set();
661
-
662
- path.traverse({
663
- JSXOpeningElement(jsxPath) {
664
- const candidate = maybeRewriteComponentName(jsxPath.node.name, jsxPath);
665
- if (candidate) {
666
- localCandidates.add(candidate);
667
- }
668
- },
669
- JSXClosingElement(jsxPath) {
670
- maybeRewriteComponentName(jsxPath.node.name, jsxPath);
671
- },
672
- Identifier(identifierPath) {
673
- if (!identifierPath.isReferencedIdentifier()) {
674
- return;
675
- }
676
-
677
- if (!helperPaths.has(identifierPath.node.name)) {
678
- return;
679
- }
680
-
681
- referencedHelpers.add(identifierPath.node.name);
682
- },
683
- });
684
-
685
- referencedHelpers.forEach((helperName) => {
686
- const helperCandidates = scanFunction(helperPaths.get(helperName), nextSeen);
687
- helperCandidates.forEach((candidate) => localCandidates.add(candidate));
688
- });
689
-
690
- helperCandidateCache.set(path.node, new Set(localCandidates));
691
- return localCandidates;
692
- }
693
-
694
- scanFunction(functionPath).forEach((candidate) => candidates.add(candidate));
695
-
696
- return candidates;
697
- }