Skip to content

Commit

Permalink
feat(rust): render external imports after normal imports
Browse files Browse the repository at this point in the history
  • Loading branch information
hyf0 committed May 19, 2024
1 parent e9938d9 commit 718dbcc
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 44 deletions.
64 changes: 33 additions & 31 deletions crates/rolldown/src/utils/chunk/render_chunk_imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ pub fn render_chunk_imports(
options: &SharedOptions,
) -> String {
let mut s = String::new();
let imports_from_external_modules = &chunk.imports_from_external_modules;

let render_import_specifier = |imported: &str, alias: &str| match options.format {
rolldown_common::OutputFormat::Esm => {
Expand Down Expand Up @@ -57,6 +56,39 @@ pub fn render_chunk_imports(
}
};

// render imports from other chunks

chunk.imports_from_other_chunks.iter().for_each(|(exporter_id, items)| {
let importee_chunk = &chunk_graph.chunks[*exporter_id];
let mut import_items = items
.iter()
.map(|item| {
let canonical_ref = graph.symbols.par_canonical_ref_for(item.import_ref);
let local_binding = &chunk.canonical_names[&canonical_ref];
let Specifier::Literal(export_alias) = item.export_alias.as_ref().unwrap() else {
panic!("should not be star import from other chunks")
};
render_import_specifier(export_alias, local_binding)
})
.collect::<Vec<_>>();
let filename = importee_chunk
.preliminary_filename
.as_deref()
.expect("At this point, preliminary_filename should already be generated")
.as_str();

if import_items.is_empty() {
// TODO: filename relative to importee
render_plain_import(&format!("./{filename}"), &mut s);
} else {
import_items.sort();
render_import_stmt(&import_items, &format!("./{filename}"), &mut s);
}
});

// render external imports

let imports_from_external_modules = &chunk.imports_from_external_modules;
imports_from_external_modules.iter().for_each(|(importee_id, named_imports)| {
let importee = &graph.module_table.external_modules[*importee_id];
let mut is_importee_imported = false;
Expand Down Expand Up @@ -92,35 +124,5 @@ pub fn render_chunk_imports(
render_plain_import(&importee.name, &mut s);
}
});

// render imports from other chunks

chunk.imports_from_other_chunks.iter().for_each(|(exporter_id, items)| {
let importee_chunk = &chunk_graph.chunks[*exporter_id];
let mut import_items = items
.iter()
.map(|item| {
let canonical_ref = graph.symbols.par_canonical_ref_for(item.import_ref);
let local_binding = &chunk.canonical_names[&canonical_ref];
let Specifier::Literal(export_alias) = item.export_alias.as_ref().unwrap() else {
panic!("should not be star import from other chunks")
};
render_import_specifier(export_alias, local_binding)
})
.collect::<Vec<_>>();
let filename = importee_chunk
.preliminary_filename
.as_deref()
.expect("At this point, preliminary_filename should already be generated")
.as_str();

if import_items.is_empty() {
// TODO: filename relative to importee
render_plain_import(&format!("./{filename}"), &mut s);
} else {
import_items.sort();
render_import_stmt(&import_items, &format!("./{filename}"), &mut s);
}
});
s
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ input_file: crates/rolldown/tests/fixtures/deconflict/conflict_between_global_an
## main.mjs

```js
import { default as assert } from "node:assert";
import { __commonJSMin } from "./$runtime$.mjs";
import { default as assert } from "node:assert";
// main.js
var require_main = __commonJSMin((exports, module) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ input_file: crates/rolldown/tests/fixtures/deconflict/conflict_between_imported_
## main.mjs

```js
import { default as assert } from "node:assert";
import { __commonJSMin } from "./$runtime$.mjs";
import { default as assert } from "node:assert";
// main.js
var require_main = __commonJSMin((exports, module) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ input_file: crates/rolldown/tests/fixtures/deconflict/wrapped_esm_default_functi
## main.mjs

```js
import { default as assert } from "assert";
import { __esmMin, __export, __toCommonJS } from "./$runtime$.mjs";
import { default as assert } from "assert";
// foo.js
function foo$1(a$1$1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ input_file: crates/rolldown/tests/fixtures/deconflict/wrapped_esm_export_named_f
## main.mjs

```js
import { default as assert } from "assert";
import { __esmMin, __export, __toCommonJS } from "./$runtime$.mjs";
import { default as assert } from "assert";
// foo.js
function foo$1(a$1$1) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
source: crates/rolldown/tests/common/case.rs
expression: content
input_file: crates/rolldown/tests/fixtures/external/splitting_with_external_module
input_file: crates/rolldown/tests/fixtures/function/external/splitting_with_external_module
---
# Assets

Expand All @@ -16,8 +16,8 @@ console.log(value);
## main.mjs
```js
import { default as assert } from "assert";
import { value } from "./share.mjs";
import { default as assert } from "assert";

// main.js
assert(value === 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1172,12 +1172,12 @@ expression: "snapshot_outputs.join(\"\\n\")"
# tests/fixtures/deconflict/conflict_between_global_and_local_binding

- $runtime$-!~{001}~.mjs => $runtime$-6wzC9jCL.mjs
- main-!~{000}~.mjs => main-tOEcGaC9.mjs
- main-!~{000}~.mjs => main-yq81GCoq.mjs

# tests/fixtures/deconflict/conflict_between_imported_and_local_binding

- $runtime$-!~{001}~.mjs => $runtime$-6wzC9jCL.mjs
- main-!~{000}~.mjs => main-UgkBYeKd.mjs
- main-!~{000}~.mjs => main-jGSEfPCH.mjs

# tests/fixtures/deconflict/decl_complex_patterns

Expand Down Expand Up @@ -1206,14 +1206,14 @@ expression: "snapshot_outputs.join(\"\\n\")"
# tests/fixtures/deconflict/wrapped_esm_default_function

- $runtime$-!~{001}~.mjs => $runtime$-vR6TnGxp.mjs
- main-!~{000}~.mjs => main-Hwm0PQEH.mjs
- main-Hwm0PQEH.mjs.map
- main-!~{000}~.mjs => main-p6u6QFeo.mjs
- main-p6u6QFeo.mjs.map

# tests/fixtures/deconflict/wrapped_esm_export_named_function

- $runtime$-!~{001}~.mjs => $runtime$-vR6TnGxp.mjs
- main-!~{000}~.mjs => main-puld6Obw.mjs
- main-puld6Obw.mjs.map
- main-!~{000}~.mjs => main-_ZUi0Cvz.mjs
- main-_ZUi0Cvz.mjs.map

# tests/fixtures/errors/unresolved_entry

Expand All @@ -1237,7 +1237,7 @@ expression: "snapshot_outputs.join(\"\\n\")"
# tests/fixtures/function/external/splitting_with_external_module

- entry-!~{001}~.mjs => entry-ahgOZOc1.mjs
- main-!~{000}~.mjs => main-1dgL9psc.mjs
- main-!~{000}~.mjs => main-LeJVwZoF.mjs
- share-!~{002}~.mjs => share-eIGIrVeP.mjs

# tests/fixtures/function/resolve/browser_filed_false
Expand Down

0 comments on commit 718dbcc

Please sign in to comment.