@js-recon/js-recon 1.3.1-beta.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 (361) hide show
  1. package/.gitattributes +2 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  4. package/.github/ISSUE_TEMPLATE/new_tech_support_request.md +26 -0
  5. package/.github/workflows/build-and-prettify.yaml +121 -0
  6. package/.github/workflows/pr_checker.yml +22 -0
  7. package/.github/workflows/publish-js-recon.yml +169 -0
  8. package/.prettierignore +2 -0
  9. package/.prettierrc +6 -0
  10. package/CHANGELOG.md +692 -0
  11. package/CLAUDE.md +290 -0
  12. package/Dockerfile +34 -0
  13. package/LICENSE +21 -0
  14. package/README.md +101 -0
  15. package/SECURITY.md +37 -0
  16. package/build/analyze/engine/astEngine.js +224 -0
  17. package/build/analyze/engine/astEngine.js.map +1 -0
  18. package/build/analyze/engine/index.js +59 -0
  19. package/build/analyze/engine/index.js.map +1 -0
  20. package/build/analyze/engine/requestEngine.js +100 -0
  21. package/build/analyze/engine/requestEngine.js.map +1 -0
  22. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +37 -0
  23. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -0
  24. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +29 -0
  25. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -0
  26. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +38 -0
  27. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -0
  28. package/build/analyze/helpers/engineHelpers/taintFlow.js +250 -0
  29. package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -0
  30. package/build/analyze/helpers/initRules.js +111 -0
  31. package/build/analyze/helpers/initRules.js.map +1 -0
  32. package/build/analyze/helpers/outputHelper.js +14 -0
  33. package/build/analyze/helpers/outputHelper.js.map +1 -0
  34. package/build/analyze/helpers/schemas.js +57 -0
  35. package/build/analyze/helpers/schemas.js.map +1 -0
  36. package/build/analyze/helpers/validate.js +89 -0
  37. package/build/analyze/helpers/validate.js.map +1 -0
  38. package/build/analyze/index.js +150 -0
  39. package/build/analyze/index.js.map +1 -0
  40. package/build/analyze/types/index.js +2 -0
  41. package/build/analyze/types/index.js.map +1 -0
  42. package/build/api_gateway/checkFeasibility.js +41 -0
  43. package/build/api_gateway/checkFeasibility.js.map +1 -0
  44. package/build/api_gateway/checkFireWallBlocking.js +33 -0
  45. package/build/api_gateway/checkFireWallBlocking.js.map +1 -0
  46. package/build/api_gateway/genReq.js +205 -0
  47. package/build/api_gateway/genReq.js.map +1 -0
  48. package/build/api_gateway/index.js +291 -0
  49. package/build/api_gateway/index.js.map +1 -0
  50. package/build/endpoints/gen_report/gen_json.js +30 -0
  51. package/build/endpoints/gen_report/gen_json.js.map +1 -0
  52. package/build/endpoints/gen_report/utility/iterate_n_store.js +64 -0
  53. package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -0
  54. package/build/endpoints/index.js +101 -0
  55. package/build/endpoints/index.js.map +1 -0
  56. package/build/endpoints/next_js/client_jsFilesHref.js +100 -0
  57. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -0
  58. package/build/endpoints/next_js/client_jsonParse.js +89 -0
  59. package/build/endpoints/next_js/client_jsonParse.js.map +1 -0
  60. package/build/endpoints/next_js/client_mappedJsonFile.js +103 -0
  61. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -0
  62. package/build/endpoints/next_js/client_subsequentRequests.js +211 -0
  63. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -0
  64. package/build/fingerprint/index.js +123 -0
  65. package/build/fingerprint/index.js.map +1 -0
  66. package/build/globalConfig.js +16 -0
  67. package/build/globalConfig.js.map +1 -0
  68. package/build/index.js +332 -0
  69. package/build/index.js.map +1 -0
  70. package/build/lazyLoad/angular/angular_getFromMainJs.js +55 -0
  71. package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -0
  72. package/build/lazyLoad/angular/angular_getFromPageSource.js +43 -0
  73. package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -0
  74. package/build/lazyLoad/downloadFilesUtil.js +127 -0
  75. package/build/lazyLoad/downloadFilesUtil.js.map +1 -0
  76. package/build/lazyLoad/downloadLoadedJsUtil.js +44 -0
  77. package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -0
  78. package/build/lazyLoad/downloadQueue.js +191 -0
  79. package/build/lazyLoad/downloadQueue.js.map +1 -0
  80. package/build/lazyLoad/globals.js +107 -0
  81. package/build/lazyLoad/globals.js.map +1 -0
  82. package/build/lazyLoad/index.js +377 -0
  83. package/build/lazyLoad/index.js.map +1 -0
  84. package/build/lazyLoad/next_js/NextJsCrawler.js +332 -0
  85. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -0
  86. package/build/lazyLoad/next_js/next_GetJSScript.js +126 -0
  87. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -0
  88. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +83 -0
  89. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -0
  90. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +222 -0
  91. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -0
  92. package/build/lazyLoad/next_js/next_SubsequentRequests.js +208 -0
  93. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -0
  94. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +37 -0
  95. package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -0
  96. package/build/lazyLoad/next_js/next_buildId.js +55 -0
  97. package/build/lazyLoad/next_js/next_buildId.js.map +1 -0
  98. package/build/lazyLoad/next_js/next_getClientSidePaths.js +83 -0
  99. package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -0
  100. package/build/lazyLoad/next_js/next_globals.js +8 -0
  101. package/build/lazyLoad/next_js/next_globals.js.map +1 -0
  102. package/build/lazyLoad/next_js/next_parseLayoutJs.js +116 -0
  103. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -0
  104. package/build/lazyLoad/next_js/next_promiseResolve.js +85 -0
  105. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -0
  106. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +51 -0
  107. package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -0
  108. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +202 -0
  109. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -0
  110. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +82 -0
  111. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -0
  112. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +108 -0
  113. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -0
  114. package/build/lazyLoad/react/react_followImports.js +105 -0
  115. package/build/lazyLoad/react/react_followImports.js.map +1 -0
  116. package/build/lazyLoad/react/react_getScriptTags.js +52 -0
  117. package/build/lazyLoad/react/react_getScriptTags.js.map +1 -0
  118. package/build/lazyLoad/react/react_sourcemapUrls.js +44 -0
  119. package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -0
  120. package/build/lazyLoad/react/react_webpackChunkPaths.js +188 -0
  121. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -0
  122. package/build/lazyLoad/sourcemap.js +188 -0
  123. package/build/lazyLoad/sourcemap.js.map +1 -0
  124. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +162 -0
  125. package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -0
  126. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +91 -0
  127. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -0
  128. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +180 -0
  129. package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -0
  130. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +123 -0
  131. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -0
  132. package/build/lazyLoad/techDetect/checkAngularJS.js +70 -0
  133. package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -0
  134. package/build/lazyLoad/techDetect/checkNextJS.js +45 -0
  135. package/build/lazyLoad/techDetect/checkNextJS.js.map +1 -0
  136. package/build/lazyLoad/techDetect/checkNuxtJS.js +39 -0
  137. package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -0
  138. package/build/lazyLoad/techDetect/checkReact.js +86 -0
  139. package/build/lazyLoad/techDetect/checkReact.js.map +1 -0
  140. package/build/lazyLoad/techDetect/checkSvelte.js +69 -0
  141. package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -0
  142. package/build/lazyLoad/techDetect/checkVueJS.js +118 -0
  143. package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -0
  144. package/build/lazyLoad/techDetect/index.js +161 -0
  145. package/build/lazyLoad/techDetect/index.js.map +1 -0
  146. package/build/lazyLoad/vue/vue_RuntimeJs.js +169 -0
  147. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -0
  148. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +102 -0
  149. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -0
  150. package/build/lazyLoad/vue/vue_discoverJsFiles.js +82 -0
  151. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -0
  152. package/build/lazyLoad/vue/vue_getClientSidePaths.js +155 -0
  153. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -0
  154. package/build/lazyLoad/vue/vue_jsImports.js +76 -0
  155. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -0
  156. package/build/lazyLoad/vue/vue_pageSrc.js +60 -0
  157. package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -0
  158. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +64 -0
  159. package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -0
  160. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +142 -0
  161. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -0
  162. package/build/lazyLoad/vue/vue_severalJsFilesHome.js +57 -0
  163. package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -0
  164. package/build/lazyLoad/vue/vue_sourcemapExtract.js +166 -0
  165. package/build/lazyLoad/vue/vue_sourcemapExtract.js.map +1 -0
  166. package/build/lazyLoad/vue/vue_stringJsFiles.js +148 -0
  167. package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -0
  168. package/build/lazyLoad/vue/vue_viteMapDeps.js +89 -0
  169. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -0
  170. package/build/load/index.js +316 -0
  171. package/build/load/index.js.map +1 -0
  172. package/build/map/graphql/resolveGraphql.js +296 -0
  173. package/build/map/graphql/resolveGraphql.js.map +1 -0
  174. package/build/map/index.js +261 -0
  175. package/build/map/index.js.map +1 -0
  176. package/build/map/next_js/getAxiosInstances.js +64 -0
  177. package/build/map/next_js/getAxiosInstances.js.map +1 -0
  178. package/build/map/next_js/getExports.js +101 -0
  179. package/build/map/next_js/getExports.js.map +1 -0
  180. package/build/map/next_js/getFetchInstances.js +139 -0
  181. package/build/map/next_js/getFetchInstances.js.map +1 -0
  182. package/build/map/next_js/getTurbopackConnections.js +255 -0
  183. package/build/map/next_js/getTurbopackConnections.js.map +1 -0
  184. package/build/map/next_js/getWebpackConnections.js +235 -0
  185. package/build/map/next_js/getWebpackConnections.js.map +1 -0
  186. package/build/map/next_js/interactive.js +69 -0
  187. package/build/map/next_js/interactive.js.map +1 -0
  188. package/build/map/next_js/interactive_helpers/commandHandler.js +310 -0
  189. package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -0
  190. package/build/map/next_js/interactive_helpers/commandHelpers.js +245 -0
  191. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -0
  192. package/build/map/next_js/interactive_helpers/esqueryGen.js +370 -0
  193. package/build/map/next_js/interactive_helpers/esqueryGen.js.map +1 -0
  194. package/build/map/next_js/interactive_helpers/helpMenu.js +12 -0
  195. package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -0
  196. package/build/map/next_js/interactive_helpers/inputPatch.js +207 -0
  197. package/build/map/next_js/interactive_helpers/inputPatch.js.map +1 -0
  198. package/build/map/next_js/interactive_helpers/keybindings.js +90 -0
  199. package/build/map/next_js/interactive_helpers/keybindings.js.map +1 -0
  200. package/build/map/next_js/interactive_helpers/printer.js +23 -0
  201. package/build/map/next_js/interactive_helpers/printer.js.map +1 -0
  202. package/build/map/next_js/interactive_helpers/ui.js +88 -0
  203. package/build/map/next_js/interactive_helpers/ui.js.map +1 -0
  204. package/build/map/next_js/resolveAxios.js +152 -0
  205. package/build/map/next_js/resolveAxios.js.map +1 -0
  206. package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js +64 -0
  207. package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js.map +1 -0
  208. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +48 -0
  209. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -0
  210. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +34 -0
  211. package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -0
  212. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +39 -0
  213. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -0
  214. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +312 -0
  215. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -0
  216. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +173 -0
  217. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -0
  218. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +261 -0
  219. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -0
  220. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +206 -0
  221. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -0
  222. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +168 -0
  223. package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -0
  224. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +121 -0
  225. package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -0
  226. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +274 -0
  227. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -0
  228. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +518 -0
  229. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -0
  230. package/build/map/next_js/resolveAxiosHelpers/traceBody.js +913 -0
  231. package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -0
  232. package/build/map/next_js/resolveFetch.js +533 -0
  233. package/build/map/next_js/resolveFetch.js.map +1 -0
  234. package/build/map/next_js/resolveNewRequest.js +749 -0
  235. package/build/map/next_js/resolveNewRequest.js.map +1 -0
  236. package/build/map/next_js/resolveServerActions.js +449 -0
  237. package/build/map/next_js/resolveServerActions.js.map +1 -0
  238. package/build/map/next_js/utils.js +1600 -0
  239. package/build/map/next_js/utils.js.map +1 -0
  240. package/build/map/react_js/getReactConnections.js +303 -0
  241. package/build/map/react_js/getReactConnections.js.map +1 -0
  242. package/build/map/react_js/interactive.js +4 -0
  243. package/build/map/react_js/interactive.js.map +1 -0
  244. package/build/map/react_js/react_resolveFetch.js +6 -0
  245. package/build/map/react_js/react_resolveFetch.js.map +1 -0
  246. package/build/map/svelte_js/interactive.js +58 -0
  247. package/build/map/svelte_js/interactive.js.map +1 -0
  248. package/build/map/svelte_js/interactive_helpers/commandHandler.js +4 -0
  249. package/build/map/svelte_js/interactive_helpers/commandHandler.js.map +1 -0
  250. package/build/map/vue_js/bodyResolver.js +477 -0
  251. package/build/map/vue_js/bodyResolver.js.map +1 -0
  252. package/build/map/vue_js/crossFileResolver.js +438 -0
  253. package/build/map/vue_js/crossFileResolver.js.map +1 -0
  254. package/build/map/vue_js/getViteConnections.js +343 -0
  255. package/build/map/vue_js/getViteConnections.js.map +1 -0
  256. package/build/map/vue_js/interactive.js +67 -0
  257. package/build/map/vue_js/interactive.js.map +1 -0
  258. package/build/map/vue_js/interactive_helpers/commandHandler.js +307 -0
  259. package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -0
  260. package/build/map/vue_js/interactive_helpers/commandHelpers.js +39 -0
  261. package/build/map/vue_js/interactive_helpers/commandHelpers.js.map +1 -0
  262. package/build/map/vue_js/interactive_helpers/helpMenu.js +12 -0
  263. package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -0
  264. package/build/map/vue_js/taint_utils.js +621 -0
  265. package/build/map/vue_js/taint_utils.js.map +1 -0
  266. package/build/map/vue_js/vue_resolveFetch.js +416 -0
  267. package/build/map/vue_js/vue_resolveFetch.js.map +1 -0
  268. package/build/map/vue_js/vue_resolveHttpClient.js +738 -0
  269. package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -0
  270. package/build/map/vue_js/vue_resolveXhr.js +282 -0
  271. package/build/map/vue_js/vue_resolveXhr.js.map +1 -0
  272. package/build/mcp/chatOneShot.js +101 -0
  273. package/build/mcp/chatOneShot.js.map +1 -0
  274. package/build/mcp/claudeCodeCreds.js +150 -0
  275. package/build/mcp/claudeCodeCreds.js.map +1 -0
  276. package/build/mcp/cli.js +372 -0
  277. package/build/mcp/cli.js.map +1 -0
  278. package/build/mcp/commands.js +227 -0
  279. package/build/mcp/commands.js.map +1 -0
  280. package/build/mcp/config.js +68 -0
  281. package/build/mcp/config.js.map +1 -0
  282. package/build/mcp/index.js +50 -0
  283. package/build/mcp/index.js.map +1 -0
  284. package/build/mcp/intent.js +204 -0
  285. package/build/mcp/intent.js.map +1 -0
  286. package/build/mcp/jobs.js +199 -0
  287. package/build/mcp/jobs.js.map +1 -0
  288. package/build/mcp/mcpServer.js +241 -0
  289. package/build/mcp/mcpServer.js.map +1 -0
  290. package/build/mcp/providers.js +170 -0
  291. package/build/mcp/providers.js.map +1 -0
  292. package/build/mcp/skills.js +115 -0
  293. package/build/mcp/skills.js.map +1 -0
  294. package/build/mcp/tools.js +185 -0
  295. package/build/mcp/tools.js.map +1 -0
  296. package/build/refactor/index.js +85 -0
  297. package/build/refactor/index.js.map +1 -0
  298. package/build/refactor/next/index.js +109 -0
  299. package/build/refactor/next/index.js.map +1 -0
  300. package/build/refactor/react/index.js +636 -0
  301. package/build/refactor/react/index.js.map +1 -0
  302. package/build/report/index.js +68 -0
  303. package/build/report/index.js.map +1 -0
  304. package/build/report/utility/dataTables/genDataTablesPage.js +158 -0
  305. package/build/report/utility/dataTables/genDataTablesPage.js.map +1 -0
  306. package/build/report/utility/genHtml.js +516 -0
  307. package/build/report/utility/genHtml.js.map +1 -0
  308. package/build/report/utility/initReportDb.js +96 -0
  309. package/build/report/utility/initReportDb.js.map +1 -0
  310. package/build/report/utility/markdownGen/addAnalyze.js +53 -0
  311. package/build/report/utility/markdownGen/addAnalyze.js.map +1 -0
  312. package/build/report/utility/markdownGen/addMappedJson.js +33 -0
  313. package/build/report/utility/markdownGen/addMappedJson.js.map +1 -0
  314. package/build/report/utility/populateDb/populateAnalysisFindings.js +31 -0
  315. package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -0
  316. package/build/report/utility/populateDb/populateEndpoints.js +50 -0
  317. package/build/report/utility/populateDb/populateEndpoints.js.map +1 -0
  318. package/build/report/utility/populateDb/populateMappedJson.js +31 -0
  319. package/build/report/utility/populateDb/populateMappedJson.js.map +1 -0
  320. package/build/report/utility/populateDb/populateMappedOpenapi.js +49 -0
  321. package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -0
  322. package/build/run/index.js +446 -0
  323. package/build/run/index.js.map +1 -0
  324. package/build/run/interruptHandler.js +93 -0
  325. package/build/run/interruptHandler.js.map +1 -0
  326. package/build/strings/index.js +239 -0
  327. package/build/strings/index.js.map +1 -0
  328. package/build/strings/openapi.js +63 -0
  329. package/build/strings/openapi.js.map +1 -0
  330. package/build/strings/permutate.js +62 -0
  331. package/build/strings/permutate.js.map +1 -0
  332. package/build/strings/secrets.js +102 -0
  333. package/build/strings/secrets.js.map +1 -0
  334. package/build/utility/ai.js +97 -0
  335. package/build/utility/ai.js.map +1 -0
  336. package/build/utility/configureSandbox.js +14 -0
  337. package/build/utility/configureSandbox.js.map +1 -0
  338. package/build/utility/globals.js +322 -0
  339. package/build/utility/globals.js.map +1 -0
  340. package/build/utility/interfaces.js +2 -0
  341. package/build/utility/interfaces.js.map +1 -0
  342. package/build/utility/makeReq.js +448 -0
  343. package/build/utility/makeReq.js.map +1 -0
  344. package/build/utility/openapiGenerator.js +254 -0
  345. package/build/utility/openapiGenerator.js.map +1 -0
  346. package/build/utility/postmanGenerator.js +216 -0
  347. package/build/utility/postmanGenerator.js.map +1 -0
  348. package/build/utility/progressLog.js +50 -0
  349. package/build/utility/progressLog.js.map +1 -0
  350. package/build/utility/puppeteerInstance.js +5 -0
  351. package/build/utility/puppeteerInstance.js.map +1 -0
  352. package/build/utility/replaceUrlPlaceholders.js +48 -0
  353. package/build/utility/replaceUrlPlaceholders.js.map +1 -0
  354. package/build/utility/resolvePath.js +44 -0
  355. package/build/utility/resolvePath.js.map +1 -0
  356. package/build/utility/runSandboxed.js +42 -0
  357. package/build/utility/runSandboxed.js.map +1 -0
  358. package/build/utility/urlUtils.js +21 -0
  359. package/build/utility/urlUtils.js.map +1 -0
  360. package/contributing/nextjs.md +410 -0
  361. package/package.json +75 -0
@@ -0,0 +1,161 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chalk from "chalk";
11
+ import * as cheerio from "cheerio";
12
+ import makeRequest from "../../utility/makeReq.js";
13
+ import puppeteer from "../../utility/puppeteerInstance.js";
14
+ import * as globalsUtil from "../../utility/globals.js";
15
+ import { checkNextJS } from "./checkNextJS.js";
16
+ import { checkNuxtJS } from "./checkNuxtJS.js";
17
+ import { checkSvelte } from "./checkSvelte.js";
18
+ import { checkVueJS } from "./checkVueJS.js";
19
+ import { checkAngularJS } from "./checkAngularJS.js";
20
+ import { checkReact } from "./checkReact.js";
21
+ /**
22
+ * Detects the front-end framework used in a webpage.
23
+ * It does this by iterating through all HTML tags and checking if any attribute name starts with "data-v-".
24
+ * It also checks for Nuxt.js by checking for "/_nuxt" paths in src or href attributes.
25
+ * It also checks for SvelteKit-specific attributes
26
+ * @param {string} url - The URL of the webpage to fetch and parse.
27
+ * @returns {Promise<{name: string, evidence: string}>} - A promise that resolves to an object with two properties:
28
+ * - name: The name of the detected front-end framework.
29
+ * - evidence: A string with the evidence of the detection, or an empty string if no front-end framework was detected.
30
+ */
31
+ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* () {
32
+ const log = (...args) => {
33
+ if (!globalsUtil.getQuiet())
34
+ console.log(...args);
35
+ };
36
+ log(chalk.cyan("[i] Detecting front-end framework"));
37
+ // get the page source. Drain the body immediately into a string — if we
38
+ // wait until after the puppeteer + downstream check* calls, the Response
39
+ // body gets invalidated (undici flips bodyUsed=true mid-flight when the
40
+ // response is held idle alongside other in-flight fetches).
41
+ const res = yield makeRequest(url, {});
42
+ let resBody = null;
43
+ if (res !== null) {
44
+ try {
45
+ resBody = yield res.text();
46
+ }
47
+ catch (err) {
48
+ log(chalk.yellow(`[!] Could not read fetch response body for ${url} (${(err === null || err === void 0 ? void 0 : err.message) || err}); using browser-rendered source only.`));
49
+ }
50
+ }
51
+ // get the page source in the browser (skipped in cache-only mode — no network allowed)
52
+ let pageSource = "";
53
+ const interceptedUrls = [];
54
+ if (!globalsUtil.getCacheOnly()) {
55
+ const browser = yield puppeteer.launch({
56
+ args: globalsUtil.getDisableSandbox() ? ["--no-sandbox", "--disable-setuid-sandbox"] : [],
57
+ });
58
+ const page = yield browser.newPage();
59
+ page.setDefaultNavigationTimeout(30000);
60
+ // Intercept all requests so framework-specific URL patterns (e.g. /_nuxt/, /_next/)
61
+ // can be used as a detection signal even when they don't appear in parsed HTML.
62
+ yield page.setRequestInterception(true);
63
+ page.on("request", (req) => {
64
+ interceptedUrls.push(req.url());
65
+ req.continue().catch(() => { });
66
+ });
67
+ try {
68
+ yield page.goto(url, {
69
+ waitUntil: "domcontentloaded",
70
+ timeout: 30000,
71
+ });
72
+ // Give client-side frameworks a brief window to render
73
+ yield page.waitForSelector("html", { timeout: 10000 }).catch(() => { });
74
+ yield new Promise((resolve) => setTimeout(resolve, 2000));
75
+ pageSource = yield page.content();
76
+ }
77
+ catch (err) {
78
+ log(chalk.yellow("[!] Page navigation/content failed, falling back to fetch response if available"));
79
+ }
80
+ finally {
81
+ yield browser.close().catch(() => { });
82
+ }
83
+ }
84
+ // if (res === null || res === undefined) {
85
+ // return;
86
+ // }
87
+ // const pageSource = await res.text();
88
+ // cheerio to parse the page source
89
+ const $ = cheerio.load(pageSource);
90
+ // there are two checks
91
+ // one is directly on the response the tool gets by making request with fetch ($)
92
+ // and the second one is by opening the page in browser, loading content, and then analyzing the page content ($res)
93
+ // check all technologies one by one
94
+ const result_checkNextJS = yield checkNextJS($);
95
+ const result_checkVueJS = yield checkVueJS($, url);
96
+ const result_checkSvelte = yield checkSvelte($);
97
+ const result_checkAngular = yield checkAngularJS($, url);
98
+ const result_checkReact = yield checkReact($, url);
99
+ // now, also check with the res response
100
+ let result_checkNextJS_res = { detected: false, evidence: "" };
101
+ let result_checkVueJS_res = { detected: false, evidence: "" };
102
+ let result_checkSvelte_res = { detected: false, evidence: "" };
103
+ let result_checkAngularJS_res = { detected: false, evidence: "" };
104
+ let result_checkReact_res = { detected: false, evidence: "" };
105
+ let $res;
106
+ // if network error was caused, then return
107
+ if (res === null) {
108
+ log(chalk.red("[!] Fetch request failed after retries"));
109
+ }
110
+ else if (resBody !== null) {
111
+ $res = cheerio.load(resBody);
112
+ result_checkNextJS_res = yield checkNextJS($res);
113
+ result_checkVueJS_res = yield checkVueJS($res, url);
114
+ result_checkSvelte_res = yield checkSvelte($res);
115
+ result_checkAngularJS_res = yield checkAngularJS($res, url);
116
+ result_checkReact_res = yield checkReact($res, url);
117
+ }
118
+ if (result_checkNextJS.detected === true || result_checkNextJS_res.detected === true) {
119
+ const evidence = result_checkNextJS.evidence !== "" ? result_checkNextJS.evidence : result_checkNextJS_res.evidence;
120
+ return { name: "next", evidence };
121
+ }
122
+ else if (result_checkVueJS.detected === true || result_checkVueJS_res.detected === true) {
123
+ log(chalk.green("[✓] Vue.js detected"));
124
+ log(chalk.cyan(`[i] Checking Nuxt.JS`), chalk.dim("(Nuxt.JS is built on Vue.js)"));
125
+ const result_checkNuxtJS = yield checkNuxtJS($);
126
+ const result_checkNuxtJS_res = $res ? yield checkNuxtJS($res) : { detected: false, evidence: "" };
127
+ if (result_checkNuxtJS.detected === true || result_checkNuxtJS_res.detected === true) {
128
+ const evidence = result_checkNuxtJS.evidence !== "" ? result_checkNuxtJS.evidence : result_checkNuxtJS_res.evidence;
129
+ return { name: "nuxt", evidence };
130
+ }
131
+ const evidence = result_checkVueJS.evidence !== "" ? result_checkVueJS.evidence : result_checkVueJS_res.evidence;
132
+ return { name: "vue", evidence };
133
+ }
134
+ else if (result_checkSvelte.detected === true || result_checkSvelte_res.detected === true) {
135
+ const evidence = result_checkSvelte.evidence !== "" ? result_checkSvelte.evidence : result_checkSvelte_res.evidence;
136
+ return { name: "svelte", evidence };
137
+ }
138
+ else if (result_checkAngular.detected === true || result_checkAngularJS_res.detected === true) {
139
+ const evidence = result_checkAngular.evidence !== "" ? result_checkAngular.evidence : result_checkAngularJS_res.evidence;
140
+ return { name: "angular", evidence };
141
+ }
142
+ else if (result_checkReact.detected === true || result_checkReact_res.detected === true) {
143
+ const evidence = result_checkReact.evidence !== "" ? result_checkReact.evidence : result_checkReact_res.evidence;
144
+ return { name: "react", evidence };
145
+ }
146
+ // Fallback: check URLs intercepted by Puppeteer during page load.
147
+ // Some sites load framework chunks dynamically via JavaScript rather than referencing
148
+ // them in static HTML attributes — those won't be caught by the HTML-based checks above.
149
+ // Matching on well-known path prefixes gives us a reliable signal without fetching extra files.
150
+ for (const interceptedUrl of interceptedUrls) {
151
+ if (interceptedUrl.includes("/_nuxt/")) {
152
+ return { name: "nuxt", evidence: `intercepted request: ${interceptedUrl}` };
153
+ }
154
+ if (interceptedUrl.includes("/_next/")) {
155
+ return { name: "next", evidence: `intercepted request: ${interceptedUrl}` };
156
+ }
157
+ }
158
+ return null;
159
+ });
160
+ export default frameworkDetect;
161
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chalk from "chalk";
11
+ import makeRequest from "../../utility/makeReq.js";
12
+ import * as cheerio from "cheerio";
13
+ import * as parser from "@babel/parser";
14
+ import _traverse from "@babel/traverse";
15
+ const traverse = _traverse.default;
16
+ import inquirer from "inquirer";
17
+ import CONFIG from "../../globalConfig.js";
18
+ import execFunc from "../../utility/runSandboxed.js";
19
+ import * as globals from "../../utility/globals.js";
20
+ const vue_runtimeJs = (url) => __awaiter(void 0, void 0, void 0, function* () {
21
+ const rootHtmlRes = yield makeRequest(url);
22
+ if (!rootHtmlRes) {
23
+ console.error(chalk.red(`[!] Failed to fetch ${url}`));
24
+ return [];
25
+ }
26
+ const rootHtml = yield rootHtmlRes.text();
27
+ let runtimeJsUrl;
28
+ const $ = cheerio.load(rootHtml);
29
+ $("script").each((_, el) => {
30
+ const attribs = el.attribs;
31
+ if (attribs) {
32
+ for (const [attrName, attrValue] of Object.entries(attribs)) {
33
+ // Match webpack runtime filename specifically: /runtime.<hex>.js
34
+ // Exclude things like /vue.runtime.2.7.20.min.js
35
+ if (attrName === "src" && attrValue.match(/\/runtime\.[a-f0-9]+\.js(?:$|\?)/)) {
36
+ runtimeJsUrl = attrValue;
37
+ }
38
+ }
39
+ }
40
+ });
41
+ if (!runtimeJsUrl) {
42
+ console.error(chalk.red("[!] No runtime JS file found in page source"));
43
+ console.log(chalk.magenta(CONFIG.notFoundMessage));
44
+ return [];
45
+ }
46
+ if (!runtimeJsUrl.startsWith("http")) {
47
+ runtimeJsUrl = new URL(runtimeJsUrl, url).href;
48
+ }
49
+ const runtimeJsRes = yield makeRequest(runtimeJsUrl);
50
+ if (!runtimeJsRes) {
51
+ console.error(chalk.red(`[!] Failed to fetch ${runtimeJsUrl}`));
52
+ return [];
53
+ }
54
+ const runtimeJsContent = yield runtimeJsRes.text();
55
+ const ast = parser.parse(runtimeJsContent, {
56
+ sourceType: "unambiguous",
57
+ plugins: ["jsx", "typescript"],
58
+ errorRecovery: true,
59
+ });
60
+ let scriptSrcFuncSource;
61
+ let publicPathObj;
62
+ let publicPathProp;
63
+ traverse(ast, {
64
+ AssignmentExpression(path) {
65
+ var _a, _b;
66
+ const { left, right } = path.node;
67
+ // Anchor on the always-present pattern: script.src = function(e){...}(e)
68
+ if (left.type === "MemberExpression" &&
69
+ left.object.type === "Identifier" &&
70
+ left.object.name === "script" &&
71
+ left.property.type === "Identifier" &&
72
+ left.property.name === "src" &&
73
+ right.type === "CallExpression" &&
74
+ right.callee.type === "FunctionExpression") {
75
+ const funcExpr = right.callee;
76
+ if (funcExpr.start !== null && funcExpr.end !== null) {
77
+ scriptSrcFuncSource = runtimeJsContent.slice(funcExpr.start, funcExpr.end);
78
+ }
79
+ // The public-path variable is whatever sits leftmost in the
80
+ // concatenation chain of the return statement. The webpack
81
+ // template emits any short <obj>.<prop> identifier here, not
82
+ // necessarily `c.p`.
83
+ const returnStmt = (_b = (_a = funcExpr.body) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.find((s) => s.type === "ReturnStatement");
84
+ if (returnStmt && returnStmt.argument) {
85
+ let cursor = returnStmt.argument;
86
+ while (cursor && cursor.type === "BinaryExpression") {
87
+ cursor = cursor.left;
88
+ }
89
+ if (cursor &&
90
+ cursor.type === "MemberExpression" &&
91
+ !cursor.computed &&
92
+ cursor.object.type === "Identifier" &&
93
+ cursor.property.type === "Identifier") {
94
+ publicPathObj = cursor.object.name;
95
+ publicPathProp = cursor.property.name;
96
+ }
97
+ }
98
+ }
99
+ },
100
+ });
101
+ if (!scriptSrcFuncSource) {
102
+ console.error(chalk.red("[!] Could not find chunk URL builder function in runtime JS"));
103
+ console.log(chalk.magenta(CONFIG.notFoundMessage));
104
+ return [];
105
+ }
106
+ console.log(chalk.green("[✓] Found chunk URL builder function"));
107
+ console.log(chalk.yellow(scriptSrcFuncSource));
108
+ if (publicPathObj && publicPathProp) {
109
+ console.log(chalk.green(`[✓] Public-path variable detected: ${publicPathObj}.${publicPathProp}`));
110
+ }
111
+ else {
112
+ console.error(chalk.yellow("[!] Could not detect public-path variable; will resolve chunk paths against runtime.js directory regardless"));
113
+ }
114
+ if (!globals.getYes()) {
115
+ const { confirmed } = yield inquirer.prompt([
116
+ {
117
+ type: "confirm",
118
+ name: "confirmed",
119
+ message: "Is this the correct function?",
120
+ default: true,
121
+ },
122
+ ]);
123
+ if (!confirmed) {
124
+ console.error(chalk.red("[!] Not executing function."));
125
+ return [];
126
+ }
127
+ }
128
+ console.log(chalk.cyan("[i] Proceeding with the selected function to fetch files"));
129
+ // Stub the public-path variable with empty string so the function returns
130
+ // just the relative chunk path (e.g. "pages/index.<hash>.js"). The real
131
+ // public path value isn't needed -- chunks live alongside runtime.js, so
132
+ // resolving the relative path against the runtime.js directory gives the
133
+ // correct absolute URL.
134
+ const stubDecl = publicPathObj && publicPathProp ? `var ${publicPathObj} = { ${publicPathProp}: "" };` : "";
135
+ const urlBuilderFunc = `(() => { ${stubDecl} return (${scriptSrcFuncSource}); })()`;
136
+ const js_paths = [];
137
+ try {
138
+ const integers = scriptSrcFuncSource.match(/\d+/g);
139
+ if (integers) {
140
+ for (const i of integers) {
141
+ const output = execFunc(urlBuilderFunc, parseInt(i));
142
+ if (output !== null && output !== undefined && !String(output).includes("undefined")) {
143
+ js_paths.push(String(output));
144
+ }
145
+ }
146
+ }
147
+ }
148
+ catch (err) {
149
+ console.error(chalk.red("Unsafe or invalid code:", err instanceof Error ? err.message : String(err)));
150
+ return [];
151
+ }
152
+ const unique_paths = [...new Set(js_paths)];
153
+ if (unique_paths.length > 0) {
154
+ console.log(chalk.green(`[✓] Found ${unique_paths.length} JS chunks`));
155
+ }
156
+ const runtimeDir = runtimeJsUrl.split("/").slice(0, -1).join("/") + "/";
157
+ const discovered_urls = [];
158
+ for (const js_path of unique_paths) {
159
+ if (js_path.startsWith("http")) {
160
+ discovered_urls.push(js_path);
161
+ }
162
+ else {
163
+ discovered_urls.push(new URL(js_path, runtimeDir).href);
164
+ }
165
+ }
166
+ return discovered_urls;
167
+ });
168
+ export default vue_runtimeJs;
169
+ //# sourceMappingURL=vue_RuntimeJs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue_RuntimeJs.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_RuntimeJs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import makeRequest from "../../utility/makeReq.js";
11
+ import parser from "@babel/parser";
12
+ import _traverse from "@babel/traverse";
13
+ import * as cheerio from "cheerio";
14
+ import chalk from "chalk";
15
+ const traverse = _traverse.default;
16
+ const vue_singleJsFileOnHome = (url) => __awaiter(void 0, void 0, void 0, function* () {
17
+ let jsFilesFound = [];
18
+ // first, get the home page content
19
+ const req = yield makeRequest(url, {});
20
+ if (req == null) {
21
+ console.error(chalk.red(`Failed to fetch ${url}`));
22
+ return jsFilesFound;
23
+ }
24
+ const homePageContent = yield req.text();
25
+ // load the home page content into cheerio
26
+ const $ = cheerio.load(homePageContent);
27
+ // go through the home page HTML, and find the
28
+ // count of <script> tags that loads external JS
29
+ let externalScriptTagCount = 0;
30
+ let jsUrl = "";
31
+ $("script").each((_, el) => {
32
+ if ($(el).attr("src")) {
33
+ externalScriptTagCount++;
34
+ jsUrl = $(el).attr("src");
35
+ }
36
+ });
37
+ // if the count is 1, then it's a single JS file
38
+ if (externalScriptTagCount !== 1) {
39
+ return jsFilesFound;
40
+ }
41
+ // if the count is 1, then it's a single JS file
42
+ console.log(chalk.green("[✓] Single JS file detected"));
43
+ // add that JS file to the list
44
+ jsFilesFound.push(new URL(jsUrl, url).href);
45
+ // print the warning
46
+ console.error(chalk.yellow("[!] This method is MEMORY INTENSIVE. Underpowered devices may freeze"));
47
+ // resolve the URL
48
+ if (jsUrl.startsWith("/") || jsUrl.startsWith("./") || jsUrl.startsWith("../")) {
49
+ jsUrl = new URL(jsUrl, url).href;
50
+ }
51
+ // get the contents of that JS file
52
+ const jsReq = yield makeRequest(jsUrl);
53
+ const jsContent = yield jsReq.text();
54
+ // parse the JS file
55
+ const ast = parser.parse(jsContent, {
56
+ sourceType: "unambiguous",
57
+ plugins: ["jsx", "typescript"],
58
+ errorRecovery: true,
59
+ });
60
+ // traverse the AST
61
+ let initialFoundJsPaths = [];
62
+ traverse(ast, {
63
+ ArrayExpression(path) {
64
+ const elements = path.node.elements;
65
+ if (!elements)
66
+ return;
67
+ const currentJsFiles = [];
68
+ let hasJs = false;
69
+ let isPureJsCssList = true;
70
+ for (const element of elements) {
71
+ // element can be null in sparse arrays
72
+ if (!element || element.type !== "StringLiteral") {
73
+ isPureJsCssList = false;
74
+ break;
75
+ }
76
+ const value = element.value;
77
+ if (value.endsWith(".js")) {
78
+ hasJs = true;
79
+ currentJsFiles.push(value);
80
+ }
81
+ else if (!value.endsWith(".css")) {
82
+ // If it's not .js and not .css, it's not the list we're looking for
83
+ isPureJsCssList = false;
84
+ break;
85
+ }
86
+ }
87
+ if (isPureJsCssList && hasJs) {
88
+ initialFoundJsPaths.push(...currentJsFiles);
89
+ }
90
+ },
91
+ });
92
+ // now that paths are found, iterate through those, and construct the full URLs
93
+ for (const path of initialFoundJsPaths) {
94
+ if (!path.endsWith(".js"))
95
+ continue;
96
+ const fullUrl = new URL(path, url).href;
97
+ jsFilesFound.push(fullUrl);
98
+ }
99
+ return jsFilesFound;
100
+ });
101
+ export default vue_singleJsFileOnHome;
102
+ //# sourceMappingURL=vue_SingleJsFileOnHome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue_SingleJsFileOnHome.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_SingleJsFileOnHome.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AAEnC,MAAM,sBAAsB,GAAG,CAAO,GAAW,EAAE,EAAE;IACjD,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,mCAAmC;IACnC,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAEzC,0CAA0C;IAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAExC,8CAA8C;IAC9C,gDAAgD;IAChD,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,EAAE,CAAC;IAEf,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,sBAAsB,EAAE,CAAC;YACzB,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,gDAAgD;IAChD,IAAI,sBAAsB,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,gDAAgD;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAExD,+BAA+B;IAC/B,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5C,oBAAoB;IACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,sEAAsE,CAAC,CAAC,CAAC;IAEpG,kBAAkB;IAClB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7E,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,mCAAmC;IACnC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAErC,oBAAoB;IACpB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;QAChC,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;QAC9B,aAAa,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,mBAAmB;IACnB,IAAI,mBAAmB,GAAa,EAAE,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE;QACV,eAAe,CAAC,IAAI;YAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,eAAe,GAAG,IAAI,CAAC;YAE3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC7B,uCAAuC;gBACvC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBAC/C,eAAe,GAAG,KAAK,CAAC;oBACxB,MAAM;gBACV,CAAC;gBAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxB,KAAK,GAAG,IAAI,CAAC;oBACb,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;qBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,oEAAoE;oBACpE,eAAe,GAAG,KAAK,CAAC;oBACxB,MAAM;gBACV,CAAC;YACL,CAAC;YAED,IAAI,eAAe,IAAI,KAAK,EAAE,CAAC;gBAC3B,mBAAmB,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;YAChD,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,+EAA+E;IAC/E,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAEpC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;QACxC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC,CAAA,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,82 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chalk from "chalk";
11
+ import vue_pageSrc from "./vue_pageSrc.js";
12
+ import vue_runtimeJs from "./vue_RuntimeJs.js";
13
+ import vue_singleJsFileOnHome from "./vue_SingleJsFileOnHome.js";
14
+ import vue_severalJsFilesHome from "./vue_severalJsFilesHome.js";
15
+ import vue_jsImports from "./vue_jsImports.js";
16
+ import vue_reconstructSourceMaps from "./vue_reconstructSourceMaps.js";
17
+ import vue_getClientSidePaths from "./vue_getClientSidePaths.js";
18
+ import vue_viteMapDeps from "./vue_viteMapDeps.js";
19
+ import vue_stringJsFiles from "./vue_stringJsFiles.js";
20
+ /**
21
+ * Runs the full Vue.js JS-file discovery pipeline against a single URL.
22
+ *
23
+ * Combines all the per-URL discovery techniques (page source script tags,
24
+ * runtime.js chunks, single/several JS files on home, import statements,
25
+ * source-map reconstruction) into one reusable flow, and also surfaces the
26
+ * client-side paths found in the discovered files so callers can recurse.
27
+ *
28
+ * @param onFilesDiscovered Called with each batch of newly found URLs so the
29
+ * caller can start downloading them immediately rather than waiting for the
30
+ * full pipeline to finish.
31
+ */
32
+ const vue_discoverJsFiles = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...args_1], void 0, function* (url, maxJsSizeMb = 2, onFilesDiscovered) {
33
+ let jsFiles = [];
34
+ const emit = (files) => {
35
+ jsFiles.push(...files);
36
+ if (files.length > 0 && onFilesDiscovered) {
37
+ onFilesDiscovered(files.map((f) => (f.startsWith("//") ? "https:" + f : f)));
38
+ }
39
+ };
40
+ // first, get all the JS files from the page source
41
+ emit(yield vue_pageSrc(url));
42
+ // method 1: through runtime.<hash>.js
43
+ emit(yield vue_runtimeJs(url));
44
+ // single JS file on the page (typically dev-mode)
45
+ const fromSingleJs = yield vue_singleJsFileOnHome(url);
46
+ emit(fromSingleJs);
47
+ if (fromSingleJs.length > 0) {
48
+ console.log(chalk.green(`[✓] Found ${fromSingleJs.length} files from the single JS file on home`));
49
+ }
50
+ // several JS files referenced directly on the page
51
+ emit(yield vue_severalJsFilesHome(url));
52
+ // scan page-loaded JS files for Vite's __vite__mapDeps chunk manifest
53
+ const fromViteMapDeps = yield vue_viteMapDeps(jsFiles, maxJsSizeMb);
54
+ emit(fromViteMapDeps);
55
+ if (fromViteMapDeps.length > 0) {
56
+ console.log(chalk.green(`[✓] Found ${fromViteMapDeps.length} files from __vite__mapDeps`));
57
+ }
58
+ // walk the import graph of everything found so far
59
+ const fromImports = yield vue_jsImports(url, jsFiles, maxJsSizeMb);
60
+ emit(fromImports);
61
+ if (fromImports.length > 0) {
62
+ console.log(chalk.green(`[✓] Found ${fromImports.length} files from import statements`));
63
+ }
64
+ // scan string literals inside known JS files for .js references
65
+ const fromStringRefs = yield vue_stringJsFiles(jsFiles, maxJsSizeMb);
66
+ emit(fromStringRefs);
67
+ if (fromStringRefs.length > 0) {
68
+ console.log(chalk.green(`[✓] Found ${fromStringRefs.length} files from string literal JS references`));
69
+ }
70
+ // reconstruct sourceMappingURL references
71
+ const fromSourceMaps = yield vue_reconstructSourceMaps(url, jsFiles);
72
+ emit(fromSourceMaps);
73
+ if (fromSourceMaps.length > 0) {
74
+ console.log(chalk.green(`[✓] Found ${fromSourceMaps.length} files from reconstructing source maps`));
75
+ }
76
+ jsFiles = [...new Set(jsFiles)].map((f) => (f.startsWith("//") ? "https:" + f : f));
77
+ // surface client-side paths so the caller can recurse into them
78
+ const clientSidePaths = yield vue_getClientSidePaths(url, jsFiles, maxJsSizeMb);
79
+ return { jsFiles, clientSidePaths: [...new Set(clientSidePaths)] };
80
+ });
81
+ export default vue_discoverJsFiles;
82
+ //# sourceMappingURL=vue_discoverJsFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue_discoverJsFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_discoverJsFiles.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AACjE,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AACjE,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,yBAAyB,MAAM,gCAAgC,CAAC;AACvE,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AACjE,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAOvD;;;;;;;;;;;GAWG;AACH,MAAM,mBAAmB,GAAG,mBAIG,EAAE,0DAH7B,GAAW,EACX,cAAsB,CAAC,EACvB,iBAA6C;IAE7C,IAAI,OAAO,GAAa,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,CAAC,KAAe,EAAE,EAAE;QAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACvB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,EAAE,CAAC;YACxC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;IACL,CAAC,CAAC;IAEF,mDAAmD;IACnD,IAAI,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7B,sCAAsC;IACtC,IAAI,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAE/B,kDAAkD;IAClD,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY,CAAC,CAAC;IACnB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,YAAY,CAAC,MAAM,wCAAwC,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;IAExC,sEAAsE;IACtE,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACpE,IAAI,CAAC,eAAe,CAAC,CAAC;IACtB,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,eAAe,CAAC,MAAM,6BAA6B,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,mDAAmD;IACnD,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,WAAW,CAAC,MAAM,+BAA+B,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,gEAAgE;IAChE,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrE,IAAI,CAAC,cAAc,CAAC,CAAC;IACrB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,cAAc,CAAC,MAAM,0CAA0C,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,0CAA0C;IAC1C,MAAM,cAAc,GAAG,MAAM,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,cAAc,CAAC,CAAC;IACrB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,cAAc,CAAC,MAAM,wCAAwC,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,gEAAgE;IAChE,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC,CAAA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}