@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
@@ -12,7 +12,6 @@ import { existsSync, readFileSync, statSync, lstatSync, readdirSync } from 'node
12
12
  *
13
13
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/map
14
14
  */
15
- // Capture references at module initialization time
16
15
  const _Map = globalThis.Map;
17
16
  const _Reflect$2 = globalThis.Reflect;
18
17
  /**
@@ -32,7 +31,6 @@ const createMap = (iterable) => _Reflect$2.construct(_Map, iterable ? [iterable]
32
31
  *
33
32
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/object
34
33
  */
35
- // Capture references at module initialization time
36
34
  const _Object = globalThis.Object;
37
35
  /**
38
36
  * (Safe copy) Prevents modification of existing property attributes and values,
@@ -67,7 +65,6 @@ const defineProperties = _Object.defineProperties;
67
65
  *
68
66
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/set
69
67
  */
70
- // Capture references at module initialization time
71
68
  const _Set = globalThis.Set;
72
69
  const _Reflect$1 = globalThis.Reflect;
73
70
  /**
@@ -117,7 +114,6 @@ const cacheRegistry = createSet();
117
114
  function createCache(options) {
118
115
  const { ttl, maxSize } = options ?? {};
119
116
  const store = createMap();
120
- // Track insertion order for FIFO eviction
121
117
  const insertionOrder = [];
122
118
  /**
123
119
  * Check if an entry is expired.
@@ -168,12 +164,10 @@ function createCache(options) {
168
164
  return entry.value;
169
165
  },
170
166
  set(key, value) {
171
- // If key exists, remove from order first
172
167
  if (store.has(key)) {
173
168
  removeFromOrder(key);
174
169
  }
175
170
  else {
176
- // Evict if needed before adding new entry
177
171
  evictIfNeeded();
178
172
  }
179
173
  // eslint-disable-next-line workspace/no-unsafe-builtin-methods -- Date.now() is needed for Jest fake timers compatibility
@@ -206,7 +200,6 @@ function createCache(options) {
206
200
  return [...insertionOrder];
207
201
  },
208
202
  };
209
- // Register cache for global operations
210
203
  cacheRegistry.add(cache);
211
204
  return freeze(cache);
212
205
  }
@@ -219,7 +212,6 @@ function createCache(options) {
219
212
  *
220
213
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/array
221
214
  */
222
- // Capture references at module initialization time
223
215
  const _Array = globalThis.Array;
224
216
  /**
225
217
  * (Safe copy) Determines whether the passed value is an Array.
@@ -234,7 +226,6 @@ const isArray = _Array.isArray;
234
226
  *
235
227
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/console
236
228
  */
237
- // Capture references at module initialization time
238
229
  const _console = globalThis.console;
239
230
  /**
240
231
  * (Safe copy) Outputs a message to the console.
@@ -317,7 +308,6 @@ _console.timeLog.bind(_console);
317
308
  *
318
309
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/json
319
310
  */
320
- // Capture references at module initialization time
321
311
  const _JSON = globalThis.JSON;
322
312
  /**
323
313
  * (Safe copy) Converts a JavaScript Object Notation (JSON) string into an object.
@@ -364,7 +354,6 @@ const getType = (target) => {
364
354
  *
365
355
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/error
366
356
  */
367
- // Capture references at module initialization time
368
357
  const _Error = globalThis.Error;
369
358
  const _Reflect = globalThis.Reflect;
370
359
  /**
@@ -385,7 +374,6 @@ const createError = (message, options) => _Reflect.construct(_Error, [message, o
385
374
  *
386
375
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/math
387
376
  */
388
- // Capture references at module initialization time
389
377
  const _Math = globalThis.Math;
390
378
  /**
391
379
  * (Safe copy) Returns the smaller of zero or more numbers.
@@ -658,14 +646,11 @@ function formatMessage(namespace, message, meta) {
658
646
  */
659
647
  function createScopedLogger(namespace, options = {}) {
660
648
  const { level = 'error', sanitizeSecrets = true } = options;
661
- // Create wrapper functions that add namespace prefix and sanitization
662
649
  const createLogFn = (baseFn) => (message, meta) => {
663
650
  const processedMeta = sanitizeSecrets && meta ? sanitize(meta) : meta;
664
651
  baseFn(formatMessage(namespace, message, processedMeta));
665
652
  };
666
- // Create base logger with wrapped functions
667
653
  const baseLogger = createLogger(createLogFn(error), createLogFn(warn), createLogFn(log), createLogFn(info), createLogFn(debug));
668
- // Set initial log level (use global override if set)
669
654
  baseLogger.setLogLevel(level);
670
655
  const scopedLogger = freeze({
671
656
  error: (message, meta) => baseLogger.error(message, meta),
@@ -676,7 +661,6 @@ function createScopedLogger(namespace, options = {}) {
676
661
  setLogLevel: baseLogger.setLogLevel,
677
662
  getLogLevel: baseLogger.getLogLevel,
678
663
  });
679
- // Register logger for global level management
680
664
  loggerRegistry.add(scopedLogger);
681
665
  return scopedLogger;
682
666
  }
@@ -956,7 +940,6 @@ function collectAllDependencies(packageJson) {
956
940
  function parseVersionString(versionString) {
957
941
  if (versionString === undefined || versionString === null)
958
942
  return undefined;
959
- // Manual parsing instead of regex to avoid ReDoS
960
943
  let start = 0;
961
944
  while (start < versionString.length) {
962
945
  const char = versionString[start];
@@ -1017,7 +1000,6 @@ function expressDetector(projectPath, packageJson) {
1017
1000
  version = parseVersionString(deps['express']);
1018
1001
  sources.push({ type: 'package.json', field: 'dependencies.express' });
1019
1002
  }
1020
- // @types/express (indicates usage)
1021
1003
  if (deps['@types/express']) {
1022
1004
  confidence += 10;
1023
1005
  sources.push({ type: 'package.json', field: 'dependencies.@types/express' });
@@ -1053,13 +1035,11 @@ function nestDetector(projectPath, packageJson) {
1053
1035
  let version;
1054
1036
  let configPath;
1055
1037
  const deps = collectAllDependencies(pkg);
1056
- // @nestjs/core package
1057
1038
  if (deps['@nestjs/core']) {
1058
1039
  confidence += 70;
1059
1040
  version = parseVersionString(deps['@nestjs/core']);
1060
1041
  sources.push({ type: 'package.json', field: 'dependencies.@nestjs/core' });
1061
1042
  }
1062
- // @nestjs/common
1063
1043
  if (deps['@nestjs/common']) {
1064
1044
  confidence += 15;
1065
1045
  sources.push({ type: 'package.json', field: 'dependencies.@nestjs/common' });
@@ -1110,7 +1090,6 @@ function fastifyDetector(projectPath, packageJson) {
1110
1090
  confidence += 15;
1111
1091
  sources.push({ type: 'package.json', field: 'dependencies (fastify plugins)' });
1112
1092
  }
1113
- // @types/fastify (older versions)
1114
1093
  if (deps['@types/fastify']) {
1115
1094
  confidence += 5;
1116
1095
  sources.push({ type: 'package.json', field: 'dependencies.@types/fastify' });
@@ -1145,7 +1124,6 @@ function koaDetector(projectPath, packageJson) {
1145
1124
  version = parseVersionString(deps['koa']);
1146
1125
  sources.push({ type: 'package.json', field: 'dependencies.koa' });
1147
1126
  }
1148
- // @types/koa
1149
1127
  if (deps['@types/koa']) {
1150
1128
  confidence += 10;
1151
1129
  sources.push({ type: 'package.json', field: 'dependencies.@types/koa' });
@@ -1688,7 +1666,6 @@ function remixDetector(projectPath, packageJson) {
1688
1666
  let confidence = 0;
1689
1667
  let version;
1690
1668
  const deps = collectAllDependencies(pkg);
1691
- // @remix-run packages
1692
1669
  if (deps['@remix-run/react']) {
1693
1670
  confidence += 70;
1694
1671
  version = parseVersionString(deps['@remix-run/react']);
@@ -1964,7 +1941,6 @@ function sveltekitDetector(projectPath, packageJson) {
1964
1941
  let confidence = 0;
1965
1942
  let version;
1966
1943
  const deps = collectAllDependencies(pkg);
1967
- // @sveltejs/kit package
1968
1944
  if (deps['@sveltejs/kit']) {
1969
1945
  confidence += 70;
1970
1946
  version = parseVersionString(deps['@sveltejs/kit']);
@@ -2043,13 +2019,11 @@ function qwikDetector(projectPath, packageJson) {
2043
2019
  let confidence = 0;
2044
2020
  let version;
2045
2021
  const deps = collectAllDependencies(pkg);
2046
- // @builder.io/qwik package
2047
2022
  if (deps['@builder.io/qwik']) {
2048
2023
  confidence += 70;
2049
2024
  version = parseVersionString(deps['@builder.io/qwik']);
2050
2025
  sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik' });
2051
2026
  }
2052
- // @builder.io/qwik-city
2053
2027
  if (deps['@builder.io/qwik-city']) {
2054
2028
  confidence += 20;
2055
2029
  sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
@@ -2142,23 +2116,19 @@ function angularJSDetector(projectPath, packageJson) {
2142
2116
  let confidence = 0;
2143
2117
  let version;
2144
2118
  const deps = collectAllDependencies(pkg);
2145
- // AngularJS package (angular, not @angular/core)
2146
2119
  if (deps['angular']) {
2147
2120
  confidence += 70;
2148
2121
  version = parseVersionString(deps['angular']);
2149
2122
  sources.push({ type: 'package.json', field: 'dependencies.angular' });
2150
2123
  }
2151
- // AngularJS router
2152
2124
  if (deps['angular-route']) {
2153
2125
  confidence += 15;
2154
2126
  sources.push({ type: 'package.json', field: 'dependencies.angular-route' });
2155
2127
  }
2156
- // AngularJS resource
2157
2128
  if (deps['angular-resource']) {
2158
2129
  confidence += 10;
2159
2130
  sources.push({ type: 'package.json', field: 'dependencies.angular-resource' });
2160
2131
  }
2161
- // AngularJS animate
2162
2132
  if (deps['angular-animate']) {
2163
2133
  confidence += 5;
2164
2134
  sources.push({ type: 'package.json', field: 'dependencies.angular-animate' });
@@ -2189,23 +2159,19 @@ function backboneDetector(projectPath, packageJson) {
2189
2159
  let confidence = 0;
2190
2160
  let version;
2191
2161
  const deps = collectAllDependencies(pkg);
2192
- // Backbone package
2193
2162
  if (deps['backbone']) {
2194
2163
  confidence += 70;
2195
2164
  version = parseVersionString(deps['backbone']);
2196
2165
  sources.push({ type: 'package.json', field: 'dependencies.backbone' });
2197
- // Underscore (commonly used with Backbone)
2198
2166
  if (deps['underscore']) {
2199
2167
  confidence += 15;
2200
2168
  sources.push({ type: 'package.json', field: 'dependencies.underscore' });
2201
2169
  }
2202
- // Lodash can be used as underscore replacement
2203
2170
  if (deps['lodash']) {
2204
2171
  confidence += 5;
2205
2172
  sources.push({ type: 'package.json', field: 'dependencies.lodash' });
2206
2173
  }
2207
2174
  }
2208
- // Marionette (Backbone framework)
2209
2175
  if (deps['backbone.marionette'] || deps['marionette']) {
2210
2176
  confidence += 10;
2211
2177
  sources.push({ type: 'package.json', field: 'dependencies.backbone.marionette' });
@@ -2236,18 +2202,15 @@ function emberDetector(projectPath, packageJson) {
2236
2202
  let confidence = 0;
2237
2203
  let version;
2238
2204
  const deps = collectAllDependencies(pkg);
2239
- // Ember source package
2240
2205
  if (deps['ember-source']) {
2241
2206
  confidence += 70;
2242
2207
  version = parseVersionString(deps['ember-source']);
2243
2208
  sources.push({ type: 'package.json', field: 'dependencies.ember-source' });
2244
2209
  }
2245
- // Ember CLI
2246
2210
  if (deps['ember-cli']) {
2247
2211
  confidence += 20;
2248
2212
  sources.push({ type: 'package.json', field: 'devDependencies.ember-cli' });
2249
2213
  }
2250
- // Ember Data
2251
2214
  if (deps['ember-data']) {
2252
2215
  confidence += 10;
2253
2216
  sources.push({ type: 'package.json', field: 'dependencies.ember-data' });
@@ -2278,18 +2241,15 @@ function jqueryDetector(projectPath, packageJson) {
2278
2241
  let confidence = 0;
2279
2242
  let version;
2280
2243
  const deps = collectAllDependencies(pkg);
2281
- // jQuery package
2282
2244
  if (deps['jquery']) {
2283
2245
  confidence += 80;
2284
2246
  version = parseVersionString(deps['jquery']);
2285
2247
  sources.push({ type: 'package.json', field: 'dependencies.jquery' });
2286
2248
  }
2287
- // jQuery UI
2288
2249
  if (deps['jquery-ui']) {
2289
2250
  confidence += 10;
2290
2251
  sources.push({ type: 'package.json', field: 'dependencies.jquery-ui' });
2291
2252
  }
2292
- // jQuery plugins
2293
2253
  if (deps['jquery-validation']) {
2294
2254
  confidence += 5;
2295
2255
  sources.push({ type: 'package.json', field: 'dependencies.jquery-validation' });
@@ -2418,7 +2378,6 @@ function prettierDetector(projectPath, packageJson) {
2418
2378
  confidence += 30;
2419
2379
  sources.push({ type: 'package.json', field: 'prettier' });
2420
2380
  }
2421
- // .prettierignore file
2422
2381
  if (exists(join$1(projectPath, '.prettierignore'))) {
2423
2382
  confidence += 10;
2424
2383
  sources.push({ type: 'config-file', path: '.prettierignore' });
@@ -2513,7 +2472,6 @@ function biomeDetector(projectPath, packageJson) {
2513
2472
  let configPath;
2514
2473
  let version;
2515
2474
  const deps = collectAllDependencies(pkg);
2516
- // @biomejs/biome package
2517
2475
  if (deps['@biomejs/biome']) {
2518
2476
  confidence += 70;
2519
2477
  version = parseVersionString(deps['@biomejs/biome']);
@@ -2782,7 +2740,7 @@ function npmWorkspacesDetector(workspacePath, packageJson) {
2782
2740
  sources.push({ type: 'lockfile', path: 'package-lock.json' });
2783
2741
  }
2784
2742
  if (exists(join$1(workspacePath, 'yarn.lock'))) {
2785
- return null; // Let yarn workspace detector handle this
2743
+ return null;
2786
2744
  }
2787
2745
  if (confidence === 0) {
2788
2746
  return null;
@@ -3125,7 +3083,6 @@ function checkTsConfigStrict(projectPath) {
3125
3083
  if (!content)
3126
3084
  return undefined;
3127
3085
  try {
3128
- // Simple JSON parsing - doesn't handle comments but good enough for strict check
3129
3086
  const cleanContent = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
3130
3087
  const parsed = parse(cleanContent);
3131
3088
  return parsed?.compilerOptions?.strict === true;
@@ -3148,19 +3105,16 @@ function typescriptDetector(projectPath, packageJson) {
3148
3105
  let configPath;
3149
3106
  let version;
3150
3107
  const deps = collectAllDependencies(pkg);
3151
- // TypeScript package
3152
3108
  if (deps['typescript']) {
3153
3109
  confidence += 50;
3154
3110
  version = parseVersionString(deps['typescript']);
3155
3111
  sources.push({ type: 'package.json', field: 'dependencies.typescript' });
3156
3112
  }
3157
- // tsconfig.json
3158
3113
  if (exists(join$1(projectPath, 'tsconfig.json'))) {
3159
3114
  confidence += 40;
3160
3115
  configPath = 'tsconfig.json';
3161
3116
  sources.push({ type: 'config-file', path: 'tsconfig.json' });
3162
3117
  }
3163
- // tsconfig.*.json variants
3164
3118
  const tsconfigVariants = ['tsconfig.build.json', 'tsconfig.lib.json', 'tsconfig.spec.json', 'tsconfig.app.json'];
3165
3119
  for (const variant of tsconfigVariants) {
3166
3120
  if (exists(join$1(projectPath, variant))) {
@@ -3169,7 +3123,6 @@ function typescriptDetector(projectPath, packageJson) {
3169
3123
  break;
3170
3124
  }
3171
3125
  }
3172
- // @types packages
3173
3126
  const typePackages = keys(deps).filter((d) => d.startsWith('@types/'));
3174
3127
  if (typePackages.length > 0) {
3175
3128
  confidence += 10;
@@ -3203,24 +3156,20 @@ function flowDetector(projectPath, packageJson) {
3203
3156
  let configPath;
3204
3157
  let version;
3205
3158
  const deps = collectAllDependencies(pkg);
3206
- // flow-bin package
3207
3159
  if (deps['flow-bin']) {
3208
3160
  confidence += 60;
3209
3161
  version = parseVersionString(deps['flow-bin']);
3210
3162
  sources.push({ type: 'package.json', field: 'dependencies.flow-bin' });
3211
3163
  }
3212
- // .flowconfig
3213
3164
  if (exists(join$1(projectPath, '.flowconfig'))) {
3214
3165
  confidence += 40;
3215
3166
  configPath = '.flowconfig';
3216
3167
  sources.push({ type: 'config-file', path: '.flowconfig' });
3217
3168
  }
3218
- // flow-typed directory
3219
3169
  if (exists(join$1(projectPath, 'flow-typed'))) {
3220
3170
  confidence += 10;
3221
3171
  sources.push({ type: 'directory', path: 'flow-typed/' });
3222
3172
  }
3223
- // @babel/preset-flow
3224
3173
  if (deps['@babel/preset-flow']) {
3225
3174
  confidence += 10;
3226
3175
  sources.push({ type: 'package.json', field: 'dependencies.@babel/preset-flow' });
@@ -3244,7 +3193,6 @@ function flowDetector(projectPath, packageJson) {
3244
3193
  * @returns `true` if the content contains JSDoc type annotations.
3245
3194
  */
3246
3195
  function hasJsDocTypes(content) {
3247
- // Check for JSDoc type annotations
3248
3196
  return (content.includes('@type {') ||
3249
3197
  content.includes('@param {') ||
3250
3198
  content.includes('@returns {') ||
@@ -3263,14 +3211,11 @@ function jsdocDetector(projectPath, packageJson) {
3263
3211
  const sources = [];
3264
3212
  let confidence = 0;
3265
3213
  const deps = collectAllDependencies(pkg);
3266
- // jsdoc package
3267
3214
  if (deps['jsdoc']) {
3268
3215
  confidence += 30;
3269
3216
  sources.push({ type: 'package.json', field: 'dependencies.jsdoc' });
3270
3217
  }
3271
- // typescript with checkJs (JSDoc type checking)
3272
3218
  if (deps['typescript']) {
3273
- // Check if checkJs is enabled in tsconfig
3274
3219
  const tsconfigPath = join$1(projectPath, 'tsconfig.json');
3275
3220
  const content = readFileIfExists(tsconfigPath);
3276
3221
  if (content) {
@@ -3287,12 +3232,10 @@ function jsdocDetector(projectPath, packageJson) {
3287
3232
  }
3288
3233
  }
3289
3234
  }
3290
- // Check for jsconfig.json (VS Code JS type checking)
3291
3235
  if (exists(join$1(projectPath, 'jsconfig.json'))) {
3292
3236
  confidence += 40;
3293
3237
  sources.push({ type: 'config-file', path: 'jsconfig.json' });
3294
3238
  }
3295
- // Sample check for JSDoc annotations in source files
3296
3239
  const srcDir = join$1(projectPath, 'src');
3297
3240
  if (exists(srcDir)) {
3298
3241
  try {
@@ -3343,8 +3286,6 @@ const detectAllCache = createCache({ ttl: 60000, maxSize: 50 });
3343
3286
  function isDetectAllOptions(value) {
3344
3287
  if (typeof value !== 'object' || value === null)
3345
3288
  return false;
3346
- // DetectAllOptions has skipCache or packageJson fields specifically
3347
- // PackageJson never has skipCache field
3348
3289
  return 'skipCache' in value || 'packageJson' in value;
3349
3290
  }
3350
3291
  /**
@@ -3376,9 +3317,7 @@ function isDetectAllOptions(value) {
3376
3317
  * ```
3377
3318
  */
3378
3319
  function detectAll(projectPath, packageJsonOrOptions) {
3379
- // Handle backward-compatible arguments
3380
3320
  const options = isDetectAllOptions(packageJsonOrOptions) ? packageJsonOrOptions : { packageJson: packageJsonOrOptions };
3381
- // Check cache first (unless skipCache is true)
3382
3321
  if (!options.skipCache) {
3383
3322
  const cached = detectAllCache.get(projectPath);
3384
3323
  if (cached) {
@@ -3429,7 +3368,6 @@ function detectAll(projectPath, packageJsonOrOptions) {
3429
3368
  legacyFrameworks: result.legacyFrameworks.map((f) => f.id),
3430
3369
  testingFrameworks: result.testingFrameworks.map((f) => f.id),
3431
3370
  });
3432
- // Cache the result
3433
3371
  detectAllCache.set(projectPath, result);
3434
3372
  return result;
3435
3373
  }