@contentful/experience-design-system-cli 2.2.1

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.
Files changed (165) hide show
  1. package/README.md +532 -0
  2. package/bin/cli.js +58 -0
  3. package/dist/package.json +56 -0
  4. package/dist/src/analyze/command.d.ts +3 -0
  5. package/dist/src/analyze/command.js +175 -0
  6. package/dist/src/analyze/extract/astro.d.ts +5 -0
  7. package/dist/src/analyze/extract/astro.js +280 -0
  8. package/dist/src/analyze/extract/pipeline.d.ts +6 -0
  9. package/dist/src/analyze/extract/pipeline.js +298 -0
  10. package/dist/src/analyze/extract/react.d.ts +2 -0
  11. package/dist/src/analyze/extract/react.js +1949 -0
  12. package/dist/src/analyze/extract/slot-detection.d.ts +35 -0
  13. package/dist/src/analyze/extract/slot-detection.js +101 -0
  14. package/dist/src/analyze/extract/stencil.d.ts +2 -0
  15. package/dist/src/analyze/extract/stencil.js +293 -0
  16. package/dist/src/analyze/extract/tsx-shared.d.ts +8 -0
  17. package/dist/src/analyze/extract/tsx-shared.js +263 -0
  18. package/dist/src/analyze/extract/vue-tsx.d.ts +2 -0
  19. package/dist/src/analyze/extract/vue-tsx.js +498 -0
  20. package/dist/src/analyze/extract/vue.d.ts +5 -0
  21. package/dist/src/analyze/extract/vue.js +647 -0
  22. package/dist/src/analyze/extract/web-components.d.ts +2 -0
  23. package/dist/src/analyze/extract/web-components.js +866 -0
  24. package/dist/src/analyze/pre-classify.d.ts +17 -0
  25. package/dist/src/analyze/pre-classify.js +144 -0
  26. package/dist/src/analyze/select/command.d.ts +2 -0
  27. package/dist/src/analyze/select/command.js +256 -0
  28. package/dist/src/analyze/select/index.d.ts +6 -0
  29. package/dist/src/analyze/select/index.js +5 -0
  30. package/dist/src/analyze/select/parser.d.ts +6 -0
  31. package/dist/src/analyze/select/parser.js +53 -0
  32. package/dist/src/analyze/select/persistence.d.ts +9 -0
  33. package/dist/src/analyze/select/persistence.js +42 -0
  34. package/dist/src/analyze/select/stdout.d.ts +7 -0
  35. package/dist/src/analyze/select/stdout.js +3 -0
  36. package/dist/src/analyze/select/tui/App.d.ts +8 -0
  37. package/dist/src/analyze/select/tui/App.js +491 -0
  38. package/dist/src/analyze/select/tui/components/ComponentDetail.d.ts +20 -0
  39. package/dist/src/analyze/select/tui/components/ComponentDetail.js +43 -0
  40. package/dist/src/analyze/select/tui/components/FieldEditor.d.ts +11 -0
  41. package/dist/src/analyze/select/tui/components/FieldEditor.js +531 -0
  42. package/dist/src/analyze/select/tui/components/FinalizeDialog.d.ts +10 -0
  43. package/dist/src/analyze/select/tui/components/FinalizeDialog.js +15 -0
  44. package/dist/src/analyze/select/tui/components/HelpOverlay.d.ts +7 -0
  45. package/dist/src/analyze/select/tui/components/HelpOverlay.js +11 -0
  46. package/dist/src/analyze/select/tui/components/JsonEditor.d.ts +11 -0
  47. package/dist/src/analyze/select/tui/components/JsonEditor.js +154 -0
  48. package/dist/src/analyze/select/tui/components/JsonPanel.d.ts +11 -0
  49. package/dist/src/analyze/select/tui/components/JsonPanel.js +62 -0
  50. package/dist/src/analyze/select/tui/components/PreviewSummaryBar.d.ts +8 -0
  51. package/dist/src/analyze/select/tui/components/PreviewSummaryBar.js +29 -0
  52. package/dist/src/analyze/select/tui/components/QuitDialog.d.ts +8 -0
  53. package/dist/src/analyze/select/tui/components/QuitDialog.js +14 -0
  54. package/dist/src/analyze/select/tui/components/Sidebar.d.ts +15 -0
  55. package/dist/src/analyze/select/tui/components/Sidebar.js +48 -0
  56. package/dist/src/analyze/select/tui/components/SourcePanel.d.ts +11 -0
  57. package/dist/src/analyze/select/tui/components/SourcePanel.js +52 -0
  58. package/dist/src/analyze/select/tui/components/StatusBar.d.ts +11 -0
  59. package/dist/src/analyze/select/tui/components/StatusBar.js +6 -0
  60. package/dist/src/analyze/select/tui/components/TopBar.d.ts +10 -0
  61. package/dist/src/analyze/select/tui/components/TopBar.js +5 -0
  62. package/dist/src/analyze/select/tui/hooks/useImmediateInput.d.ts +24 -0
  63. package/dist/src/analyze/select/tui/hooks/useImmediateInput.js +68 -0
  64. package/dist/src/analyze/select/tui/hooks/useKeymap.d.ts +24 -0
  65. package/dist/src/analyze/select/tui/hooks/useKeymap.js +67 -0
  66. package/dist/src/analyze/select/tui/hooks/useSession.d.ts +19 -0
  67. package/dist/src/analyze/select/tui/hooks/useSession.js +52 -0
  68. package/dist/src/analyze/select/tui/hooks/useUndo.d.ts +8 -0
  69. package/dist/src/analyze/select/tui/hooks/useUndo.js +26 -0
  70. package/dist/src/analyze/select/types.d.ts +46 -0
  71. package/dist/src/analyze/select/types.js +20 -0
  72. package/dist/src/analyze/select-agent/command.d.ts +2 -0
  73. package/dist/src/analyze/select-agent/command.js +208 -0
  74. package/dist/src/analyze/tui/AnalyzeView.d.ts +24 -0
  75. package/dist/src/analyze/tui/AnalyzeView.js +38 -0
  76. package/dist/src/apply/api-client.d.ts +35 -0
  77. package/dist/src/apply/api-client.js +143 -0
  78. package/dist/src/apply/command.d.ts +6 -0
  79. package/dist/src/apply/command.js +787 -0
  80. package/dist/src/apply/manifest.d.ts +1 -0
  81. package/dist/src/apply/manifest.js +1 -0
  82. package/dist/src/apply/tui/SelectView.d.ts +18 -0
  83. package/dist/src/apply/tui/SelectView.js +34 -0
  84. package/dist/src/apply/tui/ServerApplyView.d.ts +32 -0
  85. package/dist/src/apply/tui/ServerApplyView.js +42 -0
  86. package/dist/src/apply/tui/ServerPreviewView.d.ts +9 -0
  87. package/dist/src/apply/tui/ServerPreviewView.js +21 -0
  88. package/dist/src/credentials-store.d.ts +8 -0
  89. package/dist/src/credentials-store.js +30 -0
  90. package/dist/src/generate/agent-runner.d.ts +86 -0
  91. package/dist/src/generate/agent-runner.js +314 -0
  92. package/dist/src/generate/command.d.ts +2 -0
  93. package/dist/src/generate/command.js +545 -0
  94. package/dist/src/generate/edit/command.d.ts +2 -0
  95. package/dist/src/generate/edit/command.js +126 -0
  96. package/dist/src/generate/prompt-builder.d.ts +18 -0
  97. package/dist/src/generate/prompt-builder.js +202 -0
  98. package/dist/src/generate/tui/GenerateView.d.ts +12 -0
  99. package/dist/src/generate/tui/GenerateView.js +10 -0
  100. package/dist/src/import/command.d.ts +2 -0
  101. package/dist/src/import/command.js +96 -0
  102. package/dist/src/import/orchestrator.d.ts +37 -0
  103. package/dist/src/import/orchestrator.js +374 -0
  104. package/dist/src/import/path-utils.d.ts +15 -0
  105. package/dist/src/import/path-utils.js +30 -0
  106. package/dist/src/import/tui/WizardApp.d.ts +10 -0
  107. package/dist/src/import/tui/WizardApp.js +906 -0
  108. package/dist/src/import/tui/steps/CredentialsStep.d.ts +15 -0
  109. package/dist/src/import/tui/steps/CredentialsStep.js +79 -0
  110. package/dist/src/import/tui/steps/DoneStep.d.ts +20 -0
  111. package/dist/src/import/tui/steps/DoneStep.js +17 -0
  112. package/dist/src/import/tui/steps/ErrorStep.d.ts +8 -0
  113. package/dist/src/import/tui/steps/ErrorStep.js +11 -0
  114. package/dist/src/import/tui/steps/GateStep.d.ts +14 -0
  115. package/dist/src/import/tui/steps/GateStep.js +20 -0
  116. package/dist/src/import/tui/steps/GenerateReviewStep.d.ts +8 -0
  117. package/dist/src/import/tui/steps/GenerateReviewStep.js +208 -0
  118. package/dist/src/import/tui/steps/PathValidationStep.d.ts +10 -0
  119. package/dist/src/import/tui/steps/PathValidationStep.js +151 -0
  120. package/dist/src/import/tui/steps/PreviewStep.d.ts +21 -0
  121. package/dist/src/import/tui/steps/PreviewStep.js +36 -0
  122. package/dist/src/import/tui/steps/RunningStep.d.ts +10 -0
  123. package/dist/src/import/tui/steps/RunningStep.js +20 -0
  124. package/dist/src/import/tui/steps/TokenInputStep.d.ts +8 -0
  125. package/dist/src/import/tui/steps/TokenInputStep.js +70 -0
  126. package/dist/src/import/tui/steps/WelcomeStep.d.ts +7 -0
  127. package/dist/src/import/tui/steps/WelcomeStep.js +33 -0
  128. package/dist/src/import/tui/steps/WizardPreviewStep.d.ts +15 -0
  129. package/dist/src/import/tui/steps/WizardPreviewStep.js +121 -0
  130. package/dist/src/import/tui/steps/preview-diff.d.ts +10 -0
  131. package/dist/src/import/tui/steps/preview-diff.js +132 -0
  132. package/dist/src/index.d.ts +1 -0
  133. package/dist/src/index.js +2 -0
  134. package/dist/src/output/format.d.ts +23 -0
  135. package/dist/src/output/format.js +110 -0
  136. package/dist/src/print/command.d.ts +2 -0
  137. package/dist/src/print/command.js +199 -0
  138. package/dist/src/print/validate/tui/ValidateView.d.ts +15 -0
  139. package/dist/src/print/validate/tui/ValidateView.js +37 -0
  140. package/dist/src/print/validate/validators/cdf-validator.d.ts +2 -0
  141. package/dist/src/print/validate/validators/cdf-validator.js +104 -0
  142. package/dist/src/print/validate/validators/dtcg-validator.d.ts +2 -0
  143. package/dist/src/print/validate/validators/dtcg-validator.js +110 -0
  144. package/dist/src/print/validate/validators/format-errors.d.ts +12 -0
  145. package/dist/src/print/validate/validators/format-errors.js +18 -0
  146. package/dist/src/program.d.ts +2 -0
  147. package/dist/src/program.js +25 -0
  148. package/dist/src/session/command.d.ts +2 -0
  149. package/dist/src/session/command.js +261 -0
  150. package/dist/src/session/db.d.ts +111 -0
  151. package/dist/src/session/db.js +1114 -0
  152. package/dist/src/session/migration.d.ts +4 -0
  153. package/dist/src/session/migration.js +117 -0
  154. package/dist/src/session/session-id.d.ts +1 -0
  155. package/dist/src/session/session-id.js +212 -0
  156. package/dist/src/session/stats.d.ts +27 -0
  157. package/dist/src/session/stats.js +89 -0
  158. package/dist/src/setup/command.d.ts +2 -0
  159. package/dist/src/setup/command.js +765 -0
  160. package/dist/src/types.d.ts +48 -0
  161. package/dist/src/types.js +1 -0
  162. package/package.json +55 -0
  163. package/skills/generate-components.md +361 -0
  164. package/skills/generate-tokens.md +194 -0
  165. package/skills/select-components.md +180 -0
@@ -0,0 +1,263 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ import { Node } from 'ts-morph';
4
+ import ts from 'typescript';
5
+ const packageRootByFilePathCache = new Map();
6
+ const workspacePackageManifestCache = new Map();
7
+ const nearestTsConfigPathCache = new Map();
8
+ const tsConfigPathsCache = new Map();
9
+ export function extractAllowedValues(type) {
10
+ if (!type.isUnion())
11
+ return undefined;
12
+ const literals = type
13
+ .getUnionTypes()
14
+ .filter((t) => t.isStringLiteral())
15
+ .map((t) => t.getLiteralValueOrThrow());
16
+ return literals.length >= 2 ? literals.sort() : undefined;
17
+ }
18
+ export function getNodeDefinitions(node) {
19
+ const anyNode = node;
20
+ return anyNode.getDefinitions?.() ?? [];
21
+ }
22
+ export function getTypeTargetDeclarations(targetNode, allowWorkspaceImportFallback = false) {
23
+ return getNodeDefinitions(targetNode).flatMap((definition) => {
24
+ const declaration = definition.getDeclarationNode();
25
+ if (!declaration)
26
+ return [];
27
+ if (!allowWorkspaceImportFallback || !Node.isImportSpecifier(declaration)) {
28
+ return [declaration];
29
+ }
30
+ const resolvedDeclarations = resolveWorkspaceImportSpecifierDeclarations(declaration, targetNode);
31
+ return resolvedDeclarations.length > 0 ? resolvedDeclarations : [declaration];
32
+ });
33
+ }
34
+ export function getValueTargetDeclarations(targetNode) {
35
+ return getNodeDefinitions(targetNode).flatMap((definition) => {
36
+ const declaration = definition.getDeclarationNode();
37
+ if (!declaration)
38
+ return [];
39
+ if (!Node.isImportSpecifier(declaration)) {
40
+ return [declaration];
41
+ }
42
+ const resolvedDeclarations = resolveWorkspaceImportSpecifierDeclarations(declaration, targetNode);
43
+ return resolvedDeclarations.length > 0 ? resolvedDeclarations : [declaration];
44
+ });
45
+ }
46
+ export function getTypeReferenceName(typeNode) {
47
+ if (Node.isTypeReference(typeNode)) {
48
+ return typeNode.getTypeName().getText().split('.').pop();
49
+ }
50
+ if (Node.isExpressionWithTypeArguments(typeNode)) {
51
+ return typeNode.getExpression().getText().split('.').pop();
52
+ }
53
+ return undefined;
54
+ }
55
+ function resolveWorkspaceImportSpecifierDeclarations(importSpecifier, referenceNode) {
56
+ if (!Node.isImportSpecifier(importSpecifier))
57
+ return [];
58
+ const importDeclaration = importSpecifier.getImportDeclaration();
59
+ const moduleSpecifierSourceFile = importDeclaration.getModuleSpecifierSourceFile();
60
+ if (moduleSpecifierSourceFile) {
61
+ return getExportedDeclarationsForImportSpecifier(importSpecifier, moduleSpecifierSourceFile);
62
+ }
63
+ const moduleSpecifier = importDeclaration.getModuleSpecifierValue();
64
+ if (!isBareModuleSpecifier(moduleSpecifier))
65
+ return [];
66
+ const workspaceEntrySourceFile = findWorkspacePackageEntrySourceFile(referenceNode.getSourceFile(), moduleSpecifier);
67
+ if (workspaceEntrySourceFile) {
68
+ return getExportedDeclarationsForImportSpecifier(importSpecifier, workspaceEntrySourceFile);
69
+ }
70
+ const aliasedSourceFile = findRepoLocalAliasSourceFile(referenceNode.getSourceFile(), moduleSpecifier);
71
+ if (!aliasedSourceFile)
72
+ return [];
73
+ return getExportedDeclarationsForImportSpecifier(importSpecifier, aliasedSourceFile);
74
+ }
75
+ function getExportedDeclarationsForImportSpecifier(importSpecifier, sourceFile) {
76
+ if (!Node.isImportSpecifier(importSpecifier))
77
+ return [];
78
+ const exportedName = importSpecifier.getNameNode().getText();
79
+ return sourceFile.getExportedDeclarations().get(exportedName) ?? [];
80
+ }
81
+ function isBareModuleSpecifier(moduleSpecifier) {
82
+ return !moduleSpecifier.startsWith('.') && !moduleSpecifier.startsWith('/');
83
+ }
84
+ function findRepoLocalAliasSourceFile(originSourceFile, moduleSpecifier) {
85
+ const resolvedPath = resolveRepoLocalAliasImportPath(originSourceFile.getFilePath(), moduleSpecifier);
86
+ if (!resolvedPath)
87
+ return undefined;
88
+ const project = originSourceFile.getProject();
89
+ return findProjectSourceFileByImportPath(project, resolvedPath);
90
+ }
91
+ function resolveRepoLocalAliasImportPath(importingFilePath, moduleSpecifier) {
92
+ const nearestTsConfigPath = findNearestTsConfigPath(importingFilePath);
93
+ if (!nearestTsConfigPath)
94
+ return undefined;
95
+ const tsConfigPaths = getTsConfigPaths(nearestTsConfigPath);
96
+ if (!tsConfigPaths)
97
+ return undefined;
98
+ for (const [pattern, targets] of Object.entries(tsConfigPaths.paths)) {
99
+ const match = matchTsConfigPathPattern(pattern, moduleSpecifier);
100
+ if (!match.matched)
101
+ continue;
102
+ for (const targetPattern of targets) {
103
+ const substitutedTarget = substituteTsConfigPathTarget(targetPattern, match.wildcard);
104
+ const resolvedPath = resolve(tsConfigPaths.baseUrl, substitutedTarget);
105
+ const sourceFilePath = resolveImportSourcePath(resolvedPath);
106
+ if (sourceFilePath)
107
+ return sourceFilePath;
108
+ }
109
+ }
110
+ return undefined;
111
+ }
112
+ function findNearestTsConfigPath(filePath) {
113
+ if (nearestTsConfigPathCache.has(filePath)) {
114
+ return nearestTsConfigPathCache.get(filePath) ?? undefined;
115
+ }
116
+ let currentDir = dirname(filePath);
117
+ while (true) {
118
+ for (const candidateName of ['tsconfig.json', 'jsconfig.json']) {
119
+ const candidatePath = join(currentDir, candidateName);
120
+ if (existsSync(candidatePath)) {
121
+ nearestTsConfigPathCache.set(filePath, candidatePath);
122
+ return candidatePath;
123
+ }
124
+ }
125
+ const parentDir = dirname(currentDir);
126
+ if (parentDir === currentDir) {
127
+ nearestTsConfigPathCache.set(filePath, null);
128
+ return undefined;
129
+ }
130
+ currentDir = parentDir;
131
+ }
132
+ }
133
+ function getTsConfigPaths(tsConfigPath) {
134
+ if (tsConfigPathsCache.has(tsConfigPath)) {
135
+ return tsConfigPathsCache.get(tsConfigPath) ?? undefined;
136
+ }
137
+ const configFile = ts.readConfigFile(tsConfigPath, ts.sys.readFile);
138
+ if (configFile.error || !configFile.config) {
139
+ tsConfigPathsCache.set(tsConfigPath, null);
140
+ return undefined;
141
+ }
142
+ const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, dirname(tsConfigPath));
143
+ const paths = parsedConfig.options.paths;
144
+ if (!paths || Object.keys(paths).length === 0) {
145
+ tsConfigPathsCache.set(tsConfigPath, null);
146
+ return undefined;
147
+ }
148
+ const baseUrl = parsedConfig.options.baseUrl ?? dirname(tsConfigPath);
149
+ const result = { baseUrl, paths };
150
+ tsConfigPathsCache.set(tsConfigPath, result);
151
+ return result;
152
+ }
153
+ function matchTsConfigPathPattern(pattern, specifier) {
154
+ if (!pattern.includes('*')) {
155
+ return { matched: pattern === specifier };
156
+ }
157
+ const [prefix, suffix] = pattern.split('*');
158
+ if (!specifier.startsWith(prefix) || !specifier.endsWith(suffix)) {
159
+ return { matched: false };
160
+ }
161
+ return {
162
+ matched: true,
163
+ wildcard: specifier.slice(prefix.length, specifier.length - suffix.length),
164
+ };
165
+ }
166
+ function substituteTsConfigPathTarget(targetPattern, wildcard) {
167
+ return wildcard === undefined ? targetPattern : targetPattern.replace('*', wildcard);
168
+ }
169
+ function resolveImportSourcePath(basePath) {
170
+ const candidates = [
171
+ basePath,
172
+ `${basePath}.ts`,
173
+ `${basePath}.tsx`,
174
+ `${basePath}.js`,
175
+ `${basePath}.jsx`,
176
+ join(basePath, 'index.ts'),
177
+ join(basePath, 'index.tsx'),
178
+ join(basePath, 'index.js'),
179
+ join(basePath, 'index.jsx'),
180
+ ];
181
+ return candidates.find((candidatePath) => existsSync(candidatePath));
182
+ }
183
+ function findProjectSourceFileByImportPath(project, resolvedPath) {
184
+ const candidatePaths = [
185
+ resolvedPath,
186
+ `${resolvedPath}.ts`,
187
+ `${resolvedPath}.tsx`,
188
+ `${resolvedPath}.js`,
189
+ `${resolvedPath}.jsx`,
190
+ join(resolvedPath, 'index.ts'),
191
+ join(resolvedPath, 'index.tsx'),
192
+ join(resolvedPath, 'index.js'),
193
+ join(resolvedPath, 'index.jsx'),
194
+ ];
195
+ for (const candidatePath of candidatePaths) {
196
+ const sourceFile = project.getSourceFile(candidatePath);
197
+ if (sourceFile)
198
+ return sourceFile;
199
+ }
200
+ return undefined;
201
+ }
202
+ function findWorkspacePackageEntrySourceFile(originSourceFile, moduleSpecifier) {
203
+ const project = originSourceFile.getProject();
204
+ const candidateSourceFiles = project.getSourceFiles().filter((sourceFile) => {
205
+ const manifest = getWorkspacePackageManifestForSourceFile(sourceFile);
206
+ return manifest?.name === moduleSpecifier;
207
+ });
208
+ if (candidateSourceFiles.length === 0)
209
+ return undefined;
210
+ const packageRootDir = getWorkspacePackageManifestForSourceFile(candidateSourceFiles[0])?.rootDir;
211
+ if (!packageRootDir)
212
+ return undefined;
213
+ const preferredEntryPaths = [
214
+ join(packageRootDir, 'src/index.ts'),
215
+ join(packageRootDir, 'src/index.tsx'),
216
+ join(packageRootDir, 'index.ts'),
217
+ join(packageRootDir, 'index.tsx'),
218
+ ];
219
+ for (const entryPath of preferredEntryPaths) {
220
+ const entrySourceFile = project.getSourceFile(entryPath);
221
+ if (entrySourceFile) {
222
+ return entrySourceFile;
223
+ }
224
+ }
225
+ return candidateSourceFiles.find((sourceFile) => sourceFile.getDirectoryPath() === join(packageRootDir, 'src'));
226
+ }
227
+ function getWorkspacePackageManifestForSourceFile(sourceFile) {
228
+ const packageRootDir = findNearestPackageRootDir(sourceFile.getFilePath());
229
+ if (!packageRootDir)
230
+ return undefined;
231
+ if (workspacePackageManifestCache.has(packageRootDir)) {
232
+ return workspacePackageManifestCache.get(packageRootDir) ?? undefined;
233
+ }
234
+ const packageJsonPath = join(packageRootDir, 'package.json');
235
+ try {
236
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
237
+ const manifest = typeof packageJson.name === 'string' ? { name: packageJson.name, rootDir: packageRootDir } : null;
238
+ workspacePackageManifestCache.set(packageRootDir, manifest);
239
+ return manifest ?? undefined;
240
+ }
241
+ catch {
242
+ workspacePackageManifestCache.set(packageRootDir, null);
243
+ return undefined;
244
+ }
245
+ }
246
+ function findNearestPackageRootDir(filePath) {
247
+ if (packageRootByFilePathCache.has(filePath)) {
248
+ return packageRootByFilePathCache.get(filePath) ?? undefined;
249
+ }
250
+ let currentDir = dirname(filePath);
251
+ while (true) {
252
+ if (existsSync(join(currentDir, 'package.json'))) {
253
+ packageRootByFilePathCache.set(filePath, currentDir);
254
+ return currentDir;
255
+ }
256
+ const parentDir = dirname(currentDir);
257
+ if (parentDir === currentDir) {
258
+ packageRootByFilePathCache.set(filePath, null);
259
+ return undefined;
260
+ }
261
+ currentDir = parentDir;
262
+ }
263
+ }
@@ -0,0 +1,2 @@
1
+ import type { ComponentExtractionResult } from '../../types.js';
2
+ export declare function extractVueTsxComponents(filePaths: string[]): Promise<ComponentExtractionResult>;