@js-recon/js-recon 1.4.4 → 2.0.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-sync/sync.sh +1 -1
- package/.github/workflows/build-and-prettify.yaml +49 -19
- package/.github/workflows/codeql.yml +33 -0
- package/.github/workflows/exploit-smoke-test.yaml +160 -0
- package/.github/workflows/framework-detection-smoke-test.yaml +135 -0
- package/.github/workflows/plumber.yml +20 -0
- package/.github/workflows/promote-js-recon.yml +5 -3
- package/.github/workflows/publish-js-recon.yml +6 -1
- package/.github/workflows/rules-smoke-test.yaml +13 -5
- package/.nvmrc +1 -0
- package/.plumber.yaml +151 -0
- package/CHANGELOG.md +35 -0
- package/CONTRIBUTING.md +32 -0
- package/Dockerfile +1 -0
- package/README.md +3 -2
- package/SECURITY.md +1 -1
- package/build/analyze/engine/astEngine.js +10 -9
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/engine/csMastSEngine.js +6 -6
- package/build/analyze/engine/csMastSEngine.js.map +1 -1
- package/build/analyze/engine/index.js +1 -1
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/engine/requestEngine.js +6 -6
- package/build/analyze/engine/requestEngine.js.map +1 -1
- package/build/analyze/helpers/determineCompatibleVersion.js +70 -0
- package/build/analyze/helpers/determineCompatibleVersion.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +9 -3
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
- package/build/analyze/helpers/initRules.js +9 -9
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/analyze/helpers/outputHelper.js +3 -3
- package/build/analyze/helpers/outputHelper.js.map +1 -1
- package/build/analyze/helpers/schemas.js +1 -0
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/helpers/validate.js +9 -5
- package/build/analyze/helpers/validate.js.map +1 -1
- package/build/analyze/index.js +26 -16
- package/build/analyze/index.js.map +1 -1
- package/build/cliProgram.js +710 -0
- package/build/cliProgram.js.map +1 -0
- package/build/completion/index.js +247 -382
- package/build/completion/index.js.map +1 -1
- package/build/completion/introspect.js +17 -0
- package/build/completion/introspect.js.map +1 -0
- package/build/config/applicationConfig.js +3 -2
- package/build/config/applicationConfig.js.map +1 -1
- package/build/cs_mast/index.js +18 -17
- package/build/cs_mast/index.js.map +1 -1
- package/build/endpoints/gen_report/gen_json.js +2 -2
- package/build/endpoints/gen_report/gen_json.js.map +1 -1
- package/build/endpoints/gen_report/utility/iterate_n_store.js +1 -1
- package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -1
- package/build/endpoints/index.js +12 -12
- package/build/endpoints/index.js.map +1 -1
- package/build/endpoints/next_js/client_jsFilesHref.js +3 -3
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
- package/build/endpoints/next_js/client_jsonParse.js +4 -4
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +6 -6
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/endpoints/next_js/client_subsequentRequests.js +5 -5
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
- package/build/exploit/angular/cve-2026-68945.js +61 -0
- package/build/exploit/angular/cve-2026-68945.js.map +1 -0
- package/build/exploit/index.js +60 -0
- package/build/exploit/index.js.map +1 -0
- package/build/exploit/next/cve-2025-29927.js +65 -0
- package/build/exploit/next/cve-2025-29927.js.map +1 -0
- package/build/exploit/next/cve-2026-64645.js +51 -0
- package/build/exploit/next/cve-2026-64645.js.map +1 -0
- package/build/exploit/nuxt/cve-2026-71315.js +47 -0
- package/build/exploit/nuxt/cve-2026-71315.js.map +1 -0
- package/build/exploit/nuxt/cve-2026-71320.js +114 -0
- package/build/exploit/nuxt/cve-2026-71320.js.map +1 -0
- package/build/exploit/react/cve-2025-55182.js +116 -0
- package/build/exploit/react/cve-2025-55182.js.map +1 -0
- package/build/exploit/registry/cveRegistry.js +115 -0
- package/build/exploit/registry/cveRegistry.js.map +1 -0
- package/build/exploit/types.js +2 -0
- package/build/exploit/types.js.map +1 -0
- package/build/exploit/utility/compareResponses.js +29 -0
- package/build/exploit/utility/compareResponses.js.map +1 -0
- package/build/exploit/utility/outputHelper.js +22 -0
- package/build/exploit/utility/outputHelper.js.map +1 -0
- package/build/exploit/utility/rawRequest.js +54 -0
- package/build/exploit/utility/rawRequest.js.map +1 -0
- package/build/exploit/utility/sandboxRce.js +49 -0
- package/build/exploit/utility/sandboxRce.js.map +1 -0
- package/build/exploit/utility/toEngineOutput.js +28 -0
- package/build/exploit/utility/toEngineOutput.js.map +1 -0
- package/build/exploit/utility/wsClient.js +78 -0
- package/build/exploit/utility/wsClient.js.map +1 -0
- package/build/exploit/vite/cve-2025-30208.js +44 -0
- package/build/exploit/vite/cve-2025-30208.js.map +1 -0
- package/build/exploit/vite/cve-2026-39363.js +60 -0
- package/build/exploit/vite/cve-2026-39363.js.map +1 -0
- package/build/fingerprint/index.js +3 -2
- package/build/fingerprint/index.js.map +1 -1
- package/build/globalConfig.js +2 -2
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +5 -596
- package/build/index.js.map +1 -1
- package/build/lazyLoad/angular/angular_getFromPageSource.js +3 -3
- package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +14 -11
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +5 -1
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/downloadResponse.js +1 -0
- package/build/lazyLoad/downloadResponse.js.map +1 -1
- package/build/lazyLoad/generic/generic_crawlPages.js +186 -0
- package/build/lazyLoad/generic/generic_crawlPages.js.map +1 -0
- package/build/lazyLoad/generic/generic_downloadFiles.js +81 -0
- package/build/lazyLoad/generic/generic_downloadFiles.js.map +1 -0
- package/build/lazyLoad/generic/generic_extractLinks.js +79 -0
- package/build/lazyLoad/generic/generic_extractLinks.js.map +1 -0
- package/build/lazyLoad/generic/generic_getScriptTags.js +152 -0
- package/build/lazyLoad/generic/generic_getScriptTags.js.map +1 -0
- package/build/lazyLoad/generic/generic_importMapDiscovery.js +87 -0
- package/build/lazyLoad/generic/generic_importMapDiscovery.js.map +1 -0
- package/build/lazyLoad/generic/generic_resolveScope.js +61 -0
- package/build/lazyLoad/generic/generic_resolveScope.js.map +1 -0
- package/build/lazyLoad/generic/generic_scanAttributesForJs.js +122 -0
- package/build/lazyLoad/generic/generic_scanAttributesForJs.js.map +1 -0
- package/build/lazyLoad/generic/generic_stringsDiscovery.js +103 -0
- package/build/lazyLoad/generic/generic_stringsDiscovery.js.map +1 -0
- package/build/lazyLoad/generic/generic_webpackChunkPaths.js +56 -0
- package/build/lazyLoad/generic/generic_webpackChunkPaths.js.map +1 -0
- package/build/lazyLoad/globals.js +31 -0
- package/build/lazyLoad/globals.js.map +1 -1
- package/build/lazyLoad/index.js +129 -66
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/methodFilter.js +2 -0
- package/build/lazyLoad/methodFilter.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +38 -14
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetJSScript.js +3 -3
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +4 -4
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +13 -11
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +7 -6
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +1 -1
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -1
- package/build/lazyLoad/next_js/next_buildId.js +2 -2
- package/build/lazyLoad/next_js/next_buildId.js.map +1 -1
- package/build/lazyLoad/next_js/next_getClientSidePaths.js +2 -2
- package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/next_js/next_parseLayoutJs.js +6 -6
- package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
- package/build/lazyLoad/next_js/next_routerStateForge.js +341 -0
- package/build/lazyLoad/next_js/next_routerStateForge.js.map +1 -0
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +1 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_serverActionIdScan.js +77 -0
- package/build/lazyLoad/next_js/next_serverActionIdScan.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +15 -13
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js +2 -2
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -3
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +2 -2
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js +10 -202
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
- package/build/lazyLoad/researchUtils.js +15 -0
- package/build/lazyLoad/researchUtils.js.map +1 -0
- package/build/lazyLoad/shared/webpackChunkParsers.js +218 -0
- package/build/lazyLoad/shared/webpackChunkParsers.js.map +1 -0
- package/build/lazyLoad/stagnation/stagnationMonitor.js +63 -0
- package/build/lazyLoad/stagnation/stagnationMonitor.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +5 -5
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getVersionJson.js +2 -2
- package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +6 -6
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +2 -2
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkAngularJS.js +1 -1
- package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
- package/build/lazyLoad/techDetect/checkNuxtJS.js +3 -3
- package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -1
- package/build/lazyLoad/techDetect/checkSvelte.js +0 -1
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/checkVueJS.js +6 -6
- package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +13 -1
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -2
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +12 -10
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +2 -2
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +2 -2
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js +3 -3
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
- package/build/load/index.js +8 -7
- package/build/load/index.js.map +1 -1
- package/build/map/angular_js/getAngularConnections.js +6 -6
- package/build/map/angular_js/getAngularConnections.js.map +1 -1
- package/build/map/graphql/resolveGraphql.js +6 -6
- package/build/map/graphql/resolveGraphql.js.map +1 -1
- package/build/map/index.js +17 -17
- package/build/map/index.js.map +1 -1
- package/build/map/interactive-mode/commandHandler.js +278 -0
- package/build/map/interactive-mode/commandHandler.js.map +1 -0
- package/build/map/interactive-mode/commandHelpers.js +189 -0
- package/build/map/interactive-mode/commandHelpers.js.map +1 -0
- package/build/map/interactive-mode/esqueryGen.js.map +1 -0
- package/build/map/interactive-mode/helpMenu.js +11 -0
- package/build/map/interactive-mode/helpMenu.js.map +1 -0
- package/build/map/interactive-mode/inputPatch.js.map +1 -0
- package/build/map/interactive-mode/interactive.js +71 -0
- package/build/map/interactive-mode/interactive.js.map +1 -0
- package/build/map/interactive-mode/keybindings.js.map +1 -0
- package/build/map/interactive-mode/printer.js.map +1 -0
- package/build/map/interactive-mode/ui.js.map +1 -0
- package/build/map/next_js/getAxiosInstances.js +5 -5
- package/build/map/next_js/getAxiosInstances.js.map +1 -1
- package/build/map/next_js/getExports.js +4 -4
- package/build/map/next_js/getExports.js.map +1 -1
- package/build/map/next_js/getFetchInstances.js +10 -10
- package/build/map/next_js/getFetchInstances.js.map +1 -1
- package/build/map/next_js/getTurbopackConnections.js +8 -8
- package/build/map/next_js/getTurbopackConnections.js.map +1 -1
- package/build/map/next_js/getWebpackConnections.js +27 -16
- package/build/map/next_js/getWebpackConnections.js.map +1 -1
- package/build/map/next_js/interactive.js +3 -65
- package/build/map/next_js/interactive.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHandler.js +38 -290
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +0 -184
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -1
- package/build/map/next_js/interactive_helpers/helpMenu.js +2 -10
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/next_js/resolveAxios.js +6 -6
- package/build/map/next_js/resolveAxios.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +4 -4
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -2
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +5 -5
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +10 -10
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +13 -9
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +12 -8
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +12 -8
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +11 -11
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +16 -16
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
- package/build/map/next_js/resolveFetch.js +23 -23
- package/build/map/next_js/resolveFetch.js.map +1 -1
- package/build/map/next_js/resolveNewRequest.js +10 -10
- package/build/map/next_js/resolveNewRequest.js.map +1 -1
- package/build/map/next_js/resolveServerActions.js +4 -4
- package/build/map/next_js/resolveServerActions.js.map +1 -1
- package/build/map/next_js/utils.js +8 -2
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +21 -14
- package/build/map/react_js/getReactConnections.js.map +1 -1
- package/build/map/svelte_js/interactive.js +3 -54
- package/build/map/svelte_js/interactive.js.map +1 -1
- package/build/map/vue_js/getViteConnections.js +23 -16
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/interactive.js +3 -63
- package/build/map/vue_js/interactive.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/commandHandler.js +34 -283
- package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/helpMenu.js +2 -10
- package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/vue_js/taint_utils.js +1 -1
- package/build/map/vue_js/taint_utils.js.map +1 -1
- package/build/map/vue_js/vue_resolveFetch.js +12 -12
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +18 -18
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
- package/build/map/vue_js/vue_resolveXhr.js +11 -11
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
- package/build/mcp/chatOneShot.js +7 -7
- package/build/mcp/chatOneShot.js.map +1 -1
- package/build/mcp/claudeCodeCreds.js +5 -5
- package/build/mcp/claudeCodeCreds.js.map +1 -1
- package/build/mcp/cli.js +36 -35
- package/build/mcp/cli.js.map +1 -1
- package/build/mcp/config.js +4 -4
- package/build/mcp/config.js.map +1 -1
- package/build/mcp/index.js +7 -7
- package/build/mcp/index.js.map +1 -1
- package/build/mcp/mcpServer.js +3 -2
- package/build/mcp/mcpServer.js.map +1 -1
- package/build/mcp/skills.js +1 -0
- package/build/mcp/skills.js.map +1 -1
- package/build/mcp/tools.js +5 -4
- package/build/mcp/tools.js.map +1 -1
- package/build/proxy/detectBlockedResponse.js +2 -0
- package/build/proxy/detectBlockedResponse.js.map +1 -1
- package/build/proxy/index.js +3 -3
- package/build/proxy/index.js.map +1 -1
- package/build/refactor/index.js +83 -79
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/next/index.js +69 -26
- package/build/refactor/next/index.js.map +1 -1
- package/build/refactor/next/transform.js +11 -4
- package/build/refactor/next/transform.js.map +1 -1
- package/build/refactor/next/validator.js +7 -7
- package/build/refactor/next/validator.js.map +1 -1
- package/build/refactor/react/index.js +13 -13
- package/build/refactor/react/index.js.map +1 -1
- package/build/refactor/react/validator.js +7 -7
- package/build/refactor/react/validator.js.map +1 -1
- package/build/refactor/react-vite/index.js +3 -3
- package/build/refactor/react-vite/index.js.map +1 -1
- package/build/refactor/remote/hf-client.js +1 -0
- package/build/refactor/remote/hf-client.js.map +1 -1
- package/build/refactor/remote/version-detect.js +12 -12
- package/build/refactor/remote/version-detect.js.map +1 -1
- package/build/refactor/vue/index.js +6 -6
- package/build/refactor/vue/index.js.map +1 -1
- package/build/refactor/vue/vite.js +6 -6
- package/build/refactor/vue/vite.js.map +1 -1
- package/build/report/index.js +30 -8
- package/build/report/index.js.map +1 -1
- package/build/report/swaggerJacker.js +63 -0
- package/build/report/swaggerJacker.js.map +1 -0
- package/build/report/utility/genHtml.js +7 -7
- package/build/report/utility/genHtml.js.map +1 -1
- package/build/report/utility/populateDb/populateAnalysisFindings.js +2 -2
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
- package/build/report/utility/populateDb/populateEndpoints.js +3 -3
- package/build/report/utility/populateDb/populateEndpoints.js.map +1 -1
- package/build/report/utility/populateDb/populateMappedJson.js +2 -2
- package/build/report/utility/populateDb/populateMappedJson.js.map +1 -1
- package/build/report/utility/populateDb/populateMappedOpenapi.js +3 -3
- package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -1
- package/build/run/bundler-detect.js +45 -9
- package/build/run/bundler-detect.js.map +1 -1
- package/build/run/dashboard/dashboardHtml.js +150 -0
- package/build/run/dashboard/dashboardHtml.js.map +1 -0
- package/build/run/dashboard/fsBrowser.js +43 -0
- package/build/run/dashboard/fsBrowser.js.map +1 -0
- package/build/run/dashboard/server.js +123 -0
- package/build/run/dashboard/server.js.map +1 -0
- package/build/run/dashboard/state.js +97 -0
- package/build/run/dashboard/state.js.map +1 -0
- package/build/run/index.js +177 -110
- package/build/run/index.js.map +1 -1
- package/build/run/interruptHandler.js +18 -0
- package/build/run/interruptHandler.js.map +1 -1
- package/build/sourcemaps/index.js +7 -6
- package/build/sourcemaps/index.js.map +1 -1
- package/build/strings/index.js +27 -24
- package/build/strings/index.js.map +1 -1
- package/build/strings/openapi.js +4 -4
- package/build/strings/openapi.js.map +1 -1
- package/build/strings/permutate.js +4 -4
- package/build/strings/permutate.js.map +1 -1
- package/build/strings/secrets.js +1 -0
- package/build/strings/secrets.js.map +1 -1
- package/build/strings/trufflehog.js +66 -19
- package/build/strings/trufflehog.js.map +1 -1
- package/build/strings/trufflehogConfig.js +36 -0
- package/build/strings/trufflehogConfig.js.map +1 -0
- package/build/strings/trufflehogDownload.js +115 -0
- package/build/strings/trufflehogDownload.js.map +1 -0
- package/build/utility/ai.js +33 -4
- package/build/utility/ai.js.map +1 -1
- package/build/utility/banner.js +4 -3
- package/build/utility/banner.js.map +1 -1
- package/build/utility/configureSandbox.js +2 -2
- package/build/utility/configureSandbox.js.map +1 -1
- package/build/utility/globals.js +19 -11
- package/build/utility/globals.js.map +1 -1
- package/build/utility/heap.js +2 -1
- package/build/utility/heap.js.map +1 -1
- package/build/utility/makeReq.js +1 -1
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +2 -2
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/printMsg.js +53 -0
- package/build/utility/printMsg.js.map +1 -0
- package/build/utility/progressLog.js +4 -3
- package/build/utility/progressLog.js.map +1 -1
- package/build/utility/resolvePath.js +2 -1
- package/build/utility/resolvePath.js.map +1 -1
- package/build/utility/ruleVersionMap.js +73 -0
- package/build/utility/ruleVersionMap.js.map +1 -0
- package/contributing/testing.md +106 -0
- package/eslint.config.js +24 -0
- package/package.json +22 -5
- package/scripts/exploit-smoke-test.js +82 -0
- package/scripts/framework-detect-smoke-test.js +64 -0
- package/scripts/postinstall-completion.mjs +40 -0
- package/scripts/smoke-test.js +12 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js +0 -98
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +0 -1
- package/build/map/next_js/interactive_helpers/esqueryGen.js.map +0 -1
- package/build/map/next_js/interactive_helpers/inputPatch.js.map +0 -1
- package/build/map/next_js/interactive_helpers/keybindings.js.map +0 -1
- package/build/map/next_js/interactive_helpers/printer.js.map +0 -1
- package/build/map/next_js/interactive_helpers/ui.js.map +0 -1
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/esqueryGen.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/inputPatch.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/keybindings.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/printer.js +0 -0
- /package/build/map/{next_js/interactive_helpers → interactive-mode}/ui.js +0 -0
|
@@ -0,0 +1,77 @@
|
|
|
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 fs from "fs";
|
|
11
|
+
import path from "path";
|
|
12
|
+
/**
|
|
13
|
+
* Matches `createServerReference("<id>", ...)` (and its minified sequence-expression form,
|
|
14
|
+
* `(0, X.createServerReference)("<id>", ...)`) directly in raw chunk text. The property name
|
|
15
|
+
* `createServerReference` itself survives minification (it's accessed off the
|
|
16
|
+
* react-server-dom-webpack runtime import, not a local declaration a minifier would rename),
|
|
17
|
+
* which is also why `map/next_js/resolveServerActions.ts` pre-filters chunks with a substring
|
|
18
|
+
* check on the same string before running its AST-based resolution.
|
|
19
|
+
*/
|
|
20
|
+
const ACTION_ID_CALL_PATTERN = /createServerReference\s*\)?\s*\(\s*["'`]([0-9a-f]{40,})["'`]/gi;
|
|
21
|
+
/**
|
|
22
|
+
* Extracts Server Action IDs referenced via `createServerReference(...)` in a chunk's raw
|
|
23
|
+
* text. Mirrors the ID-format validation in `map/next_js/resolveServerActions.ts`
|
|
24
|
+
* (`/^[0-9a-f]{40,}$/i`), but works on unparsed text rather than a Babel AST — a lightweight
|
|
25
|
+
* signal available at `lazyload` time, before `map`'s full AST-based resolution runs.
|
|
26
|
+
*/
|
|
27
|
+
export const extractServerActionIds = (chunkContent) => {
|
|
28
|
+
const ids = [...chunkContent.matchAll(ACTION_ID_CALL_PATTERN)].map((m) => m[1].toLowerCase());
|
|
29
|
+
return [...new Set(ids)];
|
|
30
|
+
};
|
|
31
|
+
const walkJsFiles = (dir) => {
|
|
32
|
+
if (!fs.existsSync(dir))
|
|
33
|
+
return [];
|
|
34
|
+
const results = [];
|
|
35
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
36
|
+
const fullPath = path.join(dir, entry.name);
|
|
37
|
+
if (entry.isDirectory()) {
|
|
38
|
+
results.push(...walkJsFiles(fullPath));
|
|
39
|
+
}
|
|
40
|
+
else if (entry.isFile() && fullPath.endsWith(".js")) {
|
|
41
|
+
results.push(fullPath);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return results;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Walks every downloaded `.js` chunk under `scanDir` and records any Server Action ID
|
|
48
|
+
* referenced in it. This is endpoint enumeration (attack-surface disclosure) only — no
|
|
49
|
+
* action is invoked. A discovered ID is worth cross-referencing against which pages the
|
|
50
|
+
* crawl could actually reach unauthenticated: an ID present in a chunk for a page the crawl
|
|
51
|
+
* never reached without a session is itself a disclosure signal (see
|
|
52
|
+
* js-recon-internal-docs#157 / CVE-2026-64643 for the historical case this generalizes).
|
|
53
|
+
*/
|
|
54
|
+
const next_serverActionIdScan = (scanDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
55
|
+
const actionIdsByFile = {};
|
|
56
|
+
const allActionIds = new Set();
|
|
57
|
+
for (const filePath of walkJsFiles(scanDir)) {
|
|
58
|
+
let content;
|
|
59
|
+
try {
|
|
60
|
+
content = fs.readFileSync(filePath, "utf-8");
|
|
61
|
+
}
|
|
62
|
+
catch (_a) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (!content.includes("createServerReference"))
|
|
66
|
+
continue;
|
|
67
|
+
const ids = extractServerActionIds(content);
|
|
68
|
+
if (ids.length === 0)
|
|
69
|
+
continue;
|
|
70
|
+
actionIdsByFile[path.relative(scanDir, filePath)] = ids;
|
|
71
|
+
for (const id of ids)
|
|
72
|
+
allActionIds.add(id);
|
|
73
|
+
}
|
|
74
|
+
return { actionIdsByFile, allActionIds: [...allActionIds] };
|
|
75
|
+
});
|
|
76
|
+
export default next_serverActionIdScan;
|
|
77
|
+
//# sourceMappingURL=next_serverActionIdScan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next_serverActionIdScan.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_serverActionIdScan.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAG,gEAAgE,CAAC;AAEhG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAAY,EAAE;IACrE,MAAM,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,GAAW,EAAY,EAAE;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AASF;;;;;;;GAOG;AACH,MAAM,uBAAuB,GAAG,CAAO,OAAe,EAAqC,EAAE;IACzF,MAAM,eAAe,GAA6B,EAAE,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QAAC,WAAM,CAAC;YACL,SAAS;QACb,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAAE,SAAS;QAEzD,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAE/B,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC;QACxD,KAAK,MAAM,EAAE,IAAI,GAAG;YAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;AAChE,CAAC,CAAA,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -13,11 +13,11 @@ import _traverse from "@babel/traverse";
|
|
|
13
13
|
const traverse = ((_a = _traverse.default) !== null && _a !== void 0 ? _a : _traverse);
|
|
14
14
|
import execFunc from "../../utility/runSandboxed.js";
|
|
15
15
|
import makeRequest from "../../utility/makeReq.js";
|
|
16
|
-
import chalk from "chalk";
|
|
17
16
|
import inquirer from "inquirer";
|
|
18
17
|
import t from "@babel/types";
|
|
19
18
|
import resolvePath from "../../utility/resolvePath.js";
|
|
20
19
|
import * as globals from "../../utility/globals.js";
|
|
20
|
+
import { printMsg, MSG } from "../../utility/printMsg.js";
|
|
21
21
|
/**
|
|
22
22
|
* Pure parser: extracts all function nodes from `jsContent` whose source code
|
|
23
23
|
* ends with the pattern `".js"` followed by up to 15 characters — the signature
|
|
@@ -68,12 +68,12 @@ export const extractChunkBuilderFunctions = (jsContent) => {
|
|
|
68
68
|
* Finds all the lazy loaded JS files from a given URL using a Nuxt.js specific approach.
|
|
69
69
|
*/
|
|
70
70
|
const nuxt_astParse = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
71
|
-
|
|
71
|
+
const filesFound = [];
|
|
72
72
|
const resp = yield makeRequest(url, {});
|
|
73
73
|
const body = yield resp.text();
|
|
74
74
|
const functions = extractChunkBuilderFunctions(body);
|
|
75
75
|
if (functions.length === 0) {
|
|
76
|
-
|
|
76
|
+
printMsg(MSG.Err, `[!] Error parsing JS file: ${url}`);
|
|
77
77
|
return filesFound;
|
|
78
78
|
}
|
|
79
79
|
// Rebuild the full AST for later member-expression resolution.
|
|
@@ -86,13 +86,13 @@ const nuxt_astParse = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
88
|
catch (error) {
|
|
89
|
-
|
|
89
|
+
printMsg(MSG.Err, `[!] Error parsing JS file: ${url}`);
|
|
90
90
|
return filesFound;
|
|
91
91
|
}
|
|
92
92
|
for (const func of functions) {
|
|
93
93
|
{
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
printMsg(MSG.Run, `[✓] Found JS chunk having the following source:`);
|
|
95
|
+
printMsg(MSG.Warn, func.source);
|
|
96
96
|
let user_verified;
|
|
97
97
|
if (!globals.getYes()) {
|
|
98
98
|
const askCorrectFuncConfirmation = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -112,10 +112,10 @@ const nuxt_astParse = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
112
112
|
user_verified = true;
|
|
113
113
|
}
|
|
114
114
|
if (user_verified === true) {
|
|
115
|
-
|
|
115
|
+
printMsg(MSG.Header, "[i] Proceeding with the selected function to fetch files");
|
|
116
116
|
}
|
|
117
117
|
else {
|
|
118
|
-
|
|
118
|
+
printMsg(MSG.Err, "[!] Not executing function.");
|
|
119
119
|
continue;
|
|
120
120
|
}
|
|
121
121
|
// get the value of the unknown vars
|
|
@@ -125,7 +125,7 @@ const nuxt_astParse = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
125
125
|
plugins: ["jsx", "typescript"],
|
|
126
126
|
errorRecovery: true,
|
|
127
127
|
});
|
|
128
|
-
|
|
128
|
+
const memberExpressions = [];
|
|
129
129
|
traverse(unknownVarAst, {
|
|
130
130
|
MemberExpression(path) {
|
|
131
131
|
// Only collect identifiers like f.p (not obj["x"])
|
|
@@ -162,10 +162,12 @@ const nuxt_astParse = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
162
162
|
},
|
|
163
163
|
});
|
|
164
164
|
// replace the unknown var with the value
|
|
165
|
-
const funcSource = func.source.replace(
|
|
165
|
+
const funcSource = func.source.replace(
|
|
166
|
+
// eslint-disable-next-line security/detect-non-literal-regexp -- unknownVar values are AST-derived identifier/property names, which cannot contain regex metacharacters
|
|
167
|
+
new RegExp(`${unknownVar[0]}.${unknownVar[1]}`), `"${unknownVarValue}"`);
|
|
166
168
|
// continue to executing the function with all possible numbers
|
|
167
169
|
const urlBuilderFunc = `(() => (${funcSource}))()`;
|
|
168
|
-
|
|
170
|
+
const js_paths = [];
|
|
169
171
|
try {
|
|
170
172
|
// rather than fuzzing, grep the integers from the func code
|
|
171
173
|
const integers = funcSource.match(/\d+/g);
|
|
@@ -184,7 +186,7 @@ const nuxt_astParse = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
184
186
|
}
|
|
185
187
|
}
|
|
186
188
|
catch (error) {
|
|
187
|
-
|
|
189
|
+
printMsg(MSG.Err, `[!] Error executing function: ${error}`);
|
|
188
190
|
}
|
|
189
191
|
if (js_paths.length > 0) {
|
|
190
192
|
// iterate through the files, and resolve them
|
|
@@ -196,7 +198,7 @@ const nuxt_astParse = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
196
198
|
}
|
|
197
199
|
}
|
|
198
200
|
if (filesFound.length > 0) {
|
|
199
|
-
|
|
201
|
+
printMsg(MSG.Run, `[✓] Found ${filesFound.length} JS chunks`);
|
|
200
202
|
}
|
|
201
203
|
return filesFound;
|
|
202
204
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt_astParse.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_astParse.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,MAAM,QAAQ,GAAG,CAAC,MAAA,SAAS,CAAC,OAAO,mCAAI,SAAS,CAA6B,CAAC;AAC9E,OAAO,QAAQ,MAAM,+BAA+B,CAAC;AACrD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"nuxt_astParse.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_astParse.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import chalk from "chalk";
|
|
11
10
|
import makeRequest from "../../utility/makeReq.js";
|
|
11
|
+
import { printMsg, MSG } from "../../utility/printMsg.js";
|
|
12
12
|
/**
|
|
13
13
|
* Discovers Nuxt's build manifest JSON files.
|
|
14
14
|
*
|
|
@@ -56,7 +56,7 @@ const nuxt_getBuildsManifest = (url) => __awaiter(void 0, void 0, void 0, functi
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
if (found.length > 0) {
|
|
59
|
-
|
|
59
|
+
printMsg(MSG.Run, `[✓] Found ${found.length} Nuxt build manifest file(s)`);
|
|
60
60
|
}
|
|
61
61
|
return found;
|
|
62
62
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt_getBuildsManifest.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_getBuildsManifest.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"nuxt_getBuildsManifest.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_getBuildsManifest.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,MAAM,sBAAsB,GAAG,CAAO,GAAW,EAAqB,EAAE;IACpE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,SAAS,GAAG,GAAG,MAAM,2BAA2B,CAAC;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC1C,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;YACxB,CAAC;QACL,CAAC;IACL,CAAC;IAAC,WAAM,CAAC;QACL,kFAAkF;QAClF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,GAAG,MAAM,sBAAsB,OAAO,OAAO,CAAC;QAC9D,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,GAAG,EAAE,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACL,CAAC;QAAC,WAAM,CAAC;YACL,0BAA0B;QAC9B,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,CAAC,MAAM,8BAA8B,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAA,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
|
|
@@ -7,10 +7,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import chalk from "chalk";
|
|
11
10
|
import makeRequest from "../../utility/makeReq.js";
|
|
12
11
|
import { getJsUrls, pushToJsUrls } from "../globals.js";
|
|
13
12
|
import * as cheerio from "cheerio";
|
|
13
|
+
import { printMsg, MSG } from "../../utility/printMsg.js";
|
|
14
14
|
/**
|
|
15
15
|
* Finds all the lazy loaded JavaScript files from a webpage by parsing the page source.
|
|
16
16
|
* It looks for all `<link>` tags with `as="script"` attribute and `<script>` tags with `src` attribute.
|
|
@@ -20,7 +20,7 @@ import * as cheerio from "cheerio";
|
|
|
20
20
|
* @returns {Promise<string[]>} - A promise that resolves to an array of absolute URLs pointing to JavaScript files found in the page.
|
|
21
21
|
*/
|
|
22
22
|
const nuxt_getFromPageSource = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
-
|
|
23
|
+
printMsg(MSG.Header, "[i] Analyzing page source");
|
|
24
24
|
const urlCountBefore = getJsUrls().length;
|
|
25
25
|
// get the page source
|
|
26
26
|
const res = yield makeRequest(url, {});
|
|
@@ -77,7 +77,7 @@ const nuxt_getFromPageSource = (url) => __awaiter(void 0, void 0, void 0, functi
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
const newUrlCount = getJsUrls().length - urlCountBefore;
|
|
80
|
-
|
|
80
|
+
printMsg(MSG.Run, `[✓] Found ${newUrlCount} JS files from the page source`);
|
|
81
81
|
return getJsUrls();
|
|
82
82
|
});
|
|
83
83
|
export default nuxt_getFromPageSource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt_getFromPageSource.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_getFromPageSource.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"nuxt_getFromPageSource.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_getFromPageSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ import { runWithConcurrency } from "../../utility/concurrency.js";
|
|
|
17
17
|
import parser from "@babel/parser";
|
|
18
18
|
import _traverse from "@babel/traverse";
|
|
19
19
|
const traverse = ((_a = _traverse.default) !== null && _a !== void 0 ? _a : _traverse);
|
|
20
|
-
|
|
20
|
+
const analyzedFiles = [];
|
|
21
21
|
let filesFound = [];
|
|
22
22
|
/**
|
|
23
23
|
* Parses the content of a JavaScript file and returns an object containing
|
|
@@ -34,7 +34,7 @@ export const parseJSFileContent = (content) => __awaiter(void 0, void 0, void 0,
|
|
|
34
34
|
plugins: ["jsx", "typescript"],
|
|
35
35
|
errorRecovery: true,
|
|
36
36
|
});
|
|
37
|
-
|
|
37
|
+
const foundJsFiles = {};
|
|
38
38
|
traverse(ast, {
|
|
39
39
|
StringLiteral(path) {
|
|
40
40
|
const value = path.node.value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt_stringAnalysisJSFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,WAAW,MAAM,8BAA8B,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,cAAc;AACd,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,MAAM,QAAQ,GAAG,CAAC,MAAA,SAAS,CAAC,OAAO,mCAAI,SAAS,CAA6B,CAAC;AAE9E,
|
|
1
|
+
{"version":3,"file":"nuxt_stringAnalysisJSFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,134 +7,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
var _a;
|
|
11
10
|
import makeRequest from "../../utility/makeReq.js";
|
|
12
|
-
import chalk from "chalk";
|
|
13
|
-
import _traverse from "@babel/traverse";
|
|
14
|
-
import parser from "@babel/parser";
|
|
15
|
-
import execFunc from "../../utility/runSandboxed.js";
|
|
16
11
|
import { runWithConcurrency } from "../../utility/concurrency.js";
|
|
17
|
-
|
|
12
|
+
import { extractWebpackChunkUrls } from "../shared/webpackChunkParsers.js";
|
|
13
|
+
import { printMsg, MSG } from "../../utility/printMsg.js";
|
|
18
14
|
export const deduplicateWebpackChunkPaths = (paths) => [...new Set(paths)];
|
|
19
|
-
/**
|
|
20
|
-
* Pure parser: extracts `[chunkId, chunkName]` entries from webpack's
|
|
21
|
-
* FunctionExpression object-map pattern:
|
|
22
|
-
* function(e) { return ({123: "name", ...}[e] || e) + ".js"; }
|
|
23
|
-
* Returns entries from the first qualifying object map (≥ 3 numeric-keyed string entries).
|
|
24
|
-
*/
|
|
25
|
-
export const extractObjectMapChunkEntries = (jsContent) => {
|
|
26
|
-
const result = [];
|
|
27
|
-
let ast;
|
|
28
|
-
try {
|
|
29
|
-
ast = parser.parse(jsContent, {
|
|
30
|
-
sourceType: "unambiguous",
|
|
31
|
-
plugins: ["jsx", "typescript"],
|
|
32
|
-
errorRecovery: true,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
catch (_a) {
|
|
36
|
-
return result;
|
|
37
|
-
}
|
|
38
|
-
traverse(ast, {
|
|
39
|
-
FunctionExpression(path) {
|
|
40
|
-
var _a, _b;
|
|
41
|
-
const start = (_a = path.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
42
|
-
const end = (_b = path.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
43
|
-
const source = jsContent.slice(start, end);
|
|
44
|
-
if (!source.match(/\|\|\s*e/) || !source.includes('".js"'))
|
|
45
|
-
return;
|
|
46
|
-
path.traverse({
|
|
47
|
-
ObjectExpression(objPath) {
|
|
48
|
-
const props = objPath.node.properties;
|
|
49
|
-
if (props.length < 3)
|
|
50
|
-
return;
|
|
51
|
-
const entries = [];
|
|
52
|
-
for (const prop of props) {
|
|
53
|
-
if (prop.type !== "ObjectProperty")
|
|
54
|
-
continue;
|
|
55
|
-
const key = prop.key;
|
|
56
|
-
const value = prop.value;
|
|
57
|
-
if (value.type !== "StringLiteral")
|
|
58
|
-
continue;
|
|
59
|
-
let keyNum = null;
|
|
60
|
-
if (key.type === "NumericLiteral")
|
|
61
|
-
keyNum = key.value;
|
|
62
|
-
else if (key.type === "StringLiteral" && /^\d+$/.test(key.value))
|
|
63
|
-
keyNum = parseInt(key.value);
|
|
64
|
-
else if (key.type === "Identifier" && /^\d+$/.test(key.name))
|
|
65
|
-
keyNum = parseInt(key.name);
|
|
66
|
-
if (keyNum === null)
|
|
67
|
-
continue;
|
|
68
|
-
entries.push([keyNum, value.value]);
|
|
69
|
-
}
|
|
70
|
-
if (entries.length >= 3) {
|
|
71
|
-
result.push(...entries);
|
|
72
|
-
objPath.stop();
|
|
73
|
-
path.stop();
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
return result;
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* Pure parser: extracts chunk filenames from webpack's ArrowFunctionExpression
|
|
83
|
-
* if-chain pattern:
|
|
84
|
-
* (e) => { if (123 === e) return "name.js"; if (456 === e) return "other.js"; ... }
|
|
85
|
-
* Returns filenames only when there are at least 3 qualifying if-statements.
|
|
86
|
-
*/
|
|
87
|
-
export const extractIfChainChunkFilenames = (jsContent) => {
|
|
88
|
-
const result = [];
|
|
89
|
-
let ast;
|
|
90
|
-
try {
|
|
91
|
-
ast = parser.parse(jsContent, {
|
|
92
|
-
sourceType: "unambiguous",
|
|
93
|
-
plugins: ["jsx", "typescript"],
|
|
94
|
-
errorRecovery: true,
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
catch (_a) {
|
|
98
|
-
return result;
|
|
99
|
-
}
|
|
100
|
-
traverse(ast, {
|
|
101
|
-
ArrowFunctionExpression(path) {
|
|
102
|
-
var _a, _b;
|
|
103
|
-
const body = path.node.body;
|
|
104
|
-
if (body.type !== "BlockStatement")
|
|
105
|
-
return;
|
|
106
|
-
// skip expression-body arrows (handled by execFunc path)
|
|
107
|
-
const start = (_a = path.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
108
|
-
const end = (_b = path.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
109
|
-
const source = jsContent.slice(start, end);
|
|
110
|
-
if (source.match(/"\.js".{0,15}$/))
|
|
111
|
-
return;
|
|
112
|
-
const filenames = [];
|
|
113
|
-
for (const stmt of body.body) {
|
|
114
|
-
if (stmt.type !== "IfStatement")
|
|
115
|
-
continue;
|
|
116
|
-
const test = stmt.test;
|
|
117
|
-
if (test.type !== "BinaryExpression" || test.operator !== "===")
|
|
118
|
-
continue;
|
|
119
|
-
const { left, right } = test;
|
|
120
|
-
const isNumericEqParam = (left.type === "NumericLiteral" && right.type === "Identifier") ||
|
|
121
|
-
(right.type === "NumericLiteral" && left.type === "Identifier");
|
|
122
|
-
if (!isNumericEqParam)
|
|
123
|
-
continue;
|
|
124
|
-
const consequent = stmt.consequent;
|
|
125
|
-
if (consequent.type !== "ReturnStatement" || !consequent.argument)
|
|
126
|
-
continue;
|
|
127
|
-
const arg = consequent.argument;
|
|
128
|
-
if (arg.type !== "StringLiteral" || !arg.value.endsWith(".js"))
|
|
129
|
-
continue;
|
|
130
|
-
filenames.push(arg.value);
|
|
131
|
-
}
|
|
132
|
-
if (filenames.length >= 3)
|
|
133
|
-
result.push(...filenames);
|
|
134
|
-
},
|
|
135
|
-
});
|
|
136
|
-
return result;
|
|
137
|
-
};
|
|
138
15
|
// url param kept for API consistency with other react_* functions
|
|
139
16
|
const react_webpackChunkPaths = (_url_1, maxJsSizeMb_1, jsFiles_1, ...args_1) => __awaiter(void 0, [_url_1, maxJsSizeMb_1, jsFiles_1, ...args_1], void 0, function* (_url, maxJsSizeMb, jsFiles, threads = 1) {
|
|
140
17
|
let toReturn = [];
|
|
@@ -145,96 +22,27 @@ const react_webpackChunkPaths = (_url_1, maxJsSizeMb_1, jsFiles_1, ...args_1) =>
|
|
|
145
22
|
return;
|
|
146
23
|
const contentLength = req.headers.get("content-length");
|
|
147
24
|
if (contentLength && parseInt(contentLength) > maxJsSizeMb * 1024 * 1024) {
|
|
148
|
-
|
|
25
|
+
printMsg(MSG.Warn, `[!] Skipping ${jsFile} (too large)`);
|
|
149
26
|
return;
|
|
150
27
|
}
|
|
151
28
|
const jsContent = yield req.text();
|
|
152
29
|
if (jsContent.length > maxJsSizeMb * 1024 * 1024) {
|
|
153
|
-
|
|
30
|
+
printMsg(MSG.Warn, `[!] Skipping ${jsFile} (too large)`);
|
|
154
31
|
return;
|
|
155
32
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
for (const [, chunkName] of objectMapEntries) {
|
|
161
|
-
try {
|
|
162
|
-
const finalUrl = new URL("../" + chunkName + ".js", jsFile).href;
|
|
163
|
-
toReturn.push(finalUrl);
|
|
164
|
-
}
|
|
165
|
-
catch (_a) {
|
|
166
|
-
// skip filenames that fail URL resolution
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// pattern 2: ArrowFunctionExpression if-chain
|
|
171
|
-
const ifChainFilenames = extractIfChainChunkFilenames(jsContent);
|
|
172
|
-
if (ifChainFilenames.length > 0) {
|
|
173
|
-
console.log(chalk.green(`[✓] Found webpack if-chain chunk path builder in ${jsFile}`));
|
|
174
|
-
for (const filename of ifChainFilenames) {
|
|
175
|
-
try {
|
|
176
|
-
const output = filename.startsWith("/") ||
|
|
177
|
-
filename.startsWith("http") ||
|
|
178
|
-
filename.startsWith("./") ||
|
|
179
|
-
filename.startsWith("../")
|
|
180
|
-
? filename
|
|
181
|
-
: "../" + filename;
|
|
182
|
-
const finalUrl = new URL(output, jsFile).href;
|
|
183
|
-
toReturn.push(finalUrl);
|
|
184
|
-
}
|
|
185
|
-
catch (_b) {
|
|
186
|
-
// skip filenames that fail URL resolution
|
|
187
|
-
}
|
|
188
|
-
}
|
|
33
|
+
const urls = extractWebpackChunkUrls(jsContent, jsFile);
|
|
34
|
+
if (urls.length > 0) {
|
|
35
|
+
printMsg(MSG.Run, `[✓] Found ${urls.length} webpack chunk JS file(s) in ${jsFile}`);
|
|
36
|
+
toReturn.push(...urls);
|
|
189
37
|
}
|
|
190
|
-
// pattern 1: ArrowFunctionExpression expression body via execFunc
|
|
191
|
-
const ast = parser.parse(jsContent, {
|
|
192
|
-
sourceType: "unambiguous",
|
|
193
|
-
plugins: ["jsx", "typescript"],
|
|
194
|
-
errorRecovery: true,
|
|
195
|
-
});
|
|
196
|
-
traverse(ast, {
|
|
197
|
-
ArrowFunctionExpression(path) {
|
|
198
|
-
var _a, _b;
|
|
199
|
-
const start = (_a = path.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
200
|
-
const end = (_b = path.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
201
|
-
const source = jsContent.slice(start, end);
|
|
202
|
-
if (!source.match(/"\.js".{0,15}$/))
|
|
203
|
-
return;
|
|
204
|
-
console.log(chalk.green(`[✓] Found webpack chunk path builder in ${jsFile}`));
|
|
205
|
-
console.log(chalk.yellow(source.slice(0, 200) + (source.length > 200 ? "..." : "")));
|
|
206
|
-
const urlBuilderFunc = `(() => (${source}))()`;
|
|
207
|
-
const integers = source.match(/\d+/g);
|
|
208
|
-
if (!integers)
|
|
209
|
-
return;
|
|
210
|
-
for (const i of integers) {
|
|
211
|
-
try {
|
|
212
|
-
let output = execFunc(urlBuilderFunc, parseInt(i));
|
|
213
|
-
if (typeof output !== "string" || output.includes("undefined"))
|
|
214
|
-
continue;
|
|
215
|
-
if (!(output.startsWith("/") ||
|
|
216
|
-
output.startsWith("http") ||
|
|
217
|
-
output.startsWith("./") ||
|
|
218
|
-
output.startsWith("../"))) {
|
|
219
|
-
output = "../" + output;
|
|
220
|
-
}
|
|
221
|
-
const finalUrl = new URL(output, jsFile).href;
|
|
222
|
-
toReturn.push(finalUrl);
|
|
223
|
-
}
|
|
224
|
-
catch (_c) {
|
|
225
|
-
// skip integers that cause errors in sandboxed execution
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
},
|
|
229
|
-
});
|
|
230
38
|
}
|
|
231
39
|
catch (err) {
|
|
232
|
-
|
|
40
|
+
printMsg(MSG.Err, `[!] Error processing ${jsFile}: ${err}`);
|
|
233
41
|
}
|
|
234
42
|
}));
|
|
235
43
|
toReturn = deduplicateWebpackChunkPaths(toReturn);
|
|
236
44
|
if (toReturn.length > 0) {
|
|
237
|
-
|
|
45
|
+
printMsg(MSG.Run, `[✓] Found ${toReturn.length} webpack chunk JS files`);
|
|
238
46
|
}
|
|
239
47
|
return toReturn;
|
|
240
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react_webpackChunkPaths.js","sourceRoot":"","sources":["../../../src/lazyLoad/react/react_webpackChunkPaths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"react_webpackChunkPaths.js","sourceRoot":"","sources":["../../../src/lazyLoad/react/react_webpackChunkPaths.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAwB,EAAY,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAExG,kEAAkE;AAClE,MAAM,uBAAuB,GAAG,8CAKX,EAAE,qFAJnB,IAAY,EACZ,WAAmB,EACnB,OAAiB,EACjB,UAAkB,CAAC;IAEnB,IAAI,QAAQ,GAAa,EAAE,CAAC;IAE5B,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAO,MAAM,EAAE,EAAE;QACxD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO;YAEvC,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxD,IAAI,aAAa,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;gBACvE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,MAAM,cAAc,CAAC,CAAC;gBACzD,OAAO;YACX,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,SAAS,CAAC,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;gBAC/C,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,MAAM,cAAc,CAAC,CAAC;gBACzD,OAAO;YACX,CAAC;YAED,MAAM,IAAI,GAAG,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,IAAI,CAAC,MAAM,gCAAgC,MAAM,EAAE,CAAC,CAAC;gBACpF,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,wBAAwB,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC;IACL,CAAC,CAAA,CAAC,CAAC;IAEH,QAAQ,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,QAAQ,CAAC,MAAM,yBAAyB,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Appends newly discovered URLs onto a technique's existing entry in a
|
|
3
|
+
* research-mode efficiency map, without deduplicating across techniques —
|
|
4
|
+
* the same URL may legitimately appear under multiple techniques since this
|
|
5
|
+
* measures each technique's individual yield.
|
|
6
|
+
*/
|
|
7
|
+
export const accumulateTechnique = (map, technique, urls) => {
|
|
8
|
+
if (!urls || urls.length === 0)
|
|
9
|
+
return;
|
|
10
|
+
map[technique] = [...(map[technique] || []), ...urls];
|
|
11
|
+
};
|
|
12
|
+
export const createTechniqueRecorder = (map) => {
|
|
13
|
+
return (technique, urls) => accumulateTechnique(map, technique, urls);
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=researchUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"researchUtils.js","sourceRoot":"","sources":["../../src/lazyLoad/researchUtils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAA6B,EAAE,SAAiB,EAAE,IAAc,EAAQ,EAAE;IAC1G,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACvC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAA6B,EAAqB,EAAE;IACxF,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC1E,CAAC,CAAC"}
|