@js-recon/js-recon 1.3.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +2 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/.github/ISSUE_TEMPLATE/new_tech_support_request.md +26 -0
- package/.github/workflows/build-and-prettify.yaml +121 -0
- package/.github/workflows/pr_checker.yml +22 -0
- package/.github/workflows/publish-js-recon.yml +169 -0
- package/.prettierignore +2 -0
- package/.prettierrc +6 -0
- package/CHANGELOG.md +692 -0
- package/CLAUDE.md +290 -0
- package/Dockerfile +34 -0
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/SECURITY.md +37 -0
- package/build/analyze/engine/astEngine.js +224 -0
- package/build/analyze/engine/astEngine.js.map +1 -0
- package/build/analyze/engine/index.js +59 -0
- package/build/analyze/engine/index.js.map +1 -0
- package/build/analyze/engine/requestEngine.js +100 -0
- package/build/analyze/engine/requestEngine.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +37 -0
- package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +29 -0
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +38 -0
- package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -0
- package/build/analyze/helpers/engineHelpers/taintFlow.js +250 -0
- package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -0
- package/build/analyze/helpers/initRules.js +111 -0
- package/build/analyze/helpers/initRules.js.map +1 -0
- package/build/analyze/helpers/outputHelper.js +14 -0
- package/build/analyze/helpers/outputHelper.js.map +1 -0
- package/build/analyze/helpers/schemas.js +57 -0
- package/build/analyze/helpers/schemas.js.map +1 -0
- package/build/analyze/helpers/validate.js +89 -0
- package/build/analyze/helpers/validate.js.map +1 -0
- package/build/analyze/index.js +150 -0
- package/build/analyze/index.js.map +1 -0
- package/build/analyze/types/index.js +2 -0
- package/build/analyze/types/index.js.map +1 -0
- package/build/api_gateway/checkFeasibility.js +41 -0
- package/build/api_gateway/checkFeasibility.js.map +1 -0
- package/build/api_gateway/checkFireWallBlocking.js +33 -0
- package/build/api_gateway/checkFireWallBlocking.js.map +1 -0
- package/build/api_gateway/genReq.js +205 -0
- package/build/api_gateway/genReq.js.map +1 -0
- package/build/api_gateway/index.js +291 -0
- package/build/api_gateway/index.js.map +1 -0
- package/build/endpoints/gen_report/gen_json.js +30 -0
- package/build/endpoints/gen_report/gen_json.js.map +1 -0
- package/build/endpoints/gen_report/utility/iterate_n_store.js +64 -0
- package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -0
- package/build/endpoints/index.js +101 -0
- package/build/endpoints/index.js.map +1 -0
- package/build/endpoints/next_js/client_jsFilesHref.js +100 -0
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -0
- package/build/endpoints/next_js/client_jsonParse.js +89 -0
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -0
- package/build/endpoints/next_js/client_mappedJsonFile.js +103 -0
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -0
- package/build/endpoints/next_js/client_subsequentRequests.js +211 -0
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -0
- package/build/fingerprint/index.js +123 -0
- package/build/fingerprint/index.js.map +1 -0
- package/build/globalConfig.js +16 -0
- package/build/globalConfig.js.map +1 -0
- package/build/index.js +332 -0
- package/build/index.js.map +1 -0
- package/build/lazyLoad/angular/angular_getFromMainJs.js +55 -0
- package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -0
- package/build/lazyLoad/angular/angular_getFromPageSource.js +43 -0
- package/build/lazyLoad/angular/angular_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/downloadFilesUtil.js +127 -0
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js +44 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -0
- package/build/lazyLoad/downloadQueue.js +191 -0
- package/build/lazyLoad/downloadQueue.js.map +1 -0
- package/build/lazyLoad/globals.js +107 -0
- package/build/lazyLoad/globals.js.map +1 -0
- package/build/lazyLoad/index.js +377 -0
- package/build/lazyLoad/index.js.map +1 -0
- package/build/lazyLoad/next_js/NextJsCrawler.js +332 -0
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetJSScript.js +126 -0
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +83 -0
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +222 -0
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -0
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +208 -0
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -0
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js +37 -0
- package/build/lazyLoad/next_js/next_bruteForceJsFiles.js.map +1 -0
- package/build/lazyLoad/next_js/next_buildId.js +55 -0
- package/build/lazyLoad/next_js/next_buildId.js.map +1 -0
- package/build/lazyLoad/next_js/next_getClientSidePaths.js +83 -0
- package/build/lazyLoad/next_js/next_getClientSidePaths.js.map +1 -0
- package/build/lazyLoad/next_js/next_globals.js +8 -0
- package/build/lazyLoad/next_js/next_globals.js.map +1 -0
- package/build/lazyLoad/next_js/next_parseLayoutJs.js +116 -0
- package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -0
- package/build/lazyLoad/next_js/next_promiseResolve.js +85 -0
- package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -0
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +51 -0
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +202 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +82 -0
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +108 -0
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -0
- package/build/lazyLoad/react/react_followImports.js +105 -0
- package/build/lazyLoad/react/react_followImports.js.map +1 -0
- package/build/lazyLoad/react/react_getScriptTags.js +52 -0
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -0
- package/build/lazyLoad/react/react_sourcemapUrls.js +44 -0
- package/build/lazyLoad/react/react_sourcemapUrls.js.map +1 -0
- package/build/lazyLoad/react/react_webpackChunkPaths.js +188 -0
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -0
- package/build/lazyLoad/sourcemap.js +188 -0
- package/build/lazyLoad/sourcemap.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js +162 -0
- package/build/lazyLoad/svelte/svelte_discoverPagesFromJs.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +91 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js +180 -0
- package/build/lazyLoad/svelte/svelte_recursivePageCrawl.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +123 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -0
- package/build/lazyLoad/techDetect/checkAngularJS.js +70 -0
- package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -0
- package/build/lazyLoad/techDetect/checkNextJS.js +45 -0
- package/build/lazyLoad/techDetect/checkNextJS.js.map +1 -0
- package/build/lazyLoad/techDetect/checkNuxtJS.js +39 -0
- package/build/lazyLoad/techDetect/checkNuxtJS.js.map +1 -0
- package/build/lazyLoad/techDetect/checkReact.js +86 -0
- package/build/lazyLoad/techDetect/checkReact.js.map +1 -0
- package/build/lazyLoad/techDetect/checkSvelte.js +69 -0
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -0
- package/build/lazyLoad/techDetect/checkVueJS.js +118 -0
- package/build/lazyLoad/techDetect/checkVueJS.js.map +1 -0
- package/build/lazyLoad/techDetect/index.js +161 -0
- package/build/lazyLoad/techDetect/index.js.map +1 -0
- package/build/lazyLoad/vue/vue_RuntimeJs.js +169 -0
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -0
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +102 -0
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -0
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +82 -0
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -0
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +155 -0
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -0
- package/build/lazyLoad/vue/vue_jsImports.js +76 -0
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -0
- package/build/lazyLoad/vue/vue_pageSrc.js +60 -0
- package/build/lazyLoad/vue/vue_pageSrc.js.map +1 -0
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js +64 -0
- package/build/lazyLoad/vue/vue_reconstructSourceMaps.js.map +1 -0
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +142 -0
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -0
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js +57 -0
- package/build/lazyLoad/vue/vue_severalJsFilesHome.js.map +1 -0
- package/build/lazyLoad/vue/vue_sourcemapExtract.js +166 -0
- package/build/lazyLoad/vue/vue_sourcemapExtract.js.map +1 -0
- package/build/lazyLoad/vue/vue_stringJsFiles.js +148 -0
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -0
- package/build/lazyLoad/vue/vue_viteMapDeps.js +89 -0
- package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -0
- package/build/load/index.js +316 -0
- package/build/load/index.js.map +1 -0
- package/build/map/graphql/resolveGraphql.js +296 -0
- package/build/map/graphql/resolveGraphql.js.map +1 -0
- package/build/map/index.js +261 -0
- package/build/map/index.js.map +1 -0
- package/build/map/next_js/getAxiosInstances.js +64 -0
- package/build/map/next_js/getAxiosInstances.js.map +1 -0
- package/build/map/next_js/getExports.js +101 -0
- package/build/map/next_js/getExports.js.map +1 -0
- package/build/map/next_js/getFetchInstances.js +139 -0
- package/build/map/next_js/getFetchInstances.js.map +1 -0
- package/build/map/next_js/getTurbopackConnections.js +255 -0
- package/build/map/next_js/getTurbopackConnections.js.map +1 -0
- package/build/map/next_js/getWebpackConnections.js +235 -0
- package/build/map/next_js/getWebpackConnections.js.map +1 -0
- package/build/map/next_js/interactive.js +69 -0
- package/build/map/next_js/interactive.js.map +1 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js +310 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js +245 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -0
- package/build/map/next_js/interactive_helpers/esqueryGen.js +370 -0
- package/build/map/next_js/interactive_helpers/esqueryGen.js.map +1 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js +12 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -0
- package/build/map/next_js/interactive_helpers/inputPatch.js +207 -0
- package/build/map/next_js/interactive_helpers/inputPatch.js.map +1 -0
- package/build/map/next_js/interactive_helpers/keybindings.js +90 -0
- package/build/map/next_js/interactive_helpers/keybindings.js.map +1 -0
- package/build/map/next_js/interactive_helpers/printer.js +23 -0
- package/build/map/next_js/interactive_helpers/printer.js.map +1 -0
- package/build/map/next_js/interactive_helpers/ui.js +88 -0
- package/build/map/next_js/interactive_helpers/ui.js.map +1 -0
- package/build/map/next_js/resolveAxios.js +152 -0
- package/build/map/next_js/resolveAxios.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js +64 -0
- package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +48 -0
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js +34 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosClients.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +39 -0
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +312 -0
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +173 -0
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +261 -0
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +206 -0
- package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js +168 -0
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +121 -0
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +274 -0
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +518 -0
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -0
- package/build/map/next_js/resolveAxiosHelpers/traceBody.js +913 -0
- package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -0
- package/build/map/next_js/resolveFetch.js +533 -0
- package/build/map/next_js/resolveFetch.js.map +1 -0
- package/build/map/next_js/resolveNewRequest.js +749 -0
- package/build/map/next_js/resolveNewRequest.js.map +1 -0
- package/build/map/next_js/resolveServerActions.js +449 -0
- package/build/map/next_js/resolveServerActions.js.map +1 -0
- package/build/map/next_js/utils.js +1600 -0
- package/build/map/next_js/utils.js.map +1 -0
- package/build/map/react_js/getReactConnections.js +303 -0
- package/build/map/react_js/getReactConnections.js.map +1 -0
- package/build/map/react_js/interactive.js +4 -0
- package/build/map/react_js/interactive.js.map +1 -0
- package/build/map/react_js/react_resolveFetch.js +6 -0
- package/build/map/react_js/react_resolveFetch.js.map +1 -0
- package/build/map/svelte_js/interactive.js +58 -0
- package/build/map/svelte_js/interactive.js.map +1 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js +4 -0
- package/build/map/svelte_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/vue_js/bodyResolver.js +477 -0
- package/build/map/vue_js/bodyResolver.js.map +1 -0
- package/build/map/vue_js/crossFileResolver.js +438 -0
- package/build/map/vue_js/crossFileResolver.js.map +1 -0
- package/build/map/vue_js/getViteConnections.js +343 -0
- package/build/map/vue_js/getViteConnections.js.map +1 -0
- package/build/map/vue_js/interactive.js +67 -0
- package/build/map/vue_js/interactive.js.map +1 -0
- package/build/map/vue_js/interactive_helpers/commandHandler.js +307 -0
- package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/vue_js/interactive_helpers/commandHelpers.js +39 -0
- package/build/map/vue_js/interactive_helpers/commandHelpers.js.map +1 -0
- package/build/map/vue_js/interactive_helpers/helpMenu.js +12 -0
- package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -0
- package/build/map/vue_js/taint_utils.js +621 -0
- package/build/map/vue_js/taint_utils.js.map +1 -0
- package/build/map/vue_js/vue_resolveFetch.js +416 -0
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -0
- package/build/map/vue_js/vue_resolveHttpClient.js +738 -0
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -0
- package/build/map/vue_js/vue_resolveXhr.js +282 -0
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -0
- package/build/mcp/chatOneShot.js +101 -0
- package/build/mcp/chatOneShot.js.map +1 -0
- package/build/mcp/claudeCodeCreds.js +150 -0
- package/build/mcp/claudeCodeCreds.js.map +1 -0
- package/build/mcp/cli.js +372 -0
- package/build/mcp/cli.js.map +1 -0
- package/build/mcp/commands.js +227 -0
- package/build/mcp/commands.js.map +1 -0
- package/build/mcp/config.js +68 -0
- package/build/mcp/config.js.map +1 -0
- package/build/mcp/index.js +50 -0
- package/build/mcp/index.js.map +1 -0
- package/build/mcp/intent.js +204 -0
- package/build/mcp/intent.js.map +1 -0
- package/build/mcp/jobs.js +199 -0
- package/build/mcp/jobs.js.map +1 -0
- package/build/mcp/mcpServer.js +241 -0
- package/build/mcp/mcpServer.js.map +1 -0
- package/build/mcp/providers.js +170 -0
- package/build/mcp/providers.js.map +1 -0
- package/build/mcp/skills.js +115 -0
- package/build/mcp/skills.js.map +1 -0
- package/build/mcp/tools.js +185 -0
- package/build/mcp/tools.js.map +1 -0
- package/build/refactor/index.js +85 -0
- package/build/refactor/index.js.map +1 -0
- package/build/refactor/next/index.js +109 -0
- package/build/refactor/next/index.js.map +1 -0
- package/build/refactor/react/index.js +636 -0
- package/build/refactor/react/index.js.map +1 -0
- package/build/report/index.js +68 -0
- package/build/report/index.js.map +1 -0
- package/build/report/utility/dataTables/genDataTablesPage.js +158 -0
- package/build/report/utility/dataTables/genDataTablesPage.js.map +1 -0
- package/build/report/utility/genHtml.js +516 -0
- package/build/report/utility/genHtml.js.map +1 -0
- package/build/report/utility/initReportDb.js +96 -0
- package/build/report/utility/initReportDb.js.map +1 -0
- package/build/report/utility/markdownGen/addAnalyze.js +53 -0
- package/build/report/utility/markdownGen/addAnalyze.js.map +1 -0
- package/build/report/utility/markdownGen/addMappedJson.js +33 -0
- package/build/report/utility/markdownGen/addMappedJson.js.map +1 -0
- package/build/report/utility/populateDb/populateAnalysisFindings.js +31 -0
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -0
- package/build/report/utility/populateDb/populateEndpoints.js +50 -0
- package/build/report/utility/populateDb/populateEndpoints.js.map +1 -0
- package/build/report/utility/populateDb/populateMappedJson.js +31 -0
- package/build/report/utility/populateDb/populateMappedJson.js.map +1 -0
- package/build/report/utility/populateDb/populateMappedOpenapi.js +49 -0
- package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -0
- package/build/run/index.js +446 -0
- package/build/run/index.js.map +1 -0
- package/build/run/interruptHandler.js +93 -0
- package/build/run/interruptHandler.js.map +1 -0
- package/build/strings/index.js +239 -0
- package/build/strings/index.js.map +1 -0
- package/build/strings/openapi.js +63 -0
- package/build/strings/openapi.js.map +1 -0
- package/build/strings/permutate.js +62 -0
- package/build/strings/permutate.js.map +1 -0
- package/build/strings/secrets.js +102 -0
- package/build/strings/secrets.js.map +1 -0
- package/build/utility/ai.js +97 -0
- package/build/utility/ai.js.map +1 -0
- package/build/utility/configureSandbox.js +14 -0
- package/build/utility/configureSandbox.js.map +1 -0
- package/build/utility/globals.js +322 -0
- package/build/utility/globals.js.map +1 -0
- package/build/utility/interfaces.js +2 -0
- package/build/utility/interfaces.js.map +1 -0
- package/build/utility/makeReq.js +448 -0
- package/build/utility/makeReq.js.map +1 -0
- package/build/utility/openapiGenerator.js +254 -0
- package/build/utility/openapiGenerator.js.map +1 -0
- package/build/utility/postmanGenerator.js +216 -0
- package/build/utility/postmanGenerator.js.map +1 -0
- package/build/utility/progressLog.js +50 -0
- package/build/utility/progressLog.js.map +1 -0
- package/build/utility/puppeteerInstance.js +5 -0
- package/build/utility/puppeteerInstance.js.map +1 -0
- package/build/utility/replaceUrlPlaceholders.js +48 -0
- package/build/utility/replaceUrlPlaceholders.js.map +1 -0
- package/build/utility/resolvePath.js +44 -0
- package/build/utility/resolvePath.js.map +1 -0
- package/build/utility/runSandboxed.js +42 -0
- package/build/utility/runSandboxed.js.map +1 -0
- package/build/utility/urlUtils.js +21 -0
- package/build/utility/urlUtils.js.map +1 -0
- package/contributing/nextjs.md +410 -0
- package/package.json +75 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
// Next.JS
|
|
13
|
+
import getWebpackConnections from "./next_js/getWebpackConnections.js";
|
|
14
|
+
import getTurbopackConnections from "./next_js/getTurbopackConnections.js";
|
|
15
|
+
import getFetchInstances from "./next_js/getFetchInstances.js";
|
|
16
|
+
import resolveFetch from "./next_js/resolveFetch.js";
|
|
17
|
+
import resolveNewRequest from "./next_js/resolveNewRequest.js";
|
|
18
|
+
import interactive, { runCommands as nextRunCommands } from "./next_js/interactive.js";
|
|
19
|
+
import { existsSync, readFileSync } from "fs";
|
|
20
|
+
import getAxiosInstances from "./next_js/getAxiosInstances.js";
|
|
21
|
+
import resolveAxios from "./next_js/resolveAxios.js";
|
|
22
|
+
import { getOpenapi, getOpenapiOutput, getOpenapiOutputFile, getGraphqlEnabled } from "../utility/globals.js";
|
|
23
|
+
import resolveGraphql from "./graphql/resolveGraphql.js";
|
|
24
|
+
import { generateOpenapiV3Spec } from "../utility/openapiGenerator.js";
|
|
25
|
+
import { generatePostmanCollection } from "../utility/postmanGenerator.js";
|
|
26
|
+
import getExports from "./next_js/getExports.js";
|
|
27
|
+
import resolveServerActions from "./next_js/resolveServerActions.js";
|
|
28
|
+
// Vue.JS
|
|
29
|
+
import getViteConnections from "./vue_js/getViteConnections.js";
|
|
30
|
+
import vueInteractive, { runCommands as vueRunCommands } from "./vue_js/interactive.js";
|
|
31
|
+
import vue_resolveFetch from "./vue_js/vue_resolveFetch.js";
|
|
32
|
+
// Svelte/Astro
|
|
33
|
+
import svelteInteractive, { runCommands as svelteRunCommands } from "./svelte_js/interactive.js";
|
|
34
|
+
// React
|
|
35
|
+
import getReactConnections from "./react_js/getReactConnections.js";
|
|
36
|
+
import reactInteractive, { runCommands as reactRunCommands } from "./react_js/interactive.js";
|
|
37
|
+
import react_resolveFetch from "./react_js/react_resolveFetch.js";
|
|
38
|
+
// XHR resolution (shared across Vite-based techs)
|
|
39
|
+
import vue_resolveXhr from "./vue_js/vue_resolveXhr.js";
|
|
40
|
+
import vue_resolveHttpClient from "./vue_js/vue_resolveHttpClient.js";
|
|
41
|
+
const availableTech = {
|
|
42
|
+
next: "Next.JS",
|
|
43
|
+
vue: "Vue.JS",
|
|
44
|
+
react: "React",
|
|
45
|
+
svelte: "Svelte/Astro",
|
|
46
|
+
};
|
|
47
|
+
const availableFormats = {
|
|
48
|
+
json: "JSON",
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Maps and analyzes JavaScript code to identify functions, API calls, and connections.
|
|
52
|
+
*
|
|
53
|
+
* This function orchestrates the mapping process by:
|
|
54
|
+
* 1. Analyzing webpack connections and chunk relationships
|
|
55
|
+
* 2. Extracting exports and function definitions
|
|
56
|
+
* 3. Identifying fetch and axios instances
|
|
57
|
+
* 4. Resolving API calls and their parameters
|
|
58
|
+
* 5. Optionally generating OpenAPI specifications
|
|
59
|
+
*
|
|
60
|
+
* @param directory - Directory containing JavaScript files to analyze
|
|
61
|
+
* @param output - Base filename for output files (without extension)
|
|
62
|
+
* @param formats - Array of output formats to generate (e.g., ['json'])
|
|
63
|
+
* @param tech - Technology stack identifier (e.g., 'next' for Next.js)
|
|
64
|
+
* @param list - Whether to list available technologies instead of running analysis
|
|
65
|
+
* @param interactive_mode - Whether to launch interactive mode after analysis
|
|
66
|
+
* @returns Promise that resolves when mapping analysis is complete
|
|
67
|
+
*/
|
|
68
|
+
const map = (directory_1, output_1, formats_1, tech_1, list_1, interactive_mode_1, ...args_1) => __awaiter(void 0, [directory_1, output_1, formats_1, tech_1, list_1, interactive_mode_1, ...args_1], void 0, function* (directory, output, formats, tech, list, interactive_mode, commands = []) {
|
|
69
|
+
console.log(chalk.cyan("[i] Running 'map' module"));
|
|
70
|
+
if (list) {
|
|
71
|
+
console.log(chalk.cyan("Available technologies:"));
|
|
72
|
+
for (const [key, value] of Object.entries(availableTech)) {
|
|
73
|
+
console.log(chalk.cyan(`- '${key}': ${value}`));
|
|
74
|
+
}
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// iterate through all the formats, and match it with the available formats
|
|
78
|
+
for (const format of formats) {
|
|
79
|
+
if (!Object.keys(availableFormats).includes(format)) {
|
|
80
|
+
console.error(chalk.red(`[!] Invalid format: ${format}`));
|
|
81
|
+
process.exit(4);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (!tech) {
|
|
85
|
+
console.error(chalk.red("[!] Please specify a technology with -t/--tech. Run with -l/--list to see available technologies"));
|
|
86
|
+
process.exit(5);
|
|
87
|
+
}
|
|
88
|
+
if (!directory) {
|
|
89
|
+
console.error(chalk.red("[!] Please specify a directory with -d/--directory"));
|
|
90
|
+
process.exit(6);
|
|
91
|
+
}
|
|
92
|
+
if (tech === "next") {
|
|
93
|
+
let chunks;
|
|
94
|
+
let allOutputFilesAvailable = true;
|
|
95
|
+
Object.keys(availableFormats).map((key, value) => {
|
|
96
|
+
if (!existsSync(`${output}.${key}`)) {
|
|
97
|
+
allOutputFilesAvailable = false;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
if (!allOutputFilesAvailable) {
|
|
101
|
+
// skip regeneration if output file already exists
|
|
102
|
+
chunks = yield getWebpackConnections(directory, output, formats);
|
|
103
|
+
// also collect Turbopack chunks (Next.JS apps may be built with either bundler)
|
|
104
|
+
chunks = yield getTurbopackConnections(directory, output, formats, chunks);
|
|
105
|
+
// get the exports
|
|
106
|
+
chunks = yield getExports(chunks);
|
|
107
|
+
// now, iterate through them, and check fetch instances
|
|
108
|
+
chunks = yield getFetchInstances(chunks, output, formats);
|
|
109
|
+
// now, iterate through them, and check axios instances
|
|
110
|
+
chunks = yield getAxiosInstances(chunks, output, formats);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// read the JSON file, and load the value
|
|
114
|
+
chunks = JSON.parse(readFileSync(`${output}.json`, { encoding: "utf8" }));
|
|
115
|
+
}
|
|
116
|
+
// resolve fetch once you've got all
|
|
117
|
+
yield resolveFetch(chunks, directory);
|
|
118
|
+
// also, the axios instances
|
|
119
|
+
yield resolveAxios(chunks, directory);
|
|
120
|
+
// wrapper-class HTTP requests: new X({url, method, ...})
|
|
121
|
+
yield resolveNewRequest(chunks, directory);
|
|
122
|
+
// Next.js Server Actions registered via createServerReference(...)
|
|
123
|
+
yield resolveServerActions(chunks, directory);
|
|
124
|
+
if (commands.length > 0) {
|
|
125
|
+
yield nextRunCommands(chunks, `${output}.json`, commands);
|
|
126
|
+
}
|
|
127
|
+
else if (interactive_mode) {
|
|
128
|
+
yield interactive(chunks, `${output}.json`);
|
|
129
|
+
}
|
|
130
|
+
if (getOpenapi() === true && getGraphqlEnabled()) {
|
|
131
|
+
yield resolveGraphql(directory);
|
|
132
|
+
}
|
|
133
|
+
// check if the openapi output is enabled. if so, then write to file
|
|
134
|
+
if (getOpenapi() === true) {
|
|
135
|
+
// convert the openapi output to JSON
|
|
136
|
+
// it should be openapi v3 specification
|
|
137
|
+
const openapiSpec = generateOpenapiV3Spec(getOpenapiOutput(), chunks);
|
|
138
|
+
const openapiJson = JSON.stringify(openapiSpec, null, 2);
|
|
139
|
+
// write to file
|
|
140
|
+
fs.writeFileSync(getOpenapiOutputFile(), openapiJson);
|
|
141
|
+
console.log(chalk.green(`[✓] Generated OpenAPI spec at ${getOpenapiOutputFile()}`));
|
|
142
|
+
// Also emit a Postman Collection v2.1 — Bruno/Insomnia/Postman use its
|
|
143
|
+
// nested `item` arrays to render real folder hierarchies on import,
|
|
144
|
+
// which a flat OpenAPI tag list can't represent.
|
|
145
|
+
const postmanCollection = generatePostmanCollection(getOpenapiOutput());
|
|
146
|
+
const openapiOutputFile = getOpenapiOutputFile();
|
|
147
|
+
const postmanOutputFile = openapiOutputFile.endsWith(".json")
|
|
148
|
+
? openapiOutputFile.replace(/\.json$/, ".postman_collection.json")
|
|
149
|
+
: `${openapiOutputFile}.postman_collection.json`;
|
|
150
|
+
fs.writeFileSync(postmanOutputFile, JSON.stringify(postmanCollection, null, 2));
|
|
151
|
+
console.log(chalk.green(`[✓] Generated Postman Collection at ${postmanOutputFile}`));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else if (tech === "vue") {
|
|
155
|
+
let chunks;
|
|
156
|
+
if (!existsSync(`${output}.json`)) {
|
|
157
|
+
chunks = yield getViteConnections(directory, output, formats);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
chunks = JSON.parse(readFileSync(`${output}.json`, { encoding: "utf8" }));
|
|
161
|
+
}
|
|
162
|
+
// Resolve fetch instances across all Vue.JS files
|
|
163
|
+
yield vue_resolveFetch(directory);
|
|
164
|
+
yield vue_resolveXhr(directory);
|
|
165
|
+
yield vue_resolveHttpClient(directory);
|
|
166
|
+
if (commands.length > 0) {
|
|
167
|
+
yield vueRunCommands(chunks, `${output}.json`, commands);
|
|
168
|
+
}
|
|
169
|
+
else if (interactive_mode) {
|
|
170
|
+
yield vueInteractive(chunks, `${output}.json`);
|
|
171
|
+
}
|
|
172
|
+
if (getOpenapi() === true && getGraphqlEnabled()) {
|
|
173
|
+
yield resolveGraphql(directory);
|
|
174
|
+
}
|
|
175
|
+
// Generate OpenAPI spec and Postman collection if enabled
|
|
176
|
+
if (getOpenapi() === true) {
|
|
177
|
+
const openapiSpec = generateOpenapiV3Spec(getOpenapiOutput(), chunks);
|
|
178
|
+
const openapiJson = JSON.stringify(openapiSpec, null, 2);
|
|
179
|
+
fs.writeFileSync(getOpenapiOutputFile(), openapiJson);
|
|
180
|
+
console.log(chalk.green(`[✓] Generated OpenAPI spec at ${getOpenapiOutputFile()}`));
|
|
181
|
+
const postmanCollection = generatePostmanCollection(getOpenapiOutput());
|
|
182
|
+
const openapiOutputFile = getOpenapiOutputFile();
|
|
183
|
+
const postmanOutputFile = openapiOutputFile.endsWith(".json")
|
|
184
|
+
? openapiOutputFile.replace(/\.json$/, ".postman_collection.json")
|
|
185
|
+
: `${openapiOutputFile}.postman_collection.json`;
|
|
186
|
+
fs.writeFileSync(postmanOutputFile, JSON.stringify(postmanCollection, null, 2));
|
|
187
|
+
console.log(chalk.green(`[✓] Generated Postman Collection at ${postmanOutputFile}`));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else if (tech === "react") {
|
|
191
|
+
let chunks;
|
|
192
|
+
if (!existsSync(`${output}.json`)) {
|
|
193
|
+
chunks = yield getReactConnections(directory, output, formats);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
chunks = JSON.parse(readFileSync(`${output}.json`, { encoding: "utf8" }));
|
|
197
|
+
}
|
|
198
|
+
yield react_resolveFetch(directory);
|
|
199
|
+
yield vue_resolveXhr(directory, "React");
|
|
200
|
+
yield vue_resolveHttpClient(directory, "React");
|
|
201
|
+
if (commands.length > 0) {
|
|
202
|
+
yield reactRunCommands(chunks, `${output}.json`, commands);
|
|
203
|
+
}
|
|
204
|
+
else if (interactive_mode) {
|
|
205
|
+
yield reactInteractive(chunks, `${output}.json`);
|
|
206
|
+
}
|
|
207
|
+
if (getOpenapi() === true && getGraphqlEnabled()) {
|
|
208
|
+
yield resolveGraphql(directory);
|
|
209
|
+
}
|
|
210
|
+
if (getOpenapi() === true) {
|
|
211
|
+
const openapiSpec = generateOpenapiV3Spec(getOpenapiOutput(), chunks);
|
|
212
|
+
const openapiJson = JSON.stringify(openapiSpec, null, 2);
|
|
213
|
+
fs.writeFileSync(getOpenapiOutputFile(), openapiJson);
|
|
214
|
+
console.log(chalk.green(`[✓] Generated OpenAPI spec at ${getOpenapiOutputFile()}`));
|
|
215
|
+
const postmanCollection = generatePostmanCollection(getOpenapiOutput());
|
|
216
|
+
const openapiOutputFile = getOpenapiOutputFile();
|
|
217
|
+
const postmanOutputFile = openapiOutputFile.endsWith(".json")
|
|
218
|
+
? openapiOutputFile.replace(/\.json$/, ".postman_collection.json")
|
|
219
|
+
: `${openapiOutputFile}.postman_collection.json`;
|
|
220
|
+
fs.writeFileSync(postmanOutputFile, JSON.stringify(postmanCollection, null, 2));
|
|
221
|
+
console.log(chalk.green(`[✓] Generated Postman Collection at ${postmanOutputFile}`));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else if (tech === "svelte") {
|
|
225
|
+
let chunks;
|
|
226
|
+
if (!existsSync(`${output}.json`)) {
|
|
227
|
+
// Astro+Svelte uses Vite — same chunk format as Vue.JS
|
|
228
|
+
chunks = yield getViteConnections(directory, output, formats);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
chunks = JSON.parse(readFileSync(`${output}.json`, { encoding: "utf8" }));
|
|
232
|
+
}
|
|
233
|
+
yield vue_resolveFetch(directory, "Svelte/Astro");
|
|
234
|
+
yield vue_resolveXhr(directory, "Svelte/Astro");
|
|
235
|
+
yield vue_resolveHttpClient(directory, "Svelte/Astro");
|
|
236
|
+
if (commands.length > 0) {
|
|
237
|
+
yield svelteRunCommands(chunks, `${output}.json`, commands);
|
|
238
|
+
}
|
|
239
|
+
else if (interactive_mode) {
|
|
240
|
+
yield svelteInteractive(chunks, `${output}.json`);
|
|
241
|
+
}
|
|
242
|
+
if (getOpenapi() === true && getGraphqlEnabled()) {
|
|
243
|
+
yield resolveGraphql(directory);
|
|
244
|
+
}
|
|
245
|
+
if (getOpenapi() === true) {
|
|
246
|
+
const openapiSpec = generateOpenapiV3Spec(getOpenapiOutput(), chunks);
|
|
247
|
+
const openapiJson = JSON.stringify(openapiSpec, null, 2);
|
|
248
|
+
fs.writeFileSync(getOpenapiOutputFile(), openapiJson);
|
|
249
|
+
console.log(chalk.green(`[✓] Generated OpenAPI spec at ${getOpenapiOutputFile()}`));
|
|
250
|
+
const postmanCollection = generatePostmanCollection(getOpenapiOutput());
|
|
251
|
+
const openapiOutputFile = getOpenapiOutputFile();
|
|
252
|
+
const postmanOutputFile = openapiOutputFile.endsWith(".json")
|
|
253
|
+
? openapiOutputFile.replace(/\.json$/, ".postman_collection.json")
|
|
254
|
+
: `${openapiOutputFile}.postman_collection.json`;
|
|
255
|
+
fs.writeFileSync(postmanOutputFile, JSON.stringify(postmanCollection, null, 2));
|
|
256
|
+
console.log(chalk.green(`[✓] Generated Postman Collection at ${postmanOutputFile}`));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
export default map;
|
|
261
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/map/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
/**
|
|
13
|
+
* Detects and marks chunks that contain Axios HTTP client library instances.
|
|
14
|
+
*
|
|
15
|
+
* Uses regex patterns to identify chunks containing Axios-specific code patterns
|
|
16
|
+
* such as AxiosHeaders, isAxiosError, and AxiosError. When detected, marks the
|
|
17
|
+
* chunk with an isAxiosClient flag and updates its description.
|
|
18
|
+
*
|
|
19
|
+
* @param chunks - Collection of code chunks to analyze for Axios instances
|
|
20
|
+
* @param output - Base filename for output files (without extension)
|
|
21
|
+
* @param formats - Array of output formats to generate (e.g., ['json'])
|
|
22
|
+
* @returns Promise that resolves to the updated chunks with Axios detection results
|
|
23
|
+
*/
|
|
24
|
+
const getAxiosInstances = (chunks, output, formats) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
|
+
console.log(chalk.cyan("[i] Getting axios instances"));
|
|
26
|
+
let chunkCopy = structuredClone(chunks);
|
|
27
|
+
// iterate through all the chunks
|
|
28
|
+
for (const chunk of Object.values(chunks)) {
|
|
29
|
+
const chunkCode = chunk.code;
|
|
30
|
+
// regex checks first
|
|
31
|
+
const axiosVarRegex_AxiosHeaders = /AxiosHeaders = /;
|
|
32
|
+
const axiosVarRegex_isAxiosError = /isAxiosError = /;
|
|
33
|
+
const axiosVarRegex_AxiosError = /AxiosError = /;
|
|
34
|
+
const axiosObjectRegex_AxiosHeaders = /\.AxiosHeaders/;
|
|
35
|
+
const axiosObjectRegex_isAxiosError = /\.isAxiosError/;
|
|
36
|
+
const axiosObjectRegex_AxiosError = /\.AxiosError/;
|
|
37
|
+
// go through the code, and see if all of these matches or not
|
|
38
|
+
let axiosDetected = false;
|
|
39
|
+
if (axiosVarRegex_AxiosHeaders.test(chunkCode) &&
|
|
40
|
+
axiosVarRegex_isAxiosError.test(chunkCode) &&
|
|
41
|
+
axiosVarRegex_AxiosError.test(chunkCode) &&
|
|
42
|
+
axiosObjectRegex_AxiosHeaders.test(chunkCode) &&
|
|
43
|
+
axiosObjectRegex_isAxiosError.test(chunkCode) &&
|
|
44
|
+
axiosObjectRegex_AxiosError.test(chunkCode)) {
|
|
45
|
+
axiosDetected = true;
|
|
46
|
+
}
|
|
47
|
+
if (axiosDetected) {
|
|
48
|
+
chunkCopy[chunk.id].isAxiosLibrary = true;
|
|
49
|
+
if (chunks[chunk.id].description === "none") {
|
|
50
|
+
chunkCopy[chunk.id].description = "Axios library";
|
|
51
|
+
}
|
|
52
|
+
console.log(chalk.green(`[✓] Axios detected in chunk ${chunk.id}`));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// write the chunk to the output file
|
|
56
|
+
if (formats.includes("json")) {
|
|
57
|
+
const chunks_json = JSON.stringify(chunkCopy, null, 2);
|
|
58
|
+
fs.writeFileSync(`${output}.json`, chunks_json);
|
|
59
|
+
console.log(chalk.green(`[✓] Saved webpack with axios instances to ${output}.json`));
|
|
60
|
+
}
|
|
61
|
+
return chunkCopy;
|
|
62
|
+
});
|
|
63
|
+
export default getAxiosInstances;
|
|
64
|
+
//# sourceMappingURL=getAxiosInstances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getAxiosInstances.js","sourceRoot":"","sources":["../../../src/map/next_js/getAxiosInstances.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB;;;;;;;;;;;GAWG;AACH,MAAM,iBAAiB,GAAG,CAAO,MAAc,EAAE,MAAc,EAAE,OAAiB,EAAmB,EAAE;IACnG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAEvD,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,iCAAiC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAE7B,qBAAqB;QACrB,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;QACrD,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;QACrD,MAAM,wBAAwB,GAAG,eAAe,CAAC;QACjD,MAAM,6BAA6B,GAAG,gBAAgB,CAAC;QACvD,MAAM,6BAA6B,GAAG,gBAAgB,CAAC;QACvD,MAAM,2BAA2B,GAAG,cAAc,CAAC;QAEnD,8DAA8D;QAC9D,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IACI,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC;YACxC,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7C,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7C,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,EAC7C,CAAC;YACC,aAAa,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAChB,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC;YAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC1C,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,GAAG,eAAe,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvD,EAAE,CAAC,aAAa,CAAC,GAAG,MAAM,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,MAAM,OAAO,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import parser from "@babel/parser";
|
|
12
|
+
import _traverse from "@babel/traverse";
|
|
13
|
+
const traverse = _traverse.default;
|
|
14
|
+
/**
|
|
15
|
+
* Gets the exports of each chunk.
|
|
16
|
+
* @param {Chunks} chunks - A dictionary of chunk names to chunk objects.
|
|
17
|
+
* @returns {Promise<Chunks>} - A promise that resolves with a dictionary of chunk names to chunk objects with their exports.
|
|
18
|
+
*/
|
|
19
|
+
const getExports = (chunks) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
+
console.log(chalk.cyan("[i] Getting exports"));
|
|
21
|
+
let chunkCopy = chunks;
|
|
22
|
+
// iterate through the chunks
|
|
23
|
+
for (const chunk of Object.values(chunks)) {
|
|
24
|
+
// get the chunk code
|
|
25
|
+
const chunkCode = chunk.code;
|
|
26
|
+
// parse it with ast
|
|
27
|
+
let ast;
|
|
28
|
+
try {
|
|
29
|
+
ast = parser.parse(chunkCode, {
|
|
30
|
+
sourceType: "unambiguous",
|
|
31
|
+
plugins: ["jsx", "typescript"],
|
|
32
|
+
errorRecovery: true,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (_a) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
// declare the exportname var
|
|
39
|
+
let chunkSecondArg;
|
|
40
|
+
let chunkThirdArg;
|
|
41
|
+
// get the second and the third argument of the function
|
|
42
|
+
traverse(ast, {
|
|
43
|
+
enter(path) {
|
|
44
|
+
let funcNode = null;
|
|
45
|
+
if (path.isFunctionDeclaration()) {
|
|
46
|
+
funcNode = path.node;
|
|
47
|
+
}
|
|
48
|
+
else if (path.isAssignmentExpression() && path.node.right.type === "ArrowFunctionExpression") {
|
|
49
|
+
funcNode = path.node.right;
|
|
50
|
+
}
|
|
51
|
+
if (funcNode && funcNode.params.length >= 2) {
|
|
52
|
+
const secondParam = funcNode.params[1];
|
|
53
|
+
if (secondParam.type === "Identifier") {
|
|
54
|
+
chunkSecondArg = secondParam.name;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (funcNode && funcNode.params.length >= 3) {
|
|
58
|
+
const thirdParam = funcNode.params[2];
|
|
59
|
+
if (thirdParam.type === "Identifier") {
|
|
60
|
+
chunkThirdArg = thirdParam.name;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (chunkSecondArg && chunkThirdArg) {
|
|
64
|
+
path.stop();
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
if (!chunkSecondArg) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
let chunkExports = [];
|
|
72
|
+
// first of all, it is exported something like this:
|
|
73
|
+
// chunkThirdArg.<something>(secondArg, {default: ..., key2: ...})
|
|
74
|
+
// we need to get the names like 'default', 'key2', etc
|
|
75
|
+
traverse(ast, {
|
|
76
|
+
CallExpression(path) {
|
|
77
|
+
const { node } = path;
|
|
78
|
+
if (node.callee.type === "MemberExpression" &&
|
|
79
|
+
node.callee.object.type === "Identifier" &&
|
|
80
|
+
node.callee.object.name === chunkThirdArg &&
|
|
81
|
+
node.arguments.length >= 2 &&
|
|
82
|
+
node.arguments[0].type === "Identifier" &&
|
|
83
|
+
node.arguments[0].name === chunkSecondArg &&
|
|
84
|
+
node.arguments[1].type === "ObjectExpression") {
|
|
85
|
+
// get the names of the properties
|
|
86
|
+
node.arguments[1].properties.forEach((property) => {
|
|
87
|
+
if (property.type !== "SpreadElement" && property.key.type === "Identifier") {
|
|
88
|
+
chunkExports.push(property.key.name);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
// now, iterate again, and find the different instance
|
|
95
|
+
// it should be something like Object.defineProperty
|
|
96
|
+
chunkCopy[chunk.id].exports = chunkExports;
|
|
97
|
+
}
|
|
98
|
+
return chunkCopy;
|
|
99
|
+
});
|
|
100
|
+
export default getExports;
|
|
101
|
+
//# sourceMappingURL=getExports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getExports.js","sourceRoot":"","sources":["../../../src/map/next_js/getExports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
import _traverse from "@babel/traverse";
|
|
13
|
+
const traverse = _traverse.default;
|
|
14
|
+
import parser from "@babel/parser";
|
|
15
|
+
/**
|
|
16
|
+
* Checks if a node is a fetch identifier.
|
|
17
|
+
*
|
|
18
|
+
* @param node - The AST node to check
|
|
19
|
+
* @returns True if the node is an identifier named 'fetch'
|
|
20
|
+
*/
|
|
21
|
+
const isFetchIdentifier = (node) => {
|
|
22
|
+
return node.type === "Identifier" && node.name === "fetch";
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Checks if a node represents a fallback pattern that resolves to fetch.
|
|
26
|
+
*
|
|
27
|
+
* Detects patterns like 'x ?? fetch' or 'cond ? x : fetch' where fetch is used as a fallback.
|
|
28
|
+
*
|
|
29
|
+
* @param node - The AST node to check
|
|
30
|
+
* @returns True if the node is a fallback pattern that resolves to fetch
|
|
31
|
+
*/
|
|
32
|
+
const isFetchFallback = (node) => {
|
|
33
|
+
// x ?? fetch OR cond ? x : fetch
|
|
34
|
+
return ((node.type === "LogicalExpression" && node.right && isFetchIdentifier(node.right)) ||
|
|
35
|
+
(node.type === "ConditionalExpression" && isFetchIdentifier(node.alternate)));
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Analyzes code chunks to identify fetch API usage including direct calls and aliases.
|
|
39
|
+
*
|
|
40
|
+
* This function performs a multi-pass analysis to:
|
|
41
|
+
* 1. Find variables that are aliases for the fetch function
|
|
42
|
+
* 2. Track all direct fetch() calls
|
|
43
|
+
* 3. Report call sites for both direct calls and aliases
|
|
44
|
+
* 4. Mark chunks that contain fetch usage
|
|
45
|
+
*
|
|
46
|
+
* @param chunks - Collection of code chunks to analyze
|
|
47
|
+
* @param output - Base filename for output files (without extension)
|
|
48
|
+
* @param formats - Array of output formats to generate (e.g., ['json'])
|
|
49
|
+
* @returns Promise that resolves to updated chunks with fetch detection results
|
|
50
|
+
*/
|
|
51
|
+
const getFetchInstances = (chunks, output, formats) => __awaiter(void 0, void 0, void 0, function* () {
|
|
52
|
+
console.log(chalk.cyan("[i] Running 'getFetchInstances' module"));
|
|
53
|
+
let chunk_copy = Object.assign({}, chunks);
|
|
54
|
+
// iterate through the chunks, and check fetch instances
|
|
55
|
+
for (let chunk of Object.values(chunks)) {
|
|
56
|
+
let chunkAst;
|
|
57
|
+
try {
|
|
58
|
+
chunkAst = parser.parse(chunk.code, {
|
|
59
|
+
sourceType: "module",
|
|
60
|
+
plugins: ["jsx", "typescript"],
|
|
61
|
+
errorRecovery: true,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (_a) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const fetchAliases = new Set();
|
|
68
|
+
const fetchCalls = new Set();
|
|
69
|
+
traverse(chunkAst, {
|
|
70
|
+
// -------- Pass 1: look for aliases --------
|
|
71
|
+
// a) const S = fetch;
|
|
72
|
+
// b) const S = something ?? fetch;
|
|
73
|
+
// c) const S = cond ? x : fetch;
|
|
74
|
+
VariableDeclarator(path) {
|
|
75
|
+
const { id, init } = path.node;
|
|
76
|
+
if (id.type !== "Identifier" || !init)
|
|
77
|
+
return;
|
|
78
|
+
const aliasName = id.name;
|
|
79
|
+
if (isFetchIdentifier(init) || isFetchFallback(init)) {
|
|
80
|
+
// Record the binding *object* so we can track its references later
|
|
81
|
+
const binding = path.scope.getBinding(aliasName);
|
|
82
|
+
if (binding) {
|
|
83
|
+
fetchAliases.add(binding);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
AssignmentExpression(path) {
|
|
88
|
+
// Handles re-assignment: S = fetch;
|
|
89
|
+
const { left, right } = path.node;
|
|
90
|
+
if (left.type !== "Identifier")
|
|
91
|
+
return;
|
|
92
|
+
if (isFetchIdentifier(right) || isFetchFallback(right)) {
|
|
93
|
+
const binding = path.scope.getBinding(left.name);
|
|
94
|
+
if (binding) {
|
|
95
|
+
fetchAliases.add(binding);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
CallExpression(path) {
|
|
100
|
+
if (isFetchIdentifier(path.node.callee)) {
|
|
101
|
+
const { line, column } = path.node.callee.loc.start;
|
|
102
|
+
fetchCalls.add({
|
|
103
|
+
line,
|
|
104
|
+
column,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
// -------- Pass 2: report the call-sites (aliases) --------
|
|
110
|
+
for (const binding of fetchAliases) {
|
|
111
|
+
// @ts-ignore
|
|
112
|
+
binding.referencePaths.forEach((ref) => {
|
|
113
|
+
const parent = ref.parent;
|
|
114
|
+
if (parent.type === "CallExpression" && parent.callee === ref.node) {
|
|
115
|
+
const { line, column } = ref.node.loc.start;
|
|
116
|
+
console.log(chalk.magenta(`[fetch] Webpack ID ${chunk.id}: fetch() alias '${ref.node.name}' called at ${line}:${column}`));
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// -------- Pass 3: report the call-sites (direct) --------
|
|
121
|
+
for (const call of fetchCalls) {
|
|
122
|
+
console.log(chalk.magenta(
|
|
123
|
+
// @ts-ignore
|
|
124
|
+
`[fetch] Webpack ID ${chunk.id}: fetch() called at ${call.line}:${call.column}`));
|
|
125
|
+
}
|
|
126
|
+
// if the length of either of the sets is non-zero, then mark the chunk as containing fetch
|
|
127
|
+
if (fetchAliases.size > 0 || fetchCalls.size > 0) {
|
|
128
|
+
chunk_copy[chunk.id].containsFetch = true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (formats.includes("json")) {
|
|
132
|
+
const chunks_json = JSON.stringify(chunks, null, 2);
|
|
133
|
+
fs.writeFileSync(`${output}.json`, chunks_json);
|
|
134
|
+
console.log(chalk.green(`[✓] Saved webpack with fetch instances to ${output}.json`));
|
|
135
|
+
}
|
|
136
|
+
return chunk_copy;
|
|
137
|
+
});
|
|
138
|
+
export default getFetchInstances;
|
|
139
|
+
//# sourceMappingURL=getFetchInstances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFetchInstances.js","sourceRoot":"","sources":["../../../src/map/next_js/getFetchInstances.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AACnC,OAAO,MAAM,MAAM,eAAe,CAAC;AAGnC;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAAS,EAAW,EAAE;IAC7C,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAC/D,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,eAAe,GAAG,CAAC,IAAS,EAAW,EAAE;IAC3C,0CAA0C;IAC1C,OAAO,CACH,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,IAAI,IAAI,CAAC,KAAK,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClF,CAAC,IAAI,CAAC,IAAI,KAAK,uBAAuB,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAC/E,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,iBAAiB,GAAG,CAAO,MAAc,EAAE,MAAc,EAAE,OAAiB,EAAmB,EAAE;IACnG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAClE,IAAI,UAAU,qBAAgB,MAAM,CAAE,CAAC;IAEvC,0DAA0D;IAC1D,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACD,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;gBAChC,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;gBAC9B,aAAa,EAAE,IAAI;aACtB,CAAC,CAAC;QACP,CAAC;QAAC,WAAM,CAAC;YACL,SAAS;QACb,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE;YACf,8CAA8C;YAC9C,wBAAwB;YACxB,qCAAqC;YACrC,mCAAmC;YACnC,kBAAkB,CAAC,IAAI;gBACnB,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC/B,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAE9C,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnD,mEAAmE;oBACnE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;oBACjD,IAAI,OAAO,EAAE,CAAC;wBACV,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC;gBACL,CAAC;YACL,CAAC;YACD,oBAAoB,CAAC,IAAI;gBACrB,sCAAsC;gBACtC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;gBAClC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;oBAAE,OAAO;gBAEvC,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjD,IAAI,OAAO,EAAE,CAAC;wBACV,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC;gBACL,CAAC;YACL,CAAC;YACD,cAAc,CAAC,IAAI;gBACf,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;oBACpD,UAAU,CAAC,GAAG,CAAC;wBACX,IAAI;wBACJ,MAAM;qBACT,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;SACJ,CAAC,CAAC;QAEH,6DAA6D;QAC7D,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACjC,aAAa;YACb,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;gBAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;oBACjE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC5C,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,OAAO,CACT,sBAAsB,KAAK,CAAC,EAAE,oBAAoB,GAAG,CAAC,IAAI,CAAC,IAAI,eAAe,IAAI,IAAI,MAAM,EAAE,CACjG,CACJ,CAAC;gBACN,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,4DAA4D;QAC5D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,OAAO;YACT,aAAa;YACb,sBAAsB,KAAK,CAAC,EAAE,uBAAuB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAClF,CACJ,CAAC;QACN,CAAC;QAED,2FAA2F;QAC3F,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC/C,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC;QAC9C,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACpD,EAAE,CAAC,aAAa,CAAC,GAAG,MAAM,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,MAAM,OAAO,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC,CAAA,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|