From c71352e3158ebb472379a954a7f50d40083109cc Mon Sep 17 00:00:00 2001 From: Pablo Matias Gomez Date: Mon, 9 Mar 2026 16:21:23 -0300 Subject: [PATCH 1/2] Private method translations are not working --- .gitignore | 1 + tests/fixtures/private-method/minified.js | 1 + tests/fixtures/private-method/minified.js.map | 1 + tests/fixtures/private-method/original.js | 15 ++++++++++++++ tests/integration.rs | 20 +++++++++++++++++++ 5 files changed, 38 insertions(+) create mode 100644 tests/fixtures/private-method/minified.js create mode 100644 tests/fixtures/private-method/minified.js.map create mode 100644 tests/fixtures/private-method/original.js diff --git a/.gitignore b/.gitignore index d8f63cd..4f282fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .DS_Store /target +.idea \ No newline at end of file diff --git a/tests/fixtures/private-method/minified.js b/tests/fixtures/private-method/minified.js new file mode 100644 index 0000000..091bc1e --- /dev/null +++ b/tests/fixtures/private-method/minified.js @@ -0,0 +1 @@ +export class ApiConnector{async#e(e){return await fetch(e)}#t(e){return"https://api.example.com/"+e}async get(e){return this.#e({url:this.#t(e),method:"GET"})}} \ No newline at end of file diff --git a/tests/fixtures/private-method/minified.js.map b/tests/fixtures/private-method/minified.js.map new file mode 100644 index 0000000..f16b3b2 --- /dev/null +++ b/tests/fixtures/private-method/minified.js.map @@ -0,0 +1 @@ +{"version":3,"names":["ApiConnector","makeRequest","options","fetch","buildUrl","path","get","url","this","method"],"sources":["tests/fixtures/private-method/original.js"],"sourcesContent":["// terser -c -m --module tests/fixtures/private-method/original.js --source-map includeSources -o tests/fixtures/private-method/minified.js\nexport class ApiConnector {\n async #makeRequest(options) {\n let response = await fetch(options);\n return response;\n }\n\n #buildUrl(path) {\n return \"https://api.example.com/\" + path;\n }\n\n async get(url) {\n return this.#makeRequest({ url: this.#buildUrl(url), method: \"GET\" });\n }\n}\n"],"mappings":"OACO,MAAMA,aACT,OAAMC,CAAaC,GAEf,aADqBC,MAAMD,EAE/B,CAEA,EAAAE,CAAUC,GACN,MAAO,2BAA6BA,CACxC,CAEA,SAAMC,CAAIC,GACN,OAAOC,MAAKP,EAAa,CAAEM,IAAKC,MAAKJ,EAAUG,GAAME,OAAQ,OACjE","ignoreList":[]} \ No newline at end of file diff --git a/tests/fixtures/private-method/original.js b/tests/fixtures/private-method/original.js new file mode 100644 index 0000000..c09f0a3 --- /dev/null +++ b/tests/fixtures/private-method/original.js @@ -0,0 +1,15 @@ +// terser -c -m --module tests/fixtures/private-method/original.js --source-map includeSources -o tests/fixtures/private-method/minified.js +export class ApiConnector { + async #makeRequest(options) { + let response = await fetch(options); + return response; + } + + #buildUrl(path) { + return "https://api.example.com/" + path; + } + + async get(url) { + return this.#makeRequest({ url: this.#buildUrl(url), method: "GET" }); + } +} diff --git a/tests/integration.rs b/tests/integration.rs index 121f080..c798067 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -44,6 +44,26 @@ fn resolves_scopes_simple() { ); } +#[test] +fn resolves_private_method() { + let minified = fixture("private-method/minified.js"); + let map = fixture("private-method/minified.js.map"); + + let scopes = extract_scope_names(&minified).unwrap(); + + let resolved_scopes = resolve_original_scopes(&minified, &map, scopes); + + assert_eq!( + resolved_scopes, + [ + (7..160, Some("new ApiConnector".into()), Some("new ApiConnector".into())), + (26..59, Some("ApiConnector.#e".into()), Some("ApiConnector.#makeRequest".into())), + (59..100, Some("ApiConnector.#t".into()), Some("ApiConnector.#buildUrl".into())), + (100..159, Some("ApiConnector.get".into()), Some("ApiConnector.get".into())), + ] + ); +} + #[test] fn resolves_scope_names() { let src = std::fs::read_to_string("tests/fixtures/trace/sync.mjs").unwrap(); From cc43cc8b79b20cf2df7854724b13f5c33142c17c Mon Sep 17 00:00:00 2001 From: Pablo Matias Gomez Date: Mon, 9 Mar 2026 16:27:18 -0300 Subject: [PATCH 2/2] Private method translations are not working --- tests/fixtures/private-method/minified.js | 2 +- tests/fixtures/private-method/minified.js.map | 2 +- tests/fixtures/private-method/original.js | 13 +++++++++++-- tests/integration.rs | 8 ++++---- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/tests/fixtures/private-method/minified.js b/tests/fixtures/private-method/minified.js index 091bc1e..f6a4f9f 100644 --- a/tests/fixtures/private-method/minified.js +++ b/tests/fixtures/private-method/minified.js @@ -1 +1 @@ -export class ApiConnector{async#e(e){return await fetch(e)}#t(e){return"https://api.example.com/"+e}async get(e){return this.#e({url:this.#t(e),method:"GET"})}} \ No newline at end of file +export class ApiConnector{#e="https://api.example.com/";async#t(e){let t=await fetch(e);if(!t.ok)throw new Error("Failed to fetch!");return t}#r(e){return this.#e+e}async get(e){return this.#t({url:this.#r(e),method:"GET"})}} \ No newline at end of file diff --git a/tests/fixtures/private-method/minified.js.map b/tests/fixtures/private-method/minified.js.map index f16b3b2..43a4e9b 100644 --- a/tests/fixtures/private-method/minified.js.map +++ b/tests/fixtures/private-method/minified.js.map @@ -1 +1 @@ -{"version":3,"names":["ApiConnector","makeRequest","options","fetch","buildUrl","path","get","url","this","method"],"sources":["tests/fixtures/private-method/original.js"],"sourcesContent":["// terser -c -m --module tests/fixtures/private-method/original.js --source-map includeSources -o tests/fixtures/private-method/minified.js\nexport class ApiConnector {\n async #makeRequest(options) {\n let response = await fetch(options);\n return response;\n }\n\n #buildUrl(path) {\n return \"https://api.example.com/\" + path;\n }\n\n async get(url) {\n return this.#makeRequest({ url: this.#buildUrl(url), method: \"GET\" });\n }\n}\n"],"mappings":"OACO,MAAMA,aACT,OAAMC,CAAaC,GAEf,aADqBC,MAAMD,EAE/B,CAEA,EAAAE,CAAUC,GACN,MAAO,2BAA6BA,CACxC,CAEA,SAAMC,CAAIC,GACN,OAAOC,MAAKP,EAAa,CAAEM,IAAKC,MAAKJ,EAAUG,GAAME,OAAQ,OACjE","ignoreList":[]} \ No newline at end of file +{"version":3,"names":["ApiConnector","baseUrl","makeRequest","options","response","fetch","ok","Error","buildUrl","path","this","get","url","method"],"sources":["tests/fixtures/private-method/original.js"],"sourcesContent":["// terser -c -m --module tests/fixtures/private-method/original.js --source-map includeSources -o tests/fixtures/private-method/minified.js\nexport class ApiConnector {\n\n #baseUrl = \"https://api.example.com/\";\n\n async #makeRequest(options) {\n let response = await fetch(options);\n if (!response.ok) {\n throw new Error(\"Failed to fetch!\");\n }\n return response;\n }\n\n #buildUrl(path) {\n return this.#baseUrl + path;\n }\n\n async get(url) {\n return this.#makeRequest({\n url: this.#buildUrl(url),\n method: \"GET\"\n });\n }\n}\n"],"mappings":"OACO,MAAMA,aAETC,GAAW,2BAEX,OAAMC,CAAaC,GACf,IAAIC,QAAiBC,MAAMF,GAC3B,IAAKC,EAASE,GACV,MAAM,IAAIC,MAAM,oBAEpB,OAAOH,CACX,CAEA,EAAAI,CAAUC,GACN,OAAOC,MAAKT,EAAWQ,CAC3B,CAEA,SAAME,CAAIC,GACN,OAAOF,MAAKR,EAAa,CACrBU,IAAKF,MAAKF,EAAUI,GACpBC,OAAQ,OAEhB","ignoreList":[]} \ No newline at end of file diff --git a/tests/fixtures/private-method/original.js b/tests/fixtures/private-method/original.js index c09f0a3..1ff1e18 100644 --- a/tests/fixtures/private-method/original.js +++ b/tests/fixtures/private-method/original.js @@ -1,15 +1,24 @@ // terser -c -m --module tests/fixtures/private-method/original.js --source-map includeSources -o tests/fixtures/private-method/minified.js export class ApiConnector { + + #baseUrl = "https://api.example.com/"; + async #makeRequest(options) { let response = await fetch(options); + if (!response.ok) { + throw new Error("Failed to fetch!"); + } return response; } #buildUrl(path) { - return "https://api.example.com/" + path; + return this.#baseUrl + path; } async get(url) { - return this.#makeRequest({ url: this.#buildUrl(url), method: "GET" }); + return this.#makeRequest({ + url: this.#buildUrl(url), + method: "GET" + }); } } diff --git a/tests/integration.rs b/tests/integration.rs index c798067..abcd44e 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -56,10 +56,10 @@ fn resolves_private_method() { assert_eq!( resolved_scopes, [ - (7..160, Some("new ApiConnector".into()), Some("new ApiConnector".into())), - (26..59, Some("ApiConnector.#e".into()), Some("ApiConnector.#makeRequest".into())), - (59..100, Some("ApiConnector.#t".into()), Some("ApiConnector.#buildUrl".into())), - (100..159, Some("ApiConnector.get".into()), Some("ApiConnector.get".into())), + (7..225, Some("new ApiConnector".into()), Some("new ApiConnector".into())), + (56..142, Some("ApiConnector.#t".into()), Some("ApiConnector.#makeRequest".into())), + (142..165, Some("ApiConnector.#r".into()), Some("ApiConnector.#buildUrl".into())), + (165..224, Some("ApiConnector.get".into()), Some("ApiConnector.get".into())), ] ); }