@hyperfrontend/project-scope 0.2.0 → 0.2.2

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 (439) hide show
  1. package/CHANGELOG.md +13 -15
  2. package/README.md +3 -4
  3. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/array/index.cjs.js +7 -0
  4. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/array/index.esm.js +5 -0
  5. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/console/index.cjs.js +13 -0
  6. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/console/index.esm.js +8 -0
  7. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/date/index.cjs.js +10 -0
  8. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/date/index.esm.js +8 -0
  9. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/error/index.cjs.js +6 -0
  10. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/error/index.esm.js +5 -0
  11. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/json/index.cjs.js +7 -0
  12. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/json/index.esm.js +5 -0
  13. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/map/index.cjs.js +6 -0
  14. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/map/index.esm.js +5 -0
  15. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/math/index.cjs.js +9 -0
  16. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/math/index.esm.js +6 -0
  17. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/number/index.cjs.js +7 -0
  18. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/number/index.esm.js +7 -0
  19. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/object/index.cjs.js +15 -0
  20. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/object/index.esm.js +9 -0
  21. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/set/index.cjs.js +6 -0
  22. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/set/index.esm.js +5 -0
  23. package/_dependencies/@hyperfrontend/logging/index.cjs.js +191 -0
  24. package/_dependencies/@hyperfrontend/logging/index.d.ts +151 -0
  25. package/_dependencies/@hyperfrontend/logging/index.esm.js +186 -0
  26. package/_shared/core/cache/index.cjs.js +135 -0
  27. package/_shared/core/cache/index.esm.js +128 -0
  28. package/_shared/core/errors/structured-errors/index.cjs.js +28 -0
  29. package/_shared/core/errors/structured-errors/index.esm.js +23 -0
  30. package/_shared/core/fs/stat/index.cjs.js +46 -0
  31. package/_shared/core/fs/stat/index.esm.js +40 -0
  32. package/_shared/core/path/join/index.cjs.js +13 -0
  33. package/_shared/core/path/join/index.esm.js +10 -0
  34. package/_shared/core/path/normalize/index.cjs.js +37 -0
  35. package/_shared/core/path/normalize/index.esm.js +31 -0
  36. package/_shared/core/path/resolve/index.cjs.js +47 -0
  37. package/_shared/core/path/resolve/index.esm.js +41 -0
  38. package/_shared/core/path/segments/index.cjs.js +38 -0
  39. package/_shared/core/path/segments/index.esm.js +31 -0
  40. package/_shared/core/patterns/glob/index.cjs.js +145 -0
  41. package/_shared/core/patterns/glob/index.esm.js +136 -0
  42. package/_shared/core/platform/detect/index.cjs.js +103 -0
  43. package/_shared/core/platform/detect/index.esm.js +95 -0
  44. package/_shared/core/platform/line-endings/index.cjs.js +52 -0
  45. package/_shared/core/platform/line-endings/index.esm.js +44 -0
  46. package/_shared/project/config/patterns/index.cjs.js +172 -0
  47. package/_shared/project/config/patterns/index.esm.js +169 -0
  48. package/_shared/tech/monorepo/pnpm-workspaces/index.cjs.js +33 -0
  49. package/_shared/tech/monorepo/pnpm-workspaces/index.esm.js +31 -0
  50. package/_shared/tech/shared-utils/detector-helpers/index.cjs.js +48 -0
  51. package/_shared/tech/shared-utils/detector-helpers/index.esm.js +43 -0
  52. package/_shared/vfs/types/index.cjs.js +14 -0
  53. package/_shared/vfs/types/index.esm.js +12 -0
  54. package/cli/index.cjs.js +1699 -2040
  55. package/cli/index.d.ts +273 -7
  56. package/cli/index.d.ts.map +1 -1
  57. package/cli/index.esm.js +1603 -1944
  58. package/core/encoding/index.cjs.js +88 -424
  59. package/core/encoding/index.d.ts +186 -3
  60. package/core/encoding/index.d.ts.map +1 -1
  61. package/core/encoding/index.esm.js +80 -415
  62. package/core/fs/index.cjs.js +231 -595
  63. package/core/fs/index.d.ts +479 -6
  64. package/core/fs/index.d.ts.map +1 -1
  65. package/core/fs/index.esm.js +221 -585
  66. package/core/index.cjs.js +518 -1804
  67. package/core/index.d.ts +486 -9
  68. package/core/index.d.ts.map +1 -1
  69. package/core/index.esm.js +501 -1784
  70. package/core/path/index.cjs.js +6 -235
  71. package/core/path/index.d.ts +306 -5
  72. package/core/path/index.d.ts.map +1 -1
  73. package/core/path/index.esm.js +4 -233
  74. package/core/platform/index.cjs.js +5 -226
  75. package/core/platform/index.d.ts +185 -3
  76. package/core/platform/index.d.ts.map +1 -1
  77. package/core/platform/index.esm.js +3 -222
  78. package/heuristics/dependencies/index.cjs.js +95 -509
  79. package/heuristics/dependencies/index.d.ts +99 -2
  80. package/heuristics/dependencies/index.d.ts.map +1 -1
  81. package/heuristics/dependencies/index.esm.js +69 -483
  82. package/heuristics/entry-points/index.cjs.js +93 -825
  83. package/heuristics/entry-points/index.d.ts +123 -2
  84. package/heuristics/entry-points/index.d.ts.map +1 -1
  85. package/heuristics/entry-points/index.esm.js +74 -806
  86. package/heuristics/framework/index.cjs.js +1482 -1473
  87. package/heuristics/framework/index.d.ts +104 -2
  88. package/heuristics/framework/index.d.ts.map +1 -1
  89. package/heuristics/framework/index.esm.js +1418 -1409
  90. package/heuristics/index.cjs.js +3207 -3383
  91. package/heuristics/index.d.ts +4 -5
  92. package/heuristics/index.d.ts.map +1 -1
  93. package/heuristics/index.esm.js +3234 -3410
  94. package/heuristics/project-type/index.cjs.js +1488 -1500
  95. package/heuristics/project-type/index.d.ts +64 -2
  96. package/heuristics/project-type/index.d.ts.map +1 -1
  97. package/heuristics/project-type/index.esm.js +1417 -1429
  98. package/index.cjs.js +3064 -3765
  99. package/index.d.ts +44 -10
  100. package/index.d.ts.map +1 -1
  101. package/index.esm.js +2923 -3612
  102. package/models/index.cjs.js +0 -1
  103. package/models/index.d.ts +20 -14
  104. package/models/index.d.ts.map +1 -1
  105. package/models/index.esm.js +0 -1
  106. package/nx/index.cjs.js +163 -606
  107. package/nx/index.d.ts +279 -4
  108. package/nx/index.d.ts.map +1 -1
  109. package/nx/index.esm.js +145 -583
  110. package/package.json +13 -12
  111. package/project/config/index.cjs.js +122 -1104
  112. package/project/config/index.d.ts +202 -4
  113. package/project/config/index.d.ts.map +1 -1
  114. package/project/config/index.esm.js +105 -1085
  115. package/project/index.cjs.js +323 -1143
  116. package/project/index.d.ts +4 -5
  117. package/project/index.d.ts.map +1 -1
  118. package/project/index.esm.js +302 -1119
  119. package/project/package/index.cjs.js +191 -483
  120. package/project/package/index.d.ts +280 -3
  121. package/project/package/index.d.ts.map +1 -1
  122. package/project/package/index.esm.js +178 -469
  123. package/project/root/index.cjs.js +107 -427
  124. package/project/root/index.d.ts +83 -2
  125. package/project/root/index.d.ts.map +1 -1
  126. package/project/root/index.esm.js +96 -416
  127. package/project/traversal/index.cjs.js +94 -645
  128. package/project/traversal/index.d.ts +165 -3
  129. package/project/traversal/index.d.ts.map +1 -1
  130. package/project/traversal/index.esm.js +80 -631
  131. package/tech/backend/index.cjs.js +221 -524
  132. package/tech/backend/index.d.ts +205 -8
  133. package/tech/backend/index.d.ts.map +1 -1
  134. package/tech/backend/index.esm.js +200 -503
  135. package/tech/build/index.cjs.js +348 -647
  136. package/tech/build/index.d.ts +276 -10
  137. package/tech/build/index.d.ts.map +1 -1
  138. package/tech/build/index.esm.js +326 -625
  139. package/tech/frontend/index.cjs.js +505 -700
  140. package/tech/frontend/index.d.ts +379 -15
  141. package/tech/frontend/index.d.ts.map +1 -1
  142. package/tech/frontend/index.esm.js +481 -676
  143. package/tech/index.cjs.js +1580 -1482
  144. package/tech/index.d.ts +55 -32
  145. package/tech/index.d.ts.map +1 -1
  146. package/tech/index.esm.js +1513 -1415
  147. package/tech/legacy/index.cjs.js +97 -474
  148. package/tech/legacy/index.d.ts +125 -7
  149. package/tech/legacy/index.d.ts.map +1 -1
  150. package/tech/legacy/index.esm.js +79 -456
  151. package/tech/linting/index.cjs.js +136 -536
  152. package/tech/linting/index.d.ts +129 -7
  153. package/tech/linting/index.d.ts.map +1 -1
  154. package/tech/linting/index.esm.js +116 -516
  155. package/tech/monorepo/index.cjs.js +244 -584
  156. package/tech/monorepo/index.d.ts +241 -10
  157. package/tech/monorepo/index.d.ts.map +1 -1
  158. package/tech/monorepo/index.esm.js +224 -564
  159. package/tech/testing/index.cjs.js +214 -582
  160. package/tech/testing/index.d.ts +176 -8
  161. package/tech/testing/index.d.ts.map +1 -1
  162. package/tech/testing/index.esm.js +196 -564
  163. package/tech/types/index.cjs.js +121 -532
  164. package/tech/types/index.d.ts +120 -2
  165. package/tech/types/index.d.ts.map +1 -1
  166. package/tech/types/index.esm.js +99 -510
  167. package/vfs/index.cjs.js +647 -1187
  168. package/vfs/index.d.ts +360 -6
  169. package/vfs/index.d.ts.map +1 -1
  170. package/vfs/index.esm.js +672 -1212
  171. package/ARCHITECTURE.md +0 -370
  172. package/analyze.d.ts +0 -33
  173. package/analyze.d.ts.map +0 -1
  174. package/cli/commands/analyze.d.ts +0 -20
  175. package/cli/commands/analyze.d.ts.map +0 -1
  176. package/cli/commands/config.d.ts +0 -20
  177. package/cli/commands/config.d.ts.map +0 -1
  178. package/cli/commands/deps.d.ts +0 -18
  179. package/cli/commands/deps.d.ts.map +0 -1
  180. package/cli/commands/tree.d.ts +0 -24
  181. package/cli/commands/tree.d.ts.map +0 -1
  182. package/cli/index.cjs.js.map +0 -1
  183. package/cli/index.esm.js.map +0 -1
  184. package/cli/run.d.ts +0 -25
  185. package/cli/run.d.ts.map +0 -1
  186. package/cli/types.d.ts +0 -55
  187. package/cli/types.d.ts.map +0 -1
  188. package/core/cache.d.ts +0 -157
  189. package/core/cache.d.ts.map +0 -1
  190. package/core/encoding/convert.d.ts +0 -32
  191. package/core/encoding/convert.d.ts.map +0 -1
  192. package/core/encoding/detect.d.ts +0 -86
  193. package/core/encoding/detect.d.ts.map +0 -1
  194. package/core/encoding/index.cjs.js.map +0 -1
  195. package/core/encoding/index.esm.js.map +0 -1
  196. package/core/errors/structured-errors.d.ts +0 -64
  197. package/core/errors/structured-errors.d.ts.map +0 -1
  198. package/core/fs/directory.d.ts +0 -88
  199. package/core/fs/directory.d.ts.map +0 -1
  200. package/core/fs/index.cjs.js.map +0 -1
  201. package/core/fs/index.esm.js.map +0 -1
  202. package/core/fs/read.d.ts +0 -86
  203. package/core/fs/read.d.ts.map +0 -1
  204. package/core/fs/stat.d.ts +0 -58
  205. package/core/fs/stat.d.ts.map +0 -1
  206. package/core/fs/traversal.d.ts +0 -26
  207. package/core/fs/traversal.d.ts.map +0 -1
  208. package/core/fs/write.d.ts +0 -75
  209. package/core/fs/write.d.ts.map +0 -1
  210. package/core/index.cjs.js.map +0 -1
  211. package/core/index.esm.js.map +0 -1
  212. package/core/logger.d.ts +0 -111
  213. package/core/logger.d.ts.map +0 -1
  214. package/core/path/index.cjs.js.map +0 -1
  215. package/core/path/index.esm.js.map +0 -1
  216. package/core/path/join.d.ts +0 -17
  217. package/core/path/join.d.ts.map +0 -1
  218. package/core/path/normalize.d.ts +0 -37
  219. package/core/path/normalize.d.ts.map +0 -1
  220. package/core/path/resolve.d.ts +0 -52
  221. package/core/path/resolve.d.ts.map +0 -1
  222. package/core/path/segments.d.ts +0 -59
  223. package/core/path/segments.d.ts.map +0 -1
  224. package/core/patterns/glob.d.ts +0 -46
  225. package/core/patterns/glob.d.ts.map +0 -1
  226. package/core/platform/detect.d.ts +0 -66
  227. package/core/platform/detect.d.ts.map +0 -1
  228. package/core/platform/index.cjs.js.map +0 -1
  229. package/core/platform/index.esm.js.map +0 -1
  230. package/core/platform/line-endings.d.ts +0 -48
  231. package/core/platform/line-endings.d.ts.map +0 -1
  232. package/heuristics/dependencies/analyze.d.ts +0 -77
  233. package/heuristics/dependencies/analyze.d.ts.map +0 -1
  234. package/heuristics/dependencies/index.cjs.js.map +0 -1
  235. package/heuristics/dependencies/index.esm.js.map +0 -1
  236. package/heuristics/entry-points/discover.d.ts +0 -86
  237. package/heuristics/entry-points/discover.d.ts.map +0 -1
  238. package/heuristics/entry-points/index.cjs.js.map +0 -1
  239. package/heuristics/entry-points/index.esm.js.map +0 -1
  240. package/heuristics/framework/identify.d.ts +0 -84
  241. package/heuristics/framework/identify.d.ts.map +0 -1
  242. package/heuristics/framework/index.cjs.js.map +0 -1
  243. package/heuristics/framework/index.esm.js.map +0 -1
  244. package/heuristics/index.cjs.js.map +0 -1
  245. package/heuristics/index.esm.js.map +0 -1
  246. package/heuristics/project-type/detect.d.ts +0 -61
  247. package/heuristics/project-type/detect.d.ts.map +0 -1
  248. package/heuristics/project-type/index.cjs.js.map +0 -1
  249. package/heuristics/project-type/index.esm.js.map +0 -1
  250. package/index.cjs.js.map +0 -1
  251. package/index.esm.js.map +0 -1
  252. package/models/index.cjs.js.map +0 -1
  253. package/models/index.esm.js.map +0 -1
  254. package/nx/detect.d.ts +0 -105
  255. package/nx/detect.d.ts.map +0 -1
  256. package/nx/devkit-loader.d.ts +0 -62
  257. package/nx/devkit-loader.d.ts.map +0 -1
  258. package/nx/index.cjs.js.map +0 -1
  259. package/nx/index.esm.js.map +0 -1
  260. package/nx/project-config.d.ts +0 -109
  261. package/nx/project-config.d.ts.map +0 -1
  262. package/project/config/detect.d.ts +0 -77
  263. package/project/config/detect.d.ts.map +0 -1
  264. package/project/config/index.cjs.js.map +0 -1
  265. package/project/config/index.esm.js.map +0 -1
  266. package/project/config/parse.d.ts +0 -53
  267. package/project/config/parse.d.ts.map +0 -1
  268. package/project/config/patterns.d.ts +0 -31
  269. package/project/config/patterns.d.ts.map +0 -1
  270. package/project/index.cjs.js.map +0 -1
  271. package/project/index.esm.js.map +0 -1
  272. package/project/package/dependencies.d.ts +0 -101
  273. package/project/package/dependencies.d.ts.map +0 -1
  274. package/project/package/index.cjs.js.map +0 -1
  275. package/project/package/index.esm.js.map +0 -1
  276. package/project/package/read.d.ts +0 -66
  277. package/project/package/read.d.ts.map +0 -1
  278. package/project/root/detect.d.ts +0 -65
  279. package/project/root/detect.d.ts.map +0 -1
  280. package/project/root/index.cjs.js.map +0 -1
  281. package/project/root/index.esm.js.map +0 -1
  282. package/project/traversal/index.cjs.js.map +0 -1
  283. package/project/traversal/index.esm.js.map +0 -1
  284. package/project/traversal/search.d.ts +0 -59
  285. package/project/traversal/search.d.ts.map +0 -1
  286. package/project/traversal/walk.d.ts +0 -63
  287. package/project/traversal/walk.d.ts.map +0 -1
  288. package/tech/backend/detect-all.d.ts +0 -13
  289. package/tech/backend/detect-all.d.ts.map +0 -1
  290. package/tech/backend/express.d.ts +0 -11
  291. package/tech/backend/express.d.ts.map +0 -1
  292. package/tech/backend/fastify.d.ts +0 -11
  293. package/tech/backend/fastify.d.ts.map +0 -1
  294. package/tech/backend/hono.d.ts +0 -11
  295. package/tech/backend/hono.d.ts.map +0 -1
  296. package/tech/backend/index.cjs.js.map +0 -1
  297. package/tech/backend/index.esm.js.map +0 -1
  298. package/tech/backend/koa.d.ts +0 -11
  299. package/tech/backend/koa.d.ts.map +0 -1
  300. package/tech/backend/nestjs.d.ts +0 -11
  301. package/tech/backend/nestjs.d.ts.map +0 -1
  302. package/tech/backend/types.d.ts +0 -31
  303. package/tech/backend/types.d.ts.map +0 -1
  304. package/tech/build/babel.d.ts +0 -13
  305. package/tech/build/babel.d.ts.map +0 -1
  306. package/tech/build/detect-all.d.ts +0 -13
  307. package/tech/build/detect-all.d.ts.map +0 -1
  308. package/tech/build/esbuild.d.ts +0 -11
  309. package/tech/build/esbuild.d.ts.map +0 -1
  310. package/tech/build/index.cjs.js.map +0 -1
  311. package/tech/build/index.esm.js.map +0 -1
  312. package/tech/build/parcel.d.ts +0 -13
  313. package/tech/build/parcel.d.ts.map +0 -1
  314. package/tech/build/rollup.d.ts +0 -13
  315. package/tech/build/rollup.d.ts.map +0 -1
  316. package/tech/build/swc.d.ts +0 -13
  317. package/tech/build/swc.d.ts.map +0 -1
  318. package/tech/build/types.d.ts +0 -31
  319. package/tech/build/types.d.ts.map +0 -1
  320. package/tech/build/vite.d.ts +0 -13
  321. package/tech/build/vite.d.ts.map +0 -1
  322. package/tech/build/webpack.d.ts +0 -13
  323. package/tech/build/webpack.d.ts.map +0 -1
  324. package/tech/frontend/angular.d.ts +0 -11
  325. package/tech/frontend/angular.d.ts.map +0 -1
  326. package/tech/frontend/astro.d.ts +0 -11
  327. package/tech/frontend/astro.d.ts.map +0 -1
  328. package/tech/frontend/detect-all.d.ts +0 -13
  329. package/tech/frontend/detect-all.d.ts.map +0 -1
  330. package/tech/frontend/gatsby.d.ts +0 -11
  331. package/tech/frontend/gatsby.d.ts.map +0 -1
  332. package/tech/frontend/index.cjs.js.map +0 -1
  333. package/tech/frontend/index.esm.js.map +0 -1
  334. package/tech/frontend/nextjs.d.ts +0 -11
  335. package/tech/frontend/nextjs.d.ts.map +0 -1
  336. package/tech/frontend/nuxt.d.ts +0 -11
  337. package/tech/frontend/nuxt.d.ts.map +0 -1
  338. package/tech/frontend/qwik.d.ts +0 -11
  339. package/tech/frontend/qwik.d.ts.map +0 -1
  340. package/tech/frontend/react.d.ts +0 -11
  341. package/tech/frontend/react.d.ts.map +0 -1
  342. package/tech/frontend/remix.d.ts +0 -11
  343. package/tech/frontend/remix.d.ts.map +0 -1
  344. package/tech/frontend/solid.d.ts +0 -11
  345. package/tech/frontend/solid.d.ts.map +0 -1
  346. package/tech/frontend/svelte.d.ts +0 -11
  347. package/tech/frontend/svelte.d.ts.map +0 -1
  348. package/tech/frontend/sveltekit.d.ts +0 -11
  349. package/tech/frontend/sveltekit.d.ts.map +0 -1
  350. package/tech/frontend/types.d.ts +0 -35
  351. package/tech/frontend/types.d.ts.map +0 -1
  352. package/tech/frontend/vue.d.ts +0 -11
  353. package/tech/frontend/vue.d.ts.map +0 -1
  354. package/tech/index.cjs.js.map +0 -1
  355. package/tech/index.esm.js.map +0 -1
  356. package/tech/legacy/angularjs.d.ts +0 -12
  357. package/tech/legacy/angularjs.d.ts.map +0 -1
  358. package/tech/legacy/backbone.d.ts +0 -11
  359. package/tech/legacy/backbone.d.ts.map +0 -1
  360. package/tech/legacy/detect-all.d.ts +0 -13
  361. package/tech/legacy/detect-all.d.ts.map +0 -1
  362. package/tech/legacy/ember.d.ts +0 -11
  363. package/tech/legacy/ember.d.ts.map +0 -1
  364. package/tech/legacy/index.cjs.js.map +0 -1
  365. package/tech/legacy/index.esm.js.map +0 -1
  366. package/tech/legacy/jquery.d.ts +0 -11
  367. package/tech/legacy/jquery.d.ts.map +0 -1
  368. package/tech/legacy/types.d.ts +0 -33
  369. package/tech/legacy/types.d.ts.map +0 -1
  370. package/tech/linting/biome.d.ts +0 -11
  371. package/tech/linting/biome.d.ts.map +0 -1
  372. package/tech/linting/detect-all.d.ts +0 -13
  373. package/tech/linting/detect-all.d.ts.map +0 -1
  374. package/tech/linting/eslint.d.ts +0 -13
  375. package/tech/linting/eslint.d.ts.map +0 -1
  376. package/tech/linting/index.cjs.js.map +0 -1
  377. package/tech/linting/index.esm.js.map +0 -1
  378. package/tech/linting/prettier.d.ts +0 -13
  379. package/tech/linting/prettier.d.ts.map +0 -1
  380. package/tech/linting/stylelint.d.ts +0 -13
  381. package/tech/linting/stylelint.d.ts.map +0 -1
  382. package/tech/linting/types.d.ts +0 -31
  383. package/tech/linting/types.d.ts.map +0 -1
  384. package/tech/monorepo/detect-all.d.ts +0 -13
  385. package/tech/monorepo/detect-all.d.ts.map +0 -1
  386. package/tech/monorepo/index.cjs.js.map +0 -1
  387. package/tech/monorepo/index.esm.js.map +0 -1
  388. package/tech/monorepo/lerna.d.ts +0 -11
  389. package/tech/monorepo/lerna.d.ts.map +0 -1
  390. package/tech/monorepo/npm-workspaces.d.ts +0 -11
  391. package/tech/monorepo/npm-workspaces.d.ts.map +0 -1
  392. package/tech/monorepo/nx.d.ts +0 -11
  393. package/tech/monorepo/nx.d.ts.map +0 -1
  394. package/tech/monorepo/pnpm-workspaces.d.ts +0 -9
  395. package/tech/monorepo/pnpm-workspaces.d.ts.map +0 -1
  396. package/tech/monorepo/rush.d.ts +0 -11
  397. package/tech/monorepo/rush.d.ts.map +0 -1
  398. package/tech/monorepo/turborepo.d.ts +0 -11
  399. package/tech/monorepo/turborepo.d.ts.map +0 -1
  400. package/tech/monorepo/types.d.ts +0 -39
  401. package/tech/monorepo/types.d.ts.map +0 -1
  402. package/tech/monorepo/yarn-workspaces.d.ts +0 -11
  403. package/tech/monorepo/yarn-workspaces.d.ts.map +0 -1
  404. package/tech/shared-utils/detector-helpers.d.ts +0 -52
  405. package/tech/shared-utils/detector-helpers.d.ts.map +0 -1
  406. package/tech/shared-utils/types.d.ts +0 -41
  407. package/tech/shared-utils/types.d.ts.map +0 -1
  408. package/tech/testing/cypress.d.ts +0 -13
  409. package/tech/testing/cypress.d.ts.map +0 -1
  410. package/tech/testing/detect-all.d.ts +0 -13
  411. package/tech/testing/detect-all.d.ts.map +0 -1
  412. package/tech/testing/index.cjs.js.map +0 -1
  413. package/tech/testing/index.esm.js.map +0 -1
  414. package/tech/testing/jest.d.ts +0 -13
  415. package/tech/testing/jest.d.ts.map +0 -1
  416. package/tech/testing/mocha.d.ts +0 -13
  417. package/tech/testing/mocha.d.ts.map +0 -1
  418. package/tech/testing/playwright.d.ts +0 -13
  419. package/tech/testing/playwright.d.ts.map +0 -1
  420. package/tech/testing/types.d.ts +0 -35
  421. package/tech/testing/types.d.ts.map +0 -1
  422. package/tech/testing/vitest.d.ts +0 -13
  423. package/tech/testing/vitest.d.ts.map +0 -1
  424. package/tech/types/detectors.d.ts +0 -67
  425. package/tech/types/detectors.d.ts.map +0 -1
  426. package/tech/types/index.cjs.js.map +0 -1
  427. package/tech/types/index.esm.js.map +0 -1
  428. package/vfs/commit.d.ts +0 -32
  429. package/vfs/commit.d.ts.map +0 -1
  430. package/vfs/diff.d.ts +0 -73
  431. package/vfs/diff.d.ts.map +0 -1
  432. package/vfs/factory.d.ts +0 -37
  433. package/vfs/factory.d.ts.map +0 -1
  434. package/vfs/fs-tree.d.ts +0 -13
  435. package/vfs/fs-tree.d.ts.map +0 -1
  436. package/vfs/index.cjs.js.map +0 -1
  437. package/vfs/index.esm.js.map +0 -1
  438. package/vfs/types.d.ts +0 -178
  439. package/vfs/types.d.ts.map +0 -1
@@ -1,408 +1,23 @@
1
1
  'use strict';
2
2
 
3
- var node_path = require('node:path');
4
- var node_fs = require('node:fs');
5
-
6
- /**
7
- * Safe copies of Math built-in methods.
8
- *
9
- * These references are captured at module initialization time to protect against
10
- * prototype pollution attacks. Import only what you need for tree-shaking.
11
- *
12
- * @module @hyperfrontend/immutable-api-utils/built-in-copy/math
13
- */
14
- // Capture references at module initialization time
15
- const _Math = globalThis.Math;
16
- /**
17
- * (Safe copy) Returns the smaller of zero or more numbers.
18
- */
19
- const min = _Math.min;
20
-
21
- /**
22
- * Safe copies of Array built-in static methods.
23
- *
24
- * These references are captured at module initialization time to protect against
25
- * prototype pollution attacks. Import only what you need for tree-shaking.
26
- *
27
- * @module @hyperfrontend/immutable-api-utils/built-in-copy/array
28
- */
29
- // Capture references at module initialization time
30
- const _Array = globalThis.Array;
31
- /**
32
- * (Safe copy) Determines whether the passed value is an Array.
33
- */
34
- const isArray = _Array.isArray;
35
-
36
- /**
37
- * Safe copies of Error built-ins via factory functions.
38
- *
39
- * Since constructors cannot be safely captured via Object.assign, this module
40
- * provides factory functions that use Reflect.construct internally.
41
- *
42
- * These references are captured at module initialization time to protect against
43
- * prototype pollution attacks. Import only what you need for tree-shaking.
44
- *
45
- * @module @hyperfrontend/immutable-api-utils/built-in-copy/error
46
- */
47
- // Capture references at module initialization time
48
- const _Error = globalThis.Error;
49
- const _Reflect$1 = globalThis.Reflect;
50
- /**
51
- * (Safe copy) Creates a new Error using the captured Error constructor.
52
- * Use this instead of `new Error()`.
53
- *
54
- * @param message - Optional error message.
55
- * @param options - Optional error options.
56
- * @returns A new Error instance.
57
- */
58
- const createError = (message, options) => _Reflect$1.construct(_Error, [message, options]);
59
-
60
- /**
61
- * Safe copies of JSON built-in methods.
62
- *
63
- * These references are captured at module initialization time to protect against
64
- * prototype pollution attacks. Import only what you need for tree-shaking.
65
- *
66
- * @module @hyperfrontend/immutable-api-utils/built-in-copy/json
67
- */
68
- // Capture references at module initialization time
69
- const _JSON = globalThis.JSON;
70
- /**
71
- * (Safe copy) Converts a JavaScript Object Notation (JSON) string into an object.
72
- */
73
- const parse = _JSON.parse;
74
- /**
75
- * (Safe copy) Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
76
- */
77
- const stringify = _JSON.stringify;
78
-
79
- /**
80
- * Safe copies of Object built-in methods.
81
- *
82
- * These references are captured at module initialization time to protect against
83
- * prototype pollution attacks. Import only what you need for tree-shaking.
84
- *
85
- * @module @hyperfrontend/immutable-api-utils/built-in-copy/object
86
- */
87
- // Capture references at module initialization time
88
- const _Object = globalThis.Object;
89
- /**
90
- * (Safe copy) Prevents modification of existing property attributes and values,
91
- * and prevents the addition of new properties.
92
- */
93
- const freeze = _Object.freeze;
94
- /**
95
- * (Safe copy) Returns the names of the enumerable string properties and methods of an object.
96
- */
97
- const keys = _Object.keys;
98
- /**
99
- * (Safe copy) Returns an array of key/values of the enumerable own properties of an object.
100
- */
101
- const entries = _Object.entries;
102
- /**
103
- * (Safe copy) Returns an array of values of the enumerable own properties of an object.
104
- */
105
- const values = _Object.values;
106
-
107
- /**
108
- * Safe copies of Console built-in methods.
109
- *
110
- * These references are captured at module initialization time to protect against
111
- * prototype pollution attacks. Import only what you need for tree-shaking.
112
- *
113
- * @module @hyperfrontend/immutable-api-utils/built-in-copy/console
114
- */
115
- // Capture references at module initialization time
116
- const _console = globalThis.console;
117
- /**
118
- * (Safe copy) Outputs a message to the console.
119
- */
120
- const log = _console.log.bind(_console);
121
- /**
122
- * (Safe copy) Outputs a warning message to the console.
123
- */
124
- const warn = _console.warn.bind(_console);
125
- /**
126
- * (Safe copy) Outputs an error message to the console.
127
- */
128
- const error = _console.error.bind(_console);
129
- /**
130
- * (Safe copy) Outputs an informational message to the console.
131
- */
132
- const info = _console.info.bind(_console);
133
- /**
134
- * (Safe copy) Outputs a debug message to the console.
135
- */
136
- const debug = _console.debug.bind(_console);
137
- /**
138
- * (Safe copy) Outputs a stack trace to the console.
139
- */
140
- _console.trace.bind(_console);
141
- /**
142
- * (Safe copy) Displays an interactive listing of the properties of a specified object.
143
- */
144
- _console.dir.bind(_console);
145
- /**
146
- * (Safe copy) Displays tabular data as a table.
147
- */
148
- _console.table.bind(_console);
149
- /**
150
- * (Safe copy) Writes an error message to the console if the assertion is false.
151
- */
152
- _console.assert.bind(_console);
153
- /**
154
- * (Safe copy) Clears the console.
155
- */
156
- _console.clear.bind(_console);
157
- /**
158
- * (Safe copy) Logs the number of times that this particular call to count() has been called.
159
- */
160
- _console.count.bind(_console);
161
- /**
162
- * (Safe copy) Resets the counter used with console.count().
163
- */
164
- _console.countReset.bind(_console);
165
- /**
166
- * (Safe copy) Creates a new inline group in the console.
167
- */
168
- _console.group.bind(_console);
169
- /**
170
- * (Safe copy) Creates a new inline group in the console that is initially collapsed.
171
- */
172
- _console.groupCollapsed.bind(_console);
173
- /**
174
- * (Safe copy) Exits the current inline group.
175
- */
176
- _console.groupEnd.bind(_console);
177
- /**
178
- * (Safe copy) Starts a timer with a name specified as an input parameter.
179
- */
180
- _console.time.bind(_console);
181
- /**
182
- * (Safe copy) Stops a timer that was previously started.
183
- */
184
- _console.timeEnd.bind(_console);
185
- /**
186
- * (Safe copy) Logs the current value of a timer that was previously started.
187
- */
188
- _console.timeLog.bind(_console);
189
-
190
- /**
191
- * Safe copies of Set built-in via factory function.
192
- *
193
- * Since constructors cannot be safely captured via Object.assign, this module
194
- * provides a factory function that uses Reflect.construct internally.
195
- *
196
- * These references are captured at module initialization time to protect against
197
- * prototype pollution attacks. Import only what you need for tree-shaking.
198
- *
199
- * @module @hyperfrontend/immutable-api-utils/built-in-copy/set
200
- */
201
- // Capture references at module initialization time
202
- const _Set = globalThis.Set;
203
- const _Reflect = globalThis.Reflect;
204
- /**
205
- * (Safe copy) Creates a new Set using the captured Set constructor.
206
- * Use this instead of `new Set()`.
207
- *
208
- * @param iterable - Optional iterable of values.
209
- * @returns A new Set instance.
210
- */
211
- const createSet = (iterable) => _Reflect.construct(_Set, iterable ? [iterable] : []);
212
-
213
- const registeredClasses = [];
214
-
215
- /**
216
- * Returns the data type of the target.
217
- * Uses native `typeof` operator, however, makes distinction between `null`, `array`, and `object`.
218
- * Also, when classes are registered via `registerClass`, it checks if objects are instance of any known registered class.
219
- *
220
- * @param target - The target to get the data type of.
221
- * @returns The data type of the target.
222
- */
223
- const getType = (target) => {
224
- if (target === null)
225
- return 'null';
226
- const nativeDataType = typeof target;
227
- if (nativeDataType === 'object') {
228
- if (isArray(target))
229
- return 'array';
230
- for (const registeredClass of registeredClasses) {
231
- if (target instanceof registeredClass)
232
- return registeredClass.name;
233
- }
234
- }
235
- return nativeDataType;
236
- };
237
-
238
- /* eslint-disable @typescript-eslint/no-explicit-any */
239
- /**
240
- * Creates a wrapper function that only executes the wrapped function if the condition function returns true.
241
- *
242
- * @param func - The function to be conditionally executed.
243
- * @param conditionFunc - A function that returns a boolean, determining if `func` should be executed.
244
- * @returns A wrapped version of `func` that executes conditionally.
245
- */
246
- function createConditionalExecutionFunction(func, conditionFunc) {
247
- return function (...args) {
248
- if (conditionFunc()) {
249
- return func(...args);
250
- }
251
- };
252
- }
253
-
254
- /* eslint-disable @typescript-eslint/no-explicit-any */
255
- /**
256
- * Creates a wrapper function that silently ignores any errors thrown by the wrapped void function.
257
- * This function is specifically for wrapping functions that do not return a value (void functions).
258
- * Exceptions are swallowed without any logging or handling.
259
- *
260
- * @param func - The void function to be wrapped.
261
- * @returns A wrapped version of the input function that ignores errors.
262
- */
263
- function createErrorIgnoringFunction(func) {
264
- return function (...args) {
265
- try {
266
- func(...args);
267
- }
268
- catch {
269
- // Deliberately swallowing/ignoring the exception
270
- }
271
- };
272
- }
273
-
274
- /* eslint-disable @typescript-eslint/no-unused-vars */
275
- /**
276
- * A no-operation function (noop) that does nothing regardless of the arguments passed.
277
- * It is designed to be as permissive as possible in its typing without using the `Function` keyword.
278
- *
279
- * @param args - Any arguments passed to the function (ignored)
280
- */
281
- const noop = (...args) => {
282
- // Intentionally does nothing
283
- };
284
-
285
- const logLevels = ['none', 'error', 'warn', 'log', 'info', 'debug'];
286
- const priority = {
287
- error: 4,
288
- warn: 3,
289
- log: 2,
290
- info: 1,
291
- debug: 0,
292
- };
293
- /**
294
- * Validates whether a given string is a valid log level.
295
- *
296
- * @param level - The log level to validate
297
- * @returns True if the level is valid, false otherwise
298
- */
299
- function isValidLogLevel(level) {
300
- return logLevels.includes(level);
301
- }
302
- /**
303
- * Creates a log level configuration manager for controlling logging behavior.
304
- * Provides methods to get, set, and evaluate log levels based on priority.
305
- *
306
- * @param level - The initial log level (defaults to 'error')
307
- * @returns A configuration object with log level management methods
308
- * @throws {Error} When the provided level is not a valid log level
309
- */
310
- function createLogLevelConfig(level = 'error') {
311
- if (!isValidLogLevel(level)) {
312
- throw createError('Cannot create log level configuration with a valid default log level');
313
- }
314
- const state = { level };
315
- const getLogLevel = () => state.level;
316
- const setLogLevel = (level) => {
317
- if (!isValidLogLevel(level)) {
318
- throw createError(`Cannot set value '${level}' level. Expected levels are ${logLevels}.`);
319
- }
320
- state.level = level;
321
- };
322
- const shouldLog = (level) => {
323
- if (state.level === 'none' || level === 'none' || !isValidLogLevel(level)) {
324
- return false;
325
- }
326
- return priority[level] >= priority[state.level];
327
- };
328
- return freeze({
329
- getLogLevel,
330
- setLogLevel,
331
- shouldLog,
332
- });
333
- }
334
-
335
- /**
336
- * Creates a logger instance with configurable log level filtering.
337
- * Each log function is wrapped to respect the current log level setting.
338
- *
339
- * @param error - Function to handle error-level logs (required)
340
- * @param warn - Function to handle warning-level logs (optional, defaults to noop)
341
- * @param log - Function to handle standard logs (optional, defaults to noop)
342
- * @param info - Function to handle info-level logs (optional, defaults to noop)
343
- * @param debug - Function to handle debug-level logs (optional, defaults to noop)
344
- * @returns A frozen logger object with log methods and level control
345
- * @throws {ErrorLevelFn} When any provided log function is invalid
346
- */
347
- function createLogger(error, warn = noop, log = noop, info = noop, debug = noop) {
348
- if (notValidLogFn(error)) {
349
- throw createError(notFnMsg('error'));
350
- }
351
- if (notValidLogFn(warn)) {
352
- throw createError(notFnMsg('warn'));
353
- }
354
- if (notValidLogFn(log)) {
355
- throw createError(notFnMsg('log'));
356
- }
357
- if (notValidLogFn(info)) {
358
- throw createError(notFnMsg('info'));
359
- }
360
- if (notValidLogFn(debug)) {
361
- throw createError(notFnMsg('debug'));
362
- }
363
- const { setLogLevel, getLogLevel, shouldLog } = createLogLevelConfig();
364
- const wrapLogFn = (fn, level) => {
365
- if (fn === noop)
366
- return fn;
367
- const condition = () => shouldLog(level);
368
- return createConditionalExecutionFunction(createErrorIgnoringFunction(fn), condition);
369
- };
370
- return freeze({
371
- error: wrapLogFn(error, 'error'),
372
- warn: wrapLogFn(warn, 'warn'),
373
- log: wrapLogFn(log, 'log'),
374
- info: wrapLogFn(info, 'info'),
375
- debug: wrapLogFn(debug, 'debug'),
376
- setLogLevel,
377
- getLogLevel,
378
- });
379
- }
380
- /**
381
- * Validates whether a given value is a valid log function.
382
- *
383
- * @param fn - The value to validate
384
- * @returns True if the value is not a function (invalid), false if it is valid
385
- */
386
- function notValidLogFn(fn) {
387
- return getType(fn) !== 'function' && fn !== noop;
388
- }
389
- /**
390
- * Generates an error message for invalid log function parameters.
391
- *
392
- * @param label - The name of the log function that failed validation
393
- * @returns A formatted error message string
394
- */
395
- function notFnMsg(label) {
396
- return `Cannot create a logger when ${label} is not a function`;
397
- }
398
-
399
- createLogger(error, warn, log, info, debug);
3
+ const index_cjs_js$7 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/math/index.cjs.js');
4
+ const index_cjs_js$2 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/object/index.cjs.js');
5
+ const node_path = require('node:path');
6
+ const index_cjs_js$4 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/array/index.cjs.js');
7
+ const index_cjs_js$6 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/error/index.cjs.js');
8
+ const index_cjs_js$5 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/json/index.cjs.js');
9
+ const node_fs = require('node:fs');
10
+ const index_cjs_js$3 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/console/index.cjs.js');
11
+ const index_cjs_js = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/set/index.cjs.js');
12
+ const index_cjs_js$1 = require('../../_dependencies/@hyperfrontend/logging/index.cjs.js');
13
+ const { join } = require('../../_shared/core/path/join/index.cjs.js');
14
+ const { collectAllDependencies, parseVersionString, locateConfigFile, filterScriptsByCommand } = require('../../_shared/tech/shared-utils/detector-helpers/index.cjs.js');
400
15
 
401
16
  /**
402
17
  * Global log level registry.
403
18
  * Tracks all created scoped loggers to allow global log level changes.
404
19
  */
405
- const loggerRegistry = createSet();
20
+ const loggerRegistry = index_cjs_js.createSet();
406
21
  /** Redacted placeholder for sensitive values */
407
22
  const REDACTED = '[REDACTED]';
408
23
  /**
@@ -436,17 +51,24 @@ function isSensitiveKey(key) {
436
51
  *
437
52
  * @param obj - Object to sanitize
438
53
  * @returns New object with sensitive values redacted
54
+ *
55
+ * @example Sanitizing sensitive data
56
+ * ```typescript
57
+ * const config = { apiKey: 'secret123', endpoint: 'https://api.example.com' }
58
+ * const safe = sanitize(config)
59
+ * // => { apiKey: '[REDACTED]', endpoint: 'https://api.example.com' }
60
+ * ```
439
61
  */
440
62
  function sanitize(obj) {
441
63
  if (obj === null || obj === undefined) {
442
64
  return obj;
443
65
  }
444
- if (isArray(obj)) {
66
+ if (index_cjs_js$4.isArray(obj)) {
445
67
  return obj.map((item) => sanitize(item));
446
68
  }
447
69
  if (typeof obj === 'object') {
448
70
  const result = {};
449
- for (const [key, value] of entries(obj)) {
71
+ for (const [key, value] of index_cjs_js$2.entries(obj)) {
450
72
  if (isSensitiveKey(key)) {
451
73
  result[key] = REDACTED;
452
74
  }
@@ -471,9 +93,9 @@ function sanitize(obj) {
471
93
  */
472
94
  function formatMessage(namespace, message, meta) {
473
95
  const prefix = `[${namespace}]`;
474
- if (meta && keys(meta).length > 0) {
96
+ if (meta && index_cjs_js$2.keys(meta).length > 0) {
475
97
  const sanitizedMeta = sanitize(meta);
476
- return `${prefix} ${message} ${stringify(sanitizedMeta)}`;
98
+ return `${prefix} ${message} ${index_cjs_js$5.stringify(sanitizedMeta)}`;
477
99
  }
478
100
  return `${prefix} ${message}`;
479
101
  }
@@ -486,7 +108,7 @@ function formatMessage(namespace, message, meta) {
486
108
  * @param options - Logger configuration options
487
109
  * @returns A configured scoped logger instance
488
110
  *
489
- * @example
111
+ * @example Creating a scoped logger
490
112
  * ```typescript
491
113
  * const logger = createScopedLogger('project-scope')
492
114
  * logger.setLogLevel('debug')
@@ -501,16 +123,13 @@ function formatMessage(namespace, message, meta) {
501
123
  */
502
124
  function createScopedLogger(namespace, options = {}) {
503
125
  const { level = 'error', sanitizeSecrets = true } = options;
504
- // Create wrapper functions that add namespace prefix and sanitization
505
126
  const createLogFn = (baseFn) => (message, meta) => {
506
127
  const processedMeta = sanitizeSecrets && meta ? sanitize(meta) : meta;
507
128
  baseFn(formatMessage(namespace, message, processedMeta));
508
129
  };
509
- // Create base logger with wrapped functions
510
- const baseLogger = createLogger(createLogFn(error), createLogFn(warn), createLogFn(log), createLogFn(info), createLogFn(debug));
511
- // Set initial log level (use global override if set)
130
+ const baseLogger = index_cjs_js$1.createLogger(createLogFn(index_cjs_js$3.error), createLogFn(index_cjs_js$3.warn), createLogFn(index_cjs_js$3.log), createLogFn(index_cjs_js$3.info), createLogFn(index_cjs_js$3.debug));
512
131
  baseLogger.setLogLevel(level);
513
- const scopedLogger = freeze({
132
+ const scopedLogger = index_cjs_js$2.freeze({
514
133
  error: (message, meta) => baseLogger.error(message, meta),
515
134
  warn: (message, meta) => baseLogger.warn(message, meta),
516
135
  log: (message, meta) => baseLogger.log(message, meta),
@@ -519,7 +138,6 @@ function createScopedLogger(namespace, options = {}) {
519
138
  setLogLevel: baseLogger.setLogLevel,
520
139
  getLogLevel: baseLogger.getLogLevel,
521
140
  });
522
- // Register logger for global level management
523
141
  loggerRegistry.add(scopedLogger);
524
142
  return scopedLogger;
525
143
  }
@@ -527,7 +145,7 @@ function createScopedLogger(namespace, options = {}) {
527
145
  * Default logger instance for the project-scope library.
528
146
  * Use this for general logging within the library.
529
147
  *
530
- * @example
148
+ * @example Using the default logger
531
149
  * ```typescript
532
150
  * import { logger } from '@hyperfrontend/project-scope/core'
533
151
  *
@@ -544,6 +162,14 @@ createScopedLogger('project-scope:fs');
544
162
  * @param filePath - Path to file
545
163
  * @param encoding - File encoding (default: utf-8)
546
164
  * @returns File contents or null if file doesn't exist
165
+ *
166
+ * @example Reading file if it exists
167
+ * ```typescript
168
+ * const content = readFileIfExists('./optional-config.json')
169
+ * if (content) {
170
+ * // File existed, use content
171
+ * }
172
+ * ```
547
173
  */
548
174
  function readFileIfExists(filePath, encoding = 'utf-8') {
549
175
  if (!node_fs.existsSync(filePath)) {
@@ -557,33 +183,12 @@ function readFileIfExists(filePath, encoding = 'utf-8') {
557
183
  }
558
184
  }
559
185
 
560
- createScopedLogger('project-scope:fs:write');
561
-
562
- /**
563
- * Check if path exists.
564
- *
565
- * @param filePath - Path to check
566
- * @returns True if path exists
567
- */
568
- function exists(filePath) {
569
- return node_fs.existsSync(filePath);
570
- }
571
-
572
186
  createScopedLogger('project-scope:fs:dir');
573
187
 
574
- /**
575
- * Join path segments.
576
- * Uses platform-specific separators (e.g., / or \).
577
- *
578
- * @param paths - Path segments to join
579
- * @returns Joined path
580
- */
581
- function join(...paths) {
582
- return node_path.join(...paths);
583
- }
584
-
585
188
  createScopedLogger('project-scope:fs:traversal');
586
189
 
190
+ createScopedLogger('project-scope:fs:write');
191
+
587
192
  const packageLogger = createScopedLogger('project-scope:project:package');
588
193
  /**
589
194
  * Verifies that a value is an object with only string values,
@@ -595,7 +200,7 @@ const packageLogger = createScopedLogger('project-scope:project:package');
595
200
  function isStringRecord(value) {
596
201
  if (typeof value !== 'object' || value === null)
597
202
  return false;
598
- return values(value).every((v) => typeof v === 'string');
203
+ return index_cjs_js$2.values(value).every((v) => typeof v === 'string');
599
204
  }
600
205
  /**
601
206
  * Extracts and normalizes the workspaces field from package.json,
@@ -605,12 +210,12 @@ function isStringRecord(value) {
605
210
  * @returns Normalized workspace patterns or undefined if invalid
606
211
  */
607
212
  function parseWorkspaces(value) {
608
- if (isArray(value) && value.every((v) => typeof v === 'string')) {
213
+ if (index_cjs_js$4.isArray(value) && value.every((v) => typeof v === 'string')) {
609
214
  return value;
610
215
  }
611
216
  if (typeof value === 'object' && value !== null) {
612
217
  const obj = value;
613
- if (isArray(obj['packages'])) {
218
+ if (index_cjs_js$4.isArray(obj['packages'])) {
614
219
  return { packages: obj['packages'] };
615
220
  }
616
221
  }
@@ -624,7 +229,7 @@ function parseWorkspaces(value) {
624
229
  */
625
230
  function validatePackageJson(data) {
626
231
  if (typeof data !== 'object' || data === null) {
627
- throw createError('package.json must be an object');
232
+ throw index_cjs_js$6.createError('package.json must be an object');
628
233
  }
629
234
  const pkg = data;
630
235
  return {
@@ -653,6 +258,16 @@ function validatePackageJson(data) {
653
258
  *
654
259
  * @param projectPath - Project directory path or path to package.json
655
260
  * @returns Parsed package.json or null if not found
261
+ *
262
+ * @example Reading package.json if it exists
263
+ * ```typescript
264
+ * import { readPackageJsonIfExists } from '@hyperfrontend/project-scope'
265
+ *
266
+ * const pkg = readPackageJsonIfExists('/path/to/project')
267
+ * if (pkg) {
268
+ * console.log('Found:', pkg.name)
269
+ * }
270
+ * ```
656
271
  */
657
272
  function readPackageJsonIfExists(projectPath) {
658
273
  const packageJsonPath = projectPath.endsWith('package.json') ? projectPath : node_path.join(projectPath, 'package.json');
@@ -662,7 +277,7 @@ function readPackageJsonIfExists(projectPath) {
662
277
  return null;
663
278
  }
664
279
  try {
665
- const validated = validatePackageJson(parse(content));
280
+ const validated = validatePackageJson(index_cjs_js$5.parse(content));
666
281
  packageLogger.debug('Package.json loaded', { path: packageJsonPath, name: validated.name });
667
282
  return validated;
668
283
  }
@@ -672,171 +287,194 @@ function readPackageJsonIfExists(projectPath) {
672
287
  }
673
288
  }
674
289
 
290
+ /** Config patterns for Babel */
291
+ const BABEL_CONFIG_PATTERNS = ['babel.config.js', 'babel.config.cjs', 'babel.config.mjs', 'babel.config.json', '.babelrc', '.babelrc.json', '.babelrc.js'];
675
292
  /**
676
- * Get combined dependencies from package.json.
677
- * Merges dependencies, devDependencies, peerDependencies, and optionalDependencies.
293
+ * Detect Babel in project.
678
294
  *
679
- * @param packageJson - The package.json object to extract dependencies from
680
- * @returns Combined dependencies as a single record
681
- */
682
- function collectAllDependencies(packageJson) {
683
- return {
684
- ...packageJson?.dependencies,
685
- ...packageJson?.devDependencies,
686
- ...packageJson?.peerDependencies,
687
- ...packageJson?.optionalDependencies,
688
- };
689
- }
690
- /**
691
- * Extract clean version from dependency version string.
692
- * Removes semver prefixes like ^, ~, >=, etc.
693
- * Uses character-by-character parsing to avoid ReDoS vulnerabilities.
295
+ * @param projectPath - Project directory path
296
+ * @param packageJson - Optional pre-loaded package.json
297
+ * @returns Detection result or null if not detected
694
298
  *
695
- * @param versionString - The version string with optional prefix characters
696
- * @returns The cleaned version string without prefix characters
299
+ * @example Detecting Babel compiler
300
+ * ```typescript
301
+ * const result = babelDetector('/path/to/project', {
302
+ * name: 'my-app',
303
+ * devDependencies: { '@babel/core': '^7.23.0', '@babel/preset-env': '^7.23.0' }
304
+ * })
305
+ * // => {
306
+ * // id: 'babel',
307
+ * // name: 'Babel',
308
+ * // version: '7.23.0',
309
+ * // confidence: 60,
310
+ * // detectedFrom: [
311
+ * // { type: 'package.json', field: 'dependencies.@babel/core' },
312
+ * // { type: 'package.json', field: 'dependencies (@babel packages)' }
313
+ * // ]
314
+ * // }
315
+ * ```
697
316
  */
698
- function parseVersionString(versionString) {
699
- if (versionString === undefined || versionString === null)
700
- return undefined;
701
- // Manual parsing instead of regex to avoid ReDoS
702
- let start = 0;
703
- while (start < versionString.length) {
704
- const char = versionString[start];
705
- if (char !== '^' && char !== '~' && char !== '>' && char !== '=' && char !== '<') {
706
- break;
707
- }
708
- start++;
317
+ function babelDetector(projectPath, packageJson) {
318
+ const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
319
+ const sources = [];
320
+ let confidence = 0;
321
+ let version;
322
+ const deps = collectAllDependencies(pkg);
323
+ if (deps['@babel/core']) {
324
+ confidence += 50;
325
+ version = parseVersionString(deps['@babel/core']);
326
+ sources.push({ type: 'package.json', field: 'dependencies.@babel/core' });
709
327
  }
710
- return versionString.slice(start);
711
- }
712
- /**
713
- * Find first matching config file in project.
714
- * Note: Name avoids similarity to fs.readFile/fs.readFileSync.
715
- *
716
- * @param projectPath - The project directory path
717
- * @param patterns - Array of config file patterns to search for
718
- * @returns The first matching config file path or undefined
719
- */
720
- function locateConfigFile(projectPath, patterns) {
721
- for (const pattern of patterns) {
722
- const fullPath = join(projectPath, pattern);
723
- if (exists(fullPath)) {
724
- return pattern;
725
- }
328
+ const configPath = locateConfigFile(projectPath, BABEL_CONFIG_PATTERNS);
329
+ if (configPath) {
330
+ confidence += 40;
331
+ sources.push({ type: 'config-file', path: configPath });
726
332
  }
727
- return undefined;
728
- }
729
- /**
730
- * Find scripts containing a specific command.
731
- *
732
- * @param scripts - The scripts object from package.json
733
- * @param command - The command string to search for
734
- * @returns Array of script names that contain the command
735
- */
736
- function filterScriptsByCommand(scripts, command) {
737
- if (!scripts)
738
- return [];
739
- return entries(scripts)
740
- .filter(([, script]) => script.includes(command))
741
- .map(([name]) => name);
333
+ if (pkg && 'babel' in pkg) {
334
+ confidence += 30;
335
+ sources.push({ type: 'package.json', field: 'babel' });
336
+ }
337
+ const babelPackages = index_cjs_js$2.keys(deps).filter((d) => d.startsWith('@babel/'));
338
+ if (babelPackages.length > 1) {
339
+ confidence += 10;
340
+ sources.push({ type: 'package.json', field: 'dependencies (@babel packages)' });
341
+ }
342
+ if (confidence === 0) {
343
+ return null;
344
+ }
345
+ return {
346
+ id: 'babel',
347
+ name: 'Babel',
348
+ version,
349
+ configPath,
350
+ confidence: index_cjs_js$7.min(confidence, 100),
351
+ detectedFrom: sources,
352
+ };
742
353
  }
743
354
 
744
- /** Config patterns for Webpack */
745
- const WEBPACK_CONFIG_PATTERNS = [
746
- 'webpack.config.js',
747
- 'webpack.config.ts',
748
- 'webpack.config.cjs',
749
- 'webpack.config.mjs',
750
- 'webpack.config.babel.js',
751
- ];
752
355
  /**
753
- * Detect Webpack in project.
356
+ * Detect esbuild in project.
754
357
  *
755
358
  * @param projectPath - Project directory path
756
359
  * @param packageJson - Optional pre-loaded package.json
757
360
  * @returns Detection result or null if not detected
361
+ *
362
+ * @example Detecting esbuild bundler
363
+ * ```typescript
364
+ * const result = esbuildDetector('/path/to/project', {
365
+ * name: 'my-lib',
366
+ * devDependencies: { 'esbuild': '^0.19.0' },
367
+ * scripts: { 'build': 'esbuild src/index.ts --bundle --outfile=dist/index.js' }
368
+ * })
369
+ * // => {
370
+ * // id: 'esbuild',
371
+ * // name: 'esbuild',
372
+ * // version: '0.19.0',
373
+ * // confidence: 80,
374
+ * // detectedFrom: [
375
+ * // { type: 'package.json', field: 'dependencies.esbuild' },
376
+ * // { type: 'package.json', field: 'scripts.build' }
377
+ * // ]
378
+ * // }
379
+ * ```
758
380
  */
759
- function webpackDetector(projectPath, packageJson) {
381
+ function esbuildDetector(projectPath, packageJson) {
760
382
  const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
761
383
  const sources = [];
762
384
  let confidence = 0;
763
385
  let version;
764
386
  const deps = collectAllDependencies(pkg);
765
- if (deps['webpack']) {
766
- confidence += 50;
767
- version = parseVersionString(deps['webpack']);
768
- sources.push({ type: 'package.json', field: 'dependencies.webpack' });
769
- }
770
- const configPath = locateConfigFile(projectPath, WEBPACK_CONFIG_PATTERNS);
771
- if (configPath) {
772
- confidence += 40;
773
- sources.push({ type: 'config-file', path: configPath });
387
+ if (deps['esbuild']) {
388
+ confidence += 70;
389
+ version = parseVersionString(deps['esbuild']);
390
+ sources.push({ type: 'package.json', field: 'dependencies.esbuild' });
774
391
  }
775
- if (deps['webpack-cli']) {
776
- confidence += 10;
777
- sources.push({ type: 'package.json', field: 'dependencies.webpack-cli' });
392
+ const esbuildPlugins = index_cjs_js$2.keys(deps).filter((d) => d.includes('esbuild-plugin') || d.includes('esbuild-'));
393
+ if (esbuildPlugins.length > 0) {
394
+ confidence += 15;
395
+ sources.push({ type: 'package.json', field: 'dependencies (esbuild plugins)' });
778
396
  }
779
- const scriptMatches = filterScriptsByCommand(pkg?.scripts, 'webpack');
397
+ const scriptMatches = filterScriptsByCommand(pkg?.scripts, 'esbuild');
780
398
  for (const name of scriptMatches) {
781
- confidence = min(confidence + 5, 100);
399
+ confidence = index_cjs_js$7.min(confidence + 10, 100);
782
400
  sources.push({ type: 'package.json', field: `scripts.${name}` });
783
401
  }
784
402
  if (confidence === 0) {
785
403
  return null;
786
404
  }
787
405
  return {
788
- id: 'webpack',
789
- name: 'Webpack',
406
+ id: 'esbuild',
407
+ name: 'esbuild',
790
408
  version,
791
- configPath,
792
- confidence: min(confidence, 100),
409
+ confidence: index_cjs_js$7.min(confidence, 100),
793
410
  detectedFrom: sources,
794
411
  };
795
412
  }
796
413
 
797
- /** Config patterns for Vite */
798
- const VITE_CONFIG_PATTERNS = ['vite.config.js', 'vite.config.ts', 'vite.config.mjs', 'vite.config.cjs'];
414
+ /** Config patterns for Parcel */
415
+ const PARCEL_CONFIG_PATTERNS = ['.parcelrc'];
799
416
  /**
800
- * Detect Vite in project.
417
+ * Detect Parcel in project.
801
418
  *
802
419
  * @param projectPath - Project directory path
803
420
  * @param packageJson - Optional pre-loaded package.json
804
421
  * @returns Detection result or null if not detected
422
+ *
423
+ * @example Detecting Parcel bundler
424
+ * ```typescript
425
+ * const result = parcelDetector('/path/to/project', {
426
+ * name: 'my-app',
427
+ * devDependencies: { 'parcel': '^2.10.0' },
428
+ * scripts: { 'dev': 'parcel src/index.html', 'build': 'parcel build src/index.html' }
429
+ * })
430
+ * // => {
431
+ * // id: 'parcel',
432
+ * // name: 'Parcel',
433
+ * // version: '2.10.0',
434
+ * // confidence: 80,
435
+ * // detectedFrom: [
436
+ * // { type: 'package.json', field: 'dependencies.parcel' },
437
+ * // { type: 'package.json', field: 'scripts.dev' },
438
+ * // { type: 'package.json', field: 'scripts.build' }
439
+ * // ]
440
+ * // }
441
+ * ```
805
442
  */
806
- function viteDetector(projectPath, packageJson) {
443
+ function parcelDetector(projectPath, packageJson) {
807
444
  const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
808
445
  const sources = [];
809
446
  let confidence = 0;
810
447
  let version;
811
448
  const deps = collectAllDependencies(pkg);
812
- if (deps['vite']) {
449
+ if (deps['parcel']) {
813
450
  confidence += 60;
814
- version = parseVersionString(deps['vite']);
815
- sources.push({ type: 'package.json', field: 'dependencies.vite' });
451
+ version = parseVersionString(deps['parcel']);
452
+ sources.push({ type: 'package.json', field: 'dependencies.parcel' });
816
453
  }
817
- const configPath = locateConfigFile(projectPath, VITE_CONFIG_PATTERNS);
454
+ if (deps['parcel-bundler']) {
455
+ confidence += 60;
456
+ version = parseVersionString(deps['parcel-bundler']);
457
+ sources.push({ type: 'package.json', field: 'dependencies.parcel-bundler' });
458
+ }
459
+ const configPath = locateConfigFile(projectPath, PARCEL_CONFIG_PATTERNS);
818
460
  if (configPath) {
819
- confidence += 35;
461
+ confidence += 30;
820
462
  sources.push({ type: 'config-file', path: configPath });
821
463
  }
822
- if (deps['vitest']) {
823
- confidence += 10;
824
- sources.push({ type: 'package.json', field: 'dependencies.vitest' });
825
- }
826
- const vitePlugins = keys(deps).filter((d) => d.startsWith('vite-plugin-') || d.startsWith('@vitejs/'));
827
- if (vitePlugins.length > 0) {
828
- confidence += 10;
829
- sources.push({ type: 'package.json', field: 'dependencies (vite plugins)' });
464
+ const scriptMatches = filterScriptsByCommand(pkg?.scripts, 'parcel');
465
+ for (const name of scriptMatches) {
466
+ confidence = index_cjs_js$7.min(confidence + 10, 100);
467
+ sources.push({ type: 'package.json', field: `scripts.${name}` });
830
468
  }
831
469
  if (confidence === 0) {
832
470
  return null;
833
471
  }
834
472
  return {
835
- id: 'vite',
836
- name: 'Vite',
473
+ id: 'parcel',
474
+ name: 'Parcel',
837
475
  version,
838
476
  configPath,
839
- confidence: min(confidence, 100),
477
+ confidence: index_cjs_js$7.min(confidence, 100),
840
478
  detectedFrom: sources,
841
479
  };
842
480
  }
@@ -849,6 +487,28 @@ const ROLLUP_CONFIG_PATTERNS = ['rollup.config.js', 'rollup.config.ts', 'rollup.
849
487
  * @param projectPath - Project directory path
850
488
  * @param packageJson - Optional pre-loaded package.json
851
489
  * @returns Detection result or null if not detected
490
+ *
491
+ * @example Detecting Rollup bundler
492
+ * ```typescript
493
+ * const result = rollupDetector('/path/to/project', {
494
+ * name: 'my-lib',
495
+ * devDependencies: {
496
+ * 'rollup': '^4.0.0',
497
+ * '@rollup/plugin-node-resolve': '^15.0.0',
498
+ * '@rollup/plugin-commonjs': '^25.0.0'
499
+ * }
500
+ * })
501
+ * // => {
502
+ * // id: 'rollup',
503
+ * // name: 'Rollup',
504
+ * // version: '4.0.0',
505
+ * // confidence: 65,
506
+ * // detectedFrom: [
507
+ * // { type: 'package.json', field: 'dependencies.rollup' },
508
+ * // { type: 'package.json', field: 'dependencies (rollup plugins)' }
509
+ * // ]
510
+ * // }
511
+ * ```
852
512
  */
853
513
  function rollupDetector(projectPath, packageJson) {
854
514
  const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
@@ -866,14 +526,14 @@ function rollupDetector(projectPath, packageJson) {
866
526
  confidence += 40;
867
527
  sources.push({ type: 'config-file', path: configPath });
868
528
  }
869
- const rollupPlugins = keys(deps).filter((d) => d.startsWith('@rollup/') || d.startsWith('rollup-plugin-'));
529
+ const rollupPlugins = index_cjs_js$2.keys(deps).filter((d) => d.startsWith('@rollup/') || d.startsWith('rollup-plugin-'));
870
530
  if (rollupPlugins.length > 0) {
871
531
  confidence += 10;
872
532
  sources.push({ type: 'package.json', field: 'dependencies (rollup plugins)' });
873
533
  }
874
534
  const scriptMatches = filterScriptsByCommand(pkg?.scripts, 'rollup');
875
535
  for (const name of scriptMatches) {
876
- confidence = min(confidence + 5, 100);
536
+ confidence = index_cjs_js$7.min(confidence + 5, 100);
877
537
  sources.push({ type: 'package.json', field: `scripts.${name}` });
878
538
  }
879
539
  if (confidence === 0) {
@@ -884,189 +544,215 @@ function rollupDetector(projectPath, packageJson) {
884
544
  name: 'Rollup',
885
545
  version,
886
546
  configPath,
887
- confidence: min(confidence, 100),
547
+ confidence: index_cjs_js$7.min(confidence, 100),
888
548
  detectedFrom: sources,
889
549
  };
890
550
  }
891
551
 
552
+ /** Config patterns for SWC */
553
+ const SWC_CONFIG_PATTERNS = ['.swcrc', 'swc.config.js'];
892
554
  /**
893
- * Detect esbuild in project.
555
+ * Detect SWC in project.
894
556
  *
895
557
  * @param projectPath - Project directory path
896
558
  * @param packageJson - Optional pre-loaded package.json
897
559
  * @returns Detection result or null if not detected
898
- */
899
- function esbuildDetector(projectPath, packageJson) {
900
- const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
901
- const sources = [];
902
- let confidence = 0;
903
- let version;
904
- const deps = collectAllDependencies(pkg);
905
- if (deps['esbuild']) {
906
- confidence += 70;
907
- version = parseVersionString(deps['esbuild']);
908
- sources.push({ type: 'package.json', field: 'dependencies.esbuild' });
909
- }
910
- const esbuildPlugins = keys(deps).filter((d) => d.includes('esbuild-plugin') || d.includes('esbuild-'));
911
- if (esbuildPlugins.length > 0) {
912
- confidence += 15;
913
- sources.push({ type: 'package.json', field: 'dependencies (esbuild plugins)' });
914
- }
915
- const scriptMatches = filterScriptsByCommand(pkg?.scripts, 'esbuild');
916
- for (const name of scriptMatches) {
917
- confidence = min(confidence + 10, 100);
918
- sources.push({ type: 'package.json', field: `scripts.${name}` });
919
- }
920
- if (confidence === 0) {
921
- return null;
922
- }
923
- return {
924
- id: 'esbuild',
925
- name: 'esbuild',
926
- version,
927
- confidence: min(confidence, 100),
928
- detectedFrom: sources,
929
- };
930
- }
931
-
932
- /** Config patterns for Babel */
933
- const BABEL_CONFIG_PATTERNS = ['babel.config.js', 'babel.config.cjs', 'babel.config.mjs', 'babel.config.json', '.babelrc', '.babelrc.json', '.babelrc.js'];
934
- /**
935
- * Detect Babel in project.
936
560
  *
937
- * @param projectPath - Project directory path
938
- * @param packageJson - Optional pre-loaded package.json
939
- * @returns Detection result or null if not detected
561
+ * @example Detecting SWC compiler
562
+ * ```typescript
563
+ * const result = swcDetector('/path/to/project', {
564
+ * name: 'my-app',
565
+ * devDependencies: { '@swc/core': '^1.3.0', '@swc/cli': '^0.1.0' }
566
+ * })
567
+ * // => {
568
+ * // id: 'swc',
569
+ * // name: 'SWC',
570
+ * // version: '1.3.0',
571
+ * // confidence: 70,
572
+ * // detectedFrom: [
573
+ * // { type: 'package.json', field: 'dependencies.@swc/core' },
574
+ * // { type: 'package.json', field: 'dependencies.@swc/cli' }
575
+ * // ]
576
+ * // }
577
+ * ```
940
578
  */
941
- function babelDetector(projectPath, packageJson) {
579
+ function swcDetector(projectPath, packageJson) {
942
580
  const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
943
581
  const sources = [];
944
582
  let confidence = 0;
945
583
  let version;
946
584
  const deps = collectAllDependencies(pkg);
947
- if (deps['@babel/core']) {
948
- confidence += 50;
949
- version = parseVersionString(deps['@babel/core']);
950
- sources.push({ type: 'package.json', field: 'dependencies.@babel/core' });
585
+ if (deps['@swc/core']) {
586
+ confidence += 60;
587
+ version = parseVersionString(deps['@swc/core']);
588
+ sources.push({ type: 'package.json', field: 'dependencies.@swc/core' });
951
589
  }
952
- const configPath = locateConfigFile(projectPath, BABEL_CONFIG_PATTERNS);
590
+ const configPath = locateConfigFile(projectPath, SWC_CONFIG_PATTERNS);
953
591
  if (configPath) {
954
- confidence += 40;
592
+ confidence += 35;
955
593
  sources.push({ type: 'config-file', path: configPath });
956
594
  }
957
- if (pkg && 'babel' in pkg) {
958
- confidence += 30;
959
- sources.push({ type: 'package.json', field: 'babel' });
960
- }
961
- const babelPackages = keys(deps).filter((d) => d.startsWith('@babel/'));
962
- if (babelPackages.length > 1) {
595
+ if (deps['@swc/cli']) {
963
596
  confidence += 10;
964
- sources.push({ type: 'package.json', field: 'dependencies (@babel packages)' });
597
+ sources.push({ type: 'package.json', field: 'dependencies.@swc/cli' });
598
+ }
599
+ const swcPlugins = index_cjs_js$2.keys(deps).filter((d) => d.startsWith('@swc/') || d.includes('swc-plugin'));
600
+ if (swcPlugins.length > 1) {
601
+ confidence += 5;
602
+ sources.push({ type: 'package.json', field: 'dependencies (@swc packages)' });
965
603
  }
966
604
  if (confidence === 0) {
967
605
  return null;
968
606
  }
969
607
  return {
970
- id: 'babel',
971
- name: 'Babel',
608
+ id: 'swc',
609
+ name: 'SWC',
972
610
  version,
973
611
  configPath,
974
- confidence: min(confidence, 100),
612
+ confidence: index_cjs_js$7.min(confidence, 100),
975
613
  detectedFrom: sources,
976
614
  };
977
615
  }
978
616
 
979
- /** Config patterns for SWC */
980
- const SWC_CONFIG_PATTERNS = ['.swcrc', 'swc.config.js'];
617
+ /** Config patterns for Vite */
618
+ const VITE_CONFIG_PATTERNS = ['vite.config.js', 'vite.config.ts', 'vite.config.mjs', 'vite.config.cjs'];
981
619
  /**
982
- * Detect SWC in project.
620
+ * Detect Vite in project.
983
621
  *
984
622
  * @param projectPath - Project directory path
985
623
  * @param packageJson - Optional pre-loaded package.json
986
624
  * @returns Detection result or null if not detected
625
+ *
626
+ * @example Detecting Vite build tool
627
+ * ```typescript
628
+ * const result = viteDetector('/path/to/project', {
629
+ * name: 'my-app',
630
+ * devDependencies: {
631
+ * 'vite': '^5.0.0',
632
+ * '@vitejs/plugin-react': '^4.0.0',
633
+ * 'vitest': '^1.0.0'
634
+ * }
635
+ * })
636
+ * // => {
637
+ * // id: 'vite',
638
+ * // name: 'Vite',
639
+ * // version: '5.0.0',
640
+ * // confidence: 80,
641
+ * // detectedFrom: [
642
+ * // { type: 'package.json', field: 'dependencies.vite' },
643
+ * // { type: 'package.json', field: 'dependencies.vitest' },
644
+ * // { type: 'package.json', field: 'dependencies (vite plugins)' }
645
+ * // ]
646
+ * // }
647
+ * ```
987
648
  */
988
- function swcDetector(projectPath, packageJson) {
649
+ function viteDetector(projectPath, packageJson) {
989
650
  const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
990
651
  const sources = [];
991
652
  let confidence = 0;
992
653
  let version;
993
654
  const deps = collectAllDependencies(pkg);
994
- if (deps['@swc/core']) {
655
+ if (deps['vite']) {
995
656
  confidence += 60;
996
- version = parseVersionString(deps['@swc/core']);
997
- sources.push({ type: 'package.json', field: 'dependencies.@swc/core' });
657
+ version = parseVersionString(deps['vite']);
658
+ sources.push({ type: 'package.json', field: 'dependencies.vite' });
998
659
  }
999
- const configPath = locateConfigFile(projectPath, SWC_CONFIG_PATTERNS);
660
+ const configPath = locateConfigFile(projectPath, VITE_CONFIG_PATTERNS);
1000
661
  if (configPath) {
1001
662
  confidence += 35;
1002
663
  sources.push({ type: 'config-file', path: configPath });
1003
664
  }
1004
- if (deps['@swc/cli']) {
665
+ if (deps['vitest']) {
1005
666
  confidence += 10;
1006
- sources.push({ type: 'package.json', field: 'dependencies.@swc/cli' });
667
+ sources.push({ type: 'package.json', field: 'dependencies.vitest' });
1007
668
  }
1008
- const swcPlugins = keys(deps).filter((d) => d.startsWith('@swc/') || d.includes('swc-plugin'));
1009
- if (swcPlugins.length > 1) {
1010
- confidence += 5;
1011
- sources.push({ type: 'package.json', field: 'dependencies (@swc packages)' });
669
+ const vitePlugins = index_cjs_js$2.keys(deps).filter((d) => d.startsWith('vite-plugin-') || d.startsWith('@vitejs/'));
670
+ if (vitePlugins.length > 0) {
671
+ confidence += 10;
672
+ sources.push({ type: 'package.json', field: 'dependencies (vite plugins)' });
1012
673
  }
1013
674
  if (confidence === 0) {
1014
675
  return null;
1015
676
  }
1016
677
  return {
1017
- id: 'swc',
1018
- name: 'SWC',
678
+ id: 'vite',
679
+ name: 'Vite',
1019
680
  version,
1020
681
  configPath,
1021
- confidence: min(confidence, 100),
682
+ confidence: index_cjs_js$7.min(confidence, 100),
1022
683
  detectedFrom: sources,
1023
684
  };
1024
685
  }
1025
686
 
1026
- /** Config patterns for Parcel */
1027
- const PARCEL_CONFIG_PATTERNS = ['.parcelrc'];
687
+ /** Config patterns for Webpack */
688
+ const WEBPACK_CONFIG_PATTERNS = [
689
+ 'webpack.config.js',
690
+ 'webpack.config.ts',
691
+ 'webpack.config.cjs',
692
+ 'webpack.config.mjs',
693
+ 'webpack.config.babel.js',
694
+ ];
1028
695
  /**
1029
- * Detect Parcel in project.
696
+ * Detect Webpack in project.
1030
697
  *
1031
698
  * @param projectPath - Project directory path
1032
699
  * @param packageJson - Optional pre-loaded package.json
1033
700
  * @returns Detection result or null if not detected
701
+ *
702
+ * @example Detecting Webpack bundler
703
+ * ```typescript
704
+ * const result = webpackDetector('/path/to/project', {
705
+ * name: 'my-app',
706
+ * devDependencies: { 'webpack': '^5.89.0', 'webpack-cli': '^5.1.0' },
707
+ * scripts: { 'build': 'webpack --mode production' }
708
+ * })
709
+ * // => {
710
+ * // id: 'webpack',
711
+ * // name: 'Webpack',
712
+ * // version: '5.89.0',
713
+ * // confidence: 65,
714
+ * // detectedFrom: [
715
+ * // { type: 'package.json', field: 'dependencies.webpack' },
716
+ * // { type: 'package.json', field: 'dependencies.webpack-cli' },
717
+ * // { type: 'package.json', field: 'scripts.build' }
718
+ * // ]
719
+ * // }
720
+ * ```
1034
721
  */
1035
- function parcelDetector(projectPath, packageJson) {
722
+ function webpackDetector(projectPath, packageJson) {
1036
723
  const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
1037
724
  const sources = [];
1038
725
  let confidence = 0;
1039
726
  let version;
1040
727
  const deps = collectAllDependencies(pkg);
1041
- if (deps['parcel']) {
1042
- confidence += 60;
1043
- version = parseVersionString(deps['parcel']);
1044
- sources.push({ type: 'package.json', field: 'dependencies.parcel' });
1045
- }
1046
- if (deps['parcel-bundler']) {
1047
- confidence += 60;
1048
- version = parseVersionString(deps['parcel-bundler']);
1049
- sources.push({ type: 'package.json', field: 'dependencies.parcel-bundler' });
728
+ if (deps['webpack']) {
729
+ confidence += 50;
730
+ version = parseVersionString(deps['webpack']);
731
+ sources.push({ type: 'package.json', field: 'dependencies.webpack' });
1050
732
  }
1051
- const configPath = locateConfigFile(projectPath, PARCEL_CONFIG_PATTERNS);
733
+ const configPath = locateConfigFile(projectPath, WEBPACK_CONFIG_PATTERNS);
1052
734
  if (configPath) {
1053
- confidence += 30;
735
+ confidence += 40;
1054
736
  sources.push({ type: 'config-file', path: configPath });
1055
737
  }
1056
- const scriptMatches = filterScriptsByCommand(pkg?.scripts, 'parcel');
738
+ if (deps['webpack-cli']) {
739
+ confidence += 10;
740
+ sources.push({ type: 'package.json', field: 'dependencies.webpack-cli' });
741
+ }
742
+ const scriptMatches = filterScriptsByCommand(pkg?.scripts, 'webpack');
1057
743
  for (const name of scriptMatches) {
1058
- confidence = min(confidence + 10, 100);
744
+ confidence = index_cjs_js$7.min(confidence + 5, 100);
1059
745
  sources.push({ type: 'package.json', field: `scripts.${name}` });
1060
746
  }
1061
747
  if (confidence === 0) {
1062
748
  return null;
1063
749
  }
1064
750
  return {
1065
- id: 'parcel',
1066
- name: 'Parcel',
751
+ id: 'webpack',
752
+ name: 'Webpack',
1067
753
  version,
1068
754
  configPath,
1069
- confidence: min(confidence, 100),
755
+ confidence: index_cjs_js$7.min(confidence, 100),
1070
756
  detectedFrom: sources,
1071
757
  };
1072
758
  }
@@ -1087,6 +773,22 @@ const buildToolDetectors = [
1087
773
  * @param projectPath - Project directory path
1088
774
  * @param packageJson - Optional pre-loaded package.json
1089
775
  * @returns Array of detected build tools, sorted by confidence
776
+ *
777
+ * @example Detecting multiple build tools
778
+ * ```typescript
779
+ * const tools = detectBuildTools('/path/to/project', {
780
+ * name: 'my-app',
781
+ * devDependencies: {
782
+ * 'vite': '^5.0.0',
783
+ * '@vitejs/plugin-react': '^4.0.0',
784
+ * '@babel/core': '^7.23.0'
785
+ * }
786
+ * })
787
+ * // => [
788
+ * // { id: 'vite', name: 'Vite', version: '5.0.0', confidence: 70, ... },
789
+ * // { id: 'babel', name: 'Babel', version: '7.23.0', confidence: 50, ... }
790
+ * // ]
791
+ * ```
1090
792
  */
1091
793
  function detectBuildTools(projectPath, packageJson) {
1092
794
  const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
@@ -1115,4 +817,3 @@ exports.rollupDetector = rollupDetector;
1115
817
  exports.swcDetector = swcDetector;
1116
818
  exports.viteDetector = viteDetector;
1117
819
  exports.webpackDetector = webpackDetector;
1118
- //# sourceMappingURL=index.cjs.js.map