Skip to content

Commit 1f3a24b

Browse files
committed
fix(swc-plugin): preserve top level directives
1 parent 49b23c6 commit 1f3a24b

File tree

5 files changed

+37
-12
lines changed

5 files changed

+37
-12
lines changed

packages/presets/swc-plugin/src/lib.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ use serde::Deserialize;
44
use std::path::{Path, PathBuf};
55
use swc_core::{
66
atoms::Atom,
7-
common::Span,
7+
common::{util::take::Take, Span},
88
ecma::{
99
ast::*,
10-
utils::quote_ident,
10+
utils::{prepend_stmts, quote_ident},
1111
visit::{visit_mut_pass, VisitMut, VisitMutWith},
1212
},
1313
plugin::{
@@ -183,12 +183,14 @@ impl VisitMut for GraphQLVisitor {
183183

184184
let platform_specific_path: Atom = self.get_relative_import_path("graphql").into();
185185

186-
for module_item in &self.graphql_operations_or_fragments_to_import {
187-
module.body.insert(
188-
0,
189-
module_item.as_module_item(platform_specific_path.clone()),
190-
);
191-
}
186+
let mut items = module.body.take();
187+
prepend_stmts(
188+
&mut items,
189+
self.graphql_operations_or_fragments_to_import
190+
.iter()
191+
.map(|module_item| module_item.as_module_item(platform_specific_path.clone())),
192+
);
193+
module.body = items;
192194
}
193195
}
194196

packages/presets/swc-plugin/src/tests.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,20 @@ test!(
8484
const looseToArray = (input)=>[].slice.call(input);
8585
const targetTag = document.querySelector(`style[data-n-href="${href}"]`);"#
8686
);
87+
88+
test!(
89+
Default::default(),
90+
|_| visit_mut_pass(get_test_code_visitor()),
91+
top_level_directives_are_preserved,
92+
r#""use client";
93+
//@ts-ignore
94+
import gql from "gql-tag";
95+
96+
//@ts-ignore
97+
const A = gql(/* GraphQL */ `
98+
query A {
99+
a
100+
}
101+
`);
102+
"#
103+
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
"use client";
2+
import { ADocument } from "./src/gql/graphql";
3+
//@ts-ignore
4+
import gql from "gql-tag";
5+
//@ts-ignore
6+
const A = ADocument;

packages/presets/swc-plugin/tests/fixtures/simple-uppercase-operation-name.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable @typescript-eslint/ban-ts-comment */ //@ts-ignore
2-
import { CFragmentDoc } from "./graphql";
3-
import { BDocument } from "./graphql";
42
import { ADocument } from "./graphql";
3+
import { BDocument } from "./graphql";
4+
import { CFragmentDoc } from "./graphql";
55
import gql from "gql-tag";
66
//@ts-ignore
77
const A = ADocument;

packages/presets/swc-plugin/tests/fixtures/simple-uppercase-operation-name.other-dir.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable @typescript-eslint/ban-ts-comment */ //@ts-ignore
2-
import { CFragmentDoc } from "./../graphql";
3-
import { BDocument } from "./../graphql";
42
import { ADocument } from "./../graphql";
3+
import { BDocument } from "./../graphql";
4+
import { CFragmentDoc } from "./../graphql";
55
import gql from "gql-tag";
66
//@ts-ignore
77
const A = ADocument;

0 commit comments

Comments
 (0)