Skip to content

Commit f5bc148

Browse files
committed
feat(pack): modularizeImport support skip type import
1 parent 2a81100 commit f5bc148

9 files changed

Lines changed: 75 additions & 64 deletions

File tree

crates/pack-core/src/shared/transforms/modularize_imports.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use bincode::{Decode, Encode};
66
use modularize_imports::{Config, PackageConfig, modularize_imports};
77
use serde::{Deserialize, Serialize};
88
use swc_core::ecma::ast::Program;
9+
use swc_core::ecma::transforms::typescript::{Config as TypescriptConfig, typescript};
910
use turbo_tasks::{FxIndexMap, NonLocalValue, OperationValue, ResolvedVc, trace::TraceRawVcs};
1011
use turbopack::module_options::{ModuleRule, ModuleRuleEffect};
1112
use turbopack_ecmascript::{CustomTransformer, EcmascriptInputTransform, TransformContext};
@@ -120,10 +121,27 @@ impl ModularizeImportsTransformer {
120121
}
121122
}
122123

124+
fn is_typescript_like_file(file_name: &str) -> bool {
125+
file_name.ends_with(".ts")
126+
|| file_name.ends_with(".tsx")
127+
|| file_name.ends_with(".mts")
128+
|| file_name.ends_with(".cts")
129+
}
130+
123131
#[async_trait]
124132
impl CustomTransformer for ModularizeImportsTransformer {
125133
#[tracing::instrument(level = "trace", name = "modularize_imports", skip_all)]
126-
async fn transform(&self, program: &mut Program, _ctx: &TransformContext<'_>) -> Result<()> {
134+
async fn transform(&self, program: &mut Program, ctx: &TransformContext<'_>) -> Result<()> {
135+
if is_typescript_like_file(ctx.file_name_str) {
136+
// Keep this localized to modularize-imports path: strip type-only usages
137+
// before import path rewriting.
138+
let config = TypescriptConfig {
139+
verbatim_module_syntax: false,
140+
..Default::default()
141+
};
142+
program.mutate(typescript(config, ctx.unresolved_mark, ctx.top_level_mark));
143+
}
144+
127145
program.mutate(modularize_imports(&self.config));
128146

129147
Ok(())

crates/pack-tests/tests/snapshot/optimization/modularize_imports_keba_case/config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"config": {
33
"entry": [
44
{
5-
"import": "input/index.ts",
5+
"import": "input/index.tsx",
66
"name": "main"
77
}
88
],

crates/pack-tests/tests/snapshot/optimization/modularize_imports_keba_case/input/index.ts renamed to crates/pack-tests/tests/snapshot/optimization/modularize_imports_keba_case/input/index.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Button, DatePicker } from "antd";
22
import { UploadProps } from "antd";
33
import type { UploadFile } from "antd";
4+
import React from 'react';
45

56
const props: UploadProps = {
67
name: "test"
@@ -14,4 +15,14 @@ console.log('props', props);
1415
console.log('file', file);
1516

1617
console.log(Button);
17-
console.log(DatePicker);
18+
console.log(DatePicker);
19+
20+
const App = () => {
21+
return (
22+
<div>
23+
<Button>Click</Button>
24+
</div>
25+
)
26+
}
27+
28+
export default App;

crates/pack-tests/tests/snapshot/optimization/modularize_imports_keba_case/issues/Module-not-found-Can-t-resolve-antd-es-upload-prop-65101e.txt

Lines changed: 0 additions & 18 deletions
This file was deleted.

crates/pack-tests/tests/snapshot/optimization/modularize_imports_keba_case/issues/Module-not-found-Can-t-resolve-antd-es-upload-prop-f9631d.txt

Lines changed: 0 additions & 18 deletions
This file was deleted.

crates/pack-tests/tests/snapshot/optimization/modularize_imports_keba_case/output/_project___2fe66d90.js.map

Lines changed: 0 additions & 10 deletions
This file was deleted.

crates/pack-tests/tests/snapshot/optimization/modularize_imports_keba_case/output/_project___2fe66d90.js renamed to crates/pack-tests/tests/snapshot/optimization/modularize_imports_keba_case/output/_project___4f43be0f.js

Lines changed: 31 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/pack-tests/tests/snapshot/optimization/modularize_imports_keba_case/output/_project___4f43be0f.js.map

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([
22
typeof document === "object" ? document.currentScript : undefined,
3-
{"otherChunks":["_project___2fe66d90.js"],"runtimeModuleIds":["[project]/optimization/modularize_imports_keba_case/input/index.ts [client] (ecmascript)"]}
3+
{"otherChunks":["_project___4f43be0f.js"],"runtimeModuleIds":["[project]/optimization/modularize_imports_keba_case/input/index.tsx [client] (ecmascript)"]}
44
]);
55
// Dummy runtime

0 commit comments

Comments
 (0)