Skip to content

Commit ee4f136

Browse files
authored
Merge pull request #6 from ryoppippi/feature/rename-css
feature/rename css
2 parents 726fb56 + f9b0450 commit ee4f136

File tree

5 files changed

+88
-22
lines changed

5 files changed

+88
-22
lines changed

README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,41 @@ div { color: green; }
8383
</style>
8484
```
8585

86+
### Rename Style Rules by Query Selector
87+
88+
You can rename style rules by query selector.
89+
90+
For example, the following CSS and Svelte:
91+
92+
```css
93+
/* a.css */
94+
95+
div { color: red; }
96+
97+
.m0 { color: blue; }
98+
```
99+
100+
```svelte
101+
<p class="m1"> world </p>
102+
103+
<style>
104+
@import "./a.css?.m0=.m1" scoped;
105+
106+
div { color: green; }
107+
</style>
108+
```
109+
110+
will get converted into:
111+
112+
```svelte
113+
<p class="m1"> world </p>
114+
115+
<style>
116+
.m1 { color: blue; }
117+
118+
div { color: green; }
119+
</style>
120+
```
121+
86122
## License
87123
[MIT](./LICENSE)

__snapshots__/mod_test.ts.snap

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,17 @@ p {
5656
</style>
5757
\`
5858
`;
59+
60+
snapshot[`example svelte rename 1`] = `
61+
'<div class="m3">This is a paragraph</div>
62+
63+
<style>
64+
65+
.m3 {
66+
background: yellow;
67+
}
68+
69+
70+
</style>
71+
'
72+
`;

mod.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,16 @@ export function importCSSPreprocess(): PreprocessorGroup {
118118
let replaceText: string | undefined = undefined;
119119

120120
if (Object.keys(query).length > 0) {
121+
const filters = Object.entries(query).map(([key, value]) => ({
122+
selector: key,
123+
replacement: value ?? undefined,
124+
}));
125+
121126
const selectedCss: string = await cssSelectorExtract.process({
122127
css: cssText,
123-
filters: Object.keys(query),
128+
filters,
124129
});
130+
125131
replaceText = selectedCss;
126132
} else {
127133
replaceText = cssText;

mod_test.ts

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,42 @@ import { assertSnapshot } from "@std/testing/snapshot";
33
import { preprocess } from "svelte/compiler";
44
import { importCSSPreprocess } from "./mod.ts";
55

6+
async function load(_filename: string) {
7+
const filename = join(
8+
import.meta.dirname as string,
9+
_filename,
10+
);
11+
12+
const source = Deno.readTextFileSync(filename);
13+
const { code } = await preprocess(
14+
source,
15+
[importCSSPreprocess()],
16+
{ filename },
17+
);
18+
19+
return code;
20+
}
21+
622
Deno.test(
723
"example svelte main",
824
async function (t) {
9-
const filename = join(
10-
import.meta.dirname as string,
11-
"./test_project/Main.svelte",
12-
);
13-
const source = Deno.readTextFileSync(filename);
14-
const { code } = await preprocess(
15-
source,
16-
[importCSSPreprocess()],
17-
{ filename },
18-
);
19-
25+
const code = await load("./test_project/Main.svelte");
2026
await assertSnapshot(t, code);
2127
},
2228
);
29+
2330
Deno.test(
2431
"example svelte partial",
2532
async function (t) {
26-
const filename = join(
27-
import.meta.dirname as string,
28-
"./test_project/Partial.svelte",
29-
);
30-
const source = Deno.readTextFileSync(filename);
31-
const { code } = await preprocess(
32-
source,
33-
[importCSSPreprocess()],
34-
{ filename },
35-
);
33+
const code = await load("./test_project/Partial.svelte");
34+
await assertSnapshot(t, code);
35+
},
36+
);
3637

38+
Deno.test(
39+
"example svelte rename",
40+
async function (t) {
41+
const code = await load("./test_project/Rename.svelte");
3742
await assertSnapshot(t, code);
3843
},
3944
);

test_project/Rename.svelte

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<div class="m3">This is a paragraph</div>
2+
3+
<style>
4+
@import './partial.css?.m2=.m3' scoped;
5+
</style>

0 commit comments

Comments
 (0)