From 8ef76745299b998e63af27e1114c269a72abaa28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 16 Oct 2025 18:43:39 +0900 Subject: [PATCH 1/5] inject imports --- packages/swc-inject-imports/.npmignore | 3 + packages/swc-inject-imports/CHANGELOG.md | 1 + packages/swc-inject-imports/Cargo.toml | 25 ++++++++ packages/swc-inject-imports/README.md | 23 +++++++ packages/swc-inject-imports/README.tmpl.md | 23 +++++++ packages/swc-inject-imports/package.json | 29 +++++++++ packages/swc-inject-imports/src/lib.rs | 33 ++++++++++ .../swc-inject-imports/transform/Cargo.toml | 29 +++++++++ .../swc-inject-imports/transform/src/lib.rs | 61 +++++++++++++++++++ .../transform/tests/fixture.rs | 34 +++++++++++ .../tests/fixture/no-name-clash/input.js | 3 + .../tests/fixture/no-name-clash/output.js | 3 + .../transform/tests/fixture/simple/input.js | 3 + .../transform/tests/fixture/simple/output.js | 3 + 14 files changed, 273 insertions(+) create mode 100644 packages/swc-inject-imports/.npmignore create mode 100644 packages/swc-inject-imports/CHANGELOG.md create mode 100644 packages/swc-inject-imports/Cargo.toml create mode 100644 packages/swc-inject-imports/README.md create mode 100644 packages/swc-inject-imports/README.tmpl.md create mode 100644 packages/swc-inject-imports/package.json create mode 100644 packages/swc-inject-imports/src/lib.rs create mode 100644 packages/swc-inject-imports/transform/Cargo.toml create mode 100644 packages/swc-inject-imports/transform/src/lib.rs create mode 100644 packages/swc-inject-imports/transform/tests/fixture.rs create mode 100644 packages/swc-inject-imports/transform/tests/fixture/no-name-clash/input.js create mode 100644 packages/swc-inject-imports/transform/tests/fixture/no-name-clash/output.js create mode 100644 packages/swc-inject-imports/transform/tests/fixture/simple/input.js create mode 100644 packages/swc-inject-imports/transform/tests/fixture/simple/output.js diff --git a/packages/swc-inject-imports/.npmignore b/packages/swc-inject-imports/.npmignore new file mode 100644 index 000000000..a601c5cd1 --- /dev/null +++ b/packages/swc-inject-imports/.npmignore @@ -0,0 +1,3 @@ +__tests__/ +transform/ +Cargo.toml \ No newline at end of file diff --git a/packages/swc-inject-imports/CHANGELOG.md b/packages/swc-inject-imports/CHANGELOG.md new file mode 100644 index 000000000..9448ad5f4 --- /dev/null +++ b/packages/swc-inject-imports/CHANGELOG.md @@ -0,0 +1 @@ +# @swc/plugin-swc-inject-imports diff --git a/packages/swc-inject-imports/Cargo.toml b/packages/swc-inject-imports/Cargo.toml new file mode 100644 index 000000000..0bdfc8f38 --- /dev/null +++ b/packages/swc-inject-imports/Cargo.toml @@ -0,0 +1,25 @@ +[package] + +description = "SWC Plugin for swc-inject-imports" + + +authors = { workspace = true } +edition = { workspace = true } +homepage = { workspace = true } +license = { workspace = true } +name = "swc_plugin_swc_inject_imports" +publish = false +repository = { workspace = true } +rust-version = { workspace = true } +version = "0.7.4" + + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +serde_json = { workspace = true } +swc_core = { workspace = true, features = ["ecma_plugin_transform"] } + + +swc_inject_imports = { path = "./transform" } diff --git a/packages/swc-inject-imports/README.md b/packages/swc-inject-imports/README.md new file mode 100644 index 000000000..8f54f0d2a --- /dev/null +++ b/packages/swc-inject-imports/README.md @@ -0,0 +1,23 @@ +# @swc/plugin-swc-inject-imports + +## Usage + +.swcrc: + +```json +{ + "jsc": { + "experimental": { + "plugins": [ + "@swc/plugin-swc-inject-imports", + { + "importsPaths": ["@swc/inject-imports"], + "onlyFilenames": ["page.tsx", "layout.tsx"] + } + ] + } + } +} +``` + +# @swc/plugin-swc-inject-imports diff --git a/packages/swc-inject-imports/README.tmpl.md b/packages/swc-inject-imports/README.tmpl.md new file mode 100644 index 000000000..5cfac4fad --- /dev/null +++ b/packages/swc-inject-imports/README.tmpl.md @@ -0,0 +1,23 @@ +# @swc/plugin-swc-inject-imports + +## Usage + +.swcrc: + +```json +{ + "jsc": { + "experimental": { + "plugins": [ + "@swc/plugin-swc-inject-imports", + { + "importsPaths": ["@swc/inject-imports"], + "onlyFilenames": ["page.tsx", "layout.tsx"] + } + ] + } + } +} +``` + +${CHANGELOG} diff --git a/packages/swc-inject-imports/package.json b/packages/swc-inject-imports/package.json new file mode 100644 index 000000000..a5be72466 --- /dev/null +++ b/packages/swc-inject-imports/package.json @@ -0,0 +1,29 @@ +{ + "name": "@swc/plugin-swc-inject-imports", + "version": "1.0.0", + "publishConfig": { + "access": "public", + "provenance": true + }, + "description": "SWC plugin for swc-inject-imports", + "main": "swc_plugin_swc_inject_imports.wasm", + "scripts": { + "prepack": "cargo build --release -p swc_plugin_swc_inject_imports --target wasm32-wasip1 && cp ../../target/wasm32-wasip1/release/swc_plugin_swc_inject_imports.wasm ." + }, + "homepage": "https://swc.rs", + "repository": { + "type": "git", + "url": "git+https://github.com/swc-project/plugins.git", + "directory": "packages/swc-inject-imports" + }, + "bugs": { + "url": "https://github.com/swc-project/plugins/issues" + }, + "author": "강동윤 ", + "keywords": [], + "license": "Apache-2.0", + "preferUnplugged": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } +} \ No newline at end of file diff --git a/packages/swc-inject-imports/src/lib.rs b/packages/swc-inject-imports/src/lib.rs new file mode 100644 index 000000000..ff45262f3 --- /dev/null +++ b/packages/swc-inject-imports/src/lib.rs @@ -0,0 +1,33 @@ +#![allow(clippy::not_unsafe_ptr_arg_deref)] +#![feature(box_patterns)] + +use swc_core::{ + ecma::ast::Program, + plugin::{ + metadata::TransformPluginMetadataContextKind, plugin_transform, + proxies::TransformPluginProgramMetadata, + }, +}; + +#[plugin_transform] +fn swc_inject_imports_plugin( + mut program: Program, + data: TransformPluginProgramMetadata, +) -> Program { + let config = serde_json::from_str::( + &data + .get_transform_plugin_config() + .expect("failed to get plugin config for swc-inject-imports"), + ) + .expect("invalid config for swc-inject-imports"); + + let filename = data + .get_context(&TransformPluginMetadataContextKind::Filename) + .unwrap() + .to_string() + .into(); + + program.mutate(swc_inject_imports::swc_inject_imports(filename, config)); + + program +} diff --git a/packages/swc-inject-imports/transform/Cargo.toml b/packages/swc-inject-imports/transform/Cargo.toml new file mode 100644 index 000000000..c6288a718 --- /dev/null +++ b/packages/swc-inject-imports/transform/Cargo.toml @@ -0,0 +1,29 @@ +[package] + +description = "AST transforms visitor for swc-inject-imports" + + +authors = { workspace = true } +edition = { workspace = true } +homepage = { workspace = true } +license = { workspace = true } +name = "swc_inject_imports" +repository = { workspace = true } +rust-version = { workspace = true } +version = "0.1.0" + + +[dependencies] +rustc-hash = { workspace = true } +serde = { workspace = true, features = ["derive"] } +swc_atoms = { workspace = true } +swc_common = { workspace = true } +swc_ecma_ast = { workspace = true } +swc_ecma_utils = { workspace = true } +swc_ecma_visit = { workspace = true } + +[dev-dependencies] +swc_ecma_parser = { workspace = true } +swc_ecma_transforms_base = { workspace = true } +swc_ecma_transforms_testing = { workspace = true } +testing = { workspace = true } diff --git a/packages/swc-inject-imports/transform/src/lib.rs b/packages/swc-inject-imports/transform/src/lib.rs new file mode 100644 index 000000000..a301b780f --- /dev/null +++ b/packages/swc-inject-imports/transform/src/lib.rs @@ -0,0 +1,61 @@ +#![feature(box_patterns)] + +use serde::Deserialize; +use swc_atoms::Atom; +use swc_common::util::take::Take; +use swc_ecma_ast::{ImportDecl, Module, ModuleDecl, ModuleItem, Pass, Program, Str}; +use swc_ecma_utils::prepend_stmts; + +#[derive(Debug, Default, Clone, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Config { + #[serde(default)] + pub imports_paths: Vec, + + #[serde(default)] + pub only_filenames: Vec, +} + +pub fn swc_inject_imports(filename: Atom, config: Config) -> impl Pass { + InjectImports { config, filename } +} + +struct InjectImports { + config: Config, + filename: Atom, +} + +impl Pass for InjectImports { + fn process(&mut self, program: &mut swc_ecma_ast::Program) { + if self.config.imports_paths.is_empty() { + return; + } + + if !self.config.only_filenames.is_empty() { + let mut find = false; + for filename_filter in self.config.only_filenames.iter() { + if self.filename.ends_with(&**filename_filter) { + find = true; + break; + } + } + if !find { + return; + } + } + + let Program::Module(Module { body, .. }) = program else { + return; + }; + + let new_imports = self.config.imports_paths.iter().map(|path| { + ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { + src: Box::new(Str::from(path.clone())), + specifiers: vec![], + ..Take::dummy() + })) + }); + + prepend_stmts(body, new_imports); + } +} diff --git a/packages/swc-inject-imports/transform/tests/fixture.rs b/packages/swc-inject-imports/transform/tests/fixture.rs new file mode 100644 index 000000000..bb6abeca3 --- /dev/null +++ b/packages/swc-inject-imports/transform/tests/fixture.rs @@ -0,0 +1,34 @@ +use std::path::PathBuf; + +use swc_atoms::Atom; +use swc_common::Mark; +use swc_ecma_parser::Syntax; +use swc_ecma_transforms_base::resolver; +use swc_ecma_transforms_testing::test_fixture; +use swc_inject_imports::Config; + +#[testing::fixture("tests/fixture/**/input.js")] +fn pure(input: PathBuf) { + let output = input.parent().unwrap().join("output.js"); + test_fixture( + Syntax::default(), + &|_tr| { + let unresolved_mark = Mark::new(); + let top_level_mark = Mark::new(); + + ( + resolver(unresolved_mark, top_level_mark, false), + swc_inject_imports::swc_inject_imports( + "test.js".into(), + Config { + imports_paths: vec![Atom::new("@swc/inject-imports")], + only_filenames: vec![], + }, + ), + ) + }, + &input, + &output, + Default::default(), + ); +} diff --git a/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/input.js b/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/input.js new file mode 100644 index 000000000..1c81c54b9 --- /dev/null +++ b/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/input.js @@ -0,0 +1,3 @@ +import { markAsPure } from "not-swc-inject-imports"; + +markAsPure(console.log("test!")); diff --git a/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/output.js b/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/output.js new file mode 100644 index 000000000..d976509ec --- /dev/null +++ b/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/output.js @@ -0,0 +1,3 @@ +import "@swc/inject-imports"; +import { markAsPure } from "not-swc-inject-imports"; +markAsPure(console.log("test!")); diff --git a/packages/swc-inject-imports/transform/tests/fixture/simple/input.js b/packages/swc-inject-imports/transform/tests/fixture/simple/input.js new file mode 100644 index 000000000..96d30d891 --- /dev/null +++ b/packages/swc-inject-imports/transform/tests/fixture/simple/input.js @@ -0,0 +1,3 @@ +import { markAsPure } from "@swc/inject-imports"; + +markAsPure(console.log("test!")); diff --git a/packages/swc-inject-imports/transform/tests/fixture/simple/output.js b/packages/swc-inject-imports/transform/tests/fixture/simple/output.js new file mode 100644 index 000000000..942c26ee5 --- /dev/null +++ b/packages/swc-inject-imports/transform/tests/fixture/simple/output.js @@ -0,0 +1,3 @@ +import "@swc/inject-imports"; +import { markAsPure } from "@swc/inject-imports"; +markAsPure(console.log("test!")); From 5d1087d57a47d8a53524dd8cd49342806a42e8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 16 Oct 2025 18:43:51 +0900 Subject: [PATCH 2/5] lockfile --- Cargo.lock | 26 ++++++++++++++++++++++++++ pnpm-lock.yaml | 6 ++++++ 2 files changed, 32 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index a994b5ead..e4828cb83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3411,6 +3411,23 @@ dependencies = [ "widestring", ] +[[package]] +name = "swc_inject_imports" +version = "0.1.0" +dependencies = [ + "rustc-hash", + "serde", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_parser", + "swc_ecma_transforms_base", + "swc_ecma_transforms_testing", + "swc_ecma_utils", + "swc_ecma_visit", + "testing", +] + [[package]] name = "swc_macros_common" version = "1.0.1" @@ -3678,6 +3695,15 @@ dependencies = [ "swc_core", ] +[[package]] +name = "swc_plugin_swc_inject_imports" +version = "0.7.4" +dependencies = [ + "serde_json", + "swc_core", + "swc_inject_imports", +] + [[package]] name = "swc_plugin_swc_magic" version = "0.7.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c17318ab1..a3f282ec2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -122,6 +122,12 @@ importers: specifier: ^0.1.3 version: 0.1.3 + packages/swc-inject-imports: + dependencies: + '@swc/counter': + specifier: ^0.1.3 + version: 0.1.3 + packages/swc-magic: dependencies: '@swc/counter': From 01f56607f9f771cdec0122e3b8bbc3e80b3dd832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 16 Oct 2025 18:47:09 +0900 Subject: [PATCH 3/5] experimental --- packages/swc-inject-imports/CHANGELOG.md | 2 +- packages/swc-inject-imports/Cargo.toml | 2 +- packages/swc-inject-imports/README.md | 8 ++++---- packages/swc-inject-imports/README.tmpl.md | 6 +++--- packages/swc-inject-imports/package.json | 6 +++--- packages/swc-inject-imports/src/lib.rs | 4 ++-- packages/swc-inject-imports/transform/Cargo.toml | 2 +- packages/swc-inject-imports/transform/tests/fixture.rs | 2 +- .../transform/tests/fixture/no-name-clash/input.js | 2 +- .../transform/tests/fixture/no-name-clash/output.js | 4 ++-- .../transform/tests/fixture/simple/input.js | 2 +- .../transform/tests/fixture/simple/output.js | 4 ++-- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/swc-inject-imports/CHANGELOG.md b/packages/swc-inject-imports/CHANGELOG.md index 9448ad5f4..93eb5e042 100644 --- a/packages/swc-inject-imports/CHANGELOG.md +++ b/packages/swc-inject-imports/CHANGELOG.md @@ -1 +1 @@ -# @swc/plugin-swc-inject-imports +# ChangeLog diff --git a/packages/swc-inject-imports/Cargo.toml b/packages/swc-inject-imports/Cargo.toml index 0bdfc8f38..28f6fd4d4 100644 --- a/packages/swc-inject-imports/Cargo.toml +++ b/packages/swc-inject-imports/Cargo.toml @@ -1,6 +1,6 @@ [package] -description = "SWC Plugin for swc-inject-imports" +description = "SWC Plugin for swc-experimental-inject-imports" authors = { workspace = true } diff --git a/packages/swc-inject-imports/README.md b/packages/swc-inject-imports/README.md index 8f54f0d2a..0fef57748 100644 --- a/packages/swc-inject-imports/README.md +++ b/packages/swc-inject-imports/README.md @@ -1,4 +1,4 @@ -# @swc/plugin-swc-inject-imports +# @swc/plugin-swc-experimental-inject-imports ## Usage @@ -9,9 +9,9 @@ "jsc": { "experimental": { "plugins": [ - "@swc/plugin-swc-inject-imports", + "@swc/plugin-swc-experimental-inject-imports", { - "importsPaths": ["@swc/inject-imports"], + "importsPaths": ["@swc/experimental-inject-imports"], "onlyFilenames": ["page.tsx", "layout.tsx"] } ] @@ -20,4 +20,4 @@ } ``` -# @swc/plugin-swc-inject-imports +# @swc/plugin-swc-experimental-inject-imports diff --git a/packages/swc-inject-imports/README.tmpl.md b/packages/swc-inject-imports/README.tmpl.md index 5cfac4fad..032e40f39 100644 --- a/packages/swc-inject-imports/README.tmpl.md +++ b/packages/swc-inject-imports/README.tmpl.md @@ -1,4 +1,4 @@ -# @swc/plugin-swc-inject-imports +# @swc/plugin-swc-experimental-inject-imports ## Usage @@ -9,9 +9,9 @@ "jsc": { "experimental": { "plugins": [ - "@swc/plugin-swc-inject-imports", + "@swc/plugin-swc-experimental-inject-imports", { - "importsPaths": ["@swc/inject-imports"], + "importsPaths": ["@swc/example-import"], "onlyFilenames": ["page.tsx", "layout.tsx"] } ] diff --git a/packages/swc-inject-imports/package.json b/packages/swc-inject-imports/package.json index a5be72466..d034f58e7 100644 --- a/packages/swc-inject-imports/package.json +++ b/packages/swc-inject-imports/package.json @@ -1,11 +1,11 @@ { - "name": "@swc/plugin-swc-inject-imports", + "name": "@swc/plugin-swc-experimental-inject-imports", "version": "1.0.0", "publishConfig": { "access": "public", "provenance": true }, - "description": "SWC plugin for swc-inject-imports", + "description": "SWC plugin for swc-experimental-inject-imports", "main": "swc_plugin_swc_inject_imports.wasm", "scripts": { "prepack": "cargo build --release -p swc_plugin_swc_inject_imports --target wasm32-wasip1 && cp ../../target/wasm32-wasip1/release/swc_plugin_swc_inject_imports.wasm ." @@ -14,7 +14,7 @@ "repository": { "type": "git", "url": "git+https://github.com/swc-project/plugins.git", - "directory": "packages/swc-inject-imports" + "directory": "packages/swc-experimental-inject-imports" }, "bugs": { "url": "https://github.com/swc-project/plugins/issues" diff --git a/packages/swc-inject-imports/src/lib.rs b/packages/swc-inject-imports/src/lib.rs index ff45262f3..cad84c0b9 100644 --- a/packages/swc-inject-imports/src/lib.rs +++ b/packages/swc-inject-imports/src/lib.rs @@ -17,9 +17,9 @@ fn swc_inject_imports_plugin( let config = serde_json::from_str::( &data .get_transform_plugin_config() - .expect("failed to get plugin config for swc-inject-imports"), + .expect("failed to get plugin config for swc-experimental-inject-imports"), ) - .expect("invalid config for swc-inject-imports"); + .expect("invalid config for swc-experimental-inject-imports"); let filename = data .get_context(&TransformPluginMetadataContextKind::Filename) diff --git a/packages/swc-inject-imports/transform/Cargo.toml b/packages/swc-inject-imports/transform/Cargo.toml index c6288a718..ac24e75e7 100644 --- a/packages/swc-inject-imports/transform/Cargo.toml +++ b/packages/swc-inject-imports/transform/Cargo.toml @@ -1,6 +1,6 @@ [package] -description = "AST transforms visitor for swc-inject-imports" +description = "AST transforms visitor for swc-experimental-inject-imports" authors = { workspace = true } diff --git a/packages/swc-inject-imports/transform/tests/fixture.rs b/packages/swc-inject-imports/transform/tests/fixture.rs index bb6abeca3..ce21b10e3 100644 --- a/packages/swc-inject-imports/transform/tests/fixture.rs +++ b/packages/swc-inject-imports/transform/tests/fixture.rs @@ -21,7 +21,7 @@ fn pure(input: PathBuf) { swc_inject_imports::swc_inject_imports( "test.js".into(), Config { - imports_paths: vec![Atom::new("@swc/inject-imports")], + imports_paths: vec![Atom::new("@swc/experimental-inject-imports")], only_filenames: vec![], }, ), diff --git a/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/input.js b/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/input.js index 1c81c54b9..a62322c22 100644 --- a/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/input.js +++ b/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/input.js @@ -1,3 +1,3 @@ -import { markAsPure } from "not-swc-inject-imports"; +import { markAsPure } from "not-swc-experimental-inject-imports"; markAsPure(console.log("test!")); diff --git a/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/output.js b/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/output.js index d976509ec..27b1c2b9f 100644 --- a/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/output.js +++ b/packages/swc-inject-imports/transform/tests/fixture/no-name-clash/output.js @@ -1,3 +1,3 @@ -import "@swc/inject-imports"; -import { markAsPure } from "not-swc-inject-imports"; +import "@swc/experimental-inject-imports"; +import { markAsPure } from "not-swc-experimental-inject-imports"; markAsPure(console.log("test!")); diff --git a/packages/swc-inject-imports/transform/tests/fixture/simple/input.js b/packages/swc-inject-imports/transform/tests/fixture/simple/input.js index 96d30d891..b18cc8148 100644 --- a/packages/swc-inject-imports/transform/tests/fixture/simple/input.js +++ b/packages/swc-inject-imports/transform/tests/fixture/simple/input.js @@ -1,3 +1,3 @@ -import { markAsPure } from "@swc/inject-imports"; +import { markAsPure } from "@swc/experimental-inject-imports"; markAsPure(console.log("test!")); diff --git a/packages/swc-inject-imports/transform/tests/fixture/simple/output.js b/packages/swc-inject-imports/transform/tests/fixture/simple/output.js index 942c26ee5..5811530a8 100644 --- a/packages/swc-inject-imports/transform/tests/fixture/simple/output.js +++ b/packages/swc-inject-imports/transform/tests/fixture/simple/output.js @@ -1,3 +1,3 @@ -import "@swc/inject-imports"; -import { markAsPure } from "@swc/inject-imports"; +import "@swc/experimental-inject-imports"; +import { markAsPure } from "@swc/experimental-inject-imports"; markAsPure(console.log("test!")); From 8d23be18ba6fc12bc6806c5b1a98d10dc8aecaf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 16 Oct 2025 18:57:38 +0900 Subject: [PATCH 4/5] useEffect --- .../transform/tests/fixture/directive/input.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/swc-inject-imports/transform/tests/fixture/directive/input.js diff --git a/packages/swc-inject-imports/transform/tests/fixture/directive/input.js b/packages/swc-inject-imports/transform/tests/fixture/directive/input.js new file mode 100644 index 000000000..857130634 --- /dev/null +++ b/packages/swc-inject-imports/transform/tests/fixture/directive/input.js @@ -0,0 +1,5 @@ +'use client'; + +import { useEffect } from "react"; + +console.log(useEffect); \ No newline at end of file From 26947cc6c923f4ee5e662f20a29b7179880305d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 16 Oct 2025 18:58:01 +0900 Subject: [PATCH 5/5] useeffect --- .../transform/tests/fixture/directive/output.js | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/swc-inject-imports/transform/tests/fixture/directive/output.js diff --git a/packages/swc-inject-imports/transform/tests/fixture/directive/output.js b/packages/swc-inject-imports/transform/tests/fixture/directive/output.js new file mode 100644 index 000000000..95dc9e7ad --- /dev/null +++ b/packages/swc-inject-imports/transform/tests/fixture/directive/output.js @@ -0,0 +1,4 @@ +'use client'; +import "@swc/experimental-inject-imports"; +import { useEffect } from "react"; +console.log(useEffect);