@swc/plugin-styled-jsx 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.toml +23 -8
- package/package.json +1 -1
- package/src/lib.rs +9 -1
- package/src/style.rs +21 -0
- package/src/transform_css.rs +530 -0
- package/src/utils.rs +370 -0
- package/src/visitor.rs +921 -0
- package/swc_plugin_styled_jsx.wasm +0 -0
- package/tests/errors/nested-style-tags/input.js +31 -0
- package/tests/errors/nested-style-tags/output.js +31 -0
- package/tests/errors/nested-style-tags/output.stderr +21 -0
- package/tests/errors/no-child/input.js +6 -0
- package/tests/errors/no-child/output.js +8 -0
- package/tests/errors/no-child/output.stderr +7 -0
- package/tests/errors/ts-with-css-resolve/input.js +10 -0
- package/tests/errors/ts-with-css-resolve/output.js +5 -0
- package/tests/errors/ts-with-css-resolve/output.stderr +2 -0
- package/tests/errors/two-children/input.js +8 -0
- package/tests/errors/two-children/output.js +12 -0
- package/tests/errors/two-children/output.stderr +9 -0
- package/tests/errors/wrong-child-type/input.js +7 -0
- package/tests/errors/wrong-child-type/output.js +10 -0
- package/tests/errors/wrong-child-type/output.stderr +8 -0
- package/tests/errors/wrong-jsx-expression-type/input.js +7 -0
- package/tests/errors/wrong-jsx-expression-type/output.js +10 -0
- package/tests/errors/wrong-jsx-expression-type/output.stderr +8 -0
- package/tests/fixture/absent/input.js +6 -0
- package/tests/fixture/absent/output.js +7 -0
- package/tests/fixture/attribute-generation-classname-rewriting/input.js +55 -0
- package/tests/fixture/attribute-generation-classname-rewriting/output.js +112 -0
- package/tests/fixture/attribute-generation-modes/input.js +166 -0
- package/tests/fixture/attribute-generation-modes/output.js +228 -0
- package/tests/fixture/class/input.js +14 -0
- package/tests/fixture/class/output.js +12 -0
- package/tests/fixture/comments/input.js +18 -0
- package/tests/fixture/comments/output.js +12 -0
- package/tests/fixture/component-attribute/input.js +11 -0
- package/tests/fixture/component-attribute/output.js +10 -0
- package/tests/fixture/conflicts/input.js +16 -0
- package/tests/fixture/conflicts/output.js +14 -0
- package/tests/fixture/css-selector-after-pseudo/input.js +18 -0
- package/tests/fixture/css-selector-after-pseudo/output.js +11 -0
- package/tests/fixture/css-tag-same-file/input.js +25 -0
- package/tests/fixture/css-tag-same-file/output.js +21 -0
- package/tests/fixture/different-jsx-ids/input.js +23 -0
- package/tests/fixture/different-jsx-ids/output.js +24 -0
- package/tests/fixture/dynamic-element/input.js +56 -0
- package/tests/fixture/dynamic-element/output.js +40 -0
- package/tests/fixture/dynamic-element-class/input.js +32 -0
- package/tests/fixture/dynamic-element-class/output.js +25 -0
- package/tests/fixture/dynamic-element-external/input.js +12 -0
- package/tests/fixture/dynamic-element-external/output.js +12 -0
- package/tests/fixture/dynamic-this-in-arrow/input.js +41 -0
- package/tests/fixture/dynamic-this-in-arrow/output.js +39 -0
- package/tests/fixture/exported-jsx-style/input.js +1 -0
- package/tests/fixture/exported-jsx-style/output.js +1 -0
- package/tests/fixture/exported-non-jsx-style/input.js +1 -0
- package/tests/fixture/exported-non-jsx-style/output.js +1 -0
- package/tests/fixture/expressions/input.js +90 -0
- package/tests/fixture/expressions/output.js +91 -0
- package/tests/fixture/external-nested-scope/input.js +5 -0
- package/tests/fixture/external-nested-scope/output.js +7 -0
- package/tests/fixture/external-stylesheet/input.js +41 -0
- package/tests/fixture/external-stylesheet/output.js +34 -0
- package/tests/fixture/external-stylesheet-global/input.js +19 -0
- package/tests/fixture/external-stylesheet-global/output.js +18 -0
- package/tests/fixture/external-stylesheet-multi-line/input.js +9 -0
- package/tests/fixture/external-stylesheet-multi-line/output.js +9 -0
- package/tests/fixture/fragment/input.js +51 -0
- package/tests/fixture/fragment/output.js +47 -0
- package/tests/fixture/global/input.js +22 -0
- package/tests/fixture/global/output.js +7 -0
- package/tests/fixture/global-child-selector/input.js +10 -0
- package/tests/fixture/global-child-selector/output.js +8 -0
- package/tests/fixture/global-redundant/input.js +12 -0
- package/tests/fixture/global-redundant/output.js +10 -0
- package/tests/fixture/issue-30480/input.js +7 -0
- package/tests/fixture/issue-30480/output.js +15 -0
- package/tests/fixture/issue-30570/input.js +15 -0
- package/tests/fixture/issue-30570/output.js +12 -0
- package/tests/fixture/issue-31562-interpolation-in-mdea/input.js +30 -0
- package/tests/fixture/issue-31562-interpolation-in-mdea/output.js +43 -0
- package/tests/fixture/mixed-global-scoped/input.js +9 -0
- package/tests/fixture/mixed-global-scoped/output.js +11 -0
- package/tests/fixture/multiple-jsx/input.js +43 -0
- package/tests/fixture/multiple-jsx/output.js +32 -0
- package/tests/fixture/nested-style-tags/index.js +0 -0
- package/tests/fixture/nested-style-tags/output.js +0 -0
- package/tests/fixture/non-styled-jsx-style/input.js +7 -0
- package/tests/fixture/non-styled-jsx-style/output.js +12 -0
- package/tests/fixture/not-styled-jsx-tagged-templates/input.js +30 -0
- package/tests/fixture/not-styled-jsx-tagged-templates/output.js +24 -0
- package/tests/fixture/number-after-placeholder/input.js +17 -0
- package/tests/fixture/number-after-placeholder/output.js +17 -0
- package/tests/fixture/one-off-global-selectors/input.js +10 -0
- package/tests/fixture/one-off-global-selectors/output.js +8 -0
- package/tests/fixture/source-maps/input.js +8 -0
- package/tests/fixture/source-maps/output.js +8 -0
- package/tests/fixture/stateless/input.js +8 -0
- package/tests/fixture/stateless/output.js +12 -0
- package/tests/fixture/styles/input.js +57 -0
- package/tests/fixture/styles/output.js +39 -0
- package/tests/fixture/styles-external-invalid/input.js +13 -0
- package/tests/fixture/styles-external-invalid/output.js +9 -0
- package/tests/fixture/styles-external-invalid2/input.js +11 -0
- package/tests/fixture/styles-external-invalid2/output.js +8 -0
- package/tests/fixture/styles2/input.js +6 -0
- package/tests/fixture/styles2/output.js +5 -0
- package/tests/fixture/too-many/input.js +35 -0
- package/tests/fixture/too-many/output.js +49 -0
- package/tests/fixture/tpl-escape-1/input.js +14 -0
- package/tests/fixture/tpl-escape-1/output.js +12 -0
- package/tests/fixture/tpl-escape-2/input.js +17 -0
- package/tests/fixture/tpl-escape-2/output.js +17 -0
- package/tests/fixture/tpl-placeholder-1-as-property/input.js +17 -0
- package/tests/fixture/tpl-placeholder-1-as-property/output.js +29 -0
- package/tests/fixture/tpl-placeholder-2-as-part-of-value/input.js +21 -0
- package/tests/fixture/tpl-placeholder-2-as-part-of-value/output.js +34 -0
- package/tests/fixture/tpl-placeholder-3-as-value/input.js +17 -0
- package/tests/fixture/tpl-placeholder-3-as-value/output.js +28 -0
- package/tests/fixture/tpl-placeholder-4-as-part-of-value-in-multiple/input.js +17 -0
- package/tests/fixture/tpl-placeholder-4-as-part-of-value-in-multiple/output.js +31 -0
- package/tests/fixture/tpl-placeholder-5-values-of-multiple-properties/input.js +16 -0
- package/tests/fixture/tpl-placeholder-5-values-of-multiple-properties/output.js +31 -0
- package/tests/fixture/transform-css/input.js +176 -0
- package/tests/fixture/transform-css/output.js +8 -0
- package/tests/fixture/transform-css-complex-selector/input.js +116 -0
- package/tests/fixture/transform-css-complex-selector/output.js +8 -0
- package/tests/fixture/transform-css-global/input.js +32 -0
- package/tests/fixture/transform-css-global/output.js +8 -0
- package/tests/fixture/transform-css-media-query/input.js +24 -0
- package/tests/fixture/transform-css-media-query/output.js +8 -0
- package/tests/fixture/transform-css-normal/input.js +22 -0
- package/tests/fixture/transform-css-normal/output.js +8 -0
- package/tests/fixture/transform-css-nth-1/input.js +10 -0
- package/tests/fixture/transform-css-nth-1/output.js +8 -0
- package/tests/fixture/whitespace/input.js +12 -0
- package/tests/fixture/whitespace/output.js +12 -0
- package/tests/fixture.rs +87 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import _JSXStyle from "styled-jsx/style";
|
|
2
|
+
export default (()=><div className={"jsx-938ca197692ef624"}>
|
|
3
|
+
|
|
4
|
+
<p className={"jsx-938ca197692ef624"}>test</p>
|
|
5
|
+
|
|
6
|
+
<_JSXStyle id={"938ca197692ef624"}>{"li.jsx-938ca197692ef624:nth-child(2){color:lime}"}</_JSXStyle>
|
|
7
|
+
|
|
8
|
+
</div>);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import _JSXStyle from "styled-jsx/style";
|
|
2
|
+
export default (()=><div className={"jsx-94239b6d6b42c9b5"}>
|
|
3
|
+
|
|
4
|
+
<p className={"jsx-94239b6d6b42c9b5"}>test</p>
|
|
5
|
+
|
|
6
|
+
<p className={"jsx-94239b6d6b42c9b5"}>woot</p>
|
|
7
|
+
|
|
8
|
+
<p className={"jsx-94239b6d6b42c9b5"}>woot</p>
|
|
9
|
+
|
|
10
|
+
<_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-94239b6d6b42c9b5{color:red}"}</_JSXStyle>
|
|
11
|
+
|
|
12
|
+
</div>);
|
package/tests/fixture.rs
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
use std::path::PathBuf;
|
|
2
|
+
|
|
3
|
+
use swc_core::{
|
|
4
|
+
common::{chain, FileName, Mark, Span, DUMMY_SP},
|
|
5
|
+
ecma::{
|
|
6
|
+
parser::{EsConfig, Syntax},
|
|
7
|
+
transforms::{
|
|
8
|
+
base::resolver,
|
|
9
|
+
testing::{test_fixture, test_fixture_allowing_error},
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
use swc_plugin_styled_jsx::visitor::styled_jsx;
|
|
14
|
+
use testing::fixture;
|
|
15
|
+
|
|
16
|
+
fn syntax() -> Syntax {
|
|
17
|
+
Syntax::Es(EsConfig {
|
|
18
|
+
jsx: true,
|
|
19
|
+
..Default::default()
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#[fixture("tests/fixture/**/input.js")]
|
|
24
|
+
fn styled_jsx_fixture(input: PathBuf) {
|
|
25
|
+
let output = input.parent().unwrap().join("output.js");
|
|
26
|
+
test_fixture(
|
|
27
|
+
syntax(),
|
|
28
|
+
&|t| {
|
|
29
|
+
chain!(
|
|
30
|
+
resolver(Mark::new(), Mark::new(), false),
|
|
31
|
+
styled_jsx(
|
|
32
|
+
t.cm.clone(),
|
|
33
|
+
FileName::Real(PathBuf::from("/some-project/src/some-file.js"))
|
|
34
|
+
)
|
|
35
|
+
)
|
|
36
|
+
},
|
|
37
|
+
&input,
|
|
38
|
+
&output,
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
test_fixture(
|
|
42
|
+
syntax(),
|
|
43
|
+
&|t| {
|
|
44
|
+
// `resolver` uses `Mark` which is stored in a thread-local storage (namely
|
|
45
|
+
// swc_common::GLOBALS), and this loop will make `Mark` to be different from the
|
|
46
|
+
// invocation above.
|
|
47
|
+
//
|
|
48
|
+
// 1000 is used because in future I (kdy1) may optimize logic of resolver.
|
|
49
|
+
for _ in 0..1000 {
|
|
50
|
+
let _mark = Mark::fresh(Mark::root());
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
chain!(
|
|
54
|
+
resolver(Mark::new(), Mark::new(), false),
|
|
55
|
+
styled_jsx(
|
|
56
|
+
t.cm.clone(),
|
|
57
|
+
FileName::Real(PathBuf::from("/some-project/src/some-file.js"))
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
},
|
|
61
|
+
&input,
|
|
62
|
+
&output,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
pub struct DropSpan;
|
|
67
|
+
impl swc_core::ecma::visit::VisitMut for DropSpan {
|
|
68
|
+
fn visit_mut_span(&mut self, span: &mut Span) {
|
|
69
|
+
*span = DUMMY_SP
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#[fixture("tests/errors/**/input.js")]
|
|
74
|
+
fn styled_jsx_errors(input: PathBuf) {
|
|
75
|
+
let output = input.parent().unwrap().join("output.js");
|
|
76
|
+
let file_name = match input.to_str().unwrap().contains("ts-with-css-resolve") {
|
|
77
|
+
true => FileName::Real(PathBuf::from("/some-project/src/some-file.ts")),
|
|
78
|
+
false => FileName::Real(PathBuf::from("/some-project/src/some-file.js")),
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
test_fixture_allowing_error(
|
|
82
|
+
syntax(),
|
|
83
|
+
&|t| styled_jsx(t.cm.clone(), file_name.clone()),
|
|
84
|
+
&input,
|
|
85
|
+
&output,
|
|
86
|
+
);
|
|
87
|
+
}
|