@shriyanss/js-recon 1.3.1-alpha.2 → 1.3.1-alpha.4
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/build-and-prettify.yaml +15 -1
- package/.github/workflows/pr_checker.yml +9 -8
- package/.github/workflows/publish-js-recon.yml +13 -1
- package/CHANGELOG.md +96 -0
- package/CLAUDE.md +225 -0
- package/README.md +2 -0
- package/build/analyze/engine/astEngine.js +57 -29
- 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 +32 -0
- package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
- package/build/analyze/helpers/initRules.js +9 -0
- package/build/analyze/helpers/initRules.js.map +1 -1
- package/build/analyze/helpers/schemas.js +6 -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 +10 -4
- package/build/analyze/index.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +12 -5
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/fingerprint/index.js +123 -0
- package/build/fingerprint/index.js.map +1 -0
- package/build/globalConfig.js +1 -1
- package/build/index.js +72 -5
- 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 +16 -11
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/index.js +260 -163
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/NextJsCrawler.js +58 -16
- package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetJSScript.js +8 -4
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +149 -139
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +25 -4
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -1
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js +13 -5
- package/build/lazyLoad/next_js/next_scriptTagsSubsequentRequests.js.map +1 -1
- 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 +28 -5
- package/build/lazyLoad/react/react_getScriptTags.js.map +1 -1
- 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 +15 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- 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 +15 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkReact.js +67 -36
- package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
- package/build/lazyLoad/techDetect/checkSvelte.js +35 -35
- package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
- package/build/lazyLoad/techDetect/index.js +31 -25
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +6 -0
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +6 -0
- package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +6 -0
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
- 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 +104 -6
- package/build/map/index.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 +26 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -1
- package/build/map/next_js/interactive_helpers/commandHelpers.js +28 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.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 +2 -1
- 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/resolveServerActions.js +449 -0
- package/build/map/next_js/resolveServerActions.js.map +1 -0
- package/build/map/next_js/utils.js +89 -2
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +298 -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 +151 -106
- 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/taint_utils.js +621 -0
- package/build/map/vue_js/taint_utils.js.map +1 -0
- package/build/map/vue_js/vue_resolveFetch.js +279 -25
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +733 -0
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -0
- package/build/map/vue_js/vue_resolveXhr.js +279 -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 +140 -149
- package/build/mcp/cli.js.map +1 -1
- package/build/mcp/commands.js +80 -0
- package/build/mcp/commands.js.map +1 -1
- package/build/mcp/index.js +30 -9
- package/build/mcp/index.js.map +1 -1
- 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 +18 -1
- package/build/mcp/providers.js.map +1 -1
- package/build/mcp/skills.js +115 -0
- package/build/mcp/skills.js.map +1 -0
- package/build/refactor/index.js +6 -0
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/react/index.js +636 -0
- package/build/refactor/react/index.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 +277 -60
- package/build/run/index.js.map +1 -1
- package/build/run/interruptHandler.js +93 -0
- package/build/run/interruptHandler.js.map +1 -0
- package/build/utility/globals.js +38 -0
- package/build/utility/globals.js.map +1 -1
- package/build/utility/makeReq.js +39 -5
- package/build/utility/makeReq.js.map +1 -1
- package/build/utility/openapiGenerator.js +61 -17
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/postmanGenerator.js +69 -16
- package/build/utility/postmanGenerator.js.map +1 -1
- package/build/utility/progressLog.js +50 -0
- package/build/utility/progressLog.js.map +1 -0
- package/package.json +7 -4
|
@@ -14,6 +14,7 @@ import path from "path";
|
|
|
14
14
|
import { getURLDirectory } from "../../utility/urlUtils.js";
|
|
15
15
|
import makeRequest from "../../utility/makeReq.js";
|
|
16
16
|
import * as cheerio from "cheerio";
|
|
17
|
+
import { setActiveBarLogger, computeBarSize, watchBarResize } from "../../utility/progressLog.js";
|
|
17
18
|
let queue = 0;
|
|
18
19
|
let max_queue;
|
|
19
20
|
/**
|
|
@@ -53,16 +54,34 @@ const subsequentRequests = (url, urlsFile, threads, output, js_urls) => __awaite
|
|
|
53
54
|
let endpoints = JSON.parse(fs.readFileSync(urlsFile, "utf8")).paths;
|
|
54
55
|
// add `/` to endpoints
|
|
55
56
|
endpoints.push("/");
|
|
56
|
-
|
|
57
|
+
// Deduplicate by path — same path with different query params counts once
|
|
58
|
+
const seenPaths = new Set();
|
|
59
|
+
endpoints = endpoints.filter((endpoint) => {
|
|
60
|
+
let pathname;
|
|
61
|
+
try {
|
|
62
|
+
pathname = new URL(endpoint, url).pathname;
|
|
63
|
+
}
|
|
64
|
+
catch (_a) {
|
|
65
|
+
pathname = endpoint;
|
|
66
|
+
}
|
|
67
|
+
if (seenPaths.has(pathname))
|
|
68
|
+
return false;
|
|
69
|
+
seenPaths.add(pathname);
|
|
70
|
+
return true;
|
|
71
|
+
});
|
|
72
|
+
const multiBar = new cliProgress.MultiBar({
|
|
57
73
|
format: chalk.cyan("[i] Fetching JS files from subsequent requests ") +
|
|
58
74
|
"[{bar}] {percentage}% | {value}/{total} | {phase}",
|
|
59
75
|
barCompleteChar: "█",
|
|
60
76
|
barIncompleteChar: "░",
|
|
77
|
+
barsize: computeBarSize(73),
|
|
61
78
|
hideCursor: false,
|
|
62
79
|
clearOnComplete: false,
|
|
63
80
|
stopOnComplete: false,
|
|
64
81
|
}, cliProgress.Presets.shades_classic);
|
|
65
|
-
progressBar.
|
|
82
|
+
const progressBar = multiBar.create(endpoints.length * 2, 0, { phase: "RSC" });
|
|
83
|
+
const stopBarWatcher = watchBarResize(progressBar, 73);
|
|
84
|
+
setActiveBarLogger(multiBar);
|
|
66
85
|
let js_contents = {};
|
|
67
86
|
// make requests to all of them with the special header
|
|
68
87
|
const reqPromises = endpoints.map((endpoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -115,7 +134,7 @@ const subsequentRequests = (url, urlsFile, threads, output, js_urls) => __awaite
|
|
|
115
134
|
}
|
|
116
135
|
catch (e) {
|
|
117
136
|
queue--;
|
|
118
|
-
|
|
137
|
+
multiBar.log(chalk.red(`[!] Error fetching ${reqUrl}: ${e}\n`));
|
|
119
138
|
}
|
|
120
139
|
progressBar.increment(1, { phase: "RSC" });
|
|
121
140
|
}));
|
|
@@ -156,7 +175,9 @@ const subsequentRequests = (url, urlsFile, threads, output, js_urls) => __awaite
|
|
|
156
175
|
});
|
|
157
176
|
progressBar.increment(1, { phase: "HTML" });
|
|
158
177
|
}
|
|
159
|
-
|
|
178
|
+
multiBar.stop();
|
|
179
|
+
stopBarWatcher();
|
|
180
|
+
setActiveBarLogger(null);
|
|
160
181
|
// build the full URL from path
|
|
161
182
|
jsFilesFromPageHtml = jsFilesFromPageHtml.map((file) => {
|
|
162
183
|
// go through existing JS URLs found
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next_SubsequentRequests.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_SubsequentRequests.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"next_SubsequentRequests.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_SubsequentRequests.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,10 +14,13 @@ const next_scriptTagsSubsequentRequests = (url, endpointsFile) => __awaiter(void
|
|
|
14
14
|
console.log(chalk.cyan("[i] Getting JS files from subsequent requests (script tags)"));
|
|
15
15
|
let endpoints = JSON.parse(fs.readFileSync(endpointsFile, "utf8")).paths;
|
|
16
16
|
endpoints.push("/");
|
|
17
|
+
// Content-entropy dedup: fetch each endpoint, compute a fingerprint from its
|
|
18
|
+
// script tags, and skip variants whose fingerprint has already been seen.
|
|
19
|
+
// This handles same-path URLs with different query params — if they load the
|
|
20
|
+
// same scripts they are treated as identical; if they load different scripts
|
|
21
|
+
// they are both included.
|
|
22
|
+
const seenFingerprints = new Set();
|
|
17
23
|
let jsUrls = [];
|
|
18
|
-
// TODO: when you get a page, you can also search for anchor tags. If you find any additional
|
|
19
|
-
// pages, you can go through them as well. this will give you a lot more JS files
|
|
20
|
-
// go through all endpoints, and parse them
|
|
21
24
|
for (const endpoint of endpoints) {
|
|
22
25
|
// skip anything that isn't a valid relative path or absolute URL
|
|
23
26
|
if (!/^(\/|https?:\/\/)/.test(endpoint))
|
|
@@ -29,8 +32,13 @@ const next_scriptTagsSubsequentRequests = (url, endpointsFile) => __awaiter(void
|
|
|
29
32
|
catch (_a) {
|
|
30
33
|
continue;
|
|
31
34
|
}
|
|
32
|
-
const
|
|
33
|
-
|
|
35
|
+
const scripts = yield next_getJSScript(reqUrl);
|
|
36
|
+
const fp = [...new Set(scripts)].sort().join(",");
|
|
37
|
+
if (fp && seenFingerprints.has(fp))
|
|
38
|
+
continue;
|
|
39
|
+
if (fp)
|
|
40
|
+
seenFingerprints.add(fp);
|
|
41
|
+
jsUrls.push(...scripts);
|
|
34
42
|
}
|
|
35
43
|
// dedupe
|
|
36
44
|
jsUrls = [...new Set(jsUrls)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next_scriptTagsSubsequentRequests.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_scriptTagsSubsequentRequests.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"next_scriptTagsSubsequentRequests.js","sourceRoot":"","sources":["../../../src/lazyLoad/next_js/next_scriptTagsSubsequentRequests.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,iCAAiC,GAAG,CAAO,GAAW,EAAE,aAAqB,EAAE,EAAE;IACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC;IAEvF,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAEzE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpB,6EAA6E;IAC7E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,0BAA0B;IAC1B,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,iEAAiE;QACjE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QAElD,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACD,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;QACzC,CAAC;QAAC,WAAM,CAAC;YACL,SAAS;QACb,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAC7C,IAAI,EAAE;YAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,SAAS;IACT,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,kDAAkD,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAA,CAAC;AAEF,eAAe,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import makeRequest from "../../utility/makeReq.js";
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
/**
|
|
13
|
+
* Extracts all JS file references from the content of a JS file:
|
|
14
|
+
* - Static ESM imports: import ... from "./chunk.js" / import "./chunk.js"
|
|
15
|
+
* - Dynamic imports: import("./chunk.js")
|
|
16
|
+
* - Vite __vite_mapDeps: the flat asset array in the initialiser
|
|
17
|
+
*/
|
|
18
|
+
const extractImports = (content, fileUrl, baseUrl) => {
|
|
19
|
+
const found = [];
|
|
20
|
+
// Static imports: from "..." and import "..."
|
|
21
|
+
for (const m of content.matchAll(/\bfrom\s*["']([^"']+\.js)["']/g)) {
|
|
22
|
+
try {
|
|
23
|
+
found.push(new URL(m[1], fileUrl).href);
|
|
24
|
+
}
|
|
25
|
+
catch (_a) {
|
|
26
|
+
/* skip */
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
for (const m of content.matchAll(/\bimport\s*["']([^"']+\.js)["']/g)) {
|
|
30
|
+
try {
|
|
31
|
+
found.push(new URL(m[1], fileUrl).href);
|
|
32
|
+
}
|
|
33
|
+
catch (_b) {
|
|
34
|
+
/* skip */
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Dynamic imports: import("...")
|
|
38
|
+
for (const m of content.matchAll(/\bimport\s*\(\s*["']([^"']+\.js)["']\s*\)/g)) {
|
|
39
|
+
try {
|
|
40
|
+
found.push(new URL(m[1], fileUrl).href);
|
|
41
|
+
}
|
|
42
|
+
catch (_c) {
|
|
43
|
+
/* skip */
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Vite __vite_mapDeps initialiser: m.f=["assets/chunk1.js","assets/chunk2.js",...]
|
|
47
|
+
const mapDepsMatch = content.match(/m\.f\s*=\s*(\[[^\]]+\])/);
|
|
48
|
+
if (mapDepsMatch) {
|
|
49
|
+
try {
|
|
50
|
+
const arr = JSON.parse(mapDepsMatch[1]);
|
|
51
|
+
for (const p of arr) {
|
|
52
|
+
try {
|
|
53
|
+
// Vite asset paths are relative to the origin root
|
|
54
|
+
const resolved = new URL(p.startsWith("/") ? p : "/" + p, baseUrl).href;
|
|
55
|
+
found.push(resolved);
|
|
56
|
+
}
|
|
57
|
+
catch (_d) {
|
|
58
|
+
/* skip */
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (_e) {
|
|
63
|
+
/* malformed JSON — ignore */
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return found;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Fetches each JS file in `jsFiles` (skipping already-visited ones), extracts every
|
|
70
|
+
* import reference, and returns the set of newly-discovered URLs.
|
|
71
|
+
*
|
|
72
|
+
* `visited` is mutated in place: callers should pass the same Set across iterations
|
|
73
|
+
* so the recursion terminates once no new files are found.
|
|
74
|
+
*/
|
|
75
|
+
const react_followImports = (jsFiles, maxJsSizeMb, baseUrl, visited) => __awaiter(void 0, void 0, void 0, function* () {
|
|
76
|
+
const discovered = [];
|
|
77
|
+
for (const jsFile of jsFiles) {
|
|
78
|
+
if (visited.has(jsFile))
|
|
79
|
+
continue;
|
|
80
|
+
visited.add(jsFile);
|
|
81
|
+
try {
|
|
82
|
+
const req = yield makeRequest(jsFile);
|
|
83
|
+
if (!req || req.status !== 200)
|
|
84
|
+
continue;
|
|
85
|
+
const contentLength = req.headers.get("content-length");
|
|
86
|
+
if (contentLength && parseInt(contentLength) > maxJsSizeMb * 1024 * 1024) {
|
|
87
|
+
console.log(chalk.yellow(`[!] Skipping ${jsFile} (too large)`));
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const content = yield req.text();
|
|
91
|
+
if (content.length > maxJsSizeMb * 1024 * 1024) {
|
|
92
|
+
console.log(chalk.yellow(`[!] Skipping ${jsFile} (too large)`));
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
discovered.push(...extractImports(content, jsFile, baseUrl));
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.log(chalk.yellow(`[!] Could not follow imports in ${jsFile}: ${err}`));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Return only URLs not yet in visited (deduplicated)
|
|
102
|
+
return [...new Set(discovered)].filter((u) => !visited.has(u));
|
|
103
|
+
});
|
|
104
|
+
export default react_followImports;
|
|
105
|
+
//# sourceMappingURL=react_followImports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react_followImports.js","sourceRoot":"","sources":["../../../src/lazyLoad/react/react_followImports.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,20 +9,43 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import makeRequest from "../../utility/makeReq.js";
|
|
11
11
|
import * as cheerio from "cheerio";
|
|
12
|
-
|
|
12
|
+
import fs from "fs";
|
|
13
|
+
import path from "path";
|
|
14
|
+
import chalk from "chalk";
|
|
15
|
+
const react_getScriptTags = (url, maxJsSizeMb, outputDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
13
16
|
let toReturn = [];
|
|
14
|
-
// get the page source
|
|
15
17
|
const req = yield makeRequest(url);
|
|
16
18
|
const pageSource = yield req.text();
|
|
17
|
-
// iterate through the page source and get the script tags
|
|
18
19
|
const $ = cheerio.load(pageSource);
|
|
19
|
-
|
|
20
|
+
const host = new URL(url).host.replace(":", "_");
|
|
21
|
+
let inlineIndex = 0;
|
|
22
|
+
$("script").each((_, elem) => {
|
|
20
23
|
const src = $(elem).attr("src");
|
|
21
24
|
if (src) {
|
|
22
25
|
toReturn.push(new URL(src, url).href);
|
|
23
26
|
}
|
|
27
|
+
else if (outputDir) {
|
|
28
|
+
// Inline script — save to disk so downstream modules can analyze it
|
|
29
|
+
const content = $(elem).text().trim();
|
|
30
|
+
if (!content)
|
|
31
|
+
return;
|
|
32
|
+
const hostDir = path.join(outputDir, host);
|
|
33
|
+
fs.mkdirSync(hostDir, { recursive: true });
|
|
34
|
+
const filename = `inline-${inlineIndex++}.js`;
|
|
35
|
+
const filePath = path.join(hostDir, filename);
|
|
36
|
+
fs.writeFileSync(filePath, `// File Source: ${url} (inline script #${inlineIndex - 1})\n${content}`);
|
|
37
|
+
console.log(chalk.green(`[✓] Saved inline script to ${filePath}`));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// Vite splits React and other vendor code into chunks referenced via modulepreload links,
|
|
41
|
+
// not script tags. Include them as seeds so import-following picks them up.
|
|
42
|
+
$("link[rel='modulepreload']").each((_, elem) => {
|
|
43
|
+
const href = $(elem).attr("href");
|
|
44
|
+
if (href) {
|
|
45
|
+
toReturn.push(new URL(href, url).href);
|
|
46
|
+
}
|
|
24
47
|
});
|
|
25
|
-
toReturn = [...new Set(toReturn)];
|
|
48
|
+
toReturn = [...new Set(toReturn)];
|
|
26
49
|
return toReturn;
|
|
27
50
|
});
|
|
28
51
|
export default react_getScriptTags;
|
|
@@ -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;
|
|
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;AAE1B,MAAM,mBAAmB,GAAG,CAAO,GAAW,EAAE,WAAmB,EAAE,SAAkB,EAAqB,EAAE;IAC1G,IAAI,QAAQ,GAAa,EAAE,CAAC;IAE5B,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAEpC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,GAAG,EAAE,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACnB,oEAAoE;YACpE,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,UAAU,WAAW,EAAE,KAAK,CAAC;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC9C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,mBAAmB,GAAG,oBAAoB,WAAW,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;YACrG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,0FAA0F;IAC1F,4EAA4E;IAC5E,CAAC,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,IAAI,EAAE,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import * as cheerio from "cheerio";
|
|
12
|
+
import makeRequest from "../../utility/makeReq.js";
|
|
13
|
+
import resolvePath from "../../utility/resolvePath.js";
|
|
14
|
+
import { getJsUrls, pushToJsUrls } from "../globals.js";
|
|
15
|
+
import { URL } from "url";
|
|
16
|
+
const ASSET_EXTENSIONS = [".js", ".css", ".json", ".png", ".svg", ".woff", ".woff2", ".ico", ".jpg", ".gif"];
|
|
17
|
+
const SKIP_PREFIXES = ["/_astro/", "/_next/", "/__"];
|
|
18
|
+
/**
|
|
19
|
+
* Extracts path-like strings from a JS file's raw text content that look like
|
|
20
|
+
* same-origin page routes (start with "/" and don't end with ".js"/".css"/etc).
|
|
21
|
+
* Also detects template literal path prefixes like `/post/${...}` → `/post/1`
|
|
22
|
+
* by substituting a test ID ("1") for the first dynamic segment.
|
|
23
|
+
*/
|
|
24
|
+
const extractPagePaths = (content) => {
|
|
25
|
+
const paths = new Set();
|
|
26
|
+
// Static string literals: "/admin", '/debug', etc.
|
|
27
|
+
const STATIC_RE = /["'](\/[a-zA-Z0-9_\-/]+)["']/g;
|
|
28
|
+
let m;
|
|
29
|
+
while ((m = STATIC_RE.exec(content)) !== null) {
|
|
30
|
+
const p = m[1];
|
|
31
|
+
if (ASSET_EXTENSIONS.some((e) => p.endsWith(e)))
|
|
32
|
+
continue;
|
|
33
|
+
if (SKIP_PREFIXES.some((pre) => p.startsWith(pre)))
|
|
34
|
+
continue;
|
|
35
|
+
if (p.split("/").length > 5)
|
|
36
|
+
continue;
|
|
37
|
+
paths.add(p);
|
|
38
|
+
}
|
|
39
|
+
// Template literal path prefixes: `/post/${...}` → try `/post/1`
|
|
40
|
+
// Matches backtick template literals starting with "/" that have at least one ${} segment
|
|
41
|
+
const TEMPLATE_RE = /`(\/[a-zA-Z0-9_\-/]+)\$\{[^`}]+\}(?:\/[a-zA-Z0-9_\-]*)*`/g;
|
|
42
|
+
while ((m = TEMPLATE_RE.exec(content)) !== null) {
|
|
43
|
+
const prefix = m[1]; // e.g. "/post/"
|
|
44
|
+
if (SKIP_PREFIXES.some((pre) => prefix.startsWith(pre)))
|
|
45
|
+
continue;
|
|
46
|
+
// Strip trailing slash before appending test ID
|
|
47
|
+
const base = prefix.endsWith("/") ? prefix.slice(0, -1) : prefix;
|
|
48
|
+
const testUrl = `${base}/1`;
|
|
49
|
+
if (testUrl.split("/").length <= 5)
|
|
50
|
+
paths.add(testUrl);
|
|
51
|
+
}
|
|
52
|
+
return [...paths];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Extracts JS file references from an HTML page's Astro island elements,
|
|
56
|
+
* <script src>, and <link rel="modulepreload"> tags.
|
|
57
|
+
*/
|
|
58
|
+
const extractJsFromHtml = (pageUrl, html) => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
|
+
const $ = cheerio.load(html);
|
|
60
|
+
const jsFiles = [];
|
|
61
|
+
for (const el of $("link").toArray()) {
|
|
62
|
+
const rel = $(el).attr("rel");
|
|
63
|
+
if (rel === "modulepreload") {
|
|
64
|
+
const href = $(el).attr("href");
|
|
65
|
+
if (href)
|
|
66
|
+
jsFiles.push(href.startsWith("http") ? href : yield resolvePath(pageUrl, href));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const el of $("script").toArray()) {
|
|
70
|
+
const src = $(el).attr("src");
|
|
71
|
+
if (src)
|
|
72
|
+
jsFiles.push(src.startsWith("http") ? src : yield resolvePath(pageUrl, src));
|
|
73
|
+
}
|
|
74
|
+
for (const el of $("astro-island").toArray()) {
|
|
75
|
+
for (const attr of ["component-url", "renderer-url"]) {
|
|
76
|
+
const value = $(el).attr(attr);
|
|
77
|
+
if (value)
|
|
78
|
+
jsFiles.push(value.startsWith("http") ? value : yield resolvePath(pageUrl, value));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return jsFiles;
|
|
82
|
+
});
|
|
83
|
+
const MAX_ROUNDS = 5;
|
|
84
|
+
/**
|
|
85
|
+
* Iteratively scans all JS URLs in the global registry for embedded page path
|
|
86
|
+
* strings, visits each discovered page to extract Astro island component-url /
|
|
87
|
+
* script-src / modulepreload references, and repeats until no new URLs are found.
|
|
88
|
+
*
|
|
89
|
+
* This fills the gap left by Svelte/Astro client-side routers that don't emit
|
|
90
|
+
* <a href> links in server-rendered HTML — instead route paths live as string
|
|
91
|
+
* literals inside the compiled JS bundles.
|
|
92
|
+
*
|
|
93
|
+
* @param entryUrl - The target's base URL (used to build absolute page URLs)
|
|
94
|
+
* @returns Array of all newly discovered JS file URLs across all rounds
|
|
95
|
+
*/
|
|
96
|
+
const svelte_discoverPagesFromJs = (entryUrl) => __awaiter(void 0, void 0, void 0, function* () {
|
|
97
|
+
var _a;
|
|
98
|
+
const origin = new URL(entryUrl).origin;
|
|
99
|
+
const allDiscovered = [];
|
|
100
|
+
const visitedPaths = new Set();
|
|
101
|
+
const scannedJsUrls = new Set();
|
|
102
|
+
for (let round = 0; round < MAX_ROUNDS; round++) {
|
|
103
|
+
const currentJsUrls = getJsUrls().filter((u) => !scannedJsUrls.has(u));
|
|
104
|
+
if (currentJsUrls.length === 0)
|
|
105
|
+
break;
|
|
106
|
+
// Collect candidate page paths from all unscanned JS URLs
|
|
107
|
+
const candidatePaths = new Set();
|
|
108
|
+
for (const jsUrl of currentJsUrls) {
|
|
109
|
+
scannedJsUrls.add(jsUrl);
|
|
110
|
+
try {
|
|
111
|
+
const res = yield makeRequest(jsUrl, {});
|
|
112
|
+
if (!res)
|
|
113
|
+
continue;
|
|
114
|
+
const content = yield res.text();
|
|
115
|
+
for (const p of extractPagePaths(content)) {
|
|
116
|
+
candidatePaths.add(p);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (_b) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Filter to only unvisited paths
|
|
124
|
+
const newPaths = [...candidatePaths].filter((p) => !visitedPaths.has(p));
|
|
125
|
+
if (newPaths.length === 0)
|
|
126
|
+
break;
|
|
127
|
+
console.log(chalk.cyan(`[i] Found ${newPaths.length} candidate page path(s) in JS — visiting to discover more chunks`));
|
|
128
|
+
let foundThisRound = 0;
|
|
129
|
+
for (const pagePath of newPaths) {
|
|
130
|
+
visitedPaths.add(pagePath);
|
|
131
|
+
const pageUrl = `${origin}${pagePath}`;
|
|
132
|
+
try {
|
|
133
|
+
const res = yield makeRequest(pageUrl, {});
|
|
134
|
+
if (!res)
|
|
135
|
+
continue;
|
|
136
|
+
const contentType = (_a = res.headers.get("content-type")) !== null && _a !== void 0 ? _a : "";
|
|
137
|
+
if (!contentType.includes("text/html"))
|
|
138
|
+
continue;
|
|
139
|
+
const html = yield res.text();
|
|
140
|
+
const jsFromPage = yield extractJsFromHtml(pageUrl, html);
|
|
141
|
+
for (const jsUrl of jsFromPage) {
|
|
142
|
+
if (!getJsUrls().includes(jsUrl)) {
|
|
143
|
+
pushToJsUrls(jsUrl);
|
|
144
|
+
allDiscovered.push(jsUrl);
|
|
145
|
+
foundThisRound++;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (jsFromPage.length > 0) {
|
|
149
|
+
console.log(chalk.green(`[✓] ${pageUrl}: found ${jsFromPage.length} JS file(s)`));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (_c) {
|
|
153
|
+
// page not found or network error — skip
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (foundThisRound === 0)
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
return allDiscovered;
|
|
160
|
+
});
|
|
161
|
+
export default svelte_discoverPagesFromJs;
|
|
162
|
+
//# sourceMappingURL=svelte_discoverPagesFromJs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte_discoverPagesFromJs.js","sourceRoot":"","sources":["../../../src/lazyLoad/svelte/svelte_discoverPagesFromJs.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,21 @@ const svelte_getFromPageSource = (url) => __awaiter(void 0, void 0, void 0, func
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
+
// parse astro-island component-url and renderer-url attributes (Astro island hydration)
|
|
60
|
+
const astroIslands = $("astro-island");
|
|
61
|
+
for (const island of astroIslands) {
|
|
62
|
+
for (const attr of ["component-url", "renderer-url"]) {
|
|
63
|
+
const value = $(island).attr(attr);
|
|
64
|
+
if (value) {
|
|
65
|
+
if (value.startsWith("http")) {
|
|
66
|
+
foundUrls.push(value);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
foundUrls.push(yield resolvePath(url, value));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
59
74
|
if (foundUrls.length === 0) {
|
|
60
75
|
console.log(chalk.red("[!] No JS files found from the page source"));
|
|
61
76
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte_getFromPageSource.js","sourceRoot":"","sources":["../../../src/lazyLoad/svelte/svelte_getFromPageSource.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,wBAAwB,GAAG,CAAO,GAAG,EAAE,EAAE;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;IAErC,mCAAmC;IACnC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,qBAAqB;IACrB,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,QAAQ,EAAE,CAAC;gBACX,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACJ,SAAS,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACrD,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,8BAA8B;IAC9B,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACJ,SAAS,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC;IACd,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,SAAS,CAAC,MAAM,gCAAgC,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,sDAAsD;IACtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,SAAS;QACb,CAAC;QACD,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA,CAAC;AACF,eAAe,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"svelte_getFromPageSource.js","sourceRoot":"","sources":["../../../src/lazyLoad/svelte/svelte_getFromPageSource.ts"],"names":[],"mappings":"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"}
|