@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
@@ -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' });
@@ -1690,7 +1668,6 @@ function remixDetector(projectPath, packageJson) {
1690
1668
  let confidence = 0;
1691
1669
  let version;
1692
1670
  const deps = collectAllDependencies(pkg);
1693
- // @remix-run packages
1694
1671
  if (deps['@remix-run/react']) {
1695
1672
  confidence += 70;
1696
1673
  version = parseVersionString(deps['@remix-run/react']);
@@ -1966,7 +1943,6 @@ function sveltekitDetector(projectPath, packageJson) {
1966
1943
  let confidence = 0;
1967
1944
  let version;
1968
1945
  const deps = collectAllDependencies(pkg);
1969
- // @sveltejs/kit package
1970
1946
  if (deps['@sveltejs/kit']) {
1971
1947
  confidence += 70;
1972
1948
  version = parseVersionString(deps['@sveltejs/kit']);
@@ -2045,13 +2021,11 @@ function qwikDetector(projectPath, packageJson) {
2045
2021
  let confidence = 0;
2046
2022
  let version;
2047
2023
  const deps = collectAllDependencies(pkg);
2048
- // @builder.io/qwik package
2049
2024
  if (deps['@builder.io/qwik']) {
2050
2025
  confidence += 70;
2051
2026
  version = parseVersionString(deps['@builder.io/qwik']);
2052
2027
  sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik' });
2053
2028
  }
2054
- // @builder.io/qwik-city
2055
2029
  if (deps['@builder.io/qwik-city']) {
2056
2030
  confidence += 20;
2057
2031
  sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
@@ -2144,23 +2118,19 @@ function angularJSDetector(projectPath, packageJson) {
2144
2118
  let confidence = 0;
2145
2119
  let version;
2146
2120
  const deps = collectAllDependencies(pkg);
2147
- // AngularJS package (angular, not @angular/core)
2148
2121
  if (deps['angular']) {
2149
2122
  confidence += 70;
2150
2123
  version = parseVersionString(deps['angular']);
2151
2124
  sources.push({ type: 'package.json', field: 'dependencies.angular' });
2152
2125
  }
2153
- // AngularJS router
2154
2126
  if (deps['angular-route']) {
2155
2127
  confidence += 15;
2156
2128
  sources.push({ type: 'package.json', field: 'dependencies.angular-route' });
2157
2129
  }
2158
- // AngularJS resource
2159
2130
  if (deps['angular-resource']) {
2160
2131
  confidence += 10;
2161
2132
  sources.push({ type: 'package.json', field: 'dependencies.angular-resource' });
2162
2133
  }
2163
- // AngularJS animate
2164
2134
  if (deps['angular-animate']) {
2165
2135
  confidence += 5;
2166
2136
  sources.push({ type: 'package.json', field: 'dependencies.angular-animate' });
@@ -2191,23 +2161,19 @@ function backboneDetector(projectPath, packageJson) {
2191
2161
  let confidence = 0;
2192
2162
  let version;
2193
2163
  const deps = collectAllDependencies(pkg);
2194
- // Backbone package
2195
2164
  if (deps['backbone']) {
2196
2165
  confidence += 70;
2197
2166
  version = parseVersionString(deps['backbone']);
2198
2167
  sources.push({ type: 'package.json', field: 'dependencies.backbone' });
2199
- // Underscore (commonly used with Backbone)
2200
2168
  if (deps['underscore']) {
2201
2169
  confidence += 15;
2202
2170
  sources.push({ type: 'package.json', field: 'dependencies.underscore' });
2203
2171
  }
2204
- // Lodash can be used as underscore replacement
2205
2172
  if (deps['lodash']) {
2206
2173
  confidence += 5;
2207
2174
  sources.push({ type: 'package.json', field: 'dependencies.lodash' });
2208
2175
  }
2209
2176
  }
2210
- // Marionette (Backbone framework)
2211
2177
  if (deps['backbone.marionette'] || deps['marionette']) {
2212
2178
  confidence += 10;
2213
2179
  sources.push({ type: 'package.json', field: 'dependencies.backbone.marionette' });
@@ -2238,18 +2204,15 @@ function emberDetector(projectPath, packageJson) {
2238
2204
  let confidence = 0;
2239
2205
  let version;
2240
2206
  const deps = collectAllDependencies(pkg);
2241
- // Ember source package
2242
2207
  if (deps['ember-source']) {
2243
2208
  confidence += 70;
2244
2209
  version = parseVersionString(deps['ember-source']);
2245
2210
  sources.push({ type: 'package.json', field: 'dependencies.ember-source' });
2246
2211
  }
2247
- // Ember CLI
2248
2212
  if (deps['ember-cli']) {
2249
2213
  confidence += 20;
2250
2214
  sources.push({ type: 'package.json', field: 'devDependencies.ember-cli' });
2251
2215
  }
2252
- // Ember Data
2253
2216
  if (deps['ember-data']) {
2254
2217
  confidence += 10;
2255
2218
  sources.push({ type: 'package.json', field: 'dependencies.ember-data' });
@@ -2280,18 +2243,15 @@ function jqueryDetector(projectPath, packageJson) {
2280
2243
  let confidence = 0;
2281
2244
  let version;
2282
2245
  const deps = collectAllDependencies(pkg);
2283
- // jQuery package
2284
2246
  if (deps['jquery']) {
2285
2247
  confidence += 80;
2286
2248
  version = parseVersionString(deps['jquery']);
2287
2249
  sources.push({ type: 'package.json', field: 'dependencies.jquery' });
2288
2250
  }
2289
- // jQuery UI
2290
2251
  if (deps['jquery-ui']) {
2291
2252
  confidence += 10;
2292
2253
  sources.push({ type: 'package.json', field: 'dependencies.jquery-ui' });
2293
2254
  }
2294
- // jQuery plugins
2295
2255
  if (deps['jquery-validation']) {
2296
2256
  confidence += 5;
2297
2257
  sources.push({ type: 'package.json', field: 'dependencies.jquery-validation' });
@@ -2420,7 +2380,6 @@ function prettierDetector(projectPath, packageJson) {
2420
2380
  confidence += 30;
2421
2381
  sources.push({ type: 'package.json', field: 'prettier' });
2422
2382
  }
2423
- // .prettierignore file
2424
2383
  if (exists(node_path.join(projectPath, '.prettierignore'))) {
2425
2384
  confidence += 10;
2426
2385
  sources.push({ type: 'config-file', path: '.prettierignore' });
@@ -2515,7 +2474,6 @@ function biomeDetector(projectPath, packageJson) {
2515
2474
  let configPath;
2516
2475
  let version;
2517
2476
  const deps = collectAllDependencies(pkg);
2518
- // @biomejs/biome package
2519
2477
  if (deps['@biomejs/biome']) {
2520
2478
  confidence += 70;
2521
2479
  version = parseVersionString(deps['@biomejs/biome']);
@@ -2784,7 +2742,7 @@ function npmWorkspacesDetector(workspacePath, packageJson) {
2784
2742
  sources.push({ type: 'lockfile', path: 'package-lock.json' });
2785
2743
  }
2786
2744
  if (exists(node_path.join(workspacePath, 'yarn.lock'))) {
2787
- return null; // Let yarn workspace detector handle this
2745
+ return null;
2788
2746
  }
2789
2747
  if (confidence === 0) {
2790
2748
  return null;
@@ -3127,7 +3085,6 @@ function checkTsConfigStrict(projectPath) {
3127
3085
  if (!content)
3128
3086
  return undefined;
3129
3087
  try {
3130
- // Simple JSON parsing - doesn't handle comments but good enough for strict check
3131
3088
  const cleanContent = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
3132
3089
  const parsed = parse(cleanContent);
3133
3090
  return parsed?.compilerOptions?.strict === true;
@@ -3150,19 +3107,16 @@ function typescriptDetector(projectPath, packageJson) {
3150
3107
  let configPath;
3151
3108
  let version;
3152
3109
  const deps = collectAllDependencies(pkg);
3153
- // TypeScript package
3154
3110
  if (deps['typescript']) {
3155
3111
  confidence += 50;
3156
3112
  version = parseVersionString(deps['typescript']);
3157
3113
  sources.push({ type: 'package.json', field: 'dependencies.typescript' });
3158
3114
  }
3159
- // tsconfig.json
3160
3115
  if (exists(node_path.join(projectPath, 'tsconfig.json'))) {
3161
3116
  confidence += 40;
3162
3117
  configPath = 'tsconfig.json';
3163
3118
  sources.push({ type: 'config-file', path: 'tsconfig.json' });
3164
3119
  }
3165
- // tsconfig.*.json variants
3166
3120
  const tsconfigVariants = ['tsconfig.build.json', 'tsconfig.lib.json', 'tsconfig.spec.json', 'tsconfig.app.json'];
3167
3121
  for (const variant of tsconfigVariants) {
3168
3122
  if (exists(node_path.join(projectPath, variant))) {
@@ -3171,7 +3125,6 @@ function typescriptDetector(projectPath, packageJson) {
3171
3125
  break;
3172
3126
  }
3173
3127
  }
3174
- // @types packages
3175
3128
  const typePackages = keys(deps).filter((d) => d.startsWith('@types/'));
3176
3129
  if (typePackages.length > 0) {
3177
3130
  confidence += 10;
@@ -3205,24 +3158,20 @@ function flowDetector(projectPath, packageJson) {
3205
3158
  let configPath;
3206
3159
  let version;
3207
3160
  const deps = collectAllDependencies(pkg);
3208
- // flow-bin package
3209
3161
  if (deps['flow-bin']) {
3210
3162
  confidence += 60;
3211
3163
  version = parseVersionString(deps['flow-bin']);
3212
3164
  sources.push({ type: 'package.json', field: 'dependencies.flow-bin' });
3213
3165
  }
3214
- // .flowconfig
3215
3166
  if (exists(node_path.join(projectPath, '.flowconfig'))) {
3216
3167
  confidence += 40;
3217
3168
  configPath = '.flowconfig';
3218
3169
  sources.push({ type: 'config-file', path: '.flowconfig' });
3219
3170
  }
3220
- // flow-typed directory
3221
3171
  if (exists(node_path.join(projectPath, 'flow-typed'))) {
3222
3172
  confidence += 10;
3223
3173
  sources.push({ type: 'directory', path: 'flow-typed/' });
3224
3174
  }
3225
- // @babel/preset-flow
3226
3175
  if (deps['@babel/preset-flow']) {
3227
3176
  confidence += 10;
3228
3177
  sources.push({ type: 'package.json', field: 'dependencies.@babel/preset-flow' });
@@ -3246,7 +3195,6 @@ function flowDetector(projectPath, packageJson) {
3246
3195
  * @returns `true` if the content contains JSDoc type annotations.
3247
3196
  */
3248
3197
  function hasJsDocTypes(content) {
3249
- // Check for JSDoc type annotations
3250
3198
  return (content.includes('@type {') ||
3251
3199
  content.includes('@param {') ||
3252
3200
  content.includes('@returns {') ||
@@ -3265,14 +3213,11 @@ function jsdocDetector(projectPath, packageJson) {
3265
3213
  const sources = [];
3266
3214
  let confidence = 0;
3267
3215
  const deps = collectAllDependencies(pkg);
3268
- // jsdoc package
3269
3216
  if (deps['jsdoc']) {
3270
3217
  confidence += 30;
3271
3218
  sources.push({ type: 'package.json', field: 'dependencies.jsdoc' });
3272
3219
  }
3273
- // typescript with checkJs (JSDoc type checking)
3274
3220
  if (deps['typescript']) {
3275
- // Check if checkJs is enabled in tsconfig
3276
3221
  const tsconfigPath = node_path.join(projectPath, 'tsconfig.json');
3277
3222
  const content = readFileIfExists(tsconfigPath);
3278
3223
  if (content) {
@@ -3289,12 +3234,10 @@ function jsdocDetector(projectPath, packageJson) {
3289
3234
  }
3290
3235
  }
3291
3236
  }
3292
- // Check for jsconfig.json (VS Code JS type checking)
3293
3237
  if (exists(node_path.join(projectPath, 'jsconfig.json'))) {
3294
3238
  confidence += 40;
3295
3239
  sources.push({ type: 'config-file', path: 'jsconfig.json' });
3296
3240
  }
3297
- // Sample check for JSDoc annotations in source files
3298
3241
  const srcDir = node_path.join(projectPath, 'src');
3299
3242
  if (exists(srcDir)) {
3300
3243
  try {
@@ -3345,8 +3288,6 @@ const detectAllCache = createCache({ ttl: 60000, maxSize: 50 });
3345
3288
  function isDetectAllOptions(value) {
3346
3289
  if (typeof value !== 'object' || value === null)
3347
3290
  return false;
3348
- // DetectAllOptions has skipCache or packageJson fields specifically
3349
- // PackageJson never has skipCache field
3350
3291
  return 'skipCache' in value || 'packageJson' in value;
3351
3292
  }
3352
3293
  /**
@@ -3378,9 +3319,7 @@ function isDetectAllOptions(value) {
3378
3319
  * ```
3379
3320
  */
3380
3321
  function detectAll(projectPath, packageJsonOrOptions) {
3381
- // Handle backward-compatible arguments
3382
3322
  const options = isDetectAllOptions(packageJsonOrOptions) ? packageJsonOrOptions : { packageJson: packageJsonOrOptions };
3383
- // Check cache first (unless skipCache is true)
3384
3323
  if (!options.skipCache) {
3385
3324
  const cached = detectAllCache.get(projectPath);
3386
3325
  if (cached) {
@@ -3431,7 +3370,6 @@ function detectAll(projectPath, packageJsonOrOptions) {
3431
3370
  legacyFrameworks: result.legacyFrameworks.map((f) => f.id),
3432
3371
  testingFrameworks: result.testingFrameworks.map((f) => f.id),
3433
3372
  });
3434
- // Cache the result
3435
3373
  detectAllCache.set(projectPath, result);
3436
3374
  return result;
3437
3375
  }