@shriyanss/js-recon 1.3.1-alpha.1 → 1.3.1-alpha.3
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/.github/workflows/pr_checker.yml +9 -8
- package/CHANGELOG.md +47 -0
- package/CLAUDE.md +136 -0
- package/build/analyze/engine/astEngine.js +34 -6
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/engine/index.js +2 -2
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/taintFlow.js +218 -0
- package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -0
- package/build/analyze/helpers/schemas.js +3 -1
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/helpers/validate.js +49 -9
- package/build/analyze/helpers/validate.js.map +1 -1
- package/build/analyze/index.js +3 -2
- package/build/analyze/index.js.map +1 -1
- package/build/globalConfig.js +1 -1
- package/build/index.js +21 -1
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadFilesUtil.js +3 -3
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +190 -0
- package/build/lazyLoad/downloadQueue.js.map +1 -0
- package/build/lazyLoad/index.js +57 -55
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +34 -11
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetJSScript.js +24 -3
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +20 -2
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +10 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
- package/build/lazyLoad/techDetect/checkReact.js +13 -2
- package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +37 -24
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_discoverJsFiles.js +25 -11
- package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +31 -4
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +3 -3
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +142 -0
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -0
- package/build/load/index.js +316 -0
- package/build/load/index.js.map +1 -0
- package/build/map/index.js +42 -5
- package/build/map/index.js.map +1 -1
- package/build/map/next_js/getExports.js +11 -5
- package/build/map/next_js/getExports.js.map +1 -1
- package/build/map/next_js/getFetchInstances.js +11 -5
- package/build/map/next_js/getFetchInstances.js.map +1 -1
- package/build/map/next_js/interactive.js +30 -0
- package/build/map/next_js/interactive.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHandler.js +22 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
- 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 +1 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -1
- 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/ui.js +0 -1
- package/build/map/next_js/interactive_helpers/ui.js.map +1 -1
- package/build/map/next_js/resolveAxios.js +24 -5
- package/build/map/next_js/resolveAxios.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js +2 -2
- package/build/map/next_js/resolveAxiosHelpers/astNodeToJsonString.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +11 -5
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
- 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 +25 -8
- package/build/map/next_js/resolveAxiosHelpers/processAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js +14 -6
- package/build/map/next_js/resolveAxiosHelpers/processDirectAxiosCall.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +22 -10
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
- 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 +115 -3
- package/build/map/next_js/resolveFetch.js.map +1 -1
- package/build/map/next_js/resolveNewRequest.js +749 -0
- package/build/map/next_js/resolveNewRequest.js.map +1 -0
- package/build/map/next_js/utils.js +397 -49
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/vue_js/getViteConnections.js +27 -3
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/interactive.js +28 -0
- package/build/map/vue_js/interactive.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/commandHandler.js +22 -0
- package/build/map/vue_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/vue_js/interactive_helpers/helpMenu.js +1 -0
- package/build/map/vue_js/interactive_helpers/helpMenu.js.map +1 -1
- package/build/map/vue_js/vue_resolveFetch.js +722 -0
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -0
- package/build/report/utility/populateDb/populateAnalysisFindings.js +1 -1
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -1
- package/build/run/index.js +27 -5
- package/build/run/index.js.map +1 -1
- package/build/strings/index.js +5 -1
- package/build/strings/index.js.map +1 -1
- package/build/utility/globals.js +9 -0
- package/build/utility/globals.js.map +1 -1
- package/build/utility/makeReq.js +90 -11
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +60 -4
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/postmanGenerator.js +167 -0
- package/build/utility/postmanGenerator.js.map +1 -0
- package/package.json +2 -2
|
@@ -19,8 +19,19 @@ const checkReact = ($, url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
19
19
|
if (attrName === "src") {
|
|
20
20
|
// get the src
|
|
21
21
|
const src = attrValue;
|
|
22
|
-
//
|
|
23
|
-
|
|
22
|
+
// Resolve src against the page URL — skip if it's malformed
|
|
23
|
+
// (e.g. `data:`, `javascript:` schemes, invalid URIs).
|
|
24
|
+
let resolvedUrl;
|
|
25
|
+
try {
|
|
26
|
+
resolvedUrl = new URL(src, url).href;
|
|
27
|
+
}
|
|
28
|
+
catch (_a) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
// makeRequest returns Response | null — skip when the fetch failed.
|
|
32
|
+
const res = yield makeRequest(resolvedUrl, {});
|
|
33
|
+
if (!res)
|
|
34
|
+
continue;
|
|
24
35
|
const body = yield res.text();
|
|
25
36
|
// check if the body contains "react" or "react-dom"
|
|
26
37
|
if (body.includes("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED") &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkReact.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/checkReact.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAGnD,MAAM,UAAU,GAAG,CAAO,CAAqB,EAAE,GAAW,EAAoD,EAAE;IAC9G,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,yDAAyD;IAEzD,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAC3B,IAAI,OAAO,EAAE,CAAC;YACV,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;oBACrB,cAAc;oBACd,MAAM,GAAG,GAAG,SAAS,CAAC;oBAEtB,
|
|
1
|
+
{"version":3,"file":"checkReact.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/checkReact.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAGnD,MAAM,UAAU,GAAG,CAAO,CAAqB,EAAE,GAAW,EAAoD,EAAE;IAC9G,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,yDAAyD;IAEzD,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAC3B,IAAI,OAAO,EAAE,CAAC;YACV,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;oBACrB,cAAc;oBACd,MAAM,GAAG,GAAG,SAAS,CAAC;oBAEtB,4DAA4D;oBAC5D,uDAAuD;oBACvD,IAAI,WAAmB,CAAC;oBACxB,IAAI,CAAC;wBACD,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;oBACzC,CAAC;oBAAC,WAAM,CAAC;wBACL,SAAS;oBACb,CAAC;oBAED,oEAAoE;oBACpE,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAC/C,IAAI,CAAC,GAAG;wBAAE,SAAS;oBACnB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;oBAE9B,oDAAoD;oBACpD,IACI,IAAI,CAAC,QAAQ,CAAC,oDAAoD,CAAC;wBACnE,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EACjD,CAAC;wBACC,QAAQ,GAAG,IAAI,CAAC;wBAChB,QAAQ,GAAG,sGAAsG,GAAG,EAAE,CAAC;wBACvH,MAAM;oBACV,CAAC;yBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;wBAC/C,QAAQ,GAAG,IAAI,CAAC;wBAChB,QAAQ,GAAG,mCAAmC,GAAG,EAAE,CAAC;wBACpD,MAAM;oBACV,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC,CAAA,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -30,30 +30,44 @@ import { checkReact } from "./checkReact.js";
|
|
|
30
30
|
*/
|
|
31
31
|
const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
32
|
console.log(chalk.cyan("[i] Detecting front-end framework"));
|
|
33
|
-
// get the page source
|
|
33
|
+
// get the page source. Drain the body immediately into a string — if we
|
|
34
|
+
// wait until after the puppeteer + downstream check* calls, the Response
|
|
35
|
+
// body gets invalidated (undici flips bodyUsed=true mid-flight when the
|
|
36
|
+
// response is held idle alongside other in-flight fetches).
|
|
34
37
|
const res = yield makeRequest(url, {});
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
let resBody = null;
|
|
39
|
+
if (res !== null) {
|
|
40
|
+
try {
|
|
41
|
+
resBody = yield res.text();
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
console.log(chalk.yellow(`[!] Could not read fetch response body for ${url} (${(err === null || err === void 0 ? void 0 : err.message) || err}); using browser-rendered source only.`));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// get the page source in the browser (skipped in cache-only mode — no network allowed)
|
|
41
48
|
let pageSource = "";
|
|
42
|
-
|
|
43
|
-
yield
|
|
44
|
-
|
|
45
|
-
timeout: 30000,
|
|
49
|
+
if (!globalsUtil.getCacheOnly()) {
|
|
50
|
+
const browser = yield puppeteer.launch({
|
|
51
|
+
args: globalsUtil.getDisableSandbox() ? ["--no-sandbox", "--disable-setuid-sandbox"] : [],
|
|
46
52
|
});
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
const page = yield browser.newPage();
|
|
54
|
+
page.setDefaultNavigationTimeout(30000);
|
|
55
|
+
try {
|
|
56
|
+
yield page.goto(url, {
|
|
57
|
+
waitUntil: "domcontentloaded",
|
|
58
|
+
timeout: 30000,
|
|
59
|
+
});
|
|
60
|
+
// Give client-side frameworks a brief window to render
|
|
61
|
+
yield page.waitForSelector("html", { timeout: 10000 }).catch(() => { });
|
|
62
|
+
yield new Promise((resolve) => setTimeout(resolve, 2000));
|
|
63
|
+
pageSource = yield page.content();
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
console.log(chalk.yellow("[!] Page navigation/content failed, falling back to fetch response if available"));
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
yield browser.close().catch(() => { });
|
|
70
|
+
}
|
|
57
71
|
}
|
|
58
72
|
// if (res === null || res === undefined) {
|
|
59
73
|
// return;
|
|
@@ -81,8 +95,7 @@ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
81
95
|
if (res === null) {
|
|
82
96
|
console.log(chalk.red("[!] Fetch request failed after retries"));
|
|
83
97
|
}
|
|
84
|
-
else {
|
|
85
|
-
const resBody = yield res.text();
|
|
98
|
+
else if (resBody !== null) {
|
|
86
99
|
$res = cheerio.load(resBody);
|
|
87
100
|
result_checkNextJS_res = yield checkNextJS($res);
|
|
88
101
|
result_checkVueJS_res = yield checkVueJS($res, url);
|
|
@@ -98,7 +111,7 @@ const frameworkDetect = (url) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
98
111
|
console.log(chalk.green("[✓] Vue.js detected"));
|
|
99
112
|
console.log(chalk.cyan(`[i] Checking Nuxt.JS`), chalk.dim("(Nuxt.JS is built on Vue.js)"));
|
|
100
113
|
const result_checkNuxtJS = yield checkNuxtJS($);
|
|
101
|
-
const result_checkNuxtJS_res = yield checkNuxtJS($res);
|
|
114
|
+
const result_checkNuxtJS_res = $res ? yield checkNuxtJS($res) : { detected: false, evidence: "" };
|
|
102
115
|
if (result_checkNuxtJS.detected === true || result_checkNuxtJS_res.detected === true) {
|
|
103
116
|
const evidence = result_checkNuxtJS.evidence !== "" ? result_checkNuxtJS.evidence : result_checkNuxtJS_res.evidence;
|
|
104
117
|
return { name: "nuxt", evidence };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,SAAS,MAAM,oCAAoC,CAAC;AAC3D,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;GASG;AACH,MAAM,eAAe,GAAG,CAAO,GAAW,EAA+C,EAAE;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAE7D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lazyLoad/techDetect/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ import vue_jsImports from "./vue_jsImports.js";
|
|
|
16
16
|
import vue_reconstructSourceMaps from "./vue_reconstructSourceMaps.js";
|
|
17
17
|
import vue_getClientSidePaths from "./vue_getClientSidePaths.js";
|
|
18
18
|
import vue_viteMapDeps from "./vue_viteMapDeps.js";
|
|
19
|
+
import vue_stringJsFiles from "./vue_stringJsFiles.js";
|
|
19
20
|
/**
|
|
20
21
|
* Runs the full Vue.js JS-file discovery pipeline against a single URL.
|
|
21
22
|
*
|
|
@@ -23,39 +24,52 @@ import vue_viteMapDeps from "./vue_viteMapDeps.js";
|
|
|
23
24
|
* runtime.js chunks, single/several JS files on home, import statements,
|
|
24
25
|
* source-map reconstruction) into one reusable flow, and also surfaces the
|
|
25
26
|
* client-side paths found in the discovered files so callers can recurse.
|
|
27
|
+
*
|
|
28
|
+
* @param onFilesDiscovered Called with each batch of newly found URLs so the
|
|
29
|
+
* caller can start downloading them immediately rather than waiting for the
|
|
30
|
+
* full pipeline to finish.
|
|
26
31
|
*/
|
|
27
|
-
const vue_discoverJsFiles = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...args_1], void 0, function* (url, maxJsSizeMb = 2) {
|
|
32
|
+
const vue_discoverJsFiles = (url_1, ...args_1) => __awaiter(void 0, [url_1, ...args_1], void 0, function* (url, maxJsSizeMb = 2, onFilesDiscovered) {
|
|
28
33
|
let jsFiles = [];
|
|
34
|
+
const emit = (files) => {
|
|
35
|
+
jsFiles.push(...files);
|
|
36
|
+
if (files.length > 0 && onFilesDiscovered) {
|
|
37
|
+
onFilesDiscovered(files.map((f) => (f.startsWith("//") ? "https:" + f : f)));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
29
40
|
// first, get all the JS files from the page source
|
|
30
|
-
|
|
31
|
-
jsFiles.push(...fromPageSrc);
|
|
41
|
+
emit(yield vue_pageSrc(url));
|
|
32
42
|
// method 1: through runtime.<hash>.js
|
|
33
|
-
|
|
34
|
-
jsFiles.push(...fromRuntimeJs);
|
|
43
|
+
emit(yield vue_runtimeJs(url));
|
|
35
44
|
// single JS file on the page (typically dev-mode)
|
|
36
45
|
const fromSingleJs = yield vue_singleJsFileOnHome(url);
|
|
37
|
-
|
|
46
|
+
emit(fromSingleJs);
|
|
38
47
|
if (fromSingleJs.length > 0) {
|
|
39
48
|
console.log(chalk.green(`[✓] Found ${fromSingleJs.length} files from the single JS file on home`));
|
|
40
49
|
}
|
|
41
50
|
// several JS files referenced directly on the page
|
|
42
|
-
|
|
43
|
-
jsFiles.push(...fromSeveralJs);
|
|
51
|
+
emit(yield vue_severalJsFilesHome(url));
|
|
44
52
|
// scan page-loaded JS files for Vite's __vite__mapDeps chunk manifest
|
|
45
53
|
const fromViteMapDeps = yield vue_viteMapDeps(jsFiles, maxJsSizeMb);
|
|
46
|
-
|
|
54
|
+
emit(fromViteMapDeps);
|
|
47
55
|
if (fromViteMapDeps.length > 0) {
|
|
48
56
|
console.log(chalk.green(`[✓] Found ${fromViteMapDeps.length} files from __vite__mapDeps`));
|
|
49
57
|
}
|
|
50
58
|
// walk the import graph of everything found so far
|
|
51
59
|
const fromImports = yield vue_jsImports(url, jsFiles, maxJsSizeMb);
|
|
52
|
-
|
|
60
|
+
emit(fromImports);
|
|
53
61
|
if (fromImports.length > 0) {
|
|
54
62
|
console.log(chalk.green(`[✓] Found ${fromImports.length} files from import statements`));
|
|
55
63
|
}
|
|
64
|
+
// scan string literals inside known JS files for .js references
|
|
65
|
+
const fromStringRefs = yield vue_stringJsFiles(jsFiles, maxJsSizeMb);
|
|
66
|
+
emit(fromStringRefs);
|
|
67
|
+
if (fromStringRefs.length > 0) {
|
|
68
|
+
console.log(chalk.green(`[✓] Found ${fromStringRefs.length} files from string literal JS references`));
|
|
69
|
+
}
|
|
56
70
|
// reconstruct sourceMappingURL references
|
|
57
71
|
const fromSourceMaps = yield vue_reconstructSourceMaps(url, jsFiles);
|
|
58
|
-
|
|
72
|
+
emit(fromSourceMaps);
|
|
59
73
|
if (fromSourceMaps.length > 0) {
|
|
60
74
|
console.log(chalk.green(`[✓] Found ${fromSourceMaps.length} files from reconstructing source maps`));
|
|
61
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue_discoverJsFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_discoverJsFiles.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AACjE,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AACjE,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,yBAAyB,MAAM,gCAAgC,CAAC;AACvE,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AACjE,OAAO,eAAe,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"vue_discoverJsFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_discoverJsFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,27 +10,46 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import makeRequest from "../../utility/makeReq.js";
|
|
11
11
|
import _traverse from "@babel/traverse";
|
|
12
12
|
import chalk from "chalk";
|
|
13
|
+
import cliProgress from "cli-progress";
|
|
13
14
|
import parser from "@babel/parser";
|
|
14
15
|
import t from "@babel/types";
|
|
15
16
|
const traverse = _traverse.default;
|
|
16
17
|
const vue_getClientSidePaths = (url_1, jsFiles_1, ...args_1) => __awaiter(void 0, [url_1, jsFiles_1, ...args_1], void 0, function* (url, jsFiles, maxJsSizeMb = 2) {
|
|
17
18
|
const MAX_JS_SIZE_BYTES = maxJsSizeMb * 1024 * 1024;
|
|
18
19
|
let toReturn = [];
|
|
19
|
-
console.log(chalk.cyan(`[i] Extracting client-side paths from ${jsFiles.length} JS files...`));
|
|
20
20
|
const baseOrigin = new URL(url).origin;
|
|
21
|
+
const bar = new cliProgress.SingleBar({
|
|
22
|
+
format: chalk.cyan("[i] Extracting client-side paths ") +
|
|
23
|
+
"[{bar}] {percentage}% | {value}/{total} files | {paths} paths | {skipped} skipped",
|
|
24
|
+
barCompleteChar: "█",
|
|
25
|
+
barIncompleteChar: "░",
|
|
26
|
+
hideCursor: false,
|
|
27
|
+
clearOnComplete: false,
|
|
28
|
+
stopOnComplete: false,
|
|
29
|
+
}, cliProgress.Presets.shades_classic);
|
|
30
|
+
let processed = 0;
|
|
31
|
+
let skipped = 0;
|
|
32
|
+
bar.start(jsFiles.length, 0, { paths: 0, skipped: 0 });
|
|
21
33
|
// iterate through all those
|
|
22
34
|
for (const jsFile of jsFiles) {
|
|
23
35
|
if (!jsFile.endsWith(".js")) {
|
|
36
|
+
processed++;
|
|
37
|
+
skipped++;
|
|
38
|
+
bar.update(processed, { paths: toReturn.length, skipped });
|
|
24
39
|
continue;
|
|
25
40
|
}
|
|
26
41
|
const req = yield makeRequest(jsFile);
|
|
27
42
|
if (req == null) {
|
|
28
|
-
|
|
43
|
+
processed++;
|
|
44
|
+
skipped++;
|
|
45
|
+
bar.update(processed, { paths: toReturn.length, skipped });
|
|
29
46
|
continue;
|
|
30
47
|
}
|
|
31
48
|
const jsContent = yield req.text();
|
|
32
49
|
if (jsContent.length > MAX_JS_SIZE_BYTES) {
|
|
33
|
-
|
|
50
|
+
processed++;
|
|
51
|
+
skipped++;
|
|
52
|
+
bar.update(processed, { paths: toReturn.length, skipped });
|
|
34
53
|
continue;
|
|
35
54
|
}
|
|
36
55
|
// load in ast
|
|
@@ -43,10 +62,13 @@ const vue_getClientSidePaths = (url_1, jsFiles_1, ...args_1) => __awaiter(void 0
|
|
|
43
62
|
});
|
|
44
63
|
}
|
|
45
64
|
catch (_a) {
|
|
46
|
-
|
|
65
|
+
processed++;
|
|
66
|
+
skipped++;
|
|
67
|
+
bar.update(processed, { paths: toReturn.length, skipped });
|
|
47
68
|
continue;
|
|
48
69
|
}
|
|
49
70
|
const jsFileOrigin = new URL(jsFile).origin;
|
|
71
|
+
const pathsBefore = toReturn.length;
|
|
50
72
|
traverse(ast, {
|
|
51
73
|
ObjectProperty(path) {
|
|
52
74
|
const { key, value } = path.node;
|
|
@@ -112,7 +134,12 @@ const vue_getClientSidePaths = (url_1, jsFiles_1, ...args_1) => __awaiter(void 0
|
|
|
112
134
|
}
|
|
113
135
|
},
|
|
114
136
|
});
|
|
137
|
+
processed++;
|
|
138
|
+
if (toReturn.length === pathsBefore)
|
|
139
|
+
skipped++;
|
|
140
|
+
bar.update(processed, { paths: toReturn.length, skipped });
|
|
115
141
|
}
|
|
142
|
+
bar.stop();
|
|
116
143
|
if (toReturn.length > 0) {
|
|
117
144
|
console.log(chalk.green(`[+] Found ${toReturn.length} client-side paths from JS files!`));
|
|
118
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue_getClientSidePaths.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_getClientSidePaths.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,CAAC,MAAM,cAAc,CAAC;AAE7B,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AAEnC,MAAM,sBAAsB,GAAG,8BAAmF,EAAE,qEAA9E,GAAW,EAAE,OAAiB,EAAE,cAAsB,CAAC;IACzF,MAAM,iBAAiB,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IACpD,IAAI,QAAQ,GAAa,EAAE,CAAC;IAE5B,
|
|
1
|
+
{"version":3,"file":"vue_getClientSidePaths.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_getClientSidePaths.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ import vue_discoverJsFiles from "./vue_discoverJsFiles.js";
|
|
|
23
23
|
* - {@link STAGNATION_LIMIT} consecutive rounds yield no new JS files.
|
|
24
24
|
*/
|
|
25
25
|
const STAGNATION_LIMIT = 3;
|
|
26
|
-
const vue_recursiveClientSidePathDownload = (clientSidePaths_1, ...args_1) => __awaiter(void 0, [clientSidePaths_1, ...args_1], void 0, function* (clientSidePaths, threads = 1, maxJsSizeMb = 2) {
|
|
26
|
+
const vue_recursiveClientSidePathDownload = (clientSidePaths_1, ...args_1) => __awaiter(void 0, [clientSidePaths_1, ...args_1], void 0, function* (clientSidePaths, threads = 1, maxJsSizeMb = 2, onFilesDiscovered) {
|
|
27
27
|
const allJsFiles = new Set();
|
|
28
28
|
const visitedPaths = new Set();
|
|
29
29
|
const knownPaths = new Set();
|
|
@@ -44,7 +44,7 @@ const vue_recursiveClientSidePathDownload = (clientSidePaths_1, ...args_1) => __
|
|
|
44
44
|
"[{bar}] {percentage}% | {value}/{total} paths | round {round} | {jsFiles} JS files | {stagnant} stagnant",
|
|
45
45
|
barCompleteChar: "█",
|
|
46
46
|
barIncompleteChar: "░",
|
|
47
|
-
hideCursor:
|
|
47
|
+
hideCursor: false,
|
|
48
48
|
clearOnComplete: false,
|
|
49
49
|
stopOnComplete: false,
|
|
50
50
|
etaBuffer: 50,
|
|
@@ -77,7 +77,7 @@ const vue_recursiveClientSidePathDownload = (clientSidePaths_1, ...args_1) => __
|
|
|
77
77
|
while (cursor < batch.length) {
|
|
78
78
|
const path = batch[cursor++];
|
|
79
79
|
try {
|
|
80
|
-
const { jsFiles, clientSidePaths: newPaths } = yield vue_discoverJsFiles(path, maxJsSizeMb);
|
|
80
|
+
const { jsFiles, clientSidePaths: newPaths } = yield vue_discoverJsFiles(path, maxJsSizeMb, onFilesDiscovered);
|
|
81
81
|
for (const file of jsFiles) {
|
|
82
82
|
allJsFiles.add(file);
|
|
83
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue_recursiveClientSidePathDownload.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_recursiveClientSidePathDownload.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,MAAM,mCAAmC,GAAG,+
|
|
1
|
+
{"version":3,"file":"vue_recursiveClientSidePathDownload.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_recursiveClientSidePathDownload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
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 cliProgress from "cli-progress";
|
|
12
|
+
import makeRequest from "../../utility/makeReq.js";
|
|
13
|
+
import parser from "@babel/parser";
|
|
14
|
+
import { extractStrings } from "../../strings/index.js";
|
|
15
|
+
/**
|
|
16
|
+
* Resolves a .js string found in a bundle to an absolute URL.
|
|
17
|
+
*
|
|
18
|
+
* Handles three forms:
|
|
19
|
+
* - `./Feature.hash.js` or `../chunk.js` → standard relative resolution
|
|
20
|
+
* - `/static/chunk.js` → absolute path on same origin
|
|
21
|
+
* - `assets/feat.hash.js` → find where "assets" appears in
|
|
22
|
+
* the JS file's URL path and anchor there
|
|
23
|
+
*/
|
|
24
|
+
const resolveJsString = (str, jsFileUrl) => {
|
|
25
|
+
try {
|
|
26
|
+
if (str.startsWith("http://") || str.startsWith("https://")) {
|
|
27
|
+
return new URL(str).href;
|
|
28
|
+
}
|
|
29
|
+
const fileUrl = new URL(jsFileUrl);
|
|
30
|
+
if (str.startsWith("./") || str.startsWith("../")) {
|
|
31
|
+
return new URL(str, jsFileUrl).href;
|
|
32
|
+
}
|
|
33
|
+
if (str.startsWith("/")) {
|
|
34
|
+
return new URL(str, fileUrl.origin).href;
|
|
35
|
+
}
|
|
36
|
+
// Relative path without a leading dot, e.g. "assets/feat.hash.js"
|
|
37
|
+
const strParts = str.split("/");
|
|
38
|
+
const strDirParts = strParts.slice(0, -1); // directory segments of the string
|
|
39
|
+
if (strDirParts.length === 0) {
|
|
40
|
+
// bare filename — resolve relative to the JS file's directory
|
|
41
|
+
const dirUrl = jsFileUrl.substring(0, jsFileUrl.lastIndexOf("/") + 1);
|
|
42
|
+
return dirUrl + str;
|
|
43
|
+
}
|
|
44
|
+
// urlPathParts: e.g. ['cdn', 'assets', 'app.js'] for /cdn/assets/app.js
|
|
45
|
+
const urlPathParts = fileUrl.pathname.split("/").filter((p) => p);
|
|
46
|
+
// Find the rightmost occurrence of strDirParts[0] in the URL path, then
|
|
47
|
+
// verify the subsequent segments also match before committing.
|
|
48
|
+
for (let i = urlPathParts.length - 1; i >= 0; i--) {
|
|
49
|
+
if (urlPathParts[i] !== strDirParts[0])
|
|
50
|
+
continue;
|
|
51
|
+
let match = true;
|
|
52
|
+
for (let j = 1; j < strDirParts.length; j++) {
|
|
53
|
+
if (urlPathParts[i + j] !== strDirParts[j]) {
|
|
54
|
+
match = false;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (match) {
|
|
59
|
+
const baseParts = urlPathParts.slice(0, i);
|
|
60
|
+
const basePath = "/" + (baseParts.length > 0 ? baseParts.join("/") + "/" : "");
|
|
61
|
+
return fileUrl.origin + basePath + str;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Fallback: treat as relative to the JS file's directory
|
|
65
|
+
const dirUrl = jsFileUrl.substring(0, jsFileUrl.lastIndexOf("/") + 1);
|
|
66
|
+
return dirUrl + str;
|
|
67
|
+
}
|
|
68
|
+
catch (_a) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const fetchAndExtractJsStrings = (url, maxJsSizeMb) => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
|
+
const MAX_BYTES = maxJsSizeMb * 1024 * 1024;
|
|
74
|
+
const found = new Set();
|
|
75
|
+
const req = yield makeRequest(url);
|
|
76
|
+
if (req == null)
|
|
77
|
+
return found;
|
|
78
|
+
const text = yield req.text();
|
|
79
|
+
if (text.length > MAX_BYTES)
|
|
80
|
+
return found;
|
|
81
|
+
let ast;
|
|
82
|
+
try {
|
|
83
|
+
ast = parser.parse(text, {
|
|
84
|
+
sourceType: "unambiguous",
|
|
85
|
+
plugins: ["jsx", "typescript"],
|
|
86
|
+
errorRecovery: true,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch (_a) {
|
|
90
|
+
return found;
|
|
91
|
+
}
|
|
92
|
+
const strings = extractStrings(ast);
|
|
93
|
+
for (const s of strings) {
|
|
94
|
+
if (!s.endsWith(".js"))
|
|
95
|
+
continue;
|
|
96
|
+
const resolved = resolveJsString(s, url);
|
|
97
|
+
if (resolved)
|
|
98
|
+
found.add(resolved);
|
|
99
|
+
}
|
|
100
|
+
return found;
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* Discovers additional JS chunk URLs by scanning string literals inside every
|
|
104
|
+
* known JS file for references that end in `.js` and resolving them against
|
|
105
|
+
* the file's own URL.
|
|
106
|
+
*/
|
|
107
|
+
const vue_stringJsFiles = (knownJsFiles_1, ...args_1) => __awaiter(void 0, [knownJsFiles_1, ...args_1], void 0, function* (knownJsFiles, maxJsSizeMb = 2) {
|
|
108
|
+
const allFound = new Set();
|
|
109
|
+
const crawled = new Set(knownJsFiles);
|
|
110
|
+
const bar = new cliProgress.SingleBar({
|
|
111
|
+
format: chalk.cyan("[i] Scanning JS string refs ") +
|
|
112
|
+
"[{bar}] {percentage}% | {value}/{total} files | {refs} refs found",
|
|
113
|
+
barCompleteChar: "█",
|
|
114
|
+
barIncompleteChar: "░",
|
|
115
|
+
hideCursor: false,
|
|
116
|
+
clearOnComplete: false,
|
|
117
|
+
stopOnComplete: false,
|
|
118
|
+
}, cliProgress.Presets.shades_classic);
|
|
119
|
+
let processed = 0;
|
|
120
|
+
const queue = [...knownJsFiles];
|
|
121
|
+
bar.start(queue.length, 0, { refs: 0 });
|
|
122
|
+
const processFile = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
123
|
+
const discovered = yield fetchAndExtractJsStrings(url, maxJsSizeMb);
|
|
124
|
+
for (const u of discovered) {
|
|
125
|
+
allFound.add(u);
|
|
126
|
+
if (!crawled.has(u)) {
|
|
127
|
+
crawled.add(u);
|
|
128
|
+
queue.push(u);
|
|
129
|
+
bar.setTotal(queue.length);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
processed++;
|
|
133
|
+
bar.update(processed, { refs: allFound.size });
|
|
134
|
+
});
|
|
135
|
+
for (let i = 0; i < queue.length; i++) {
|
|
136
|
+
yield processFile(queue[i]);
|
|
137
|
+
}
|
|
138
|
+
bar.stop();
|
|
139
|
+
return [...allFound];
|
|
140
|
+
});
|
|
141
|
+
export default vue_stringJsFiles;
|
|
142
|
+
//# sourceMappingURL=vue_stringJsFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue_stringJsFiles.js","sourceRoot":"","sources":["../../../src/lazyLoad/vue/vue_stringJsFiles.ts"],"names":[],"mappings":"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"}
|