@js-recon/js-recon 1.4.3 → 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 +55 -25
- 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 +15 -7
- package/.nvmrc +1 -0
- package/.plumber.yaml +151 -0
- package/CHANGELOG.md +54 -0
- package/CONTRIBUTING.md +32 -0
- package/Dockerfile +1 -0
- package/README.md +55 -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 +42 -24
- 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 +245 -339
- 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 +494 -0
- package/build/config/applicationConfig.js.map +1 -0
- 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 +11 -21
- 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 +16 -555
- 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 +51 -40
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +154 -50
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/downloadResponse.js +113 -0
- package/build/lazyLoad/downloadResponse.js.map +1 -0
- 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 +35 -0
- package/build/lazyLoad/globals.js.map +1 -1
- package/build/lazyLoad/index.js +311 -175
- 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 +39 -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 +21 -20
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +100 -99
- 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/outputPath.js +92 -0
- package/build/lazyLoad/outputPath.js.map +1 -0
- package/build/lazyLoad/react/react_followImports.js +15 -5
- package/build/lazyLoad/react/react_followImports.js.map +1 -1
- package/build/lazyLoad/react/react_getScriptTags.js +11 -6
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
- package/build/lazyLoad/react/react_sourcemapUrls.js +3 -2
- package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js +12 -203
- 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 +106 -60
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_RuntimeJs.js +20 -15
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +10 -5
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +20 -17
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +70 -46
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_jsImports.js +3 -2
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
- package/build/lazyLoad/vue/vue_pageSrc.js +3 -2
- package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -1
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +6 -5
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +10 -21
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js +5 -4
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +28 -25
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_viteMapDeps.js +8 -2
- package/build/lazyLoad/vue/vue_viteMapDeps.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/checkFeasibility.js +8 -4
- package/build/proxy/checkFeasibility.js.map +1 -1
- package/build/proxy/checkFireWallBlocking.js +23 -13
- package/build/proxy/checkFireWallBlocking.js.map +1 -1
- package/build/proxy/detectBlockedResponse.js +205 -0
- package/build/proxy/detectBlockedResponse.js.map +1 -0
- package/build/proxy/genReq.js +434 -127
- package/build/proxy/genReq.js.map +1 -1
- package/build/proxy/index.js +3 -3
- package/build/proxy/index.js.map +1 -1
- package/build/proxy/oxylabsFallback.js +110 -0
- package/build/proxy/oxylabsFallback.js.map +1 -0
- package/build/proxy/proxyFeasibilityRequest.js +11 -9
- package/build/proxy/proxyFeasibilityRequest.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/cancellableStep.js +27 -0
- package/build/run/cancellableStep.js.map +1 -0
- 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 +239 -204
- 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/run/outputDirectory.js +377 -0
- package/build/run/outputDirectory.js.map +1 -0
- package/build/sourcemaps/index.js +116 -29
- package/build/sourcemaps/index.js.map +1 -1
- package/build/strings/index.js +38 -28
- 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/downloadProgress.js +99 -0
- package/build/utility/downloadProgress.js.map +1 -0
- 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 +490 -257
- 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 +68 -7
- 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/build/utility/targetInputs.js +177 -0
- package/build/utility/targetInputs.js.map +1 -0
- package/build/utility/urlUtils.js +37 -1
- package/build/utility/urlUtils.js.map +1 -1
- package/config.dist.yaml +251 -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
|
@@ -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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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { getURLDirectory, toOutputHost } from "../utility/urlUtils.js";
|
|
4
|
+
export { toOutputHost } from "../utility/urlUtils.js";
|
|
5
|
+
const MAX_DIRECTORY_SEGMENT_LENGTH = 120;
|
|
6
|
+
const MAX_FILENAME_LENGTH = 180;
|
|
7
|
+
const ASSET_EXTENSION = /(\.mjs\.map|\.js\.map|\.mjs|\.json|\.js|\.vue)$/i;
|
|
8
|
+
const ENCODED_SEGMENT_PREFIX = "__jsr_";
|
|
9
|
+
const decodePathSegment = (segment) => {
|
|
10
|
+
try {
|
|
11
|
+
return decodeURIComponent(segment);
|
|
12
|
+
}
|
|
13
|
+
catch (_a) {
|
|
14
|
+
return segment;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const boundSegment = (segment, maxLength, digestIdentity = segment, forceDigest = false) => {
|
|
18
|
+
if (!forceDigest && segment.length <= maxLength)
|
|
19
|
+
return segment;
|
|
20
|
+
const digest = createHash("sha256").update(digestIdentity).digest("hex").slice(0, 12);
|
|
21
|
+
if (maxLength <= digest.length)
|
|
22
|
+
return digest.slice(0, Math.max(1, maxLength));
|
|
23
|
+
return `${segment.slice(0, Math.max(1, maxLength - digest.length - 1))}-${digest}`;
|
|
24
|
+
};
|
|
25
|
+
const sanitizeBoundedSegment = (segment, maxLength, additionalIdentity = "") => {
|
|
26
|
+
const decoded = decodePathSegment(segment);
|
|
27
|
+
const sanitized = decoded.normalize("NFKC").replace(/[^a-zA-Z0-9._~-]/g, "_");
|
|
28
|
+
const nonTraversing = sanitized.length === 0 || /^\.+$/.test(sanitized) ? sanitized.replace(/\./g, "_") || "_" : sanitized;
|
|
29
|
+
const identityChanged = decoded !== nonTraversing || additionalIdentity.length > 0;
|
|
30
|
+
const needsBounding = nonTraversing.length > maxLength;
|
|
31
|
+
const reservedLiteral = nonTraversing.startsWith(ENCODED_SEGMENT_PREFIX);
|
|
32
|
+
if (!identityChanged && !needsBounding && !reservedLiteral)
|
|
33
|
+
return nonTraversing;
|
|
34
|
+
const category = identityChanged ? "encoded" : needsBounding ? "bounded" : "literal";
|
|
35
|
+
const tagged = `${ENCODED_SEGMENT_PREFIX}${category}_${nonTraversing}`;
|
|
36
|
+
return boundSegment(tagged, maxLength, JSON.stringify([decoded, additionalIdentity]), true);
|
|
37
|
+
};
|
|
38
|
+
/** Maps an untrusted URL path segment to a portable, bounded filename segment. */
|
|
39
|
+
export const sanitizeOutputPathSegment = (segment, maxLength = MAX_DIRECTORY_SEGMENT_LENGTH) => sanitizeBoundedSegment(segment, maxLength);
|
|
40
|
+
/** Derives a portable asset filename without accepting partial extension matches. */
|
|
41
|
+
export const getSanitizedAssetFilename = (resourceUrl) => {
|
|
42
|
+
var _a;
|
|
43
|
+
let pathname;
|
|
44
|
+
let search = "";
|
|
45
|
+
try {
|
|
46
|
+
const parsed = new URL(resourceUrl);
|
|
47
|
+
pathname = parsed.pathname;
|
|
48
|
+
search = parsed.search;
|
|
49
|
+
}
|
|
50
|
+
catch (_b) {
|
|
51
|
+
pathname = resourceUrl.split(/[?#]/, 1)[0];
|
|
52
|
+
search = resourceUrl.includes("?") ? `?${resourceUrl.split("?").slice(1).join("?").split("#", 1)[0]}` : "";
|
|
53
|
+
}
|
|
54
|
+
const pathSegments = pathname.split("/");
|
|
55
|
+
const rawFilename = decodePathSegment((_a = pathSegments[pathSegments.length - 1]) !== null && _a !== void 0 ? _a : "");
|
|
56
|
+
const extensionMatch = rawFilename.match(ASSET_EXTENSION);
|
|
57
|
+
if (!extensionMatch)
|
|
58
|
+
return undefined;
|
|
59
|
+
const extension = extensionMatch[0];
|
|
60
|
+
const rawBase = rawFilename.slice(0, -extension.length);
|
|
61
|
+
const identitySuffix = `${rawBase.length === 0 ? "\0synthetic-basename" : ""}${search}`;
|
|
62
|
+
const base = sanitizeBoundedSegment(rawBase || "asset", MAX_FILENAME_LENGTH - extension.length, identitySuffix);
|
|
63
|
+
return `${base}${extension}`;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Returns the directory that owns a mirrored host. By default, always nests the
|
|
67
|
+
* host under the output root. Pass `isBatchTargetRoot: true` only when the caller
|
|
68
|
+
* knows `outputRoot` is itself a batch per-target root that may already end in its
|
|
69
|
+
* target host — in that case a matching basename is treated as already-owned and
|
|
70
|
+
* is not nested again.
|
|
71
|
+
*/
|
|
72
|
+
export const resolveHostOutputDirectory = (outputRoot, host, isBatchTargetRoot = false) => {
|
|
73
|
+
const outputHost = toOutputHost(host);
|
|
74
|
+
const candidate = isBatchTargetRoot && path.basename(path.resolve(outputRoot)) === outputHost
|
|
75
|
+
? outputRoot
|
|
76
|
+
: path.join(outputRoot, outputHost);
|
|
77
|
+
const relative = path.relative(path.resolve(outputRoot), path.resolve(candidate));
|
|
78
|
+
if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
|
|
79
|
+
throw new Error(`Refusing to resolve host outside output root: ${host}`);
|
|
80
|
+
}
|
|
81
|
+
return candidate;
|
|
82
|
+
};
|
|
83
|
+
/** Mirrors a URL pathname below its host-owned output directory. */
|
|
84
|
+
export const resolveAssetOutputDirectory = (outputRoot, resourceUrl, isBatchTargetRoot = false) => {
|
|
85
|
+
const { rawHost, directory } = getURLDirectory(resourceUrl);
|
|
86
|
+
const safeSegments = directory
|
|
87
|
+
.split(/[\\/]+/)
|
|
88
|
+
.filter((segment) => segment.length > 0)
|
|
89
|
+
.map((segment) => sanitizeOutputPathSegment(segment));
|
|
90
|
+
return path.join(resolveHostOutputDirectory(outputRoot, rawHost, isBatchTargetRoot), ...safeSegments);
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=outputPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputPath.js","sourceRoot":"","sources":["../../src/lazyLoad/outputPath.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import makeRequest from "../../utility/makeReq.js";
|
|
11
11
|
import chalk from "chalk";
|
|
12
12
|
import { runWithConcurrency } from "../../utility/concurrency.js";
|
|
13
|
+
import { progressWarn } from "../../utility/progressLog.js";
|
|
13
14
|
/**
|
|
14
15
|
* Extracts all JS file references from the content of a JS file:
|
|
15
16
|
* - Static ESM imports: import ... from "./chunk.js" / import "./chunk.js"
|
|
@@ -82,32 +83,41 @@ const extractImports = (content, fileUrl, baseUrl) => {
|
|
|
82
83
|
* `visited` is mutated in place: callers should pass the same Set across iterations
|
|
83
84
|
* so the recursion terminates once no new files are found.
|
|
84
85
|
*/
|
|
85
|
-
const react_followImports = (jsFiles_1, maxJsSizeMb_1, baseUrl_1, visited_1, ...args_1) => __awaiter(void 0, [jsFiles_1, maxJsSizeMb_1, baseUrl_1, visited_1, ...args_1], void 0, function* (jsFiles, maxJsSizeMb, baseUrl, visited, threads = 1) {
|
|
86
|
+
const react_followImports = (jsFiles_1, maxJsSizeMb_1, baseUrl_1, visited_1, ...args_1) => __awaiter(void 0, [jsFiles_1, maxJsSizeMb_1, baseUrl_1, visited_1, ...args_1], void 0, function* (jsFiles, maxJsSizeMb, baseUrl, visited, threads = 1, compactOutput = false) {
|
|
86
87
|
const discovered = [];
|
|
87
88
|
const toFetch = jsFiles.filter((jsFile) => !visited.has(jsFile));
|
|
89
|
+
let warningCount = 0;
|
|
90
|
+
const reportWarning = compactOutput
|
|
91
|
+
? () => {
|
|
92
|
+
warningCount++;
|
|
93
|
+
}
|
|
94
|
+
: (message) => console.error(message);
|
|
88
95
|
for (const jsFile of toFetch)
|
|
89
96
|
visited.add(jsFile);
|
|
90
97
|
yield runWithConcurrency(toFetch, threads, (jsFile) => __awaiter(void 0, void 0, void 0, function* () {
|
|
91
98
|
try {
|
|
92
|
-
const req = yield makeRequest(jsFile);
|
|
99
|
+
const req = yield makeRequest(jsFile, compactOutput ? { reportErrors: false } : undefined);
|
|
93
100
|
if (!req || req.status !== 200)
|
|
94
101
|
return;
|
|
95
102
|
const contentLength = req.headers.get("content-length");
|
|
96
103
|
if (contentLength && parseInt(contentLength) > maxJsSizeMb * 1024 * 1024) {
|
|
97
|
-
|
|
104
|
+
reportWarning(chalk.yellow(`[!] Skipping ${jsFile} (too large)`));
|
|
98
105
|
return;
|
|
99
106
|
}
|
|
100
107
|
const content = yield req.text();
|
|
101
108
|
if (content.length > maxJsSizeMb * 1024 * 1024) {
|
|
102
|
-
|
|
109
|
+
reportWarning(chalk.yellow(`[!] Skipping ${jsFile} (too large)`));
|
|
103
110
|
return;
|
|
104
111
|
}
|
|
105
112
|
discovered.push(...extractImports(content, jsFile, baseUrl));
|
|
106
113
|
}
|
|
107
114
|
catch (err) {
|
|
108
|
-
|
|
115
|
+
reportWarning(chalk.yellow(`[!] Could not follow imports in ${jsFile}: ${err}`));
|
|
109
116
|
}
|
|
110
117
|
}));
|
|
118
|
+
if (compactOutput && warningCount > 0) {
|
|
119
|
+
progressWarn(chalk.yellow(`[!] Skipped ${warningCount} JS file(s) while following imports`));
|
|
120
|
+
}
|
|
111
121
|
// Return only URLs not yet in visited (deduplicated)
|
|
112
122
|
return [...new Set(discovered)].filter((u) => !visited.has(u));
|
|
113
123
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react_followImports.js","sourceRoot":"","sources":["../../../src/lazyLoad/react/react_followImports.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"react_followImports.js","sourceRoot":"","sources":["../../../src/lazyLoad/react/react_followImports.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,27 +12,32 @@ import * as cheerio from "cheerio";
|
|
|
12
12
|
import fs from "fs";
|
|
13
13
|
import path from "path";
|
|
14
14
|
import chalk from "chalk";
|
|
15
|
-
|
|
15
|
+
import { resolveHostOutputDirectory } from "../outputPath.js";
|
|
16
|
+
import { isRequestCancelled } from "../../utility/makeReq.js";
|
|
17
|
+
const react_getScriptTags = (url_1, maxJsSizeMb_1, outputDir_1, ...args_1) => __awaiter(void 0, [url_1, maxJsSizeMb_1, outputDir_1, ...args_1], void 0, function* (url, maxJsSizeMb, outputDir, isBatch = false) {
|
|
16
18
|
let toReturn = [];
|
|
17
19
|
const req = yield makeRequest(url);
|
|
20
|
+
if (!req || isRequestCancelled())
|
|
21
|
+
return [];
|
|
18
22
|
const pageSource = yield req.text();
|
|
19
23
|
const $ = cheerio.load(pageSource);
|
|
20
|
-
const
|
|
24
|
+
const hostOutputDir = outputDir ? resolveHostOutputDirectory(outputDir, new URL(url).host, isBatch) : undefined;
|
|
21
25
|
let inlineIndex = 0;
|
|
22
26
|
$("script").each((_, elem) => {
|
|
23
27
|
const src = $(elem).attr("src");
|
|
24
28
|
if (src) {
|
|
25
29
|
toReturn.push(new URL(src, url).href);
|
|
26
30
|
}
|
|
27
|
-
else if (
|
|
31
|
+
else if (hostOutputDir) {
|
|
32
|
+
if (isRequestCancelled())
|
|
33
|
+
return;
|
|
28
34
|
// Inline script — save to disk so downstream modules can analyze it
|
|
29
35
|
const content = $(elem).text().trim();
|
|
30
36
|
if (!content)
|
|
31
37
|
return;
|
|
32
|
-
|
|
33
|
-
fs.mkdirSync(hostDir, { recursive: true });
|
|
38
|
+
fs.mkdirSync(hostOutputDir, { recursive: true });
|
|
34
39
|
const filename = `inline-${inlineIndex++}.js`;
|
|
35
|
-
const filePath = path.join(
|
|
40
|
+
const filePath = path.join(hostOutputDir, filename);
|
|
36
41
|
fs.writeFileSync(filePath, `// File Source: ${url} (inline script #${inlineIndex - 1})\n${content}`);
|
|
37
42
|
console.log(chalk.green(`[✓] Saved inline script to ${filePath}`));
|
|
38
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react_getScriptTags.js","sourceRoot":"","sources":["../../../src/lazyLoad/react/react_getScriptTags.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"react_getScriptTags.js","sourceRoot":"","sources":["../../../src/lazyLoad/react/react_getScriptTags.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,11 +10,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import makeRequest from "../../utility/makeReq.js";
|
|
11
11
|
import chalk from "chalk";
|
|
12
12
|
import { runWithConcurrency } from "../../utility/concurrency.js";
|
|
13
|
+
import { progressLog } from "../../utility/progressLog.js";
|
|
13
14
|
const react_sourcemapUrls = (jsFiles_1, ...args_1) => __awaiter(void 0, [jsFiles_1, ...args_1], void 0, function* (jsFiles, threads = 1) {
|
|
14
15
|
const mapUrls = [];
|
|
15
16
|
yield runWithConcurrency(jsFiles, threads, (jsUrl) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
17
|
try {
|
|
17
|
-
const res = yield makeRequest(jsUrl, {});
|
|
18
|
+
const res = yield makeRequest(jsUrl, { reportErrors: false });
|
|
18
19
|
if (!res)
|
|
19
20
|
return;
|
|
20
21
|
const body = yield res.text();
|
|
@@ -30,7 +31,7 @@ const react_sourcemapUrls = (jsFiles_1, ...args_1) => __awaiter(void 0, [jsFiles
|
|
|
30
31
|
}
|
|
31
32
|
}));
|
|
32
33
|
if (mapUrls.length > 0) {
|
|
33
|
-
|
|
34
|
+
progressLog(chalk.green(`[✓] Found ${mapUrls.length} sourcemaps from ${jsFiles.length} JS files`));
|
|
34
35
|
}
|
|
35
36
|
return mapUrls;
|
|
36
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react_sourcemapUrls.js","sourceRoot":"","sources":["../../../src/lazyLoad/react/react_sourcemapUrls.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"react_sourcemapUrls.js","sourceRoot":"","sources":["../../../src/lazyLoad/react/react_sourcemapUrls.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,mBAAmB,GAAG,uBAAkE,EAAE,8DAA7D,OAAiB,EAAE,UAAkB,CAAC;IACrE,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAO,KAAK,EAAE,EAAE;QACvD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC1D,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAW,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,gCAAgC;QACpC,CAAC;IACL,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,MAAM,oBAAoB,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -7,133 +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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
* FunctionExpression object-map pattern:
|
|
21
|
-
* function(e) { return ({123: "name", ...}[e] || e) + ".js"; }
|
|
22
|
-
* Returns entries from the first qualifying object map (≥ 3 numeric-keyed string entries).
|
|
23
|
-
*/
|
|
24
|
-
export const extractObjectMapChunkEntries = (jsContent) => {
|
|
25
|
-
const result = [];
|
|
26
|
-
let ast;
|
|
27
|
-
try {
|
|
28
|
-
ast = parser.parse(jsContent, {
|
|
29
|
-
sourceType: "unambiguous",
|
|
30
|
-
plugins: ["jsx", "typescript"],
|
|
31
|
-
errorRecovery: true,
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
catch (_a) {
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
traverse(ast, {
|
|
38
|
-
FunctionExpression(path) {
|
|
39
|
-
var _a, _b;
|
|
40
|
-
const start = (_a = path.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
41
|
-
const end = (_b = path.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
42
|
-
const source = jsContent.slice(start, end);
|
|
43
|
-
if (!source.match(/\|\|\s*e/) || !source.includes('".js"'))
|
|
44
|
-
return;
|
|
45
|
-
path.traverse({
|
|
46
|
-
ObjectExpression(objPath) {
|
|
47
|
-
const props = objPath.node.properties;
|
|
48
|
-
if (props.length < 3)
|
|
49
|
-
return;
|
|
50
|
-
const entries = [];
|
|
51
|
-
for (const prop of props) {
|
|
52
|
-
if (prop.type !== "ObjectProperty")
|
|
53
|
-
continue;
|
|
54
|
-
const key = prop.key;
|
|
55
|
-
const value = prop.value;
|
|
56
|
-
if (value.type !== "StringLiteral")
|
|
57
|
-
continue;
|
|
58
|
-
let keyNum = null;
|
|
59
|
-
if (key.type === "NumericLiteral")
|
|
60
|
-
keyNum = key.value;
|
|
61
|
-
else if (key.type === "StringLiteral" && /^\d+$/.test(key.value))
|
|
62
|
-
keyNum = parseInt(key.value);
|
|
63
|
-
else if (key.type === "Identifier" && /^\d+$/.test(key.name))
|
|
64
|
-
keyNum = parseInt(key.name);
|
|
65
|
-
if (keyNum === null)
|
|
66
|
-
continue;
|
|
67
|
-
entries.push([keyNum, value.value]);
|
|
68
|
-
}
|
|
69
|
-
if (entries.length >= 3) {
|
|
70
|
-
result.push(...entries);
|
|
71
|
-
objPath.stop();
|
|
72
|
-
path.stop();
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
});
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
return result;
|
|
79
|
-
};
|
|
80
|
-
/**
|
|
81
|
-
* Pure parser: extracts chunk filenames from webpack's ArrowFunctionExpression
|
|
82
|
-
* if-chain pattern:
|
|
83
|
-
* (e) => { if (123 === e) return "name.js"; if (456 === e) return "other.js"; ... }
|
|
84
|
-
* Returns filenames only when there are at least 3 qualifying if-statements.
|
|
85
|
-
*/
|
|
86
|
-
export const extractIfChainChunkFilenames = (jsContent) => {
|
|
87
|
-
const result = [];
|
|
88
|
-
let ast;
|
|
89
|
-
try {
|
|
90
|
-
ast = parser.parse(jsContent, {
|
|
91
|
-
sourceType: "unambiguous",
|
|
92
|
-
plugins: ["jsx", "typescript"],
|
|
93
|
-
errorRecovery: true,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
catch (_a) {
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
traverse(ast, {
|
|
100
|
-
ArrowFunctionExpression(path) {
|
|
101
|
-
var _a, _b;
|
|
102
|
-
const body = path.node.body;
|
|
103
|
-
if (body.type !== "BlockStatement")
|
|
104
|
-
return;
|
|
105
|
-
// skip expression-body arrows (handled by execFunc path)
|
|
106
|
-
const start = (_a = path.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
107
|
-
const end = (_b = path.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
108
|
-
const source = jsContent.slice(start, end);
|
|
109
|
-
if (source.match(/"\.js".{0,15}$/))
|
|
110
|
-
return;
|
|
111
|
-
const filenames = [];
|
|
112
|
-
for (const stmt of body.body) {
|
|
113
|
-
if (stmt.type !== "IfStatement")
|
|
114
|
-
continue;
|
|
115
|
-
const test = stmt.test;
|
|
116
|
-
if (test.type !== "BinaryExpression" || test.operator !== "===")
|
|
117
|
-
continue;
|
|
118
|
-
const { left, right } = test;
|
|
119
|
-
const isNumericEqParam = (left.type === "NumericLiteral" && right.type === "Identifier") ||
|
|
120
|
-
(right.type === "NumericLiteral" && left.type === "Identifier");
|
|
121
|
-
if (!isNumericEqParam)
|
|
122
|
-
continue;
|
|
123
|
-
const consequent = stmt.consequent;
|
|
124
|
-
if (consequent.type !== "ReturnStatement" || !consequent.argument)
|
|
125
|
-
continue;
|
|
126
|
-
const arg = consequent.argument;
|
|
127
|
-
if (arg.type !== "StringLiteral" || !arg.value.endsWith(".js"))
|
|
128
|
-
continue;
|
|
129
|
-
filenames.push(arg.value);
|
|
130
|
-
}
|
|
131
|
-
if (filenames.length >= 3)
|
|
132
|
-
result.push(...filenames);
|
|
133
|
-
},
|
|
134
|
-
});
|
|
135
|
-
return result;
|
|
136
|
-
};
|
|
12
|
+
import { extractWebpackChunkUrls } from "../shared/webpackChunkParsers.js";
|
|
13
|
+
import { printMsg, MSG } from "../../utility/printMsg.js";
|
|
14
|
+
export const deduplicateWebpackChunkPaths = (paths) => [...new Set(paths)];
|
|
137
15
|
// url param kept for API consistency with other react_* functions
|
|
138
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) {
|
|
139
17
|
let toReturn = [];
|
|
@@ -144,97 +22,28 @@ const react_webpackChunkPaths = (_url_1, maxJsSizeMb_1, jsFiles_1, ...args_1) =>
|
|
|
144
22
|
return;
|
|
145
23
|
const contentLength = req.headers.get("content-length");
|
|
146
24
|
if (contentLength && parseInt(contentLength) > maxJsSizeMb * 1024 * 1024) {
|
|
147
|
-
|
|
25
|
+
printMsg(MSG.Warn, `[!] Skipping ${jsFile} (too large)`);
|
|
148
26
|
return;
|
|
149
27
|
}
|
|
150
28
|
const jsContent = yield req.text();
|
|
151
29
|
if (jsContent.length > maxJsSizeMb * 1024 * 1024) {
|
|
152
|
-
|
|
30
|
+
printMsg(MSG.Warn, `[!] Skipping ${jsFile} (too large)`);
|
|
153
31
|
return;
|
|
154
32
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
for (const [, chunkName] of objectMapEntries) {
|
|
160
|
-
try {
|
|
161
|
-
const finalUrl = new URL("../" + chunkName + ".js", jsFile).href;
|
|
162
|
-
toReturn.push(finalUrl);
|
|
163
|
-
}
|
|
164
|
-
catch (_a) {
|
|
165
|
-
// skip filenames that fail URL resolution
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// pattern 2: ArrowFunctionExpression if-chain
|
|
170
|
-
const ifChainFilenames = extractIfChainChunkFilenames(jsContent);
|
|
171
|
-
if (ifChainFilenames.length > 0) {
|
|
172
|
-
console.log(chalk.green(`[✓] Found webpack if-chain chunk path builder in ${jsFile}`));
|
|
173
|
-
for (const filename of ifChainFilenames) {
|
|
174
|
-
try {
|
|
175
|
-
const output = filename.startsWith("/") ||
|
|
176
|
-
filename.startsWith("http") ||
|
|
177
|
-
filename.startsWith("./") ||
|
|
178
|
-
filename.startsWith("../")
|
|
179
|
-
? filename
|
|
180
|
-
: "../" + filename;
|
|
181
|
-
const finalUrl = new URL(output, jsFile).href;
|
|
182
|
-
toReturn.push(finalUrl);
|
|
183
|
-
}
|
|
184
|
-
catch (_b) {
|
|
185
|
-
// skip filenames that fail URL resolution
|
|
186
|
-
}
|
|
187
|
-
}
|
|
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);
|
|
188
37
|
}
|
|
189
|
-
// pattern 1: ArrowFunctionExpression expression body via execFunc
|
|
190
|
-
const ast = parser.parse(jsContent, {
|
|
191
|
-
sourceType: "unambiguous",
|
|
192
|
-
plugins: ["jsx", "typescript"],
|
|
193
|
-
errorRecovery: true,
|
|
194
|
-
});
|
|
195
|
-
traverse(ast, {
|
|
196
|
-
ArrowFunctionExpression(path) {
|
|
197
|
-
var _a, _b;
|
|
198
|
-
const start = (_a = path.node.start) !== null && _a !== void 0 ? _a : 0;
|
|
199
|
-
const end = (_b = path.node.end) !== null && _b !== void 0 ? _b : jsContent.length;
|
|
200
|
-
const source = jsContent.slice(start, end);
|
|
201
|
-
if (!source.match(/"\.js".{0,15}$/))
|
|
202
|
-
return;
|
|
203
|
-
console.log(chalk.green(`[✓] Found webpack chunk path builder in ${jsFile}`));
|
|
204
|
-
console.log(chalk.yellow(source.slice(0, 200) + (source.length > 200 ? "..." : "")));
|
|
205
|
-
const urlBuilderFunc = `(() => (${source}))()`;
|
|
206
|
-
const integers = source.match(/\d+/g);
|
|
207
|
-
if (!integers)
|
|
208
|
-
return;
|
|
209
|
-
for (const i of integers) {
|
|
210
|
-
try {
|
|
211
|
-
let output = execFunc(urlBuilderFunc, parseInt(i));
|
|
212
|
-
if (typeof output !== "string" || output.includes("undefined"))
|
|
213
|
-
continue;
|
|
214
|
-
if (!(output.startsWith("/") ||
|
|
215
|
-
output.startsWith("http") ||
|
|
216
|
-
output.startsWith("./") ||
|
|
217
|
-
output.startsWith("../"))) {
|
|
218
|
-
output = "../" + output;
|
|
219
|
-
}
|
|
220
|
-
const finalUrl = new URL(output, jsFile).href;
|
|
221
|
-
toReturn.push(finalUrl);
|
|
222
|
-
}
|
|
223
|
-
catch (_c) {
|
|
224
|
-
// skip integers that cause errors in sandboxed execution
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
},
|
|
228
|
-
});
|
|
229
38
|
}
|
|
230
39
|
catch (err) {
|
|
231
|
-
|
|
40
|
+
printMsg(MSG.Err, `[!] Error processing ${jsFile}: ${err}`);
|
|
232
41
|
}
|
|
233
42
|
}));
|
|
43
|
+
toReturn = deduplicateWebpackChunkPaths(toReturn);
|
|
234
44
|
if (toReturn.length > 0) {
|
|
235
|
-
|
|
45
|
+
printMsg(MSG.Run, `[✓] Found ${toReturn.length} webpack chunk JS files`);
|
|
236
46
|
}
|
|
237
|
-
toReturn = [...new Set(toReturn)];
|
|
238
47
|
return toReturn;
|
|
239
48
|
});
|
|
240
49
|
export default react_webpackChunkPaths;
|
|
@@ -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"}
|