@hyperfrontend/project-scope 0.1.0 → 0.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 (177) hide show
  1. package/CHANGELOG.md +15 -3
  2. package/README.md +2 -0
  3. package/analyze.d.ts.map +1 -1
  4. package/cli/commands/analyze.d.ts +8 -0
  5. package/cli/commands/analyze.d.ts.map +1 -1
  6. package/cli/commands/config.d.ts +7 -0
  7. package/cli/commands/config.d.ts.map +1 -1
  8. package/cli/commands/deps.d.ts +6 -0
  9. package/cli/commands/deps.d.ts.map +1 -1
  10. package/cli/commands/tree.d.ts +12 -0
  11. package/cli/commands/tree.d.ts.map +1 -1
  12. package/cli/index.cjs.js +73 -206
  13. package/cli/index.cjs.js.map +1 -1
  14. package/cli/index.esm.js +73 -206
  15. package/cli/index.esm.js.map +1 -1
  16. package/cli/run.d.ts.map +1 -1
  17. package/core/cache.d.ts +1 -0
  18. package/core/cache.d.ts.map +1 -1
  19. package/core/encoding/convert.d.ts.map +1 -1
  20. package/core/encoding/detect.d.ts +5 -0
  21. package/core/encoding/detect.d.ts.map +1 -1
  22. package/core/encoding/index.cjs.js +2 -23
  23. package/core/encoding/index.cjs.js.map +1 -1
  24. package/core/encoding/index.esm.js +2 -23
  25. package/core/encoding/index.esm.js.map +1 -1
  26. package/core/errors/structured-errors.d.ts +2 -0
  27. package/core/errors/structured-errors.d.ts.map +1 -1
  28. package/core/fs/directory.d.ts +3 -0
  29. package/core/fs/directory.d.ts.map +1 -1
  30. package/core/fs/index.cjs.js +0 -14
  31. package/core/fs/index.cjs.js.map +1 -1
  32. package/core/fs/index.esm.js +0 -14
  33. package/core/fs/index.esm.js.map +1 -1
  34. package/core/fs/read.d.ts +11 -3
  35. package/core/fs/read.d.ts.map +1 -1
  36. package/core/fs/traversal.d.ts.map +1 -1
  37. package/core/index.cjs.js +11 -63
  38. package/core/index.cjs.js.map +1 -1
  39. package/core/index.esm.js +11 -63
  40. package/core/index.esm.js.map +1 -1
  41. package/core/logger.d.ts.map +1 -1
  42. package/core/path/index.cjs.js +5 -2
  43. package/core/path/index.cjs.js.map +1 -1
  44. package/core/path/index.esm.js +5 -2
  45. package/core/path/index.esm.js.map +1 -1
  46. package/core/path/normalize.d.ts.map +1 -1
  47. package/core/patterns/glob.d.ts +0 -4
  48. package/core/patterns/glob.d.ts.map +1 -1
  49. package/core/platform/detect.d.ts.map +1 -1
  50. package/core/platform/index.cjs.js +0 -10
  51. package/core/platform/index.cjs.js.map +1 -1
  52. package/core/platform/index.esm.js +0 -10
  53. package/core/platform/index.esm.js.map +1 -1
  54. package/core/platform/line-endings.d.ts.map +1 -1
  55. package/heuristics/dependencies/analyze.d.ts.map +1 -1
  56. package/heuristics/dependencies/index.cjs.js +0 -17
  57. package/heuristics/dependencies/index.cjs.js.map +1 -1
  58. package/heuristics/dependencies/index.esm.js +0 -17
  59. package/heuristics/dependencies/index.esm.js.map +1 -1
  60. package/heuristics/entry-points/discover.d.ts +34 -7
  61. package/heuristics/entry-points/discover.d.ts.map +1 -1
  62. package/heuristics/entry-points/index.cjs.js +6 -34
  63. package/heuristics/entry-points/index.cjs.js.map +1 -1
  64. package/heuristics/entry-points/index.esm.js +6 -34
  65. package/heuristics/entry-points/index.esm.js.map +1 -1
  66. package/heuristics/framework/index.cjs.js +1 -63
  67. package/heuristics/framework/index.cjs.js.map +1 -1
  68. package/heuristics/framework/index.esm.js +1 -63
  69. package/heuristics/framework/index.esm.js.map +1 -1
  70. package/heuristics/index.cjs.js +7 -88
  71. package/heuristics/index.cjs.js.map +1 -1
  72. package/heuristics/index.esm.js +7 -88
  73. package/heuristics/index.esm.js.map +1 -1
  74. package/heuristics/project-type/index.cjs.js +1 -63
  75. package/heuristics/project-type/index.cjs.js.map +1 -1
  76. package/heuristics/project-type/index.esm.js +1 -63
  77. package/heuristics/project-type/index.esm.js.map +1 -1
  78. package/index.cjs.js +86 -294
  79. package/index.cjs.js.map +1 -1
  80. package/index.esm.js +86 -294
  81. package/index.esm.js.map +1 -1
  82. package/nx/detect.d.ts.map +1 -1
  83. package/nx/devkit-loader.d.ts.map +1 -1
  84. package/nx/index.cjs.js +0 -29
  85. package/nx/index.cjs.js.map +1 -1
  86. package/nx/index.esm.js +0 -29
  87. package/nx/index.esm.js.map +1 -1
  88. package/nx/project-config.d.ts +2 -0
  89. package/nx/project-config.d.ts.map +1 -1
  90. package/package.json +9 -9
  91. package/project/config/index.cjs.js +4 -46
  92. package/project/config/index.cjs.js.map +1 -1
  93. package/project/config/index.esm.js +4 -46
  94. package/project/config/index.esm.js.map +1 -1
  95. package/project/config/patterns.d.ts.map +1 -1
  96. package/project/index.cjs.js +4 -47
  97. package/project/index.cjs.js.map +1 -1
  98. package/project/index.esm.js +4 -47
  99. package/project/index.esm.js.map +1 -1
  100. package/project/package/index.cjs.js +0 -11
  101. package/project/package/index.cjs.js.map +1 -1
  102. package/project/package/index.esm.js +0 -11
  103. package/project/package/index.esm.js.map +1 -1
  104. package/project/package/read.d.ts +1 -0
  105. package/project/package/read.d.ts.map +1 -1
  106. package/project/root/index.cjs.js +0 -11
  107. package/project/root/index.cjs.js.map +1 -1
  108. package/project/root/index.esm.js +0 -11
  109. package/project/root/index.esm.js.map +1 -1
  110. package/project/traversal/index.cjs.js +4 -28
  111. package/project/traversal/index.cjs.js.map +1 -1
  112. package/project/traversal/index.esm.js +4 -28
  113. package/project/traversal/index.esm.js.map +1 -1
  114. package/tech/backend/express.d.ts.map +1 -1
  115. package/tech/backend/fastify.d.ts.map +1 -1
  116. package/tech/backend/index.cjs.js +0 -17
  117. package/tech/backend/index.cjs.js.map +1 -1
  118. package/tech/backend/index.esm.js +0 -17
  119. package/tech/backend/index.esm.js.map +1 -1
  120. package/tech/backend/koa.d.ts.map +1 -1
  121. package/tech/backend/nestjs.d.ts.map +1 -1
  122. package/tech/build/index.cjs.js +0 -12
  123. package/tech/build/index.cjs.js.map +1 -1
  124. package/tech/build/index.esm.js +0 -12
  125. package/tech/build/index.esm.js.map +1 -1
  126. package/tech/frontend/index.cjs.js +0 -16
  127. package/tech/frontend/index.cjs.js.map +1 -1
  128. package/tech/frontend/index.esm.js +0 -16
  129. package/tech/frontend/index.esm.js.map +1 -1
  130. package/tech/frontend/qwik.d.ts.map +1 -1
  131. package/tech/frontend/remix.d.ts.map +1 -1
  132. package/tech/frontend/sveltekit.d.ts.map +1 -1
  133. package/tech/index.cjs.js +1 -63
  134. package/tech/index.cjs.js.map +1 -1
  135. package/tech/index.d.ts.map +1 -1
  136. package/tech/index.esm.js +1 -63
  137. package/tech/index.esm.js.map +1 -1
  138. package/tech/legacy/angularjs.d.ts.map +1 -1
  139. package/tech/legacy/backbone.d.ts.map +1 -1
  140. package/tech/legacy/ember.d.ts.map +1 -1
  141. package/tech/legacy/index.cjs.js +0 -26
  142. package/tech/legacy/index.cjs.js.map +1 -1
  143. package/tech/legacy/index.esm.js +0 -26
  144. package/tech/legacy/index.esm.js.map +1 -1
  145. package/tech/legacy/jquery.d.ts.map +1 -1
  146. package/tech/linting/biome.d.ts.map +1 -1
  147. package/tech/linting/index.cjs.js +0 -14
  148. package/tech/linting/index.cjs.js.map +1 -1
  149. package/tech/linting/index.esm.js +0 -14
  150. package/tech/linting/index.esm.js.map +1 -1
  151. package/tech/linting/prettier.d.ts.map +1 -1
  152. package/tech/monorepo/index.cjs.js +1 -13
  153. package/tech/monorepo/index.cjs.js.map +1 -1
  154. package/tech/monorepo/index.esm.js +1 -13
  155. package/tech/monorepo/index.esm.js.map +1 -1
  156. package/tech/monorepo/types.d.ts +1 -1
  157. package/tech/monorepo/types.d.ts.map +1 -1
  158. package/tech/shared-utils/detector-helpers.d.ts.map +1 -1
  159. package/tech/testing/index.cjs.js +0 -12
  160. package/tech/testing/index.cjs.js.map +1 -1
  161. package/tech/testing/index.esm.js +0 -12
  162. package/tech/testing/index.esm.js.map +1 -1
  163. package/tech/types/detectors.d.ts.map +1 -1
  164. package/tech/types/index.cjs.js +0 -27
  165. package/tech/types/index.cjs.js.map +1 -1
  166. package/tech/types/index.esm.js +0 -27
  167. package/tech/types/index.esm.js.map +1 -1
  168. package/vfs/commit.d.ts.map +1 -1
  169. package/vfs/diff.d.ts.map +1 -1
  170. package/vfs/factory.d.ts.map +1 -1
  171. package/vfs/fs-tree.d.ts.map +1 -1
  172. package/vfs/index.cjs.js +5 -46
  173. package/vfs/index.cjs.js.map +1 -1
  174. package/vfs/index.esm.js +5 -46
  175. package/vfs/index.esm.js.map +1 -1
  176. package/vfs/types.d.ts +1 -0
  177. package/vfs/types.d.ts.map +1 -1
package/tech/index.cjs.js CHANGED
@@ -14,7 +14,6 @@ var node_fs = require('node:fs');
14
14
  *
15
15
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/map
16
16
  */
17
- // Capture references at module initialization time
18
17
  const _Map = globalThis.Map;
19
18
  const _Reflect$2 = globalThis.Reflect;
20
19
  /**
@@ -34,7 +33,6 @@ const createMap = (iterable) => _Reflect$2.construct(_Map, iterable ? [iterable]
34
33
  *
35
34
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/object
36
35
  */
37
- // Capture references at module initialization time
38
36
  const _Object = globalThis.Object;
39
37
  /**
40
38
  * (Safe copy) Prevents modification of existing property attributes and values,
@@ -69,7 +67,6 @@ const defineProperties = _Object.defineProperties;
69
67
  *
70
68
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/set
71
69
  */
72
- // Capture references at module initialization time
73
70
  const _Set = globalThis.Set;
74
71
  const _Reflect$1 = globalThis.Reflect;
75
72
  /**
@@ -119,7 +116,6 @@ const cacheRegistry = createSet();
119
116
  function createCache(options) {
120
117
  const { ttl, maxSize } = options ?? {};
121
118
  const store = createMap();
122
- // Track insertion order for FIFO eviction
123
119
  const insertionOrder = [];
124
120
  /**
125
121
  * Check if an entry is expired.
@@ -170,12 +166,10 @@ function createCache(options) {
170
166
  return entry.value;
171
167
  },
172
168
  set(key, value) {
173
- // If key exists, remove from order first
174
169
  if (store.has(key)) {
175
170
  removeFromOrder(key);
176
171
  }
177
172
  else {
178
- // Evict if needed before adding new entry
179
173
  evictIfNeeded();
180
174
  }
181
175
  // eslint-disable-next-line workspace/no-unsafe-builtin-methods -- Date.now() is needed for Jest fake timers compatibility
@@ -208,7 +202,6 @@ function createCache(options) {
208
202
  return [...insertionOrder];
209
203
  },
210
204
  };
211
- // Register cache for global operations
212
205
  cacheRegistry.add(cache);
213
206
  return freeze(cache);
214
207
  }
@@ -221,7 +214,6 @@ function createCache(options) {
221
214
  *
222
215
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/array
223
216
  */
224
- // Capture references at module initialization time
225
217
  const _Array = globalThis.Array;
226
218
  /**
227
219
  * (Safe copy) Determines whether the passed value is an Array.
@@ -236,7 +228,6 @@ const isArray = _Array.isArray;
236
228
  *
237
229
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/console
238
230
  */
239
- // Capture references at module initialization time
240
231
  const _console = globalThis.console;
241
232
  /**
242
233
  * (Safe copy) Outputs a message to the console.
@@ -319,7 +310,6 @@ _console.timeLog.bind(_console);
319
310
  *
320
311
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/json
321
312
  */
322
- // Capture references at module initialization time
323
313
  const _JSON = globalThis.JSON;
324
314
  /**
325
315
  * (Safe copy) Converts a JavaScript Object Notation (JSON) string into an object.
@@ -366,7 +356,6 @@ const getType = (target) => {
366
356
  *
367
357
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/error
368
358
  */
369
- // Capture references at module initialization time
370
359
  const _Error = globalThis.Error;
371
360
  const _Reflect = globalThis.Reflect;
372
361
  /**
@@ -387,7 +376,6 @@ const createError = (message, options) => _Reflect.construct(_Error, [message, o
387
376
  *
388
377
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/math
389
378
  */
390
- // Capture references at module initialization time
391
379
  const _Math = globalThis.Math;
392
380
  /**
393
381
  * (Safe copy) Returns the smaller of zero or more numbers.
@@ -660,14 +648,11 @@ function formatMessage(namespace, message, meta) {
660
648
  */
661
649
  function createScopedLogger(namespace, options = {}) {
662
650
  const { level = 'error', sanitizeSecrets = true } = options;
663
- // Create wrapper functions that add namespace prefix and sanitization
664
651
  const createLogFn = (baseFn) => (message, meta) => {
665
652
  const processedMeta = sanitizeSecrets && meta ? sanitize(meta) : meta;
666
653
  baseFn(formatMessage(namespace, message, processedMeta));
667
654
  };
668
- // Create base logger with wrapped functions
669
655
  const baseLogger = createLogger(createLogFn(error), createLogFn(warn), createLogFn(log), createLogFn(info), createLogFn(debug));
670
- // Set initial log level (use global override if set)
671
656
  baseLogger.setLogLevel(level);
672
657
  const scopedLogger = freeze({
673
658
  error: (message, meta) => baseLogger.error(message, meta),
@@ -678,7 +663,6 @@ function createScopedLogger(namespace, options = {}) {
678
663
  setLogLevel: baseLogger.setLogLevel,
679
664
  getLogLevel: baseLogger.getLogLevel,
680
665
  });
681
- // Register logger for global level management
682
666
  loggerRegistry.add(scopedLogger);
683
667
  return scopedLogger;
684
668
  }
@@ -958,7 +942,6 @@ function collectAllDependencies(packageJson) {
958
942
  function parseVersionString(versionString) {
959
943
  if (versionString === undefined || versionString === null)
960
944
  return undefined;
961
- // Manual parsing instead of regex to avoid ReDoS
962
945
  let start = 0;
963
946
  while (start < versionString.length) {
964
947
  const char = versionString[start];
@@ -1019,7 +1002,6 @@ function expressDetector(projectPath, packageJson) {
1019
1002
  version = parseVersionString(deps['express']);
1020
1003
  sources.push({ type: 'package.json', field: 'dependencies.express' });
1021
1004
  }
1022
- // @types/express (indicates usage)
1023
1005
  if (deps['@types/express']) {
1024
1006
  confidence += 10;
1025
1007
  sources.push({ type: 'package.json', field: 'dependencies.@types/express' });
@@ -1055,13 +1037,11 @@ function nestDetector(projectPath, packageJson) {
1055
1037
  let version;
1056
1038
  let configPath;
1057
1039
  const deps = collectAllDependencies(pkg);
1058
- // @nestjs/core package
1059
1040
  if (deps['@nestjs/core']) {
1060
1041
  confidence += 70;
1061
1042
  version = parseVersionString(deps['@nestjs/core']);
1062
1043
  sources.push({ type: 'package.json', field: 'dependencies.@nestjs/core' });
1063
1044
  }
1064
- // @nestjs/common
1065
1045
  if (deps['@nestjs/common']) {
1066
1046
  confidence += 15;
1067
1047
  sources.push({ type: 'package.json', field: 'dependencies.@nestjs/common' });
@@ -1112,7 +1092,6 @@ function fastifyDetector(projectPath, packageJson) {
1112
1092
  confidence += 15;
1113
1093
  sources.push({ type: 'package.json', field: 'dependencies (fastify plugins)' });
1114
1094
  }
1115
- // @types/fastify (older versions)
1116
1095
  if (deps['@types/fastify']) {
1117
1096
  confidence += 5;
1118
1097
  sources.push({ type: 'package.json', field: 'dependencies.@types/fastify' });
@@ -1147,7 +1126,6 @@ function koaDetector(projectPath, packageJson) {
1147
1126
  version = parseVersionString(deps['koa']);
1148
1127
  sources.push({ type: 'package.json', field: 'dependencies.koa' });
1149
1128
  }
1150
- // @types/koa
1151
1129
  if (deps['@types/koa']) {
1152
1130
  confidence += 10;
1153
1131
  sources.push({ type: 'package.json', field: 'dependencies.@types/koa' });
@@ -1726,7 +1704,6 @@ function remixDetector(projectPath, packageJson) {
1726
1704
  let confidence = 0;
1727
1705
  let version;
1728
1706
  const deps = collectAllDependencies(pkg);
1729
- // @remix-run packages
1730
1707
  if (deps['@remix-run/react']) {
1731
1708
  confidence += 70;
1732
1709
  version = parseVersionString(deps['@remix-run/react']);
@@ -2002,7 +1979,6 @@ function sveltekitDetector(projectPath, packageJson) {
2002
1979
  let confidence = 0;
2003
1980
  let version;
2004
1981
  const deps = collectAllDependencies(pkg);
2005
- // @sveltejs/kit package
2006
1982
  if (deps['@sveltejs/kit']) {
2007
1983
  confidence += 70;
2008
1984
  version = parseVersionString(deps['@sveltejs/kit']);
@@ -2081,13 +2057,11 @@ function qwikDetector(projectPath, packageJson) {
2081
2057
  let confidence = 0;
2082
2058
  let version;
2083
2059
  const deps = collectAllDependencies(pkg);
2084
- // @builder.io/qwik package
2085
2060
  if (deps['@builder.io/qwik']) {
2086
2061
  confidence += 70;
2087
2062
  version = parseVersionString(deps['@builder.io/qwik']);
2088
2063
  sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik' });
2089
2064
  }
2090
- // @builder.io/qwik-city
2091
2065
  if (deps['@builder.io/qwik-city']) {
2092
2066
  confidence += 20;
2093
2067
  sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
@@ -2198,23 +2172,19 @@ function angularJSDetector(projectPath, packageJson) {
2198
2172
  let confidence = 0;
2199
2173
  let version;
2200
2174
  const deps = collectAllDependencies(pkg);
2201
- // AngularJS package (angular, not @angular/core)
2202
2175
  if (deps['angular']) {
2203
2176
  confidence += 70;
2204
2177
  version = parseVersionString(deps['angular']);
2205
2178
  sources.push({ type: 'package.json', field: 'dependencies.angular' });
2206
2179
  }
2207
- // AngularJS router
2208
2180
  if (deps['angular-route']) {
2209
2181
  confidence += 15;
2210
2182
  sources.push({ type: 'package.json', field: 'dependencies.angular-route' });
2211
2183
  }
2212
- // AngularJS resource
2213
2184
  if (deps['angular-resource']) {
2214
2185
  confidence += 10;
2215
2186
  sources.push({ type: 'package.json', field: 'dependencies.angular-resource' });
2216
2187
  }
2217
- // AngularJS animate
2218
2188
  if (deps['angular-animate']) {
2219
2189
  confidence += 5;
2220
2190
  sources.push({ type: 'package.json', field: 'dependencies.angular-animate' });
@@ -2245,23 +2215,19 @@ function backboneDetector(projectPath, packageJson) {
2245
2215
  let confidence = 0;
2246
2216
  let version;
2247
2217
  const deps = collectAllDependencies(pkg);
2248
- // Backbone package
2249
2218
  if (deps['backbone']) {
2250
2219
  confidence += 70;
2251
2220
  version = parseVersionString(deps['backbone']);
2252
2221
  sources.push({ type: 'package.json', field: 'dependencies.backbone' });
2253
- // Underscore (commonly used with Backbone)
2254
2222
  if (deps['underscore']) {
2255
2223
  confidence += 15;
2256
2224
  sources.push({ type: 'package.json', field: 'dependencies.underscore' });
2257
2225
  }
2258
- // Lodash can be used as underscore replacement
2259
2226
  if (deps['lodash']) {
2260
2227
  confidence += 5;
2261
2228
  sources.push({ type: 'package.json', field: 'dependencies.lodash' });
2262
2229
  }
2263
2230
  }
2264
- // Marionette (Backbone framework)
2265
2231
  if (deps['backbone.marionette'] || deps['marionette']) {
2266
2232
  confidence += 10;
2267
2233
  sources.push({ type: 'package.json', field: 'dependencies.backbone.marionette' });
@@ -2292,18 +2258,15 @@ function emberDetector(projectPath, packageJson) {
2292
2258
  let confidence = 0;
2293
2259
  let version;
2294
2260
  const deps = collectAllDependencies(pkg);
2295
- // Ember source package
2296
2261
  if (deps['ember-source']) {
2297
2262
  confidence += 70;
2298
2263
  version = parseVersionString(deps['ember-source']);
2299
2264
  sources.push({ type: 'package.json', field: 'dependencies.ember-source' });
2300
2265
  }
2301
- // Ember CLI
2302
2266
  if (deps['ember-cli']) {
2303
2267
  confidence += 20;
2304
2268
  sources.push({ type: 'package.json', field: 'devDependencies.ember-cli' });
2305
2269
  }
2306
- // Ember Data
2307
2270
  if (deps['ember-data']) {
2308
2271
  confidence += 10;
2309
2272
  sources.push({ type: 'package.json', field: 'dependencies.ember-data' });
@@ -2334,18 +2297,15 @@ function jqueryDetector(projectPath, packageJson) {
2334
2297
  let confidence = 0;
2335
2298
  let version;
2336
2299
  const deps = collectAllDependencies(pkg);
2337
- // jQuery package
2338
2300
  if (deps['jquery']) {
2339
2301
  confidence += 80;
2340
2302
  version = parseVersionString(deps['jquery']);
2341
2303
  sources.push({ type: 'package.json', field: 'dependencies.jquery' });
2342
2304
  }
2343
- // jQuery UI
2344
2305
  if (deps['jquery-ui']) {
2345
2306
  confidence += 10;
2346
2307
  sources.push({ type: 'package.json', field: 'dependencies.jquery-ui' });
2347
2308
  }
2348
- // jQuery plugins
2349
2309
  if (deps['jquery-validation']) {
2350
2310
  confidence += 5;
2351
2311
  sources.push({ type: 'package.json', field: 'dependencies.jquery-validation' });
@@ -2492,7 +2452,6 @@ function prettierDetector(projectPath, packageJson) {
2492
2452
  confidence += 30;
2493
2453
  sources.push({ type: 'package.json', field: 'prettier' });
2494
2454
  }
2495
- // .prettierignore file
2496
2455
  if (exists(node_path.join(projectPath, '.prettierignore'))) {
2497
2456
  confidence += 10;
2498
2457
  sources.push({ type: 'config-file', path: '.prettierignore' });
@@ -2587,7 +2546,6 @@ function biomeDetector(projectPath, packageJson) {
2587
2546
  let configPath;
2588
2547
  let version;
2589
2548
  const deps = collectAllDependencies(pkg);
2590
- // @biomejs/biome package
2591
2549
  if (deps['@biomejs/biome']) {
2592
2550
  confidence += 70;
2593
2551
  version = parseVersionString(deps['@biomejs/biome']);
@@ -2874,7 +2832,7 @@ function npmWorkspacesDetector(workspacePath, packageJson) {
2874
2832
  sources.push({ type: 'lockfile', path: 'package-lock.json' });
2875
2833
  }
2876
2834
  if (exists(node_path.join(workspacePath, 'yarn.lock'))) {
2877
- return null; // Let yarn workspace detector handle this
2835
+ return null;
2878
2836
  }
2879
2837
  if (confidence === 0) {
2880
2838
  return null;
@@ -3253,7 +3211,6 @@ function checkTsConfigStrict(projectPath) {
3253
3211
  if (!content)
3254
3212
  return undefined;
3255
3213
  try {
3256
- // Simple JSON parsing - doesn't handle comments but good enough for strict check
3257
3214
  const cleanContent = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
3258
3215
  const parsed = parse(cleanContent);
3259
3216
  return parsed?.compilerOptions?.strict === true;
@@ -3276,19 +3233,16 @@ function typescriptDetector(projectPath, packageJson) {
3276
3233
  let configPath;
3277
3234
  let version;
3278
3235
  const deps = collectAllDependencies(pkg);
3279
- // TypeScript package
3280
3236
  if (deps['typescript']) {
3281
3237
  confidence += 50;
3282
3238
  version = parseVersionString(deps['typescript']);
3283
3239
  sources.push({ type: 'package.json', field: 'dependencies.typescript' });
3284
3240
  }
3285
- // tsconfig.json
3286
3241
  if (exists(node_path.join(projectPath, 'tsconfig.json'))) {
3287
3242
  confidence += 40;
3288
3243
  configPath = 'tsconfig.json';
3289
3244
  sources.push({ type: 'config-file', path: 'tsconfig.json' });
3290
3245
  }
3291
- // tsconfig.*.json variants
3292
3246
  const tsconfigVariants = ['tsconfig.build.json', 'tsconfig.lib.json', 'tsconfig.spec.json', 'tsconfig.app.json'];
3293
3247
  for (const variant of tsconfigVariants) {
3294
3248
  if (exists(node_path.join(projectPath, variant))) {
@@ -3297,7 +3251,6 @@ function typescriptDetector(projectPath, packageJson) {
3297
3251
  break;
3298
3252
  }
3299
3253
  }
3300
- // @types packages
3301
3254
  const typePackages = keys(deps).filter((d) => d.startsWith('@types/'));
3302
3255
  if (typePackages.length > 0) {
3303
3256
  confidence += 10;
@@ -3331,24 +3284,20 @@ function flowDetector(projectPath, packageJson) {
3331
3284
  let configPath;
3332
3285
  let version;
3333
3286
  const deps = collectAllDependencies(pkg);
3334
- // flow-bin package
3335
3287
  if (deps['flow-bin']) {
3336
3288
  confidence += 60;
3337
3289
  version = parseVersionString(deps['flow-bin']);
3338
3290
  sources.push({ type: 'package.json', field: 'dependencies.flow-bin' });
3339
3291
  }
3340
- // .flowconfig
3341
3292
  if (exists(node_path.join(projectPath, '.flowconfig'))) {
3342
3293
  confidence += 40;
3343
3294
  configPath = '.flowconfig';
3344
3295
  sources.push({ type: 'config-file', path: '.flowconfig' });
3345
3296
  }
3346
- // flow-typed directory
3347
3297
  if (exists(node_path.join(projectPath, 'flow-typed'))) {
3348
3298
  confidence += 10;
3349
3299
  sources.push({ type: 'directory', path: 'flow-typed/' });
3350
3300
  }
3351
- // @babel/preset-flow
3352
3301
  if (deps['@babel/preset-flow']) {
3353
3302
  confidence += 10;
3354
3303
  sources.push({ type: 'package.json', field: 'dependencies.@babel/preset-flow' });
@@ -3372,7 +3321,6 @@ function flowDetector(projectPath, packageJson) {
3372
3321
  * @returns `true` if the content contains JSDoc type annotations.
3373
3322
  */
3374
3323
  function hasJsDocTypes(content) {
3375
- // Check for JSDoc type annotations
3376
3324
  return (content.includes('@type {') ||
3377
3325
  content.includes('@param {') ||
3378
3326
  content.includes('@returns {') ||
@@ -3391,14 +3339,11 @@ function jsdocDetector(projectPath, packageJson) {
3391
3339
  const sources = [];
3392
3340
  let confidence = 0;
3393
3341
  const deps = collectAllDependencies(pkg);
3394
- // jsdoc package
3395
3342
  if (deps['jsdoc']) {
3396
3343
  confidence += 30;
3397
3344
  sources.push({ type: 'package.json', field: 'dependencies.jsdoc' });
3398
3345
  }
3399
- // typescript with checkJs (JSDoc type checking)
3400
3346
  if (deps['typescript']) {
3401
- // Check if checkJs is enabled in tsconfig
3402
3347
  const tsconfigPath = node_path.join(projectPath, 'tsconfig.json');
3403
3348
  const content = readFileIfExists(tsconfigPath);
3404
3349
  if (content) {
@@ -3415,12 +3360,10 @@ function jsdocDetector(projectPath, packageJson) {
3415
3360
  }
3416
3361
  }
3417
3362
  }
3418
- // Check for jsconfig.json (VS Code JS type checking)
3419
3363
  if (exists(node_path.join(projectPath, 'jsconfig.json'))) {
3420
3364
  confidence += 40;
3421
3365
  sources.push({ type: 'config-file', path: 'jsconfig.json' });
3422
3366
  }
3423
- // Sample check for JSDoc annotations in source files
3424
3367
  const srcDir = node_path.join(projectPath, 'src');
3425
3368
  if (exists(srcDir)) {
3426
3369
  try {
@@ -3502,8 +3445,6 @@ const allDetectors = {
3502
3445
  function isDetectAllOptions(value) {
3503
3446
  if (typeof value !== 'object' || value === null)
3504
3447
  return false;
3505
- // DetectAllOptions has skipCache or packageJson fields specifically
3506
- // PackageJson never has skipCache field
3507
3448
  return 'skipCache' in value || 'packageJson' in value;
3508
3449
  }
3509
3450
  /**
@@ -3535,9 +3476,7 @@ function isDetectAllOptions(value) {
3535
3476
  * ```
3536
3477
  */
3537
3478
  function detectAll(projectPath, packageJsonOrOptions) {
3538
- // Handle backward-compatible arguments
3539
3479
  const options = isDetectAllOptions(packageJsonOrOptions) ? packageJsonOrOptions : { packageJson: packageJsonOrOptions };
3540
- // Check cache first (unless skipCache is true)
3541
3480
  if (!options.skipCache) {
3542
3481
  const cached = detectAllCache.get(projectPath);
3543
3482
  if (cached) {
@@ -3588,7 +3527,6 @@ function detectAll(projectPath, packageJsonOrOptions) {
3588
3527
  legacyFrameworks: result.legacyFrameworks.map((f) => f.id),
3589
3528
  testingFrameworks: result.testingFrameworks.map((f) => f.id),
3590
3529
  });
3591
- // Cache the result
3592
3530
  detectAllCache.set(projectPath, result);
3593
3531
  return result;
3594
3532
  }