@openrewrite/rewrite 8.68.0-20251204-151952 → 8.68.0-20251204-174357

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,69 @@
1
+ import { Recipe, RecipeRegistry } from '../recipe';
2
+ import { SourceFile } from '../tree';
3
+ export interface RecipeSpec {
4
+ packageName: string;
5
+ recipeName: string;
6
+ isLocalPath: boolean;
7
+ }
8
+ /**
9
+ * Parse a recipe specification in format "package:recipe" or "/path/to/module:recipe"
10
+ *
11
+ * Examples:
12
+ * @openrewrite/recipes-nodejs:replace-deprecated-slice
13
+ * some-package:my-recipe
14
+ * @scope/package:org.openrewrite.recipe.name
15
+ * /Users/dev/my-recipes:my-recipe
16
+ * ./local-recipes:my-recipe
17
+ * ../other-recipes:my-recipe
18
+ */
19
+ export declare function parseRecipeSpec(arg: string): RecipeSpec | null;
20
+ /**
21
+ * Parse recipe options from command line format
22
+ *
23
+ * Options can be:
24
+ * - key=value pairs (e.g., "text=hello")
25
+ * - boolean flags (just the key name, implies true)
26
+ * - JSON values (e.g., "items=[1,2,3]")
27
+ */
28
+ export declare function parseRecipeOptions(options: string[]): Record<string, any>;
29
+ /**
30
+ * Load recipes from a local directory path
31
+ */
32
+ export declare function loadLocalRecipes(localPath: string, registry: RecipeRegistry, verbose?: boolean): Promise<void>;
33
+ /**
34
+ * Install a recipe package from NPM and load its recipes into the registry
35
+ */
36
+ export declare function installRecipePackage(packageName: string, installDir: string, registry: RecipeRegistry, verbose?: boolean): Promise<void>;
37
+ /**
38
+ * Set up shared dependencies to avoid instanceof failures when loading recipes
39
+ * from a separate node_modules directory
40
+ */
41
+ export declare function setupSharedDependencies(targetModulePath: string): void;
42
+ /**
43
+ * Find a recipe by name in the registry
44
+ *
45
+ * Supports:
46
+ * - Exact match by FQN
47
+ * - Match by suffix (last segment of FQN)
48
+ * - Partial match (case-insensitive)
49
+ *
50
+ * Returns null if not found or if ambiguous (prints error message)
51
+ */
52
+ export declare function findRecipe(registry: RecipeRegistry, recipeName: string, options: Record<string, any>): Recipe | null;
53
+ /**
54
+ * Discover source files in a project directory, respecting .gitignore
55
+ */
56
+ export declare function discoverFiles(projectRoot: string, verbose?: boolean): Promise<string[]>;
57
+ /**
58
+ * Walk a directory recursively, collecting files
59
+ */
60
+ export declare function walkDirectory(dir: string, files: string[], ignored: Set<string>, projectRoot: string): Promise<void>;
61
+ /**
62
+ * Check if a file is accepted for parsing based on its extension
63
+ */
64
+ export declare function isAcceptedFile(filePath: string): boolean;
65
+ /**
66
+ * Parse source files using appropriate parsers
67
+ */
68
+ export declare function parseFiles(filePaths: string[], projectRoot: string, verbose?: boolean): Promise<SourceFile[]>;
69
+ //# sourceMappingURL=cli-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../../src/cli/cli-utils.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,WAAW,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAInC,MAAM,WAAW,UAAU;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAqB9D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAsBzE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,OAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,OAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CA8Df;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAgEtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACtB,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,MAAM,GAAG,IAAI,CA8Cf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmEpG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAC/B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAcxD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC5B,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAe,GACzB,OAAO,CAAC,UAAU,EAAE,CAAC,CAuDvB"}
@@ -0,0 +1,580 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
45
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
46
+ var m = o[Symbol.asyncIterator], i;
47
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
48
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
49
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
50
+ };
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.parseRecipeSpec = parseRecipeSpec;
53
+ exports.parseRecipeOptions = parseRecipeOptions;
54
+ exports.loadLocalRecipes = loadLocalRecipes;
55
+ exports.installRecipePackage = installRecipePackage;
56
+ exports.setupSharedDependencies = setupSharedDependencies;
57
+ exports.findRecipe = findRecipe;
58
+ exports.discoverFiles = discoverFiles;
59
+ exports.walkDirectory = walkDirectory;
60
+ exports.isAcceptedFile = isAcceptedFile;
61
+ exports.parseFiles = parseFiles;
62
+ /*
63
+ * Copyright 2025 the original author or authors.
64
+ * <p>
65
+ * Licensed under the Moderne Source Available License (the "License");
66
+ * you may not use this file except in compliance with the License.
67
+ * You may obtain a copy of the License at
68
+ * <p>
69
+ * https://docs.moderne.io/licensing/moderne-source-available-license
70
+ * <p>
71
+ * Unless required by applicable law or agreed to in writing, software
72
+ * distributed under the License is distributed on an "AS IS" BASIS,
73
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
74
+ * See the License for the specific language governing permissions and
75
+ * limitations under the License.
76
+ */
77
+ const fs = __importStar(require("fs"));
78
+ const fsp = __importStar(require("fs/promises"));
79
+ const path = __importStar(require("path"));
80
+ const child_process_1 = require("child_process");
81
+ const javascript_1 = require("../javascript");
82
+ const json_1 = require("../json");
83
+ /**
84
+ * Parse a recipe specification in format "package:recipe" or "/path/to/module:recipe"
85
+ *
86
+ * Examples:
87
+ * @openrewrite/recipes-nodejs:replace-deprecated-slice
88
+ * some-package:my-recipe
89
+ * @scope/package:org.openrewrite.recipe.name
90
+ * /Users/dev/my-recipes:my-recipe
91
+ * ./local-recipes:my-recipe
92
+ * ../other-recipes:my-recipe
93
+ */
94
+ function parseRecipeSpec(arg) {
95
+ // Format: "package:recipe" where package can be scoped (@scope/package) or a local path
96
+ const lastColonIndex = arg.lastIndexOf(':');
97
+ if (lastColonIndex === -1) {
98
+ return null;
99
+ }
100
+ const packageName = arg.substring(0, lastColonIndex);
101
+ const recipeName = arg.substring(lastColonIndex + 1);
102
+ if (!packageName || !recipeName) {
103
+ return null;
104
+ }
105
+ // Check if this is a local path
106
+ const isLocalPath = packageName.startsWith('/') ||
107
+ packageName.startsWith('./') ||
108
+ packageName.startsWith('../') ||
109
+ /^[A-Za-z]:[\\/]/.test(packageName); // Windows absolute path
110
+ return { packageName, recipeName, isLocalPath };
111
+ }
112
+ /**
113
+ * Parse recipe options from command line format
114
+ *
115
+ * Options can be:
116
+ * - key=value pairs (e.g., "text=hello")
117
+ * - boolean flags (just the key name, implies true)
118
+ * - JSON values (e.g., "items=[1,2,3]")
119
+ */
120
+ function parseRecipeOptions(options) {
121
+ const result = {};
122
+ for (const opt of options) {
123
+ const eqIndex = opt.indexOf('=');
124
+ if (eqIndex === -1) {
125
+ // Boolean flag
126
+ result[opt] = true;
127
+ }
128
+ else {
129
+ const key = opt.substring(0, eqIndex);
130
+ const value = opt.substring(eqIndex + 1);
131
+ // Try to parse as JSON for complex types
132
+ try {
133
+ result[key] = JSON.parse(value);
134
+ }
135
+ catch (_a) {
136
+ result[key] = value;
137
+ }
138
+ }
139
+ }
140
+ return result;
141
+ }
142
+ /**
143
+ * Load recipes from a local directory path
144
+ */
145
+ function loadLocalRecipes(localPath_1, registry_1) {
146
+ return __awaiter(this, arguments, void 0, function* (localPath, registry, verbose = false) {
147
+ // Resolve the path
148
+ const resolvedPath = path.resolve(localPath);
149
+ if (!fs.existsSync(resolvedPath)) {
150
+ throw new Error(`Local path does not exist: ${resolvedPath}`);
151
+ }
152
+ // Check if it's a directory or file
153
+ const stat = fs.statSync(resolvedPath);
154
+ let modulePath;
155
+ if (stat.isDirectory()) {
156
+ // Look for package.json to find the main entry point
157
+ const packageJsonPath = path.join(resolvedPath, 'package.json');
158
+ if (fs.existsSync(packageJsonPath)) {
159
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
160
+ // Use the main field, or default to dist/index.js
161
+ const main = pkg.main || 'dist/index.js';
162
+ modulePath = path.join(resolvedPath, main);
163
+ }
164
+ else {
165
+ // Try common entry points
166
+ const candidates = ['dist/index.js', 'index.js', 'src/index.ts'];
167
+ const found = candidates.find(c => fs.existsSync(path.join(resolvedPath, c)));
168
+ if (found) {
169
+ modulePath = path.join(resolvedPath, found);
170
+ }
171
+ else {
172
+ throw new Error(`Cannot find entry point in ${resolvedPath}. Expected package.json with main field or dist/index.js`);
173
+ }
174
+ }
175
+ }
176
+ else {
177
+ modulePath = resolvedPath;
178
+ }
179
+ if (!fs.existsSync(modulePath)) {
180
+ throw new Error(`Module entry point not found: ${modulePath}. Did you run 'npm run build'?`);
181
+ }
182
+ if (verbose) {
183
+ console.log(`Loading recipes from ${modulePath}...`);
184
+ }
185
+ // Set up shared dependencies
186
+ setupSharedDependencies(modulePath);
187
+ const recipeModule = require(modulePath);
188
+ if (typeof recipeModule.activate !== 'function') {
189
+ throw new Error(`${localPath} does not export an 'activate' function`);
190
+ }
191
+ const activatePromise = recipeModule.activate(registry);
192
+ if (activatePromise instanceof Promise) {
193
+ yield activatePromise;
194
+ }
195
+ if (verbose) {
196
+ console.log(`Loaded ${registry.all.size} recipes`);
197
+ }
198
+ });
199
+ }
200
+ /**
201
+ * Install a recipe package from NPM and load its recipes into the registry
202
+ */
203
+ function installRecipePackage(packageName_1, installDir_1, registry_1) {
204
+ return __awaiter(this, arguments, void 0, function* (packageName, installDir, registry, verbose = false) {
205
+ // Ensure directory exists
206
+ if (!fs.existsSync(installDir)) {
207
+ fs.mkdirSync(installDir, { recursive: true });
208
+ }
209
+ // Check if package.json exists, if not create one
210
+ const packageJsonPath = path.join(installDir, 'package.json');
211
+ if (!fs.existsSync(packageJsonPath)) {
212
+ const packageJson = {
213
+ name: 'openrewrite-recipes',
214
+ version: '1.0.0',
215
+ description: 'OpenRewrite recipe installation',
216
+ private: true
217
+ };
218
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
219
+ if (verbose) {
220
+ console.log('Created package.json for recipe dependencies');
221
+ }
222
+ }
223
+ // Install the package
224
+ if (verbose) {
225
+ console.log(`Installing ${packageName}...`);
226
+ }
227
+ yield new Promise((resolve, reject) => {
228
+ const child = (0, child_process_1.spawn)('npm', ['install', packageName, '--no-fund'], {
229
+ cwd: installDir,
230
+ stdio: verbose ? 'inherit' : 'pipe'
231
+ });
232
+ child.on('error', reject);
233
+ child.on('close', (exitCode) => {
234
+ if (exitCode === 0) {
235
+ resolve();
236
+ }
237
+ else {
238
+ reject(new Error(`npm install exited with code ${exitCode}`));
239
+ }
240
+ });
241
+ });
242
+ // Load the module and activate recipes
243
+ const resolvedPath = require.resolve(path.join(installDir, 'node_modules', packageName));
244
+ // Set up shared dependencies to avoid instanceof failures
245
+ setupSharedDependencies(resolvedPath);
246
+ const recipeModule = require(resolvedPath);
247
+ if (typeof recipeModule.activate !== 'function') {
248
+ throw new Error(`${packageName} does not export an 'activate' function`);
249
+ }
250
+ const activatePromise = recipeModule.activate(registry);
251
+ if (activatePromise instanceof Promise) {
252
+ yield activatePromise;
253
+ }
254
+ if (verbose) {
255
+ console.log(`Loaded ${registry.all.size} recipes`);
256
+ }
257
+ });
258
+ }
259
+ /**
260
+ * Set up shared dependencies to avoid instanceof failures when loading recipes
261
+ * from a separate node_modules directory
262
+ */
263
+ function setupSharedDependencies(targetModulePath) {
264
+ const sharedDeps = ['@openrewrite/rewrite'];
265
+ const targetDir = path.dirname(targetModulePath);
266
+ for (const depName of sharedDeps) {
267
+ try {
268
+ const hostPackageEntry = require.resolve(depName);
269
+ // Find host package root
270
+ let hostPackageRoot = path.dirname(hostPackageEntry);
271
+ while (hostPackageRoot !== path.dirname(hostPackageRoot)) {
272
+ const pkgJsonPath = path.join(hostPackageRoot, 'package.json');
273
+ if (fs.existsSync(pkgJsonPath)) {
274
+ try {
275
+ const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'));
276
+ if (pkg.name === depName) {
277
+ break;
278
+ }
279
+ }
280
+ catch (_a) {
281
+ // Not a valid package.json
282
+ }
283
+ }
284
+ hostPackageRoot = path.dirname(hostPackageRoot);
285
+ }
286
+ // Find target package root
287
+ let targetPackageRoot;
288
+ let searchDir = targetDir;
289
+ while (searchDir !== path.dirname(searchDir)) {
290
+ const nodeModulesPath = path.join(searchDir, 'node_modules', ...depName.split('/'));
291
+ if (fs.existsSync(nodeModulesPath)) {
292
+ const pkgJsonPath = path.join(nodeModulesPath, 'package.json');
293
+ if (fs.existsSync(pkgJsonPath)) {
294
+ try {
295
+ const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'));
296
+ if (pkg.name === depName) {
297
+ targetPackageRoot = nodeModulesPath;
298
+ break;
299
+ }
300
+ }
301
+ catch (_b) {
302
+ // Not a valid package.json
303
+ }
304
+ }
305
+ }
306
+ searchDir = path.dirname(searchDir);
307
+ }
308
+ if (!targetPackageRoot || hostPackageRoot === targetPackageRoot) {
309
+ continue;
310
+ }
311
+ // Map all cached modules
312
+ const hostPrefix = hostPackageRoot + path.sep;
313
+ for (const cachedPath of Object.keys(require.cache)) {
314
+ if (cachedPath.startsWith(hostPrefix)) {
315
+ const relativePath = cachedPath.substring(hostPrefix.length);
316
+ const targetPath = path.join(targetPackageRoot, relativePath);
317
+ require.cache[targetPath] = require.cache[cachedPath];
318
+ }
319
+ }
320
+ }
321
+ catch (_c) {
322
+ // Failed to set up shared dependency
323
+ }
324
+ }
325
+ }
326
+ /**
327
+ * Find a recipe by name in the registry
328
+ *
329
+ * Supports:
330
+ * - Exact match by FQN
331
+ * - Match by suffix (last segment of FQN)
332
+ * - Partial match (case-insensitive)
333
+ *
334
+ * Returns null if not found or if ambiguous (prints error message)
335
+ */
336
+ function findRecipe(registry, recipeName, options) {
337
+ // Try exact match first
338
+ const RecipeClass = registry.all.get(recipeName);
339
+ if (RecipeClass) {
340
+ return new RecipeClass(options);
341
+ }
342
+ // Try matching by suffix (last segment of FQN)
343
+ const matches = [];
344
+ for (const name of registry.all.keys()) {
345
+ if (name.endsWith('.' + recipeName) || name.endsWith('-' + recipeName) ||
346
+ name === recipeName || name.toLowerCase().endsWith(recipeName.toLowerCase())) {
347
+ matches.push(name);
348
+ }
349
+ }
350
+ if (matches.length === 0) {
351
+ // Try partial match
352
+ for (const name of registry.all.keys()) {
353
+ if (name.toLowerCase().includes(recipeName.toLowerCase())) {
354
+ matches.push(name);
355
+ }
356
+ }
357
+ }
358
+ if (matches.length === 0) {
359
+ console.error(`Recipe not found: ${recipeName}`);
360
+ console.error('\nAvailable recipes:');
361
+ for (const name of [...registry.all.keys()].sort()) {
362
+ console.error(` ${name}`);
363
+ }
364
+ return null;
365
+ }
366
+ if (matches.length > 1) {
367
+ console.error(`Ambiguous recipe name: ${recipeName}`);
368
+ console.error('\nMatching recipes:');
369
+ for (const name of matches.sort()) {
370
+ console.error(` ${name}`);
371
+ }
372
+ console.error('\nPlease use a more specific recipe name.');
373
+ return null;
374
+ }
375
+ const MatchedRecipeClass = registry.all.get(matches[0]);
376
+ return new MatchedRecipeClass(options);
377
+ }
378
+ /**
379
+ * Discover source files in a project directory, respecting .gitignore
380
+ */
381
+ function discoverFiles(projectRoot_1) {
382
+ return __awaiter(this, arguments, void 0, function* (projectRoot, verbose = false) {
383
+ const files = [];
384
+ if (verbose) {
385
+ console.log(`Discovering files in ${projectRoot}...`);
386
+ }
387
+ // Get list of git-ignored files
388
+ const ignoredFiles = new Set();
389
+ try {
390
+ const result = (0, child_process_1.spawnSync)('git', ['ls-files', '--ignored', '--exclude-standard', '-o'], {
391
+ cwd: projectRoot,
392
+ encoding: 'utf8'
393
+ });
394
+ if (result.stdout) {
395
+ for (const line of result.stdout.split('\n')) {
396
+ if (line.trim()) {
397
+ ignoredFiles.add(path.join(projectRoot, line.trim()));
398
+ }
399
+ }
400
+ }
401
+ }
402
+ catch (_a) {
403
+ // Git not available or not a git repository
404
+ }
405
+ // Get tracked and untracked (but not ignored) files
406
+ const trackedFiles = new Set();
407
+ try {
408
+ // Get tracked files
409
+ const tracked = (0, child_process_1.spawnSync)('git', ['ls-files'], {
410
+ cwd: projectRoot,
411
+ encoding: 'utf8'
412
+ });
413
+ if (tracked.stdout) {
414
+ for (const line of tracked.stdout.split('\n')) {
415
+ if (line.trim()) {
416
+ trackedFiles.add(path.join(projectRoot, line.trim()));
417
+ }
418
+ }
419
+ }
420
+ // Get untracked but not ignored files
421
+ const untracked = (0, child_process_1.spawnSync)('git', ['ls-files', '--others', '--exclude-standard'], {
422
+ cwd: projectRoot,
423
+ encoding: 'utf8'
424
+ });
425
+ if (untracked.stdout) {
426
+ for (const line of untracked.stdout.split('\n')) {
427
+ if (line.trim()) {
428
+ trackedFiles.add(path.join(projectRoot, line.trim()));
429
+ }
430
+ }
431
+ }
432
+ }
433
+ catch (_b) {
434
+ // Not a git repository, fall back to recursive directory scan
435
+ yield walkDirectory(projectRoot, files, ignoredFiles, projectRoot);
436
+ return files.filter(isAcceptedFile);
437
+ }
438
+ // Filter to accepted file types
439
+ for (const file of trackedFiles) {
440
+ if (!ignoredFiles.has(file) && isAcceptedFile(file)) {
441
+ files.push(file);
442
+ }
443
+ }
444
+ return files;
445
+ });
446
+ }
447
+ /**
448
+ * Walk a directory recursively, collecting files
449
+ */
450
+ function walkDirectory(dir, files, ignored, projectRoot) {
451
+ return __awaiter(this, void 0, void 0, function* () {
452
+ const entries = yield fsp.readdir(dir, { withFileTypes: true });
453
+ for (const entry of entries) {
454
+ const fullPath = path.join(dir, entry.name);
455
+ // Skip hidden files and common ignore patterns
456
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist' ||
457
+ entry.name === 'build' || entry.name === 'coverage') {
458
+ continue;
459
+ }
460
+ if (ignored.has(fullPath)) {
461
+ continue;
462
+ }
463
+ if (entry.isDirectory()) {
464
+ yield walkDirectory(fullPath, files, ignored, projectRoot);
465
+ }
466
+ else if (entry.isFile() && isAcceptedFile(fullPath)) {
467
+ files.push(fullPath);
468
+ }
469
+ }
470
+ });
471
+ }
472
+ /**
473
+ * Check if a file is accepted for parsing based on its extension
474
+ */
475
+ function isAcceptedFile(filePath) {
476
+ const ext = path.extname(filePath).toLowerCase();
477
+ // JavaScript/TypeScript files
478
+ if (['.js', '.jsx', '.ts', '.tsx', '.mjs', '.mts', '.cjs', '.cts'].includes(ext)) {
479
+ return true;
480
+ }
481
+ // JSON files (including package.json which gets special parsing)
482
+ if (ext === '.json') {
483
+ return true;
484
+ }
485
+ return false;
486
+ }
487
+ /**
488
+ * Parse source files using appropriate parsers
489
+ */
490
+ function parseFiles(filePaths_1, projectRoot_1) {
491
+ return __awaiter(this, arguments, void 0, function* (filePaths, projectRoot, verbose = false) {
492
+ var _a, e_1, _b, _c, _d, e_2, _e, _f, _g, e_3, _h, _j;
493
+ const parsed = [];
494
+ // Group files by type
495
+ const jsFiles = [];
496
+ const packageJsonFiles = [];
497
+ const jsonFiles = [];
498
+ for (const filePath of filePaths) {
499
+ const basename = path.basename(filePath);
500
+ const ext = path.extname(filePath).toLowerCase();
501
+ if (basename === 'package.json') {
502
+ packageJsonFiles.push(filePath);
503
+ }
504
+ else if (['.js', '.jsx', '.ts', '.tsx', '.mjs', '.mts', '.cjs', '.cts'].includes(ext)) {
505
+ jsFiles.push(filePath);
506
+ }
507
+ else if (ext === '.json') {
508
+ jsonFiles.push(filePath);
509
+ }
510
+ }
511
+ // Parse JavaScript/TypeScript files
512
+ if (jsFiles.length > 0) {
513
+ if (verbose) {
514
+ console.log(`Parsing ${jsFiles.length} JavaScript/TypeScript files...`);
515
+ }
516
+ const jsParser = new javascript_1.JavaScriptParser({ relativeTo: projectRoot });
517
+ try {
518
+ for (var _k = true, _l = __asyncValues(jsParser.parse(...jsFiles)), _m; _m = yield _l.next(), _a = _m.done, !_a; _k = true) {
519
+ _c = _m.value;
520
+ _k = false;
521
+ const sf = _c;
522
+ parsed.push(sf);
523
+ }
524
+ }
525
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
526
+ finally {
527
+ try {
528
+ if (!_k && !_a && (_b = _l.return)) yield _b.call(_l);
529
+ }
530
+ finally { if (e_1) throw e_1.error; }
531
+ }
532
+ }
533
+ // Parse package.json files
534
+ if (packageJsonFiles.length > 0) {
535
+ if (verbose) {
536
+ console.log(`Parsing ${packageJsonFiles.length} package.json files...`);
537
+ }
538
+ const pkgParser = new javascript_1.PackageJsonParser({ relativeTo: projectRoot });
539
+ try {
540
+ for (var _o = true, _p = __asyncValues(pkgParser.parse(...packageJsonFiles)), _q; _q = yield _p.next(), _d = _q.done, !_d; _o = true) {
541
+ _f = _q.value;
542
+ _o = false;
543
+ const sf = _f;
544
+ parsed.push(sf);
545
+ }
546
+ }
547
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
548
+ finally {
549
+ try {
550
+ if (!_o && !_d && (_e = _p.return)) yield _e.call(_p);
551
+ }
552
+ finally { if (e_2) throw e_2.error; }
553
+ }
554
+ }
555
+ // Parse other JSON files
556
+ if (jsonFiles.length > 0) {
557
+ if (verbose) {
558
+ console.log(`Parsing ${jsonFiles.length} JSON files...`);
559
+ }
560
+ const jsonParser = new json_1.JsonParser({ relativeTo: projectRoot });
561
+ try {
562
+ for (var _r = true, _s = __asyncValues(jsonParser.parse(...jsonFiles)), _t; _t = yield _s.next(), _g = _t.done, !_g; _r = true) {
563
+ _j = _t.value;
564
+ _r = false;
565
+ const sf = _j;
566
+ parsed.push(sf);
567
+ }
568
+ }
569
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
570
+ finally {
571
+ try {
572
+ if (!_r && !_g && (_h = _s.return)) yield _h.call(_s);
573
+ }
574
+ finally { if (e_3) throw e_3.error; }
575
+ }
576
+ }
577
+ return parsed;
578
+ });
579
+ }
580
+ //# sourceMappingURL=cli-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../src/cli/cli-utils.ts"],"names":[],"mappings":"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"}