@js-recon/js-recon 1.3.2 → 1.4.1-alpha.10

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.
Files changed (233) hide show
  1. package/.github/workflows/build-and-prettify.yaml +207 -14
  2. package/.github/workflows/pr_checker.yml +2 -2
  3. package/.github/workflows/promote-js-recon.yml +104 -0
  4. package/.github/workflows/publish-js-recon.yml +22 -80
  5. package/.github/workflows/rules-smoke-test.yaml +79 -0
  6. package/CHANGELOG.md +177 -4
  7. package/CLAUDE.md +350 -16
  8. package/Dockerfile.release +29 -0
  9. package/README.md +48 -19
  10. package/build/analyze/engine/csMastSEngine.js +129 -0
  11. package/build/analyze/engine/csMastSEngine.js.map +1 -0
  12. package/build/analyze/engine/index.js +15 -0
  13. package/build/analyze/engine/index.js.map +1 -1
  14. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +2 -1
  15. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -1
  16. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +2 -1
  17. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
  18. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +2 -1
  19. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -1
  20. package/build/analyze/helpers/engineHelpers/taintFlow.js +11 -2
  21. package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
  22. package/build/analyze/helpers/initRules.js.map +1 -1
  23. package/build/analyze/helpers/schemas.js +6 -2
  24. package/build/analyze/helpers/schemas.js.map +1 -1
  25. package/build/analyze/helpers/validate.js +3 -3
  26. package/build/analyze/helpers/validate.js.map +1 -1
  27. package/build/analyze/index.js +1 -0
  28. package/build/analyze/index.js.map +1 -1
  29. package/build/completion/index.js +432 -0
  30. package/build/completion/index.js.map +1 -0
  31. package/build/cs_mast/index.js +213 -0
  32. package/build/cs_mast/index.js.map +1 -0
  33. package/build/endpoints/next_js/client_jsFilesHref.js +2 -1
  34. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
  35. package/build/endpoints/next_js/client_jsonParse.js +2 -1
  36. package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
  37. package/build/endpoints/next_js/client_mappedJsonFile.js +2 -1
  38. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
  39. package/build/endpoints/next_js/client_subsequentRequests.js +2 -1
  40. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
  41. package/build/fingerprint/index.js +56 -33
  42. package/build/fingerprint/index.js.map +1 -1
  43. package/build/globalConfig.js +3 -3
  44. package/build/globalConfig.js.map +1 -1
  45. package/build/index.js +210 -10
  46. package/build/index.js.map +1 -1
  47. package/build/lazyLoad/angular/angular_getFromMainJs.js +2 -1
  48. package/build/lazyLoad/angular/angular_getFromMainJs.js.map +1 -1
  49. package/build/lazyLoad/downloadFilesUtil.js +6 -5
  50. package/build/lazyLoad/downloadFilesUtil.js.map +1 -1
  51. package/build/lazyLoad/downloadLoadedJsUtil.js +59 -5
  52. package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -1
  53. package/build/lazyLoad/downloadQueue.js +10 -9
  54. package/build/lazyLoad/downloadQueue.js.map +1 -1
  55. package/build/lazyLoad/index.js +127 -85
  56. package/build/lazyLoad/index.js.map +1 -1
  57. package/build/lazyLoad/methodFilter.js +50 -0
  58. package/build/lazyLoad/methodFilter.js.map +1 -0
  59. package/build/lazyLoad/next_js/NextJsCrawler.js +69 -48
  60. package/build/lazyLoad/next_js/NextJsCrawler.js.map +1 -1
  61. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +36 -34
  62. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
  63. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +66 -13
  64. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  65. package/build/lazyLoad/next_js/next_parseLayoutJs.js +80 -68
  66. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
  67. package/build/lazyLoad/next_js/next_promiseResolve.js +22 -16
  68. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
  69. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +49 -47
  70. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
  71. package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js +64 -0
  72. package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -0
  73. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +3 -1
  74. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -1
  75. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +3 -2
  76. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
  77. package/build/lazyLoad/react/react_followImports.js +16 -7
  78. package/build/lazyLoad/react/react_followImports.js.map +1 -1
  79. package/build/lazyLoad/react/react_webpackChunkPaths.js +175 -123
  80. package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
  81. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +16 -0
  82. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
  83. package/build/lazyLoad/svelte/svelte_getVersionJson.js +40 -0
  84. package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -0
  85. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +3 -2
  86. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
  87. package/build/lazyLoad/techDetect/checkAngularJS.js +27 -6
  88. package/build/lazyLoad/techDetect/checkAngularJS.js.map +1 -1
  89. package/build/lazyLoad/techDetect/checkNextJS.js +24 -15
  90. package/build/lazyLoad/techDetect/checkNextJS.js.map +1 -1
  91. package/build/lazyLoad/techDetect/checkReact.js +8 -0
  92. package/build/lazyLoad/techDetect/checkReact.js.map +1 -1
  93. package/build/lazyLoad/techDetect/checkSvelte.js +17 -0
  94. package/build/lazyLoad/techDetect/checkSvelte.js.map +1 -1
  95. package/build/lazyLoad/techDetect/index.js +33 -5
  96. package/build/lazyLoad/techDetect/index.js.map +1 -1
  97. package/build/lazyLoad/vue/vue_RuntimeJs.js +2 -1
  98. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
  99. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -1
  100. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
  101. package/build/lazyLoad/vue/vue_discoverJsFiles.js +59 -25
  102. package/build/lazyLoad/vue/vue_discoverJsFiles.js.map +1 -1
  103. package/build/lazyLoad/vue/vue_getClientSidePaths.js +2 -1
  104. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
  105. package/build/lazyLoad/vue/vue_jsImports.js +2 -1
  106. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
  107. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js +2 -2
  108. package/build/lazyLoad/vue/vue_recursiveClientSidePathDownload.js.map +1 -1
  109. package/build/lazyLoad/vue/vue_viteMapDeps.js +62 -54
  110. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
  111. package/build/map/angular_js/getAngularConnections.js +88 -0
  112. package/build/map/angular_js/getAngularConnections.js.map +1 -0
  113. package/build/map/angular_js/interactive.js +4 -0
  114. package/build/map/angular_js/interactive.js.map +1 -0
  115. package/build/map/graphql/resolveGraphql.js +2 -1
  116. package/build/map/graphql/resolveGraphql.js.map +1 -1
  117. package/build/map/index.js +38 -0
  118. package/build/map/index.js.map +1 -1
  119. package/build/map/next_js/getExports.js +2 -1
  120. package/build/map/next_js/getExports.js.map +1 -1
  121. package/build/map/next_js/getFetchInstances.js +2 -1
  122. package/build/map/next_js/getFetchInstances.js.map +1 -1
  123. package/build/map/next_js/getTurbopackConnections.js +2 -1
  124. package/build/map/next_js/getTurbopackConnections.js.map +1 -1
  125. package/build/map/next_js/getWebpackConnections.js +2 -1
  126. package/build/map/next_js/getWebpackConnections.js.map +1 -1
  127. package/build/map/next_js/resolveAxios.js +2 -1
  128. package/build/map/next_js/resolveAxios.js.map +1 -1
  129. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +2 -1
  130. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -1
  131. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +2 -1
  132. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
  133. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +2 -1
  134. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
  135. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +2 -1
  136. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
  137. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +2 -1
  138. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
  139. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +2 -1
  140. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -1
  141. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +2 -1
  142. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
  143. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +2 -1
  144. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
  145. package/build/map/next_js/resolveAxiosHelpers/traceBody.js +2 -1
  146. package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -1
  147. package/build/map/next_js/resolveFetch.js +2 -1
  148. package/build/map/next_js/resolveFetch.js.map +1 -1
  149. package/build/map/next_js/resolveNewRequest.js +2 -1
  150. package/build/map/next_js/resolveNewRequest.js.map +1 -1
  151. package/build/map/next_js/resolveServerActions.js +2 -1
  152. package/build/map/next_js/resolveServerActions.js.map +1 -1
  153. package/build/map/next_js/utils.js +2 -1
  154. package/build/map/next_js/utils.js.map +1 -1
  155. package/build/map/react_js/getReactConnections.js +5 -4
  156. package/build/map/react_js/getReactConnections.js.map +1 -1
  157. package/build/map/vue_js/crossFileResolver.js +3 -2
  158. package/build/map/vue_js/crossFileResolver.js.map +1 -1
  159. package/build/map/vue_js/getViteConnections.js +5 -4
  160. package/build/map/vue_js/getViteConnections.js.map +1 -1
  161. package/build/map/vue_js/taint_utils.js +2 -1
  162. package/build/map/vue_js/taint_utils.js.map +1 -1
  163. package/build/map/vue_js/vue_resolveFetch.js +3 -2
  164. package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
  165. package/build/map/vue_js/vue_resolveHttpClient.js +5 -3
  166. package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
  167. package/build/map/vue_js/vue_resolveXhr.js +5 -3
  168. package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
  169. package/build/mcp/cli.js.map +1 -1
  170. package/build/refactor/index.js +973 -27
  171. package/build/refactor/index.js.map +1 -1
  172. package/build/refactor/next/helpers.js +395 -0
  173. package/build/refactor/next/helpers.js.map +1 -0
  174. package/build/refactor/next/index.js +261 -71
  175. package/build/refactor/next/index.js.map +1 -1
  176. package/build/refactor/next/transform.js +1027 -0
  177. package/build/refactor/next/transform.js.map +1 -0
  178. package/build/refactor/next/validator.js +119 -0
  179. package/build/refactor/next/validator.js.map +1 -0
  180. package/build/refactor/react/helpers.js +106 -0
  181. package/build/refactor/react/helpers.js.map +1 -0
  182. package/build/refactor/react/index.js +290 -585
  183. package/build/refactor/react/index.js.map +1 -1
  184. package/build/refactor/react/library-classify.js +397 -0
  185. package/build/refactor/react/library-classify.js.map +1 -0
  186. package/build/refactor/react/transform.js +1852 -0
  187. package/build/refactor/react/transform.js.map +1 -0
  188. package/build/refactor/react/validator.js +123 -0
  189. package/build/refactor/react/validator.js.map +1 -0
  190. package/build/refactor/react-vite/index.js +652 -0
  191. package/build/refactor/react-vite/index.js.map +1 -0
  192. package/build/refactor/react-vite/vendor-analyze.js +336 -0
  193. package/build/refactor/react-vite/vendor-analyze.js.map +1 -0
  194. package/build/refactor/remote/cache.js +250 -0
  195. package/build/refactor/remote/cache.js.map +1 -0
  196. package/build/refactor/remote/config.js +63 -0
  197. package/build/refactor/remote/config.js.map +1 -0
  198. package/build/refactor/remote/hf-client.js +202 -0
  199. package/build/refactor/remote/hf-client.js.map +1 -0
  200. package/build/refactor/remote/version-detect.js +355 -0
  201. package/build/refactor/remote/version-detect.js.map +1 -0
  202. package/build/refactor/vue/index.js +176 -0
  203. package/build/refactor/vue/index.js.map +1 -0
  204. package/build/refactor/vue/vendor-analyze-vue.js +271 -0
  205. package/build/refactor/vue/vendor-analyze-vue.js.map +1 -0
  206. package/build/refactor/vue/vite.js +216 -0
  207. package/build/refactor/vue/vite.js.map +1 -0
  208. package/build/report/utility/genHtml.js +15 -4
  209. package/build/report/utility/genHtml.js.map +1 -1
  210. package/build/run/bundler-detect.js +154 -0
  211. package/build/run/bundler-detect.js.map +1 -0
  212. package/build/run/index.js +208 -16
  213. package/build/run/index.js.map +1 -1
  214. package/build/sourcemaps/index.js +89 -0
  215. package/build/sourcemaps/index.js.map +1 -0
  216. package/build/strings/index.js +6 -2
  217. package/build/strings/index.js.map +1 -1
  218. package/build/strings/trufflehog.js +71 -0
  219. package/build/strings/trufflehog.js.map +1 -0
  220. package/build/utility/banner.js +68 -0
  221. package/build/utility/banner.js.map +1 -0
  222. package/build/utility/getChromiumPath.js +40 -0
  223. package/build/utility/getChromiumPath.js.map +1 -0
  224. package/build/utility/globals.js +7 -0
  225. package/build/utility/globals.js.map +1 -1
  226. package/build/utility/makeReq.js +21 -11
  227. package/build/utility/makeReq.js.map +1 -1
  228. package/build/utility/postmanGenerator.js +2 -2
  229. package/build/utility/postmanGenerator.js.map +1 -1
  230. package/build/utility/puppeteerInstance.js +7 -1
  231. package/build/utility/puppeteerInstance.js.map +1 -1
  232. package/package.json +14 -8
  233. package/scripts/smoke-test.js +74 -0
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Vue Vite refactor (`-t vue-vite`).
3
+ *
4
+ * Vue 3 + Vite produces a main index chunk (containing all of Vue core +
5
+ * vue-router + app utilities) and small lazy-loaded page chunks. The page
6
+ * chunks import a handful of minified Vue runtime functions from the index:
7
+ *
8
+ * import { _ as t, c as a, a as o, o as s } from "./index-Dcf91m-J.js"
9
+ *
10
+ * This module:
11
+ * 1. Identifies the main index chunk (contains __vccOpts)
12
+ * 2. Analyses it with analyzeVueIndexChunk() to map alias → canonical name
13
+ * 3. For each page chunk, rewrites the index import to canonical Vue imports
14
+ * 4. Applies cleanup passes (G: Babel helpers, H: unused import pruning)
15
+ * 5. Inlines _export_sfc as a local helper when used
16
+ */
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var _a, _b;
27
+ import chalk from "chalk";
28
+ import parser from "@babel/parser";
29
+ import _traverse from "@babel/traverse";
30
+ import _generate from "@babel/generator";
31
+ import * as t from "@babel/types";
32
+ import path from "path";
33
+ import { analyzeVueIndexChunk, VUE_PUBLIC_API } from "./vendor-analyze-vue.js";
34
+ import { applyModuleCleanupPasses } from "../react/transform.js";
35
+ const traverse = (_a = _traverse.default) !== null && _a !== void 0 ? _a : _traverse;
36
+ const generate = (_b = _generate.default) !== null && _b !== void 0 ? _b : _generate;
37
+ // _export_sfc helper — inlined when the page chunk uses it but it is not
38
+ // available in the public Vue API. This is the exact function that
39
+ // @vitejs/plugin-vue emits in every compiled SFC.
40
+ const EXPORT_SFC_HELPER = `
41
+ const _export_sfc = (sfc, props) => {
42
+ const target = sfc.__vccOpts || sfc;
43
+ for (const [key, val] of props) target[key] = val;
44
+ return target;
45
+ };`.trim();
46
+ // ---------------------------------------------------------------------------
47
+ // Chunk classification
48
+ // ---------------------------------------------------------------------------
49
+ function isMainIndexChunk(filename, code) {
50
+ // The main index chunk is the large one that contains __vccOpts.
51
+ // Page chunks are tiny (<5 kB) and only import from the index.
52
+ return code.includes("__vccOpts") && code.length > 5000;
53
+ }
54
+ function isPageChunk(filename, code) {
55
+ // Small chunk that starts with an import from the index file.
56
+ return code.length < 20000 && /^import\s*\{/.test(code.trim()) && code.includes("export");
57
+ }
58
+ // ---------------------------------------------------------------------------
59
+ // Import rewriting
60
+ // ---------------------------------------------------------------------------
61
+ /**
62
+ * Rewrites `import { _ as t, c as a, ... } from "./index-*.js"` in a page
63
+ * chunk to `import { createElementVNode as a, openBlock as s, ... } from "vue"`.
64
+ *
65
+ * Returns the transformed statements and a flag indicating whether the
66
+ * _export_sfc helper is needed.
67
+ */
68
+ function rewriteVueIndexImport(statements, vueExportMap, indexFilename) {
69
+ const indexBase = path.basename(indexFilename).replace(/\.js$/, "");
70
+ let needsExportSfc = false;
71
+ const exportSfcAliases = []; // local variable names that alias _export_sfc
72
+ const newStatements = statements.map((stmt) => {
73
+ if (!t.isImportDeclaration(stmt))
74
+ return stmt;
75
+ const src = stmt.source.value;
76
+ // Match if source looks like ./index-<hash>.js (or similar)
77
+ const srcBase = path.basename(src).replace(/\.js$/, "");
78
+ const isIndexImport = srcBase === indexBase || /^index-/.test(srcBase) || /^index$/.test(srcBase);
79
+ if (!isIndexImport)
80
+ return stmt;
81
+ // Map each specifier to its canonical Vue name.
82
+ const vueImports = [];
83
+ for (const spec of stmt.specifiers) {
84
+ if (!t.isImportSpecifier(spec))
85
+ continue;
86
+ const importedName = t.isIdentifier(spec.imported)
87
+ ? spec.imported.name
88
+ : spec.imported.value;
89
+ const localName = spec.local.name;
90
+ const canonical = vueExportMap.get(importedName);
91
+ if (!canonical) {
92
+ // Unknown export — keep importing from index with original name.
93
+ vueImports.push({ canonical: importedName, local: localName });
94
+ continue;
95
+ }
96
+ if (canonical === "_export_sfc") {
97
+ needsExportSfc = true;
98
+ // Record the local alias so we can emit `const <alias> = _export_sfc;`
99
+ if (localName !== "_export_sfc")
100
+ exportSfcAliases.push(localName);
101
+ }
102
+ else if (VUE_PUBLIC_API.has(canonical)) {
103
+ vueImports.push({ canonical, local: localName });
104
+ }
105
+ else {
106
+ // Not a public API — keep the import but from index.
107
+ vueImports.push({ canonical: importedName, local: localName });
108
+ }
109
+ }
110
+ // Build new import declaration from 'vue' for public API names.
111
+ const vueSpecifiers = vueImports
112
+ .filter(({ canonical }) => VUE_PUBLIC_API.has(canonical))
113
+ .map(({ canonical, local }) => t.importSpecifier(t.identifier(local), t.identifier(canonical)));
114
+ if (vueSpecifiers.length === 0) {
115
+ // All specifiers were _export_sfc — drop the import statement.
116
+ return null;
117
+ }
118
+ return t.importDeclaration(vueSpecifiers, t.stringLiteral("vue"));
119
+ });
120
+ return {
121
+ statements: newStatements.filter(Boolean),
122
+ needsExportSfc,
123
+ exportSfcAliases,
124
+ };
125
+ }
126
+ // ---------------------------------------------------------------------------
127
+ // Main refactor entry
128
+ // ---------------------------------------------------------------------------
129
+ /**
130
+ * Refactors all Vue Vite chunks.
131
+ *
132
+ * Input: `chunks` map from mapped.json (chunk id → Chunk).
133
+ * - One entry is the large main index chunk (contains all of Vue runtime).
134
+ * - Remaining entries are small page/component chunks.
135
+ *
136
+ * Output: map of chunk id → refactored ES module code.
137
+ *
138
+ * Page chunks have their index imports rewritten to canonical `vue` imports.
139
+ * The main index chunk is NOT included in the output (it is library/runtime code).
140
+ */
141
+ export function refactorVueVite(chunks) {
142
+ return __awaiter(this, void 0, void 0, function* () {
143
+ var _a, _b, _c;
144
+ const results = {};
145
+ // Step 1: Find and analyse the main index chunk.
146
+ let vueExportMap = new Map();
147
+ let indexChunkId = null;
148
+ let indexFilename = "index";
149
+ for (const [id, chunk] of Object.entries(chunks)) {
150
+ const code = chunk.code.replace(/^\/\/ File Source:[^\n]*\n/, "");
151
+ if (isMainIndexChunk((_a = chunk.file) !== null && _a !== void 0 ? _a : id, code)) {
152
+ indexChunkId = id;
153
+ indexFilename = (_b = chunk.file) !== null && _b !== void 0 ? _b : id;
154
+ console.log(chalk.cyan(`[i] Analysing Vue index chunk: ${id}`));
155
+ vueExportMap = analyzeVueIndexChunk(code);
156
+ console.log(chalk.cyan(`[i] Mapped ${vueExportMap.size} Vue export aliases: `) +
157
+ Array.from(vueExportMap.entries())
158
+ .map(([a, c]) => `${a}→${c}`)
159
+ .join(", "));
160
+ break;
161
+ }
162
+ }
163
+ if (vueExportMap.size === 0) {
164
+ console.log(chalk.yellow("[~] No Vue index chunk found — processing all chunks as standalone"));
165
+ }
166
+ // Step 2: Process page chunks.
167
+ for (const [id, chunk] of Object.entries(chunks)) {
168
+ if (id === indexChunkId)
169
+ continue; // skip the main index bundle
170
+ const rawCode = chunk.code.replace(/^\/\/ File Source:[^\n]*\n/, "");
171
+ if (!rawCode.trim())
172
+ continue;
173
+ const filename = (_c = chunk.file) !== null && _c !== void 0 ? _c : id;
174
+ console.log(chalk.cyan(`[i] Processing Vue (vite) chunk: ${id}`));
175
+ let ast;
176
+ try {
177
+ ast = parser.parse(rawCode, {
178
+ sourceType: "module",
179
+ plugins: ["jsx"],
180
+ errorRecovery: true,
181
+ });
182
+ }
183
+ catch (_d) {
184
+ console.log(chalk.yellow(`[!] Failed to parse chunk ${id} — skipping`));
185
+ continue;
186
+ }
187
+ let stmts = ast.program.body;
188
+ // Step 2a: Rewrite the index import to canonical Vue imports.
189
+ const { statements: rewritten, needsExportSfc, exportSfcAliases, } = rewriteVueIndexImport(stmts, vueExportMap, indexFilename);
190
+ stmts = rewritten;
191
+ // Step 2b: Insert _export_sfc helper and aliases after all import declarations.
192
+ // Import statements must stay at the top of an ESM module.
193
+ if (needsExportSfc) {
194
+ const helperAst = parser.parse(EXPORT_SFC_HELPER, { sourceType: "module" });
195
+ const aliasDecls = exportSfcAliases.map((alias) => t.variableDeclaration("const", [t.variableDeclarator(t.identifier(alias), t.identifier("_export_sfc"))]));
196
+ // Split existing statements: imports first, then body.
197
+ const importStmts = stmts.filter((s) => t.isImportDeclaration(s));
198
+ const bodyStmts = stmts.filter((s) => !t.isImportDeclaration(s));
199
+ stmts = [...importStmts, ...helperAst.program.body, ...aliasDecls, ...bodyStmts];
200
+ }
201
+ // Step 2c: Apply shared cleanup passes (E: slicedToArray, G: Babel helpers).
202
+ // Pass F (JSX recovery) is harmless on Vue render functions and is included.
203
+ const cleanedStmts = applyModuleCleanupPasses(stmts);
204
+ // Step 2d: Generate code.
205
+ const fakeProgram = t.program(cleanedStmts, [], "module");
206
+ const { code: generated } = generate(fakeProgram, {
207
+ compact: false,
208
+ jsescOption: { minimal: true },
209
+ });
210
+ results[id] = generated;
211
+ }
212
+ return results;
213
+ });
214
+ }
215
+ export default refactorVueVite;
216
+ //# sourceMappingURL=vite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.js","sourceRoot":"","sources":["../../../src/refactor/vue/vite.ts"],"names":[],"mappings":"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"}
@@ -43,12 +43,23 @@ const getLocalDataTablesAssets = () => {
43
43
  const getLocalJqueryAsset = () => {
44
44
  try {
45
45
  const require = createRequire(import.meta.url);
46
- const jqPath = require.resolve("jquery/dist/jquery.min.js");
46
+ // Try the direct subpath first (jQuery <4); if that fails (jQuery 4+ restricts
47
+ // subpath exports), derive the path from the main entry.
48
+ let jqPath;
49
+ try {
50
+ jqPath = require.resolve("jquery/dist/jquery.min.js");
51
+ }
52
+ catch (_a) {
53
+ const mainPath = require.resolve("jquery");
54
+ jqPath = mainPath.replace(/jquery\.js$/, "jquery.min.js");
55
+ }
56
+ if (!fs.existsSync(jqPath))
57
+ throw new Error("jquery.min.js not found at " + jqPath);
47
58
  const js = fs.readFileSync(jqPath, "utf8");
48
59
  return js;
49
60
  }
50
- catch (e) {
51
- console.warn("[DataTables] Local jQuery not found; falling back to CDN", (e === null || e === void 0 ? void 0 : e.message) || e);
61
+ catch (_b) {
62
+ console.warn("[DataTables] Local jQuery not found; falling back to CDN");
52
63
  return null;
53
64
  }
54
65
  };
@@ -160,7 +171,7 @@ const html = (analyzeMarkdown, mappedJsonMarkdown, dataTablesHtml, dtAssets, jqu
160
171
  home: yield marked.parse(analyzeMarkdown),
161
172
  mappedJson: yield marked.parse(mappedJsonMarkdown),
162
173
  dataTables: dataTablesHtml,
163
- about: `# About\n\n The documentation for this tool is available at [JS Recon Docs](https://js-recon.io/).\n\n## Version\n\nThis report is generated with JS Recon [v${CONFIG.version}](https://github.com/shriyanss/js-recon/releases/tag/v${CONFIG.version}).`,
174
+ about: `# About\n\n The documentation for this tool is available at [JS Recon Docs](https://js-recon.io/).\n\n## Version\n\nThis report is generated with JS Recon [v${CONFIG.version}](https://github.com/js-recon/js-recon/releases/tag/v${CONFIG.version}).`,
164
175
  }).replace(/</g, "\\u003c")}
165
176
  </script>
166
177
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
@@ -1 +1 @@
1
- {"version":3,"file":"genHtml.js","sourceRoot":"","sources":["../../../src/report/utility/genHtml.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,OAAO,UAAU,MAAM,6BAA6B,CAAC;AACrD,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAC3C,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAC3D,OAAO,iBAAiB,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAQvC;;;;GAIG;AACH,MAAM,wBAAwB,GAAG,GAAG,EAAE;IAClC,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;QACzF,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,EAAE,EAAE,EAAE,GAAG,EAA+C,CAAC;IACpE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,KAAI,CAAC,CAAC,CAAC;QAC1F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAA+C,CAAC;IAChF,CAAC;AACL,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,GAAG,EAAE;IAC7B,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC5D,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,EAAmB,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,KAAI,CAAC,CAAC,CAAC;QAC1F,OAAO,IAAqB,CAAC;IACjC,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,IAAI,GAAG,CACT,eAAuB,EACvB,kBAA0B,EAC1B,cAAsB,EACtB,QAAmD,EACnD,QAAuB,EACzB,EAAE;IACA,OAAO;;;;;;IAOL,QAAQ,CAAC,GAAG;QACR,CAAC,CAAC,6BAA6B,QAAQ,CAAC,GAAG,UAAU;QACrD,CAAC,CAAC,mGACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoFI,IAAI,CAAC,SAAS,CAAC;QACb,IAAI,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;QACzC,UAAU,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAClD,UAAU,EAAE,cAAc;QAC1B,KAAK,EAAE,gKAAgK,MAAM,CAAC,OAAO,yDAAyD,MAAM,CAAC,OAAO,IAAI;KACnQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;;;IAIzB,QAAQ;QACJ,CAAC,CAAC,iCAAiC,QAAQ,WAAW;QACtD,CAAC,CAAC,qEACV;IAEI,QAAQ,CAAC,EAAE;QACP,CAAC,CAAC,6BAA6B,QAAQ,CAAC,EAAE,WAAW;QACrD,CAAC,CAAC,+EACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAoTM,CAAC;AACT,CAAC,CAAA,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,GAAG,CAAO,gBAAwB,EAAE,EAAqB,EAAE,EAAE;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAEzD,IAAI,eAAe,GAAG,kCAAkC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;IACvF,IAAI,kBAAkB,GAAG,eAAe,CAAC;IAEzC,eAAe,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACxD,kBAAkB,GAAG,MAAM,aAAa,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAEjE,MAAM,cAAc,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAc,CAAC,CAAC,CAAC,CAAE,IAAe,CAAC,CAAC,CAAC,WAAW,CAAC;QACnF,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;QACvF,OAAO,0BAA0B,QAAQ,KAAK,eAAe,eAAe,CAAC;IACjF,CAAC,CAAC;IAEF,MAAM,CAAC,UAAU,CAAC;QACd,QAAQ;QACR,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzG,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;AACvE,CAAC,CAAA,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"genHtml.js","sourceRoot":"","sources":["../../../src/report/utility/genHtml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ // Bundler detection for the `run` pipeline using CS-MAST-S signatures.
2
+ // Determines which bundler (webpack, vite, etc.) was used to build a target's
3
+ // JS bundle by sampling collision signatures from the HuggingFace bucket and
4
+ // counting how many appear in the bundle's own CS-MAST signature set.
5
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
+ return new (P || (P = Promise))(function (resolve, reject) {
8
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
12
+ });
13
+ };
14
+ import fs from "fs";
15
+ import chalk from "chalk";
16
+ import { TECH_TO_BRANCH, validateRemoteBranch, listCollisionsFiles, listCollisionsFileHashes, fetchCollisionsJson, getHfRawUrl, } from "../refactor/remote/hf-client.js";
17
+ import { isSignatureCacheFresh, loadCachedSignature, saveSignatureToCache, loadListCache, saveListCache, shouldRefreshListCache, } from "../refactor/remote/cache.js";
18
+ import { loadRefactorConfig } from "../refactor/remote/config.js";
19
+ import { generateBundleSignatures } from "../refactor/remote/version-detect.js";
20
+ // Maps run-module framework names to candidate refactor tech identifiers.
21
+ const FRAMEWORK_TO_TECHS = {
22
+ react: ["react-webpack", "react-vite"],
23
+ vue: ["vue-webpack", "vue-vite"],
24
+ nuxt: ["vue-webpack", "vue-vite"],
25
+ next: ["next-webpack", "next-turbopack"],
26
+ };
27
+ const DETECTION_SCAT = ["lit", "decl", "loop", "cond"];
28
+ const DETECTION_SCAT_DIR = "lit-decl-loop-cond";
29
+ const DETECTION_SAMPLE_SIZE = 15;
30
+ function randomSample(arr, n) {
31
+ const copy = [...arr];
32
+ const result = [];
33
+ const count = Math.min(n, copy.length);
34
+ for (let i = 0; i < count; i++) {
35
+ const j = Math.floor(Math.random() * (copy.length - i)) + i;
36
+ [copy[i], copy[j]] = [copy[j], copy[i]];
37
+ result.push(copy[i]);
38
+ }
39
+ return result;
40
+ }
41
+ /**
42
+ * Detects the bundler used by a target's JS bundle using CS-MAST-S signatures.
43
+ *
44
+ * Samples collision signatures from the HuggingFace bucket for each candidate
45
+ * tech and counts how many appear in the bundle's signature set. Returns the
46
+ * tech identifier (e.g. "react-webpack") with the most matches if the count
47
+ * meets the threshold, or null if detection fails or is below threshold.
48
+ *
49
+ * @param mappedJsonPath - Path to the mapped.json produced by the map step
50
+ * @param framework - Framework name as detected by lazyload (e.g. "react", "vue")
51
+ * @param threshold - Minimum match count required to consider a tech detected
52
+ * @param skipCacheChecks - When true, treat all caches as fresh (skip TTL checks)
53
+ */
54
+ export function detectBundler(mappedJsonPath_1, framework_1, threshold_1) {
55
+ return __awaiter(this, arguments, void 0, function* (mappedJsonPath, framework, threshold, skipCacheChecks = false) {
56
+ var _a, _b, _c;
57
+ const candidateTechs = FRAMEWORK_TO_TECHS[framework];
58
+ if (!candidateTechs)
59
+ return null;
60
+ // Only consider techs that have a bucket branch; others are not yet supported.
61
+ const availableTechs = candidateTechs.filter((t) => TECH_TO_BRANCH[t]);
62
+ if (availableTechs.length === 0)
63
+ return null;
64
+ // Load mapped.json and generate bundle signatures once (reused for all candidates).
65
+ let chunks;
66
+ try {
67
+ chunks = JSON.parse(fs.readFileSync(mappedJsonPath, "utf8"));
68
+ }
69
+ catch (_d) {
70
+ console.log(chalk.yellow("[!] Bundler detection: could not read mapped.json — skipping refactor."));
71
+ return null;
72
+ }
73
+ const bundleSigs = generateBundleSignatures(chunks, DETECTION_SCAT);
74
+ if (bundleSigs.size === 0) {
75
+ console.log(chalk.yellow("[!] Bundler detection: bundle produced no CS-MAST signatures — skipping refactor."));
76
+ return null;
77
+ }
78
+ const config = yield loadRefactorConfig();
79
+ let bestTech = null;
80
+ let bestMatchCount = 0;
81
+ for (const tech of availableTechs) {
82
+ const branch = TECH_TO_BRANCH[tech];
83
+ // Validate the HF bucket branch exists.
84
+ const branchOk = yield validateRemoteBranch(branch);
85
+ if (!branchOk) {
86
+ console.log(chalk.yellow(`[!] Bundler detection: no signatures for ${tech} in remote bucket — skipping.`));
87
+ continue;
88
+ }
89
+ // Resolve the list of collision files, using the list cache when fresh.
90
+ let listCache = loadListCache();
91
+ const branchMissingFromCache = !(listCache === null || listCache === void 0 ? void 0 : listCache.branches[branch]);
92
+ if (shouldRefreshListCache(listCache, { refreshCache: false, skipCacheChecks }) || branchMissingFromCache) {
93
+ console.log(chalk.cyan(`[i] Refreshing file list cache for ${branch}...`));
94
+ const paths = yield listCollisionsFiles(branch, DETECTION_SCAT_DIR);
95
+ const now = Date.now();
96
+ const branches = (_a = listCache === null || listCache === void 0 ? void 0 : listCache.branches) !== null && _a !== void 0 ? _a : {};
97
+ branches[branch] = paths;
98
+ listCache = { generatedAt: now, branches };
99
+ saveListCache(listCache);
100
+ }
101
+ const allPaths = ((_b = listCache === null || listCache === void 0 ? void 0 : listCache.branches[branch]) !== null && _b !== void 0 ? _b : []).filter((p) => p.endsWith(`/${DETECTION_SCAT_DIR}/collisions.json`));
102
+ if (allPaths.length === 0) {
103
+ console.log(chalk.yellow(`[!] Bundler detection: no collision files for scat "${DETECTION_SCAT_DIR}" in branch "${branch}" — skipping.`));
104
+ continue;
105
+ }
106
+ // Sample a random subset to keep detection fast.
107
+ const sampled = randomSample(allPaths, DETECTION_SAMPLE_SIZE);
108
+ // Content-based cache validation: same mechanism as the refactor module — one
109
+ // per-branch tree fetch to detect upstream dataset changes within the age-based TTL.
110
+ // A failure here (e.g. HF rate-limiting) must never abort bundler detection — fall
111
+ // back to an empty map, which degrades cache-freshness checks to the age-based TTL.
112
+ let remoteHashes = new Map();
113
+ if (!skipCacheChecks) {
114
+ try {
115
+ remoteHashes = yield listCollisionsFileHashes(branch, DETECTION_SCAT_DIR);
116
+ }
117
+ catch (e) {
118
+ console.log(chalk.yellow(`[!] Could not fetch upstream content hashes for cache validation (${e.message}) — falling back to age-based cache checks.`));
119
+ }
120
+ }
121
+ let matchCount = 0;
122
+ for (const subpath of sampled) {
123
+ let records;
124
+ const remoteHash = (_c = remoteHashes.get(subpath)) !== null && _c !== void 0 ? _c : null;
125
+ if (isSignatureCacheFresh(branch, subpath, skipCacheChecks, remoteHash)) {
126
+ records = loadCachedSignature(branch, subpath);
127
+ }
128
+ else {
129
+ records = yield fetchCollisionsJson(getHfRawUrl(branch, subpath));
130
+ if (records) {
131
+ saveSignatureToCache(branch, subpath, records, config.maxCacheSizeMb, remoteHash);
132
+ }
133
+ }
134
+ if (!records)
135
+ continue;
136
+ for (const record of records) {
137
+ if (bundleSigs.has(record.signature)) {
138
+ matchCount++;
139
+ }
140
+ }
141
+ }
142
+ console.log(chalk.cyan(`[i] Bundler detection: ${tech} — ${matchCount} signature match(es) (threshold: ${threshold})`));
143
+ if (matchCount > bestMatchCount) {
144
+ bestMatchCount = matchCount;
145
+ bestTech = tech;
146
+ }
147
+ }
148
+ if (bestTech !== null && bestMatchCount >= threshold) {
149
+ return bestTech;
150
+ }
151
+ return null;
152
+ });
153
+ }
154
+ //# sourceMappingURL=bundler-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundler-detect.js","sourceRoot":"","sources":["../../src/run/bundler-detect.ts"],"names":[],"mappings":"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"}