From 71d3cfc9e03c7822c15286a76f1cb2f157b0efeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 13:53:27 +0900 Subject: [PATCH 01/24] Add `.swcrc` --- crates/swc/tests/fixture/next-39878/input/.swcrc | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 crates/swc/tests/fixture/next-39878/input/.swcrc diff --git a/crates/swc/tests/fixture/next-39878/input/.swcrc b/crates/swc/tests/fixture/next-39878/input/.swcrc new file mode 100644 index 000000000000..d610559e15c7 --- /dev/null +++ b/crates/swc/tests/fixture/next-39878/input/.swcrc @@ -0,0 +1,7 @@ +{ + "env": { + "targets": { + "chrome": "95" + } + } +} \ No newline at end of file From 1efa944d610af10ac3e6a90514f71ceab5c9bacb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 13:55:51 +0900 Subject: [PATCH 02/24] sourcemap --- crates/swc/tests/fixture/next-39878/input/.swcrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/swc/tests/fixture/next-39878/input/.swcrc b/crates/swc/tests/fixture/next-39878/input/.swcrc index d610559e15c7..1ab1f15debd4 100644 --- a/crates/swc/tests/fixture/next-39878/input/.swcrc +++ b/crates/swc/tests/fixture/next-39878/input/.swcrc @@ -3,5 +3,6 @@ "targets": { "chrome": "95" } - } + }, + "sourceMaps": true } \ No newline at end of file From 81537e843c8d1eaa110a369673701823dcf6c223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 13:56:58 +0900 Subject: [PATCH 03/24] swcrc --- crates/swc/tests/fixture/next-39878/input/.swcrc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/swc/tests/fixture/next-39878/input/.swcrc b/crates/swc/tests/fixture/next-39878/input/.swcrc index 1ab1f15debd4..6e06bc9f4525 100644 --- a/crates/swc/tests/fixture/next-39878/input/.swcrc +++ b/crates/swc/tests/fixture/next-39878/input/.swcrc @@ -4,5 +4,11 @@ "chrome": "95" } }, + "jsc": { + "parser": { + "syntax": "typescript", + "tsx": true + } + }, "sourceMaps": true } \ No newline at end of file From c729d9c2db7e9f3fea9466734d9aeb23161db5da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 14:03:11 +0900 Subject: [PATCH 04/24] Add a test --- .../fixture/next-39878/input/box-model.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 crates/swc/tests/fixture/next-39878/input/box-model.ts diff --git a/crates/swc/tests/fixture/next-39878/input/box-model.ts b/crates/swc/tests/fixture/next-39878/input/box-model.ts new file mode 100644 index 000000000000..ad2e1d29868a --- /dev/null +++ b/crates/swc/tests/fixture/next-39878/input/box-model.ts @@ -0,0 +1,63 @@ +import type { UIStore, UIThunkAction } from "ui/actions"; +import { isInspectorSelected } from "ui/reducers/app"; +import { AppStartListening } from "ui/setup/listenerMiddleware"; +import { getBoundingRectAsync, getComputedStyleAsync } from "ui/suspense/styleCaches"; + +import { nodeSelected } from "../../markup/reducers/markup"; +import { LAYOUT_NUMERIC_FIELDS, Layout, layoutUpdated } from "../reducers/box-model"; + +export function setupBoxModel(store: UIStore, startAppListening: AppStartListening) { + // Any time a new node is selected in the "Markup" panel, + // try to update the box model layout data + startAppListening({ + actionCreator: nodeSelected, + effect: async (action, listenerApi) => { + const { extra, getState, dispatch } = listenerApi; + const { ThreadFront, protocolClient, replayClient } = extra; + const state = getState(); + const { selectedNode, tree } = state.markup; + + if (!isInspectorSelected(state) || !selectedNode || !ThreadFront.currentPause?.pauseId) { + return; + } + + const nodeInfo = tree.entities[selectedNode]; + + if (!nodeInfo) { + return; + } + + const [bounds, style] = await Promise.all([ + getBoundingRectAsync( + protocolClient, + ThreadFront.sessionId!, + ThreadFront.currentPause.pauseId, + selectedNode + ), + getComputedStyleAsync( + protocolClient, + ThreadFront.sessionId!, + ThreadFront.currentPause.pauseId, + selectedNode + ), + ]); + + if (!bounds || !style) { + return; + } + + const layout = { + width: parseFloat(bounds.width.toPrecision(6)), + height: parseFloat(bounds.height.toPrecision(6)), + autoMargins: {}, + } as Layout; + + for (const prop of LAYOUT_NUMERIC_FIELDS) { + layout[prop] = style.get(prop)!; + } + + // Update the redux store with the latest layout properties and update the box model view. + dispatch(layoutUpdated(layout)); + }, + }); +} From 6ecbec92acf13ff55ed5c5afda3dcc470638ea73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 14:11:05 +0900 Subject: [PATCH 05/24] Update test refs --- .../fixture/next-39878/output/box-model.map | 52 +++++++++++++++++++ .../fixture/next-39878/output/box-model.ts | 41 +++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 crates/swc/tests/fixture/next-39878/output/box-model.map create mode 100644 crates/swc/tests/fixture/next-39878/output/box-model.ts diff --git a/crates/swc/tests/fixture/next-39878/output/box-model.map b/crates/swc/tests/fixture/next-39878/output/box-model.map new file mode 100644 index 000000000000..e42f93e262e4 --- /dev/null +++ b/crates/swc/tests/fixture/next-39878/output/box-model.map @@ -0,0 +1,52 @@ +{ + "mappings": "AACA,SAASA,mBAAmB,QAAQ,kBAAkB;AAEtD,SAASC,oBAAoB,EAAEC,qBAAqB,QAAQ,0BAA0B;AAEtF,SAASC,YAAY,QAAQ,+BAA+B;AAC5D,SAASC,qBAAqB,EAAUC,aAAa,QAAQ,wBAAwB;AAErF,OAAO,SAASC,cAAcC,KAAc,EAAEC,iBAAoC,EAAE;IAClF,yDAAyD;IACzD,0CAA0C;IAC1CA,kBAAkB;QAChBC,eAAeN;QACfO,QAAQ,OAAOC,QAAQC,cAAgB;YACrC,MAAM,EAAEC,MAAK,EAAEC,SAAQ,EAAEC,SAAQ,EAAE,GAAGH;YACtC,MAAM,EAAEI,YAAW,EAAEC,eAAc,EAAEC,aAAY,EAAE,GAAGL;YACtD,MAAMM,QAAQL;YACd,MAAM,EAAEM,aAAY,EAAEC,KAAI,EAAE,GAAGF,MAAMG,MAAM;YAE3C,IAAI,CAACtB,oBAAoBmB,UAAU,CAACC,gBAAgB,CAACJ,YAAYO,YAAY,EAAEC,SAAS;gBACtF;YACF,CAAC;YAED,MAAMC,WAAWJ,KAAKK,QAAQ,CAACN,aAAa;YAE5C,IAAI,CAACK,UAAU;gBACb;YACF,CAAC;YAED,MAAM,CAACE,QAAQC,MAAM,GAAG,MAAMC,QAAQC,GAAG,CAAC;gBACxC7B,qBACEgB,gBACAD,YAAYe,SAAS,EACrBf,YAAYO,YAAY,CAACC,OAAO,EAChCJ;gBAEFlB,sBACEe,gBACAD,YAAYe,SAAS,EACrBf,YAAYO,YAAY,CAACC,OAAO,EAChCJ;aAEH;YAED,IAAI,CAACO,UAAU,CAACC,OAAO;gBACrB;YACF,CAAC;YAED,MAAMI,SAAS;gBACbC,OAAOC,WAAWP,OAAOM,KAAK,CAACE,WAAW,CAAC;gBAC3CC,QAAQF,WAAWP,OAAOS,MAAM,CAACD,WAAW,CAAC;gBAC7CE,aAAa,CAAC;YAChB;YAEA,KAAK,MAAMC,QAAQlC,sBAAuB;gBACxC4B,MAAM,CAACM,KAAK,GAAGV,MAAMW,GAAG,CAACD;YAC3B;YAEA,0FAA0F;YAC1FvB,SAASV,cAAc2B;QACzB;IACF;AACF,CAAC", + "names": [ + "isInspectorSelected", + "getBoundingRectAsync", + "getComputedStyleAsync", + "nodeSelected", + "LAYOUT_NUMERIC_FIELDS", + "layoutUpdated", + "setupBoxModel", + "store", + "startAppListening", + "actionCreator", + "effect", + "action", + "listenerApi", + "extra", + "getState", + "dispatch", + "ThreadFront", + "protocolClient", + "replayClient", + "state", + "selectedNode", + "tree", + "markup", + "currentPause", + "pauseId", + "nodeInfo", + "entities", + "bounds", + "style", + "Promise", + "all", + "sessionId", + "layout", + "width", + "parseFloat", + "toPrecision", + "height", + "autoMargins", + "prop", + "get" + ], + "sources": [ + "../../input/box-model.ts" + ], + "sourcesContent": [ + "import type { UIStore, UIThunkAction } from \"ui/actions\";\nimport { isInspectorSelected } from \"ui/reducers/app\";\nimport { AppStartListening } from \"ui/setup/listenerMiddleware\";\nimport { getBoundingRectAsync, getComputedStyleAsync } from \"ui/suspense/styleCaches\";\n\nimport { nodeSelected } from \"../../markup/reducers/markup\";\nimport { LAYOUT_NUMERIC_FIELDS, Layout, layoutUpdated } from \"../reducers/box-model\";\n\nexport function setupBoxModel(store: UIStore, startAppListening: AppStartListening) {\n // Any time a new node is selected in the \"Markup\" panel,\n // try to update the box model layout data\n startAppListening({\n actionCreator: nodeSelected,\n effect: async (action, listenerApi) => {\n const { extra, getState, dispatch } = listenerApi;\n const { ThreadFront, protocolClient, replayClient } = extra;\n const state = getState();\n const { selectedNode, tree } = state.markup;\n\n if (!isInspectorSelected(state) || !selectedNode || !ThreadFront.currentPause?.pauseId) {\n return;\n }\n\n const nodeInfo = tree.entities[selectedNode];\n\n if (!nodeInfo) {\n return;\n }\n\n const [bounds, style] = await Promise.all([\n getBoundingRectAsync(\n protocolClient,\n ThreadFront.sessionId!,\n ThreadFront.currentPause.pauseId,\n selectedNode\n ),\n getComputedStyleAsync(\n protocolClient,\n ThreadFront.sessionId!,\n ThreadFront.currentPause.pauseId,\n selectedNode\n ),\n ]);\n\n if (!bounds || !style) {\n return;\n }\n\n const layout = {\n width: parseFloat(bounds.width.toPrecision(6)),\n height: parseFloat(bounds.height.toPrecision(6)),\n autoMargins: {},\n } as Layout;\n\n for (const prop of LAYOUT_NUMERIC_FIELDS) {\n layout[prop] = style.get(prop)!;\n }\n\n // Update the redux store with the latest layout properties and update the box model view.\n dispatch(layoutUpdated(layout));\n },\n });\n}\n" + ], + "version": 3 +} diff --git a/crates/swc/tests/fixture/next-39878/output/box-model.ts b/crates/swc/tests/fixture/next-39878/output/box-model.ts new file mode 100644 index 000000000000..9d396f14fe5a --- /dev/null +++ b/crates/swc/tests/fixture/next-39878/output/box-model.ts @@ -0,0 +1,41 @@ +import { isInspectorSelected } from "ui/reducers/app"; +import { getBoundingRectAsync, getComputedStyleAsync } from "ui/suspense/styleCaches"; +import { nodeSelected } from "../../markup/reducers/markup"; +import { LAYOUT_NUMERIC_FIELDS, layoutUpdated } from "../reducers/box-model"; +export function setupBoxModel(store, startAppListening) { + // Any time a new node is selected in the "Markup" panel, + // try to update the box model layout data + startAppListening({ + actionCreator: nodeSelected, + effect: async (action, listenerApi)=>{ + const { extra , getState , dispatch } = listenerApi; + const { ThreadFront , protocolClient , replayClient } = extra; + const state = getState(); + const { selectedNode , tree } = state.markup; + if (!isInspectorSelected(state) || !selectedNode || !ThreadFront.currentPause?.pauseId) { + return; + } + const nodeInfo = tree.entities[selectedNode]; + if (!nodeInfo) { + return; + } + const [bounds, style] = await Promise.all([ + getBoundingRectAsync(protocolClient, ThreadFront.sessionId, ThreadFront.currentPause.pauseId, selectedNode), + getComputedStyleAsync(protocolClient, ThreadFront.sessionId, ThreadFront.currentPause.pauseId, selectedNode) + ]); + if (!bounds || !style) { + return; + } + const layout = { + width: parseFloat(bounds.width.toPrecision(6)), + height: parseFloat(bounds.height.toPrecision(6)), + autoMargins: {} + }; + for (const prop of LAYOUT_NUMERIC_FIELDS){ + layout[prop] = style.get(prop); + } + // Update the redux store with the latest layout properties and update the box model view. + dispatch(layoutUpdated(layout)); + } + }); +} From ff145a0b1eb3b8193c5632311d5afddc91b5cc27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 14:28:47 +0900 Subject: [PATCH 06/24] Not sure --- crates/swc/tests/source_map.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/swc/tests/source_map.rs b/crates/swc/tests/source_map.rs index 07653b0e543c..abf1709c9d8a 100644 --- a/crates/swc/tests/source_map.rs +++ b/crates/swc/tests/source_map.rs @@ -412,3 +412,8 @@ fn should_work_with_emit_source_map_columns() { Ok(()) }); } + +#[test] +fn issue_4578() { + // +} From 767c047a22f894fce0f3fa481b35977be3391ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 14:33:50 +0900 Subject: [PATCH 07/24] Add a test --- crates/swc/tests/source_map.rs | 17 ++++++++++++----- .../swc/tests/srcmap/issue-4578/after-babel.js | 6 ++++++ 2 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 crates/swc/tests/srcmap/issue-4578/after-babel.js diff --git a/crates/swc/tests/source_map.rs b/crates/swc/tests/source_map.rs index abf1709c9d8a..0bff2b58768f 100644 --- a/crates/swc/tests/source_map.rs +++ b/crates/swc/tests/source_map.rs @@ -11,13 +11,13 @@ use std::{ use anyhow::{Context, Error}; use swc::{ - config::{Config, IsModule, ModuleConfig, Options, SourceMapsConfig}, + config::{Config, InputSourceMap, IsModule, ModuleConfig, Options, SourceMapsConfig}, Compiler, }; use testing::{assert_eq, NormalizedOutput, StdErr, Tester}; use walkdir::WalkDir; -fn file(f: &str) -> Result<(), StdErr> { +fn file(f: &str, config: Config) -> Result<(), StdErr> { Tester::new().print_errors(|cm, handler| { let path = canonicalize(f).expect("failed to canonicalize"); @@ -32,7 +32,7 @@ fn file(f: &str) -> Result<(), StdErr> { config: Config { is_module: IsModule::Bool(true), inline_sources_content: true.into(), - ..Default::default() + ..config }, swcrc: true, source_maps: Some(SourceMapsConfig::Bool(true)), @@ -69,7 +69,7 @@ fn file(f: &str) -> Result<(), StdErr> { #[test] fn issue_622() { - file("tests/srcmap/issue-622/index.js").unwrap(); + file("tests/srcmap/issue-622/index.js", Default::default()).unwrap(); } fn inline(f: &str) -> Result<(), StdErr> { @@ -415,5 +415,12 @@ fn should_work_with_emit_source_map_columns() { #[test] fn issue_4578() { - // + file( + "tests/srcmap/issue-4578/after-babel.js", + Config { + input_source_map: Some(InputSourceMap::Str("inline".into())), + ..Default::default() + }, + ) + .unwrap(); } diff --git a/crates/swc/tests/srcmap/issue-4578/after-babel.js b/crates/swc/tests/srcmap/issue-4578/after-babel.js new file mode 100644 index 000000000000..7f0d25671d8a --- /dev/null +++ b/crates/swc/tests/srcmap/issue-4578/after-babel.js @@ -0,0 +1,6 @@ +const test = "1234"; +/* this should throw on line 3 */ + +throw new Error('hi'); +const test2 = 1; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0ZXN0IiwiRXJyb3IiLCJ0ZXN0MiJdLCJzb3VyY2VzIjpbInVua25vd24iXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgdGVzdCA9IFwiMTIzNFwiXG5cbi8qIHRoaXMgc2hvdWxkIHRocm93IG9uIGxpbmUgMyAqLyB0aHJvdyBuZXcgRXJyb3IoJ2hpJylcblxuY29uc3QgdGVzdDIgPSAxIl0sIm1hcHBpbmdzIjoiQUFBQSxNQUFNQSxJQUFJLEdBQUcsTUFBYjtBQUVBOztBQUFrQyxNQUFNLElBQUlDLEtBQUosQ0FBVSxJQUFWLENBQU47QUFFbEMsTUFBTUMsS0FBSyxHQUFHLENBQWQifQ== From 4d1873daad72f5f8b994ea634a7bad2923e00250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 14:40:24 +0900 Subject: [PATCH 08/24] Fix base64 decode --- crates/swc/src/lib.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/swc/src/lib.rs b/crates/swc/src/lib.rs index d932c2957439..a51ff0148f83 100644 --- a/crates/swc/src/lib.rs +++ b/crates/swc/src/lib.rs @@ -338,10 +338,13 @@ impl Compiler { ), Some(v) => v, }; - let encoded = &fm.src[idx + s.len()..]; + let encoded = fm.src[idx + s.len()..].trim(); - let res = base64::decode(encoded.as_bytes()) - .context("failed to decode base64-encoded source map")?; + let res = base64::decode_config( + encoded.as_bytes(), + base64::Config::new(base64::CharacterSet::Standard, true), + ) + .context("failed to decode base64-encoded source map")?; Ok(Some(sourcemap::SourceMap::from_slice(&res).context( "failed to read input source map from inlined base64 encoded string", From ea276d9269ea597d67c16dbf452d1472849bff84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 14:59:03 +0900 Subject: [PATCH 09/24] Use `Url` --- crates/swc/src/lib.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/crates/swc/src/lib.rs b/crates/swc/src/lib.rs index a51ff0148f83..f2ee3d3bd9ea 100644 --- a/crates/swc/src/lib.rs +++ b/crates/swc/src/lib.rs @@ -328,20 +328,30 @@ impl Compiler { } InputSourceMap::Str(ref s) => { if s == "inline" { + const NEEDLE: &str = "sourceMappingURL="; // Load inline source map by simple string // operations - let s = "sourceMappingURL=data:application/json;base64,"; - let idx = fm.src.rfind(s); + let idx = fm.src.rfind(NEEDLE); let idx = match idx { None => bail!( "failed to parse inline source map: `sourceMappingURL` not found" ), Some(v) => v, }; - let encoded = fm.src[idx + s.len()..].trim(); + let data_url = fm.src[idx + NEEDLE.len()..].trim(); + let url = Url::parse(data_url).with_context(|| { + format!("failed to parse inline source map url\n{}", data_url) + })?; + + let content = match url.path().strip_prefix("base64,") { + Some(v) => v, + None => { + bail!("failed to parse inline source map: not base64") + } + }; let res = base64::decode_config( - encoded.as_bytes(), + content.as_bytes(), base64::Config::new(base64::CharacterSet::Standard, true), ) .context("failed to decode base64-encoded source map")?; From 2ad8cc1e68f6a782d3ad67db0de5b155db374837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 14:59:14 +0900 Subject: [PATCH 10/24] Dep --- Cargo.lock | 26 +++++++++----------------- crates/swc/Cargo.toml | 1 + 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 85da86d9b646..7bf9e66ca397 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1056,11 +1056,10 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] @@ -1362,11 +1361,10 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] @@ -1644,12 +1642,6 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" version = "2.4.1" @@ -2105,9 +2097,9 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "petgraph" @@ -3132,6 +3124,7 @@ dependencies = [ "swc_visit", "testing", "tracing", + "url", "walkdir", ] @@ -4950,13 +4943,12 @@ checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "url" -version = "2.2.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] diff --git a/crates/swc/Cargo.toml b/crates/swc/Cargo.toml index acaf45092b79..ca65da2875e1 100644 --- a/crates/swc/Cargo.toml +++ b/crates/swc/Cargo.toml @@ -98,6 +98,7 @@ swc_plugin_runner = { version = "0.78.1", path = "../swc_plugin_runner", optiona swc_timer = { version = "0.17.17", path = "../swc_timer" } swc_visit = { version = "0.5.2", path = "../swc_visit" } tracing = "0.1.32" +url = "2.3.1" [dependencies.napi-derive] default-features = false From 7ff08d4d50943b61a4fcaa7877c6b257e7c51b4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 15:00:21 +0900 Subject: [PATCH 11/24] Fix import --- crates/swc/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/swc/src/lib.rs b/crates/swc/src/lib.rs index f2ee3d3bd9ea..0c7101023267 100644 --- a/crates/swc/src/lib.rs +++ b/crates/swc/src/lib.rs @@ -158,6 +158,7 @@ use swc_ecma_visit::{noop_visit_type, FoldWith, Visit, VisitMutWith, VisitWith}; pub use swc_error_reporters::handler::{try_with_handler, HandlerOpts}; pub use swc_node_comments::SwcComments; use swc_timer::timer; +use url::Url; pub use crate::builder::PassBuilder; use crate::config::{ From c638250cd5cfa0cadbf0b31a528d6af04796ac18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 15:02:18 +0900 Subject: [PATCH 12/24] fix --- crates/swc/src/lib.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/swc/src/lib.rs b/crates/swc/src/lib.rs index 0c7101023267..ed98192dd11f 100644 --- a/crates/swc/src/lib.rs +++ b/crates/swc/src/lib.rs @@ -344,13 +344,15 @@ impl Compiler { format!("failed to parse inline source map url\n{}", data_url) })?; - let content = match url.path().strip_prefix("base64,") { + let idx = match url.path().find("base64,") { Some(v) => v, None => { - bail!("failed to parse inline source map: not base64") + bail!("failed to parse inline source map: not base64: {:?}", url) } }; + let content = url.path()[idx + "base64,".len()..].trim(); + let res = base64::decode_config( content.as_bytes(), base64::Config::new(base64::CharacterSet::Standard, true), From d724867c8093869735a1e7b7c54de3f023820a71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 15:45:56 +0900 Subject: [PATCH 13/24] Improve a bit --- crates/swc_common/src/source_map.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/swc_common/src/source_map.rs b/crates/swc_common/src/source_map.rs index 8dc3a62c6b7b..5445c1c0c63f 100644 --- a/crates/swc_common/src/source_map.rs +++ b/crates/swc_common/src/source_map.rs @@ -1281,7 +1281,13 @@ impl SourceMap { let mut col = max(chpos, linechpos) - min(chpos, linechpos); if let Some(orig) = &orig { - if let Some(token) = orig.lookup_token(line, col) { + dbg!(line, col); + + if let Some(token) = orig + .tokens() + .find(|token| token.get_src_line() == line - 1 && token.get_src_col() == col) + { + dbg!(&token); line = token.get_src_line() + 1; col = token.get_src_col(); if let Some(src) = token.get_source() { From 2b636f243060dbf008c8c08bf64d5c95c55b3bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 15:47:40 +0900 Subject: [PATCH 14/24] Fix --- crates/swc_common/src/source_map.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/swc_common/src/source_map.rs b/crates/swc_common/src/source_map.rs index 5445c1c0c63f..c459b3724995 100644 --- a/crates/swc_common/src/source_map.rs +++ b/crates/swc_common/src/source_map.rs @@ -1281,18 +1281,17 @@ impl SourceMap { let mut col = max(chpos, linechpos) - min(chpos, linechpos); if let Some(orig) = &orig { - dbg!(line, col); - if let Some(token) = orig .tokens() .find(|token| token.get_src_line() == line - 1 && token.get_src_col() == col) { - dbg!(&token); line = token.get_src_line() + 1; col = token.get_src_col(); if let Some(src) = token.get_source() { src_id = builder.add_source(src); } + } else { + continue; } } From f65e03bc8a365f96e63d9efe41397b63bacd82fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 1 Dec 2022 16:46:30 +0900 Subject: [PATCH 15/24] Update test refs --- crates/swc/tests/fixture/sourcemap/004/output/index.map | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/swc/tests/fixture/sourcemap/004/output/index.map b/crates/swc/tests/fixture/sourcemap/004/output/index.map index fe9800aa287c..4193614d1cad 100644 --- a/crates/swc/tests/fixture/sourcemap/004/output/index.map +++ b/crates/swc/tests/fixture/sourcemap/004/output/index.map @@ -1,5 +1,5 @@ { - "mappings": "AEACA,CAAAA,KAAK,gBAAmB,GAAGA,KAAK,gBAAmB,IAAI,EAAE,AAAD,EAAGC,IAAI,CAAC;IAC7D;QAAC;KAAI;IACL;QACU,MAAY,SACdC,CAAuB,EACvBC,CAAmB,EACnBC,CAAmB,EACrB;YACE;gBFNXC,IAAA,SAAAC,CAAA,EAAA;gBAAA,IAAAC,IAAAD,EAAAC,IAAA;gBAAA,OAAA,CAAA,GCDDC,EAAAC,GAAA,EAAA,OAAA;oBACAC,UAAAH,EAAAI,GAAA;gBACA;YACA;YAKYP,EAAoBQ,CAAC,CAACT,IACDC,EAAoBS,CAAC,CAACV,GAAqB;gBACvCW,SAAS,WAAY;oBACtC,OAAqBA;gBDZjB;gBAAqBC,SAAA,WAAA;oBAC3C,OAAOV;gBAAM;YACd;YAAA,IAAAG,IAAAJ,EAAA,OAAAU,IAAA,CAAA;QCKM;QAKP,MAAA,SAAAZ,CAAA,EAAAc,CAAA,EAAAZ,CAAA,EAAA;YAAAa,CAAAA,OAAAC,QAAA,GAAAD,OAAAC,QAAA,IAAA,EAAA,EAAAjB,IAAA,CAAA;gBAAA;gBAAA,WAAA;oBAAA,OAAAG,EAAA;gBAAA;aAAA;QAAA;IAAA;IAAA,SAAAA,CAAA,EAAA;QAAAA,EAAAe,CAAA,CAAA,GAAA;YAAA;YAAA;YAAA;SAAA,EAAA,WAAA;YAAA,OAAAf,EAAAA,EAAAgB,CAAA,GAAA;QAAA,IAAAC,OAAAjB,EAAAe,CAAA;IAAA;CAAA", + "mappings": ";;;KACS", "names": [ "self", "push", From 87115e798bdc81c6ff323356079c0b7b693859a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 2 Dec 2022 12:23:55 +0900 Subject: [PATCH 16/24] Use `lookup_token` with `filter` --- crates/swc_common/src/source_map.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/swc_common/src/source_map.rs b/crates/swc_common/src/source_map.rs index c459b3724995..2400f8f020f8 100644 --- a/crates/swc_common/src/source_map.rs +++ b/crates/swc_common/src/source_map.rs @@ -1282,8 +1282,8 @@ impl SourceMap { if let Some(orig) = &orig { if let Some(token) = orig - .tokens() - .find(|token| token.get_src_line() == line - 1 && token.get_src_col() == col) + .lookup_token(line, col) + .filter(|t| t.get_dst_line() == line) { line = token.get_src_line() + 1; col = token.get_src_col(); From ad868d0830f6e46fbbcd713bbc594b4bb885ad89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 2 Dec 2022 12:31:55 +0900 Subject: [PATCH 17/24] Make input source map better --- .../fixture/sourcemap/004/input/index.js | 71 ++++++++----------- .../fixture/sourcemap/004/input/index.js.map | 50 ++++++++----- 2 files changed, 63 insertions(+), 58 deletions(-) diff --git a/crates/swc/tests/fixture/sourcemap/004/input/index.js b/crates/swc/tests/fixture/sourcemap/004/input/index.js index 675b15ec6228..2e2d6655ed01 100644 --- a/crates/swc/tests/fixture/sourcemap/004/input/index.js +++ b/crates/swc/tests/fixture/sourcemap/004/input/index.js @@ -1,64 +1,51 @@ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([ - [158], + [ + 158 + ], { - /***/ 2943: /***/ function ( - __unused_webpack_module, - __webpack_exports__, - __webpack_require__ - ) { + /***/ 2943: /***/ function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; + var StaticPage = function StaticPage(_ref) { + var data = _ref.data; + return /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { + children: data.foo + }); + }; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { - /* harmony export */ __N_SSG: function () { + /* harmony export */ __N_SSG: function __N_SSG1() { return /* binding */ __N_SSG; }, - /* harmony export */ default: function () { + /* harmony export */ default: function _default() { return /* binding */ StaticPage; - }, - /* harmony export */ + } }); - /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = - __webpack_require__(4512); - + /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4512); var __N_SSG = true; - function StaticPage(_ref) { - var data = _ref.data; - return /*#__PURE__*/ (0, - react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { - children: data.foo, - }); - } - - /***/ - }, - - /***/ 7139: /***/ function ( - __unused_webpack_module, - __unused_webpack_exports, - __webpack_require__ - ) { + /***/ }, + /***/ 7139: /***/ function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { (window.__NEXT_P = window.__NEXT_P || []).push([ "/static", - function () { + function() { return __webpack_require__(2943); - }, + } ]); - if (false) { - } - - /***/ - }, + if (false) {} + /***/ } }, - /******/ function (__webpack_require__) { + /******/ function(__webpack_require__) { // webpackRuntimeModules - /******/ var __webpack_exec__ = function (moduleId) { - return __webpack_require__((__webpack_require__.s = moduleId)); + /******/ var __webpack_exec__ = function __webpack_exec__(moduleId) { + return __webpack_require__(__webpack_require__.s = moduleId); }; - /******/ __webpack_require__.O(0, [774, 888, 179], function () { + /******/ __webpack_require__.O(0, [ + 774, + 888, + 179 + ], function() { return __webpack_exec__(7139); }); /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ _N_E = __webpack_exports__; - /******/ - }, + /******/ } ]); diff --git a/crates/swc/tests/fixture/sourcemap/004/input/index.js.map b/crates/swc/tests/fixture/sourcemap/004/input/index.js.map index b428506d10db..13301fbd0d2d 100644 --- a/crates/swc/tests/fixture/sourcemap/004/input/index.js.map +++ b/crates/swc/tests/fixture/sourcemap/004/input/index.js.map @@ -1,18 +1,36 @@ { - "version": 3, - "file": "x", - "mappings": ";;;;;;;;;;;;;;AAAe,SAASA,UAAT,OAA8B;AAAA,MAARC,IAAQ,QAARA,IAAQ;AAC3C,sBAAO;AAAA,cAAMA,IAAI,CAACC;AAAX,IAAP;AACD;;;;;;;;ACDD;AACA;AACA;AACA,eAAe,mBAAO,CAAC,IAA8B;AACrD;AACA;AACA,OAAO,KAAU,EAAE,EAId;AACL", - "sources": [ - "webpack://./pages/static.js", - "webpack://../../../packages/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2Fstatic&absolutePagePath=private-next-pages%2Fstatic.js!" - ], - "sourcesContent": [ - "export default function StaticPage({ data }) {\n return
{data.foo}
\n}\n\nexport async function getStaticProps() {\n return {\n props: {\n data: {\n foo: 'bar',\n },\n },\n }\n}\n", - "\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/static\",\n function () {\n return require(\"private-next-pages/static.js\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/static\"])\n });\n }\n " - ], - "names": [ - "StaticPage", - "data", - "foo" - ] + "mappings": "AAACA,CAAAA,IAAI,CAAC,mBAAmB,GAAGA,IAAI,CAAC,mBAAmB,IAAI,EAAE,AAAD,EAAGC,IAAI,CAAC;IAC7D;QAAC;KAAI;IACL;QACI,GAAG,GAAG,MAAM,GAAG,GAAG,SAClBC,uBAAuB,EACvBC,mBAAmB,EACnBC,mBAAmB,EACrB;YACM;gBAeSC,aAAT,SAASA,WAAWC,IAAI,EAAE;gBACtB,IAAIC,OAAOD,KAAKC,IAAI;gBACpB,OAAqB,AAAd,WAAW,GAAI,CAAA,GAClBC,+CAA+CC,GAAG,AAAD,EAAG,OAAO;oBACvDC,UAAUH,KAAKI,GAAG;gBACtB;YACR;YApBAP,oBAAoBQ,CAAC,CAACT;YACtB,kBAAkB,GAAGC,oBAAoBS,CAAC,CAACV,qBAAqB;gBAC5D,kBAAkB,GAAGW,SAAS,SAATA,WAAqB;oBACtC,OAAO,WAAW,GAAGA;gBACzB;gBACA,kBAAkB,GAAGC,SAAS,SAATA,WAAqB;oBACtC,OAAO,WAAW,GAAGV;gBACzB;YAEJ;YACA,kBAAkB,GAAG,IAAIG,iDACrBJ,oBAAoB;YAExB,IAAIU,UAAU,IAAI;QASlB,GAAG,GACP;QAEA,GAAG,GAAG,MAAM,GAAG,GAAG,SACdZ,uBAAuB,EACvBc,wBAAwB,EACxBZ,mBAAmB,EACrB;YACGa,CAAAA,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAE,AAAD,EAAGjB,IAAI,CAAC;gBAC3C;gBACA,WAAY;oBACR,OAAOG,oBAAoB;gBAC/B;aACH;YACD,IAAI,KAAK,EAAE,CACX,CAAC;QAED,GAAG,GACP;IACJ;IACA,MAAM,GAAG,SAAUA,mBAAmB,EAAE;QACpC,wBAAwB;QACxB,MAAM,GAAG,IAAIe,mBAAmB,SAAnBA,iBAA6BC,QAAQ,EAAE;YAChD,OAAOhB,oBAAqBA,oBAAoBiB,CAAC,GAAGD;QACxD;QACA,MAAM,GAAGhB,oBAAoBkB,CAAC,CAAC,GAAG;YAAC;YAAK;YAAK;SAAI,EAAE,WAAY;YAC3D,OAAOH,iBAAiB;QAC5B;QACA,MAAM,GAAG,IAAIhB,sBAAsBC,oBAAoBkB,CAAC;QACxD,MAAM,GAAGC,OAAOpB;IAChB,MAAM,GACV;CACH", + "names": [ + "self", + "push", + "__unused_webpack_module", + "__webpack_exports__", + "__webpack_require__", + "StaticPage", + "_ref", + "data", + "react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__", + "jsx", + "children", + "foo", + "r", + "d", + "__N_SSG", + "default", + "__unused_webpack_exports", + "window", + "__NEXT_P", + "__webpack_exec__", + "moduleId", + "s", + "O", + "_N_E" + ], + "sources": [ + "../../input/index.js" + ], + "sourcesContent": [ + "(self[\"webpackChunk_N_E\"] = self[\"webpackChunk_N_E\"] || []).push([\n [158],\n {\n /***/ 2943: /***/ function (\n __unused_webpack_module,\n __webpack_exports__,\n __webpack_require__\n ) {\n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n /* harmony export */ __webpack_require__.d(__webpack_exports__, {\n /* harmony export */ __N_SSG: function () {\n return /* binding */ __N_SSG;\n },\n /* harmony export */ default: function () {\n return /* binding */ StaticPage;\n },\n /* harmony export */\n });\n /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =\n __webpack_require__(4512);\n\n var __N_SSG = true;\n function StaticPage(_ref) {\n var data = _ref.data;\n return /*#__PURE__*/ (0,\n react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", {\n children: data.foo,\n });\n }\n\n /***/\n },\n\n /***/ 7139: /***/ function (\n __unused_webpack_module,\n __unused_webpack_exports,\n __webpack_require__\n ) {\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/static\",\n function () {\n return __webpack_require__(2943);\n },\n ]);\n if (false) {\n }\n\n /***/\n },\n },\n /******/ function (__webpack_require__) {\n // webpackRuntimeModules\n /******/ var __webpack_exec__ = function (moduleId) {\n return __webpack_require__((__webpack_require__.s = moduleId));\n };\n /******/ __webpack_require__.O(0, [774, 888, 179], function () {\n return __webpack_exec__(7139);\n });\n /******/ var __webpack_exports__ = __webpack_require__.O();\n /******/ _N_E = __webpack_exports__;\n /******/\n },\n]);\n" + ], + "version": 3 } From d02f8a7d2ccb0df07fa8d28bfc0da32d41ba99d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 2 Dec 2022 12:35:49 +0900 Subject: [PATCH 18/24] input.js --- .../fixture/sourcemap/004/input/index.js | 51 ++++++++----------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/crates/swc/tests/fixture/sourcemap/004/input/index.js b/crates/swc/tests/fixture/sourcemap/004/input/index.js index 2e2d6655ed01..5d190d16eb12 100644 --- a/crates/swc/tests/fixture/sourcemap/004/input/index.js +++ b/crates/swc/tests/fixture/sourcemap/004/input/index.js @@ -1,51 +1,42 @@ -(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([ +(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([ [ 158 ], { - /***/ 2943: /***/ function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + 2943: function(n, t, u) { "use strict"; - var StaticPage = function StaticPage(_ref) { - var data = _ref.data; - return /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { - children: data.foo + var r = function(n) { + var t = n.data; + return (0, _.jsx)("div", { + children: t.foo }); }; - __webpack_require__.r(__webpack_exports__); - /* harmony export */ __webpack_require__.d(__webpack_exports__, { - /* harmony export */ __N_SSG: function __N_SSG1() { - return /* binding */ __N_SSG; + u.r(t), u.d(t, { + __N_SSG: function() { + return i; }, - /* harmony export */ default: function _default() { - return /* binding */ StaticPage; + default: function() { + return r; } }); - /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4512); - var __N_SSG = true; - /***/ }, - /***/ 7139: /***/ function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + var _ = u(4512), i = !0; + }, + 7139: function(n, t, u) { (window.__NEXT_P = window.__NEXT_P || []).push([ "/static", function() { - return __webpack_require__(2943); + return u(2943); } ]); - if (false) {} - /***/ } + } }, - /******/ function(__webpack_require__) { - // webpackRuntimeModules - /******/ var __webpack_exec__ = function __webpack_exec__(moduleId) { - return __webpack_require__(__webpack_require__.s = moduleId); - }; - /******/ __webpack_require__.O(0, [ + function(n) { + n.O(0, [ 774, 888, 179 ], function() { - return __webpack_exec__(7139); - }); - /******/ var __webpack_exports__ = __webpack_require__.O(); - /******/ _N_E = __webpack_exports__; - /******/ } + return n(n.s = 7139); + }), _N_E = n.O(); + } ]); From 811d3a3ac6a124f08f4bdb748cb95bca41ca1765 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 2 Dec 2022 12:41:25 +0900 Subject: [PATCH 19/24] Fix input --- crates/swc/tests/fixture/sourcemap/004/input/index.js.map | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/crates/swc/tests/fixture/sourcemap/004/input/index.js.map b/crates/swc/tests/fixture/sourcemap/004/input/index.js.map index 13301fbd0d2d..e48482e3bee7 100644 --- a/crates/swc/tests/fixture/sourcemap/004/input/index.js.map +++ b/crates/swc/tests/fixture/sourcemap/004/input/index.js.map @@ -1,5 +1,5 @@ { - "mappings": "AAACA,CAAAA,IAAI,CAAC,mBAAmB,GAAGA,IAAI,CAAC,mBAAmB,IAAI,EAAE,AAAD,EAAGC,IAAI,CAAC;IAC7D;QAAC;KAAI;IACL;QACI,GAAG,GAAG,MAAM,GAAG,GAAG,SAClBC,uBAAuB,EACvBC,mBAAmB,EACnBC,mBAAmB,EACrB;YACM;gBAeSC,aAAT,SAASA,WAAWC,IAAI,EAAE;gBACtB,IAAIC,OAAOD,KAAKC,IAAI;gBACpB,OAAqB,AAAd,WAAW,GAAI,CAAA,GAClBC,+CAA+CC,GAAG,AAAD,EAAG,OAAO;oBACvDC,UAAUH,KAAKI,GAAG;gBACtB;YACR;YApBAP,oBAAoBQ,CAAC,CAACT;YACtB,kBAAkB,GAAGC,oBAAoBS,CAAC,CAACV,qBAAqB;gBAC5D,kBAAkB,GAAGW,SAAS,SAATA,WAAqB;oBACtC,OAAO,WAAW,GAAGA;gBACzB;gBACA,kBAAkB,GAAGC,SAAS,SAATA,WAAqB;oBACtC,OAAO,WAAW,GAAGV;gBACzB;YAEJ;YACA,kBAAkB,GAAG,IAAIG,iDACrBJ,oBAAoB;YAExB,IAAIU,UAAU,IAAI;QASlB,GAAG,GACP;QAEA,GAAG,GAAG,MAAM,GAAG,GAAG,SACdZ,uBAAuB,EACvBc,wBAAwB,EACxBZ,mBAAmB,EACrB;YACGa,CAAAA,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAE,AAAD,EAAGjB,IAAI,CAAC;gBAC3C;gBACA,WAAY;oBACR,OAAOG,oBAAoB;gBAC/B;aACH;YACD,IAAI,KAAK,EAAE,CACX,CAAC;QAED,GAAG,GACP;IACJ;IACA,MAAM,GAAG,SAAUA,mBAAmB,EAAE;QACpC,wBAAwB;QACxB,MAAM,GAAG,IAAIe,mBAAmB,SAAnBA,iBAA6BC,QAAQ,EAAE;YAChD,OAAOhB,oBAAqBA,oBAAoBiB,CAAC,GAAGD;QACxD;QACA,MAAM,GAAGhB,oBAAoBkB,CAAC,CAAC,GAAG;YAAC;YAAK;YAAK;SAAI,EAAE,WAAY;YAC3D,OAAOH,iBAAiB;QAC5B;QACA,MAAM,GAAG,IAAIhB,sBAAsBC,oBAAoBkB,CAAC;QACxD,MAAM,GAAGC,OAAOpB;IAChB,MAAM,GACV;CACH", + "mappings": "AAACA,CAAAA,KAAK,gBAAmB,GAAGA,KAAK,gBAAmB,IAAI,EAAE,AAAD,EAAGC,IAAI,CAAC;IAC7D;QACI;KACH;IACD;QACU,MAAY,SAAUC,CAAuB,EAAEC,CAAmB,EAAEC,CAAmB,EAAE;YAC3F;YACA,IAAIC,IAAa,SAAoBC,CAAI,EAAE;gBACvC,IAAIC,IAAOD,EAAKC,IAAI;gBACpB,OAAqB,AAAC,CAAA,GAAGC,EAA+CC,GAAG,AAAD,EAAG,OAAO;oBAChFC,UAAUH,EAAKI,GAAG;gBACtB;YACJ;YACAP,EAAoBQ,CAAC,CAACT,IACDC,EAAoBS,CAAC,CAACV,GAAqB;gBACvCW,SAAS,WAAoB;oBAC9C,OAAqBA;gBACzB;gBACqBC,SAAS,WAAoB;oBAC9C,OAAqBV;gBACzB;YACJ;YACqB,IAAIG,IAAiDJ,EAAoB,OAC1FU,IAAU,CAAA;QAE1B;QACc,MAAY,SAAUZ,CAAuB,EAAEc,CAAwB,EAAEZ,CAAmB,EAAE;YAC/Fa,CAAAA,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAE,AAAD,EAAGjB,IAAI,CAAC;gBAC3C;gBACA,WAAY;oBACR,OAAOG,EAAoB;gBAC/B;aACH;QAGb;IACI;IACS,SAAUA,CAAmB,EAAE;QAK3BA,EAAoBe,CAAC,CAAC,GAAG;YAC9B;YACA;YACA;SACH,EAAE,WAAY;YACX,OAPOf,EAAoBA,EAAoBgB,CAAC,GAOxB;QAC5B,IAESC,OAD0BjB,EAAoBe,CAAC;IAGhE;CACC", "names": [ "self", "push", @@ -20,17 +20,15 @@ "__unused_webpack_exports", "window", "__NEXT_P", - "__webpack_exec__", - "moduleId", - "s", "O", + "s", "_N_E" ], "sources": [ "../../input/index.js" ], "sourcesContent": [ - "(self[\"webpackChunk_N_E\"] = self[\"webpackChunk_N_E\"] || []).push([\n [158],\n {\n /***/ 2943: /***/ function (\n __unused_webpack_module,\n __webpack_exports__,\n __webpack_require__\n ) {\n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n /* harmony export */ __webpack_require__.d(__webpack_exports__, {\n /* harmony export */ __N_SSG: function () {\n return /* binding */ __N_SSG;\n },\n /* harmony export */ default: function () {\n return /* binding */ StaticPage;\n },\n /* harmony export */\n });\n /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =\n __webpack_require__(4512);\n\n var __N_SSG = true;\n function StaticPage(_ref) {\n var data = _ref.data;\n return /*#__PURE__*/ (0,\n react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", {\n children: data.foo,\n });\n }\n\n /***/\n },\n\n /***/ 7139: /***/ function (\n __unused_webpack_module,\n __unused_webpack_exports,\n __webpack_require__\n ) {\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/static\",\n function () {\n return __webpack_require__(2943);\n },\n ]);\n if (false) {\n }\n\n /***/\n },\n },\n /******/ function (__webpack_require__) {\n // webpackRuntimeModules\n /******/ var __webpack_exec__ = function (moduleId) {\n return __webpack_require__((__webpack_require__.s = moduleId));\n };\n /******/ __webpack_require__.O(0, [774, 888, 179], function () {\n return __webpack_exec__(7139);\n });\n /******/ var __webpack_exports__ = __webpack_require__.O();\n /******/ _N_E = __webpack_exports__;\n /******/\n },\n]);\n" + "(self[\"webpackChunk_N_E\"] = self[\"webpackChunk_N_E\"] || []).push([\n [\n 158\n ],\n {\n /***/ 2943: /***/ function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n var StaticPage = function StaticPage(_ref) {\n var data = _ref.data;\n return /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", {\n children: data.foo\n });\n };\n __webpack_require__.r(__webpack_exports__);\n /* harmony export */ __webpack_require__.d(__webpack_exports__, {\n /* harmony export */ __N_SSG: function __N_SSG1() {\n return /* binding */ __N_SSG;\n },\n /* harmony export */ default: function _default() {\n return /* binding */ StaticPage;\n }\n });\n /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4512);\n var __N_SSG = true;\n /***/\n},\n /***/ 7139: /***/ function (__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/static\",\n function () {\n return __webpack_require__(2943);\n }\n ]);\n if (false) { }\n /***/\n}\n },\n /******/ function (__webpack_require__) {\n // webpackRuntimeModules\n /******/ var __webpack_exec__ = function __webpack_exec__(moduleId) {\n return __webpack_require__(__webpack_require__.s = moduleId);\n };\n /******/ __webpack_require__.O(0, [\n 774,\n 888,\n 179\n ], function () {\n return __webpack_exec__(7139);\n });\n /******/ var __webpack_exports__ = __webpack_require__.O();\n /******/ _N_E = __webpack_exports__;\n /******/\n}\n]);\n" ], "version": 3 } From e0ab2adbe0290660bb090bdf4cfb80747ec08606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 2 Dec 2022 12:44:52 +0900 Subject: [PATCH 20/24] Update test ref --- .../fixture/sourcemap/004/output/index.map | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/crates/swc/tests/fixture/sourcemap/004/output/index.map b/crates/swc/tests/fixture/sourcemap/004/output/index.map index 4193614d1cad..54d17f9cf588 100644 --- a/crates/swc/tests/fixture/sourcemap/004/output/index.map +++ b/crates/swc/tests/fixture/sourcemap/004/output/index.map @@ -1,23 +1,22 @@ { - "mappings": ";;;KACS", + "mappings": "MACIC,gBAAA,GAAAD,KAAAC,gBAAA,IAAA,EAAA,EAAAC,IAAA,CAAA;;QAEC;KACD;;cAEQ,SAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,EAAA;YACA;gBACIC,IAAI,SAAYH,CAAI,EAAA;gBACpB,IAAAC,IAAsBD,EAAAI,IAAkD;uBACpE,CAAA,GAAAC,EAAAC,GAAe,AAAL,EAAK,OAAG;oBACtBC,UAAAN,EAAAO,GAAA;gBACJ;YACA;gBAEyBP,IAAAC,EAAAO,CAAA,CAAAR,GAAS;yBAC1B,WAAqB;oBACzB,OAAAU;gBACqB;yBACjB,WAAqB;oBACzB,OAAAR;gBACJ;YACqB,EAAA;YAGjC,IAAAE,IAAAH,EAAA,OAAAS,IAAA,CAAA;QACc;cACD,SAAOX,CAAA,EAAAC,CAAA,EAAQC,CAAA,EAAG;oBACfY,QAAA,GAAAD,OAAAC,QAAA,IAAA,EAAA,EAAAf,IAAA,CAAA;gBACA;2BACW;oBACX,OAAAG,EAAA;gBACH;aAGb;QACI;IACS;aAK0BF,CAAA,EAAG;YAC9B,GAAA;YACA;YACA;YACD;sBAN4B;YAUtB,OAD0BA,EAAoBA,EAACgB,CAAA,GAAA;QAGhE,IAAAC,OAAAjB,EAAAe,CAAA,EAAA;IACC", "names": [ "self", + "webpackChunk_N_E", "push", - "__unused_webpack_module", - "__webpack_exports__", - "__webpack_require__", - "StaticPage", - "_ref", + "n", + "t", + "u", + "r", "data", - "react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__", + "_", "jsx", "children", "foo", - "r", "d", "__N_SSG", + "i", "default", - "__unused_webpack_exports", "window", "__NEXT_P", "O", @@ -25,14 +24,10 @@ "_N_E" ], "sources": [ - "webpack://./pages/static.js", - "webpack://../../../packages/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2Fstatic&absolutePagePath=private-next-pages%2Fstatic.js!", "../../input/index.js" ], "sourcesContent": [ - "export default function StaticPage({ data }) {\n return
{data.foo}
\n}\n\nexport async function getStaticProps() {\n return {\n props: {\n data: {\n foo: 'bar',\n },\n },\n }\n}\n", - "\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/static\",\n function () {\n return require(\"private-next-pages/static.js\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/static\"])\n });\n }\n ", - "(self[\"webpackChunk_N_E\"] = self[\"webpackChunk_N_E\"] || []).push([\n [158],\n {\n /***/ 2943: /***/ function (\n __unused_webpack_module,\n __webpack_exports__,\n __webpack_require__\n ) {\n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n /* harmony export */ __webpack_require__.d(__webpack_exports__, {\n /* harmony export */ __N_SSG: function () {\n return /* binding */ __N_SSG;\n },\n /* harmony export */ default: function () {\n return /* binding */ StaticPage;\n },\n /* harmony export */\n });\n /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =\n __webpack_require__(4512);\n\n var __N_SSG = true;\n function StaticPage(_ref) {\n var data = _ref.data;\n return /*#__PURE__*/ (0,\n react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", {\n children: data.foo,\n });\n }\n\n /***/\n },\n\n /***/ 7139: /***/ function (\n __unused_webpack_module,\n __unused_webpack_exports,\n __webpack_require__\n ) {\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/static\",\n function () {\n return __webpack_require__(2943);\n },\n ]);\n if (false) {\n }\n\n /***/\n },\n },\n /******/ function (__webpack_require__) {\n // webpackRuntimeModules\n /******/ var __webpack_exec__ = function (moduleId) {\n return __webpack_require__((__webpack_require__.s = moduleId));\n };\n /******/ __webpack_require__.O(0, [774, 888, 179], function () {\n return __webpack_exec__(7139);\n });\n /******/ var __webpack_exports__ = __webpack_require__.O();\n /******/ _N_E = __webpack_exports__;\n /******/\n },\n]);\n" + "(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([\n [\n 158\n ],\n {\n 2943: function(n, t, u) {\n \"use strict\";\n var r = function(n) {\n var t = n.data;\n return (0, _.jsx)(\"div\", {\n children: t.foo\n });\n };\n u.r(t), u.d(t, {\n __N_SSG: function() {\n return i;\n },\n default: function() {\n return r;\n }\n });\n var _ = u(4512), i = !0;\n },\n 7139: function(n, t, u) {\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/static\",\n function() {\n return u(2943);\n }\n ]);\n }\n },\n function(n) {\n n.O(0, [\n 774,\n 888,\n 179\n ], function() {\n return n(n.s = 7139);\n }), _N_E = n.O();\n }\n]);\n" ], "version": 3 } From 5d5cdffe2a284babc459cbae30c29b3bf82a9d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 2 Dec 2022 13:04:57 +0900 Subject: [PATCH 21/24] Revert "Use `lookup_token` with `filter`" This reverts commit 87115e798bdc81c6ff323356079c0b7b693859a0. --- crates/swc_common/src/source_map.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/swc_common/src/source_map.rs b/crates/swc_common/src/source_map.rs index 2400f8f020f8..c459b3724995 100644 --- a/crates/swc_common/src/source_map.rs +++ b/crates/swc_common/src/source_map.rs @@ -1282,8 +1282,8 @@ impl SourceMap { if let Some(orig) = &orig { if let Some(token) = orig - .lookup_token(line, col) - .filter(|t| t.get_dst_line() == line) + .tokens() + .find(|token| token.get_src_line() == line - 1 && token.get_src_col() == col) { line = token.get_src_line() + 1; col = token.get_src_col(); From 8ecee8d3ffb842d1b293ffc482b4f000efbc1b7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 2 Dec 2022 13:05:51 +0900 Subject: [PATCH 22/24] Update test ref --- crates/swc/tests/fixture/sourcemap/004/output/index.map | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/swc/tests/fixture/sourcemap/004/output/index.map b/crates/swc/tests/fixture/sourcemap/004/output/index.map index 54d17f9cf588..301051548010 100644 --- a/crates/swc/tests/fixture/sourcemap/004/output/index.map +++ b/crates/swc/tests/fixture/sourcemap/004/output/index.map @@ -1,5 +1,5 @@ { - "mappings": "MACIC,gBAAA,GAAAD,KAAAC,gBAAA,IAAA,EAAA,EAAAC,IAAA,CAAA;;QAEC;KACD;;cAEQ,SAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,EAAA;YACA;gBACIC,IAAI,SAAYH,CAAI,EAAA;gBACpB,IAAAC,IAAsBD,EAAAI,IAAkD;uBACpE,CAAA,GAAAC,EAAAC,GAAe,AAAL,EAAK,OAAG;oBACtBC,UAAAN,EAAAO,GAAA;gBACJ;YACA;gBAEyBP,IAAAC,EAAAO,CAAA,CAAAR,GAAS;yBAC1B,WAAqB;oBACzB,OAAAU;gBACqB;yBACjB,WAAqB;oBACzB,OAAAR;gBACJ;YACqB,EAAA;YAGjC,IAAAE,IAAAH,EAAA,OAAAS,IAAA,CAAA;QACc;cACD,SAAOX,CAAA,EAAAC,CAAA,EAAQC,CAAA,EAAG;oBACfY,QAAA,GAAAD,OAAAC,QAAA,IAAA,EAAA,EAAAf,IAAA,CAAA;gBACA;2BACW;oBACX,OAAAG,EAAA;gBACH;aAGb;QACI;IACS;aAK0BF,CAAA,EAAG;YAC9B,GAAA;YACA;YACA;YACD;sBAN4B;YAUtB,OAD0BA,EAAoBA,EAACgB,CAAA,GAAA;QAGhE,IAAAC,OAAAjB,EAAAe,CAAA,EAAA;IACC", + "mappings": "AAACA,CAAAA,KAAKC,mBAAmBD,2BAA2B,MAAM;IACtD;QACI;KACH;IACD;cACU,YAAYI;YACd;YACA,IAAIE,aAAaH;gBACb,IAAIC;gBACJ,yBAAyB;oBACrBM,UAAUN,KAAK;gBACnB;YACJ;YACAC;;;;gBAIIU;;;;YAIJ;;0BAEcX;;;;oBAIN;gBACJ;;;;aAIHD", "names": [ "self", "webpackChunk_N_E", From 9939ca0754b312851d11f4e164c3b951a8a6a833 Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Fri, 2 Dec 2022 00:38:00 -0500 Subject: [PATCH 23/24] Update sourcemap tracing logic Fixes a few things: - Propagates the input's sourcesContent item - Propagates the input's original name, if found (else, uses our name) - Uses much faster lookup_token (instead of a full traversal, that would be sooo slow) --- .../fixture/sourcemap/004/output/index.map | 18 ++++++----- crates/swc_common/src/source_map.rs | 31 +++++++++++++------ 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/crates/swc/tests/fixture/sourcemap/004/output/index.map b/crates/swc/tests/fixture/sourcemap/004/output/index.map index 301051548010..0885cc65c807 100644 --- a/crates/swc/tests/fixture/sourcemap/004/output/index.map +++ b/crates/swc/tests/fixture/sourcemap/004/output/index.map @@ -1,22 +1,24 @@ { - "mappings": "AAACA,CAAAA,KAAKC,mBAAmBD,2BAA2B,MAAM;IACtD;QACI;KACH;IACD;cACU,YAAYI;YACd;YACA,IAAIE,aAAaH;gBACb,IAAIC;gBACJ,yBAAyB;oBACrBM,UAAUN,KAAK;gBACnB;YACJ;YACAC;;;;gBAIIU;;;;YAIJ;;0BAEcX;;;;oBAIN;gBACJ;;;;aAIHD", + "mappings": "AAACA,CAAAA,KAAKC,gBAAmB,GAAGD,KAAKC,gBAAmB,IAAI,EAAC,AAAD,EAAIC,IAAI,CAAC;IAC7D;QACI;KACH;IACD;QACU,MAAY,SAAUC,CAAuB,EAAEC,CAAmB,EAAEC,CAAmB,EAAE;YAC3F;YACA,IAAIC,IAAa,SAAoBC,CAAI,EAAE;gBACvC,IAAIC,IAAOD,EAAKC,IAAI;gBACpB,OAAsB,CAAA,GAAGC,EAA+CC,GAAE,AAAFA,EAAK,OAAO;oBAChFC,UAAUH,EAAKI,GAAG;gBACtB;YACJ;YACAP,EAAoBQ,CAAC,CAACT,IACDC,EAAoBS,CAAC,CAACV,GAAqB;gBACvCW,SAAS,WAAoB;oBAC9C,OAAqBA;gBACzB;gBACqBC,SAAS,WAAoB;oBAC9C,OAAqBV;gBACzB;YACJ,EAAA;YACqB,IAAIG,IAAiDJ,EAAoB,OAC1FU,IAAU,CAAA;QAE1B;QACc,MAAY,SAAUZ,CAAuB,EAAEc,CAAwB,EAAEZ,CAAmB,EAAE;YAC/Fa,CAAAA,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAC,AAAD,EAAIjB,IAAI,CAAC;gBAC3C;gBACA,WAAY;oBACR,OAAOG,EAAoB;gBAC/B;aACH;QAGb;IACI;IACS,SAAUA,CAAmB,EAAE;QAK3BA,EAAoBe,CAAC,CAAC,GAAG;YAC9B;YACA;YACA;SACH,EAAE,WAAY;YACX,OAPOf,EAAoBA,EAAoBgB,CAAC,GAOxB;QAC5B,IAESC,OAD0BjB,EAAoBe,CAAC,EAAA;IAGhE;CACC", "names": [ "self", "webpackChunk_N_E", "push", - "n", - "t", - "u", - "r", + "__unused_webpack_module", + "__webpack_exports__", + "__webpack_require__", + "StaticPage", + "_ref", "data", - "_", + "react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__", "jsx", "children", "foo", + "r", "d", "__N_SSG", - "i", "default", + "__unused_webpack_exports", "window", "__NEXT_P", "O", @@ -27,7 +29,7 @@ "../../input/index.js" ], "sourcesContent": [ - "(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([\n [\n 158\n ],\n {\n 2943: function(n, t, u) {\n \"use strict\";\n var r = function(n) {\n var t = n.data;\n return (0, _.jsx)(\"div\", {\n children: t.foo\n });\n };\n u.r(t), u.d(t, {\n __N_SSG: function() {\n return i;\n },\n default: function() {\n return r;\n }\n });\n var _ = u(4512), i = !0;\n },\n 7139: function(n, t, u) {\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/static\",\n function() {\n return u(2943);\n }\n ]);\n }\n },\n function(n) {\n n.O(0, [\n 774,\n 888,\n 179\n ], function() {\n return n(n.s = 7139);\n }), _N_E = n.O();\n }\n]);\n" + "(self[\"webpackChunk_N_E\"] = self[\"webpackChunk_N_E\"] || []).push([\n [\n 158\n ],\n {\n /***/ 2943: /***/ function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n var StaticPage = function StaticPage(_ref) {\n var data = _ref.data;\n return /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", {\n children: data.foo\n });\n };\n __webpack_require__.r(__webpack_exports__);\n /* harmony export */ __webpack_require__.d(__webpack_exports__, {\n /* harmony export */ __N_SSG: function __N_SSG1() {\n return /* binding */ __N_SSG;\n },\n /* harmony export */ default: function _default() {\n return /* binding */ StaticPage;\n }\n });\n /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4512);\n var __N_SSG = true;\n /***/\n},\n /***/ 7139: /***/ function (__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/static\",\n function () {\n return __webpack_require__(2943);\n }\n ]);\n if (false) { }\n /***/\n}\n },\n /******/ function (__webpack_require__) {\n // webpackRuntimeModules\n /******/ var __webpack_exec__ = function __webpack_exec__(moduleId) {\n return __webpack_require__(__webpack_require__.s = moduleId);\n };\n /******/ __webpack_require__.O(0, [\n 774,\n 888,\n 179\n ], function () {\n return __webpack_exec__(7139);\n });\n /******/ var __webpack_exports__ = __webpack_require__.O();\n /******/ _N_E = __webpack_exports__;\n /******/\n}\n]);\n" ], "version": 3 } diff --git a/crates/swc_common/src/source_map.rs b/crates/swc_common/src/source_map.rs index c459b3724995..5061c8d8fceb 100644 --- a/crates/swc_common/src/source_map.rs +++ b/crates/swc_common/src/source_map.rs @@ -1195,6 +1195,7 @@ impl SourceMap { let mut ch_start = 0; let mut line_prev_extra_bytes = 0; let mut line_ch_start = 0; + let mut inline_sources_content = false; for (pos, lc) in mappings.iter() { let pos = *pos; @@ -1223,7 +1224,8 @@ impl SourceMap { f = self.lookup_source_file(pos); src_id = builder.add_source(&config.file_name_to_source(&f.name)); - if config.inline_sources_content(&f.name) { + inline_sources_content = config.inline_sources_content(&f.name); + if inline_sources_content && !orig.is_some() { builder.set_source_contents(src_id, Some(&f.src)); } @@ -1252,13 +1254,10 @@ impl SourceMap { None => continue, }; + let mut name = config.name_for_bytepos(pos); let mut name_idx = None; - if let Some(name) = config.name_for_bytepos(pos) { - name_idx = Some(builder.add_name(name)) - } - - let mut line = a + 1; // Line numbers start at 1 + let mut line = a; let linebpos = f.lines[a as usize]; debug_assert!( @@ -1282,20 +1281,32 @@ impl SourceMap { if let Some(orig) = &orig { if let Some(token) = orig - .tokens() - .find(|token| token.get_src_line() == line - 1 && token.get_src_col() == col) + .lookup_token(line, col) + .filter(|t| t.get_dst_line() == line) { - line = token.get_src_line() + 1; + line = token.get_src_line(); col = token.get_src_col(); + if token.has_name() { + name = token.get_name(); + } if let Some(src) = token.get_source() { src_id = builder.add_source(src); + if inline_sources_content && !builder.has_source_contents(src_id) { + if let Some(contents) = token.get_source_view() { + builder.set_source_contents(src_id, Some(contents.source())); + } + } } } else { continue; } } - builder.add_raw(lc.line, lc.col, line - 1, col, Some(src_id), name_idx); + if let Some(name) = name { + name_idx = Some(builder.add_name(name)) + } + + builder.add_raw(lc.line, lc.col, line, col, Some(src_id), name_idx); prev_dst_line = lc.line; } From 96f07c5b25f67ae0e45a9c0cecd476b995358cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 2 Dec 2022 16:09:54 +0900 Subject: [PATCH 24/24] clippy --- crates/swc_common/src/source_map.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/swc_common/src/source_map.rs b/crates/swc_common/src/source_map.rs index 5061c8d8fceb..054a460d9a0c 100644 --- a/crates/swc_common/src/source_map.rs +++ b/crates/swc_common/src/source_map.rs @@ -1225,7 +1225,7 @@ impl SourceMap { src_id = builder.add_source(&config.file_name_to_source(&f.name)); inline_sources_content = config.inline_sources_content(&f.name); - if inline_sources_content && !orig.is_some() { + if inline_sources_content && orig.is_none() { builder.set_source_contents(src_id, Some(&f.src)); }