@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
@@ -9,7 +9,6 @@ import { existsSync, readFileSync, statSync, lstatSync, readdirSync } from 'node
9
9
  *
10
10
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/json
11
11
  */
12
- // Capture references at module initialization time
13
12
  const _JSON = globalThis.JSON;
14
13
  /**
15
14
  * (Safe copy) Converts a JavaScript Object Notation (JSON) string into an object.
@@ -28,7 +27,6 @@ const stringify = _JSON.stringify;
28
27
  *
29
28
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/math
30
29
  */
31
- // Capture references at module initialization time
32
30
  const _Math = globalThis.Math;
33
31
  /**
34
32
  * (Safe copy) Returns the value of a number rounded to the nearest integer.
@@ -47,7 +45,6 @@ const min = _Math.min;
47
45
  *
48
46
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/object
49
47
  */
50
- // Capture references at module initialization time
51
48
  const _Object = globalThis.Object;
52
49
  /**
53
50
  * (Safe copy) Prevents modification of existing property attributes and values,
@@ -82,7 +79,6 @@ const defineProperties = _Object.defineProperties;
82
79
  *
83
80
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/error
84
81
  */
85
- // Capture references at module initialization time
86
82
  const _Error = globalThis.Error;
87
83
  const _Reflect$2 = globalThis.Reflect;
88
84
  /**
@@ -103,7 +99,6 @@ const createError = (message, options) => _Reflect$2.construct(_Error, [message,
103
99
  *
104
100
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/array
105
101
  */
106
- // Capture references at module initialization time
107
102
  const _Array = globalThis.Array;
108
103
  /**
109
104
  * (Safe copy) Determines whether the passed value is an Array.
@@ -118,7 +113,6 @@ const isArray = _Array.isArray;
118
113
  *
119
114
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/console
120
115
  */
121
- // Capture references at module initialization time
122
116
  const _console = globalThis.console;
123
117
  /**
124
118
  * (Safe copy) Outputs a message to the console.
@@ -204,7 +198,6 @@ _console.timeLog.bind(_console);
204
198
  *
205
199
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/set
206
200
  */
207
- // Capture references at module initialization time
208
201
  const _Set = globalThis.Set;
209
202
  const _Reflect$1 = globalThis.Reflect;
210
203
  /**
@@ -252,7 +245,6 @@ const getType = (target) => {
252
245
  *
253
246
  * @module @hyperfrontend/immutable-api-utils/built-in-copy/map
254
247
  */
255
- // Capture references at module initialization time
256
248
  const _Map = globalThis.Map;
257
249
  const _Reflect = globalThis.Reflect;
258
250
  /**
@@ -530,14 +522,11 @@ function formatMessage(namespace, message, meta) {
530
522
  */
531
523
  function createScopedLogger(namespace, options = {}) {
532
524
  const { level = 'error', sanitizeSecrets = true } = options;
533
- // Create wrapper functions that add namespace prefix and sanitization
534
525
  const createLogFn = (baseFn) => (message, meta) => {
535
526
  const processedMeta = sanitizeSecrets && meta ? sanitize(meta) : meta;
536
527
  baseFn(formatMessage(namespace, message, processedMeta));
537
528
  };
538
- // Create base logger with wrapped functions
539
529
  const baseLogger = createLogger(createLogFn(error), createLogFn(warn), createLogFn(log), createLogFn(info), createLogFn(debug));
540
- // Set initial log level (use global override if set)
541
530
  baseLogger.setLogLevel(level);
542
531
  const scopedLogger = freeze({
543
532
  error: (message, meta) => baseLogger.error(message, meta),
@@ -548,7 +537,6 @@ function createScopedLogger(namespace, options = {}) {
548
537
  setLogLevel: baseLogger.setLogLevel,
549
538
  getLogLevel: baseLogger.getLogLevel,
550
539
  });
551
- // Register logger for global level management
552
540
  loggerRegistry.add(scopedLogger);
553
541
  return scopedLogger;
554
542
  }
@@ -840,7 +828,6 @@ const cacheRegistry = createSet();
840
828
  function createCache(options) {
841
829
  const { ttl, maxSize } = options ?? {};
842
830
  const store = createMap();
843
- // Track insertion order for FIFO eviction
844
831
  const insertionOrder = [];
845
832
  /**
846
833
  * Check if an entry is expired.
@@ -891,12 +878,10 @@ function createCache(options) {
891
878
  return entry.value;
892
879
  },
893
880
  set(key, value) {
894
- // If key exists, remove from order first
895
881
  if (store.has(key)) {
896
882
  removeFromOrder(key);
897
883
  }
898
884
  else {
899
- // Evict if needed before adding new entry
900
885
  evictIfNeeded();
901
886
  }
902
887
  // eslint-disable-next-line workspace/no-unsafe-builtin-methods -- Date.now() is needed for Jest fake timers compatibility
@@ -929,7 +914,6 @@ function createCache(options) {
929
914
  return [...insertionOrder];
930
915
  },
931
916
  };
932
- // Register cache for global operations
933
917
  cacheRegistry.add(cache);
934
918
  return freeze(cache);
935
919
  }
@@ -960,7 +944,6 @@ function collectAllDependencies(packageJson) {
960
944
  function parseVersionString(versionString) {
961
945
  if (versionString === undefined || versionString === null)
962
946
  return undefined;
963
- // Manual parsing instead of regex to avoid ReDoS
964
947
  let start = 0;
965
948
  while (start < versionString.length) {
966
949
  const char = versionString[start];
@@ -1021,7 +1004,6 @@ function expressDetector(projectPath, packageJson) {
1021
1004
  version = parseVersionString(deps['express']);
1022
1005
  sources.push({ type: 'package.json', field: 'dependencies.express' });
1023
1006
  }
1024
- // @types/express (indicates usage)
1025
1007
  if (deps['@types/express']) {
1026
1008
  confidence += 10;
1027
1009
  sources.push({ type: 'package.json', field: 'dependencies.@types/express' });
@@ -1057,13 +1039,11 @@ function nestDetector(projectPath, packageJson) {
1057
1039
  let version;
1058
1040
  let configPath;
1059
1041
  const deps = collectAllDependencies(pkg);
1060
- // @nestjs/core package
1061
1042
  if (deps['@nestjs/core']) {
1062
1043
  confidence += 70;
1063
1044
  version = parseVersionString(deps['@nestjs/core']);
1064
1045
  sources.push({ type: 'package.json', field: 'dependencies.@nestjs/core' });
1065
1046
  }
1066
- // @nestjs/common
1067
1047
  if (deps['@nestjs/common']) {
1068
1048
  confidence += 15;
1069
1049
  sources.push({ type: 'package.json', field: 'dependencies.@nestjs/common' });
@@ -1114,7 +1094,6 @@ function fastifyDetector(projectPath, packageJson) {
1114
1094
  confidence += 15;
1115
1095
  sources.push({ type: 'package.json', field: 'dependencies (fastify plugins)' });
1116
1096
  }
1117
- // @types/fastify (older versions)
1118
1097
  if (deps['@types/fastify']) {
1119
1098
  confidence += 5;
1120
1099
  sources.push({ type: 'package.json', field: 'dependencies.@types/fastify' });
@@ -1149,7 +1128,6 @@ function koaDetector(projectPath, packageJson) {
1149
1128
  version = parseVersionString(deps['koa']);
1150
1129
  sources.push({ type: 'package.json', field: 'dependencies.koa' });
1151
1130
  }
1152
- // @types/koa
1153
1131
  if (deps['@types/koa']) {
1154
1132
  confidence += 10;
1155
1133
  sources.push({ type: 'package.json', field: 'dependencies.@types/koa' });
@@ -1692,7 +1670,6 @@ function remixDetector(projectPath, packageJson) {
1692
1670
  let confidence = 0;
1693
1671
  let version;
1694
1672
  const deps = collectAllDependencies(pkg);
1695
- // @remix-run packages
1696
1673
  if (deps['@remix-run/react']) {
1697
1674
  confidence += 70;
1698
1675
  version = parseVersionString(deps['@remix-run/react']);
@@ -1968,7 +1945,6 @@ function sveltekitDetector(projectPath, packageJson) {
1968
1945
  let confidence = 0;
1969
1946
  let version;
1970
1947
  const deps = collectAllDependencies(pkg);
1971
- // @sveltejs/kit package
1972
1948
  if (deps['@sveltejs/kit']) {
1973
1949
  confidence += 70;
1974
1950
  version = parseVersionString(deps['@sveltejs/kit']);
@@ -2047,13 +2023,11 @@ function qwikDetector(projectPath, packageJson) {
2047
2023
  let confidence = 0;
2048
2024
  let version;
2049
2025
  const deps = collectAllDependencies(pkg);
2050
- // @builder.io/qwik package
2051
2026
  if (deps['@builder.io/qwik']) {
2052
2027
  confidence += 70;
2053
2028
  version = parseVersionString(deps['@builder.io/qwik']);
2054
2029
  sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik' });
2055
2030
  }
2056
- // @builder.io/qwik-city
2057
2031
  if (deps['@builder.io/qwik-city']) {
2058
2032
  confidence += 20;
2059
2033
  sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
@@ -2146,23 +2120,19 @@ function angularJSDetector(projectPath, packageJson) {
2146
2120
  let confidence = 0;
2147
2121
  let version;
2148
2122
  const deps = collectAllDependencies(pkg);
2149
- // AngularJS package (angular, not @angular/core)
2150
2123
  if (deps['angular']) {
2151
2124
  confidence += 70;
2152
2125
  version = parseVersionString(deps['angular']);
2153
2126
  sources.push({ type: 'package.json', field: 'dependencies.angular' });
2154
2127
  }
2155
- // AngularJS router
2156
2128
  if (deps['angular-route']) {
2157
2129
  confidence += 15;
2158
2130
  sources.push({ type: 'package.json', field: 'dependencies.angular-route' });
2159
2131
  }
2160
- // AngularJS resource
2161
2132
  if (deps['angular-resource']) {
2162
2133
  confidence += 10;
2163
2134
  sources.push({ type: 'package.json', field: 'dependencies.angular-resource' });
2164
2135
  }
2165
- // AngularJS animate
2166
2136
  if (deps['angular-animate']) {
2167
2137
  confidence += 5;
2168
2138
  sources.push({ type: 'package.json', field: 'dependencies.angular-animate' });
@@ -2193,23 +2163,19 @@ function backboneDetector(projectPath, packageJson) {
2193
2163
  let confidence = 0;
2194
2164
  let version;
2195
2165
  const deps = collectAllDependencies(pkg);
2196
- // Backbone package
2197
2166
  if (deps['backbone']) {
2198
2167
  confidence += 70;
2199
2168
  version = parseVersionString(deps['backbone']);
2200
2169
  sources.push({ type: 'package.json', field: 'dependencies.backbone' });
2201
- // Underscore (commonly used with Backbone)
2202
2170
  if (deps['underscore']) {
2203
2171
  confidence += 15;
2204
2172
  sources.push({ type: 'package.json', field: 'dependencies.underscore' });
2205
2173
  }
2206
- // Lodash can be used as underscore replacement
2207
2174
  if (deps['lodash']) {
2208
2175
  confidence += 5;
2209
2176
  sources.push({ type: 'package.json', field: 'dependencies.lodash' });
2210
2177
  }
2211
2178
  }
2212
- // Marionette (Backbone framework)
2213
2179
  if (deps['backbone.marionette'] || deps['marionette']) {
2214
2180
  confidence += 10;
2215
2181
  sources.push({ type: 'package.json', field: 'dependencies.backbone.marionette' });
@@ -2240,18 +2206,15 @@ function emberDetector(projectPath, packageJson) {
2240
2206
  let confidence = 0;
2241
2207
  let version;
2242
2208
  const deps = collectAllDependencies(pkg);
2243
- // Ember source package
2244
2209
  if (deps['ember-source']) {
2245
2210
  confidence += 70;
2246
2211
  version = parseVersionString(deps['ember-source']);
2247
2212
  sources.push({ type: 'package.json', field: 'dependencies.ember-source' });
2248
2213
  }
2249
- // Ember CLI
2250
2214
  if (deps['ember-cli']) {
2251
2215
  confidence += 20;
2252
2216
  sources.push({ type: 'package.json', field: 'devDependencies.ember-cli' });
2253
2217
  }
2254
- // Ember Data
2255
2218
  if (deps['ember-data']) {
2256
2219
  confidence += 10;
2257
2220
  sources.push({ type: 'package.json', field: 'dependencies.ember-data' });
@@ -2282,18 +2245,15 @@ function jqueryDetector(projectPath, packageJson) {
2282
2245
  let confidence = 0;
2283
2246
  let version;
2284
2247
  const deps = collectAllDependencies(pkg);
2285
- // jQuery package
2286
2248
  if (deps['jquery']) {
2287
2249
  confidence += 80;
2288
2250
  version = parseVersionString(deps['jquery']);
2289
2251
  sources.push({ type: 'package.json', field: 'dependencies.jquery' });
2290
2252
  }
2291
- // jQuery UI
2292
2253
  if (deps['jquery-ui']) {
2293
2254
  confidence += 10;
2294
2255
  sources.push({ type: 'package.json', field: 'dependencies.jquery-ui' });
2295
2256
  }
2296
- // jQuery plugins
2297
2257
  if (deps['jquery-validation']) {
2298
2258
  confidence += 5;
2299
2259
  sources.push({ type: 'package.json', field: 'dependencies.jquery-validation' });
@@ -2422,7 +2382,6 @@ function prettierDetector(projectPath, packageJson) {
2422
2382
  confidence += 30;
2423
2383
  sources.push({ type: 'package.json', field: 'prettier' });
2424
2384
  }
2425
- // .prettierignore file
2426
2385
  if (exists(join$1(projectPath, '.prettierignore'))) {
2427
2386
  confidence += 10;
2428
2387
  sources.push({ type: 'config-file', path: '.prettierignore' });
@@ -2517,7 +2476,6 @@ function biomeDetector(projectPath, packageJson) {
2517
2476
  let configPath;
2518
2477
  let version;
2519
2478
  const deps = collectAllDependencies(pkg);
2520
- // @biomejs/biome package
2521
2479
  if (deps['@biomejs/biome']) {
2522
2480
  confidence += 70;
2523
2481
  version = parseVersionString(deps['@biomejs/biome']);
@@ -2786,7 +2744,7 @@ function npmWorkspacesDetector(workspacePath, packageJson) {
2786
2744
  sources.push({ type: 'lockfile', path: 'package-lock.json' });
2787
2745
  }
2788
2746
  if (exists(join$1(workspacePath, 'yarn.lock'))) {
2789
- return null; // Let yarn workspace detector handle this
2747
+ return null;
2790
2748
  }
2791
2749
  if (confidence === 0) {
2792
2750
  return null;
@@ -3129,7 +3087,6 @@ function checkTsConfigStrict(projectPath) {
3129
3087
  if (!content)
3130
3088
  return undefined;
3131
3089
  try {
3132
- // Simple JSON parsing - doesn't handle comments but good enough for strict check
3133
3090
  const cleanContent = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
3134
3091
  const parsed = parse(cleanContent);
3135
3092
  return parsed?.compilerOptions?.strict === true;
@@ -3152,19 +3109,16 @@ function typescriptDetector(projectPath, packageJson) {
3152
3109
  let configPath;
3153
3110
  let version;
3154
3111
  const deps = collectAllDependencies(pkg);
3155
- // TypeScript package
3156
3112
  if (deps['typescript']) {
3157
3113
  confidence += 50;
3158
3114
  version = parseVersionString(deps['typescript']);
3159
3115
  sources.push({ type: 'package.json', field: 'dependencies.typescript' });
3160
3116
  }
3161
- // tsconfig.json
3162
3117
  if (exists(join$1(projectPath, 'tsconfig.json'))) {
3163
3118
  confidence += 40;
3164
3119
  configPath = 'tsconfig.json';
3165
3120
  sources.push({ type: 'config-file', path: 'tsconfig.json' });
3166
3121
  }
3167
- // tsconfig.*.json variants
3168
3122
  const tsconfigVariants = ['tsconfig.build.json', 'tsconfig.lib.json', 'tsconfig.spec.json', 'tsconfig.app.json'];
3169
3123
  for (const variant of tsconfigVariants) {
3170
3124
  if (exists(join$1(projectPath, variant))) {
@@ -3173,7 +3127,6 @@ function typescriptDetector(projectPath, packageJson) {
3173
3127
  break;
3174
3128
  }
3175
3129
  }
3176
- // @types packages
3177
3130
  const typePackages = keys(deps).filter((d) => d.startsWith('@types/'));
3178
3131
  if (typePackages.length > 0) {
3179
3132
  confidence += 10;
@@ -3207,24 +3160,20 @@ function flowDetector(projectPath, packageJson) {
3207
3160
  let configPath;
3208
3161
  let version;
3209
3162
  const deps = collectAllDependencies(pkg);
3210
- // flow-bin package
3211
3163
  if (deps['flow-bin']) {
3212
3164
  confidence += 60;
3213
3165
  version = parseVersionString(deps['flow-bin']);
3214
3166
  sources.push({ type: 'package.json', field: 'dependencies.flow-bin' });
3215
3167
  }
3216
- // .flowconfig
3217
3168
  if (exists(join$1(projectPath, '.flowconfig'))) {
3218
3169
  confidence += 40;
3219
3170
  configPath = '.flowconfig';
3220
3171
  sources.push({ type: 'config-file', path: '.flowconfig' });
3221
3172
  }
3222
- // flow-typed directory
3223
3173
  if (exists(join$1(projectPath, 'flow-typed'))) {
3224
3174
  confidence += 10;
3225
3175
  sources.push({ type: 'directory', path: 'flow-typed/' });
3226
3176
  }
3227
- // @babel/preset-flow
3228
3177
  if (deps['@babel/preset-flow']) {
3229
3178
  confidence += 10;
3230
3179
  sources.push({ type: 'package.json', field: 'dependencies.@babel/preset-flow' });
@@ -3248,7 +3197,6 @@ function flowDetector(projectPath, packageJson) {
3248
3197
  * @returns `true` if the content contains JSDoc type annotations.
3249
3198
  */
3250
3199
  function hasJsDocTypes(content) {
3251
- // Check for JSDoc type annotations
3252
3200
  return (content.includes('@type {') ||
3253
3201
  content.includes('@param {') ||
3254
3202
  content.includes('@returns {') ||
@@ -3267,14 +3215,11 @@ function jsdocDetector(projectPath, packageJson) {
3267
3215
  const sources = [];
3268
3216
  let confidence = 0;
3269
3217
  const deps = collectAllDependencies(pkg);
3270
- // jsdoc package
3271
3218
  if (deps['jsdoc']) {
3272
3219
  confidence += 30;
3273
3220
  sources.push({ type: 'package.json', field: 'dependencies.jsdoc' });
3274
3221
  }
3275
- // typescript with checkJs (JSDoc type checking)
3276
3222
  if (deps['typescript']) {
3277
- // Check if checkJs is enabled in tsconfig
3278
3223
  const tsconfigPath = join$1(projectPath, 'tsconfig.json');
3279
3224
  const content = readFileIfExists(tsconfigPath);
3280
3225
  if (content) {
@@ -3291,12 +3236,10 @@ function jsdocDetector(projectPath, packageJson) {
3291
3236
  }
3292
3237
  }
3293
3238
  }
3294
- // Check for jsconfig.json (VS Code JS type checking)
3295
3239
  if (exists(join$1(projectPath, 'jsconfig.json'))) {
3296
3240
  confidence += 40;
3297
3241
  sources.push({ type: 'config-file', path: 'jsconfig.json' });
3298
3242
  }
3299
- // Sample check for JSDoc annotations in source files
3300
3243
  const srcDir = join$1(projectPath, 'src');
3301
3244
  if (exists(srcDir)) {
3302
3245
  try {
@@ -3347,8 +3290,6 @@ const detectAllCache = createCache({ ttl: 60000, maxSize: 50 });
3347
3290
  function isDetectAllOptions(value) {
3348
3291
  if (typeof value !== 'object' || value === null)
3349
3292
  return false;
3350
- // DetectAllOptions has skipCache or packageJson fields specifically
3351
- // PackageJson never has skipCache field
3352
3293
  return 'skipCache' in value || 'packageJson' in value;
3353
3294
  }
3354
3295
  /**
@@ -3380,9 +3321,7 @@ function isDetectAllOptions(value) {
3380
3321
  * ```
3381
3322
  */
3382
3323
  function detectAll(projectPath, packageJsonOrOptions) {
3383
- // Handle backward-compatible arguments
3384
3324
  const options = isDetectAllOptions(packageJsonOrOptions) ? packageJsonOrOptions : { packageJson: packageJsonOrOptions };
3385
- // Check cache first (unless skipCache is true)
3386
3325
  if (!options.skipCache) {
3387
3326
  const cached = detectAllCache.get(projectPath);
3388
3327
  if (cached) {
@@ -3433,7 +3372,6 @@ function detectAll(projectPath, packageJsonOrOptions) {
3433
3372
  legacyFrameworks: result.legacyFrameworks.map((f) => f.id),
3434
3373
  testingFrameworks: result.testingFrameworks.map((f) => f.id),
3435
3374
  });
3436
- // Cache the result
3437
3375
  detectAllCache.set(projectPath, result);
3438
3376
  return result;
3439
3377
  }