Skip to content

Commit d68f723

Browse files
committed
Pass component name to scope class generator
1 parent 8ebc0fe commit d68f723

File tree

5 files changed

+26
-11
lines changed

5 files changed

+26
-11
lines changed

src/compiler/compile/Component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,9 @@ export default class Component {
131131
this.stylesheet = new Stylesheet({
132132
source,
133133
ast,
134-
filename: compile_options.filename,
135134
options: {
135+
filename: compile_options.filename,
136+
component_name: name,
136137
dev: compile_options.dev,
137138
scope_class_getter: compile_options.scopeClass
138139
}

src/compiler/compile/css/Stylesheet.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -298,13 +298,18 @@ export default class Stylesheet {
298298
constructor({
299299
source,
300300
ast,
301-
filename,
302-
options: { dev, scope_class_getter = getDefaultScopeClass },
301+
options: {
302+
component_name,
303+
filename,
304+
dev,
305+
scope_class_getter = getDefaultScopeClass,
306+
},
303307
}: {
304308
source: string;
305309
ast: Ast;
306-
filename: string;
307310
options: {
311+
filename: string | undefined;
312+
component_name: string | undefined;
308313
dev: boolean;
309314
scope_class_getter: CssScopeClassGetter;
310315
};
@@ -315,7 +320,11 @@ export default class Stylesheet {
315320
this.dev = dev;
316321

317322
if (ast.css && ast.css.children.length) {
318-
this.id = scope_class_getter({ filename, hash: hash(ast.css.content.styles) });
323+
this.id = scope_class_getter({
324+
filename,
325+
name: component_name,
326+
hash: hash(ast.css.content.styles),
327+
});
319328

320329
this.has_styles = true;
321330

src/compiler/interfaces.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ export interface Warning {
104104

105105
export type ModuleFormat = 'esm' | 'cjs';
106106

107-
108107
export type CssScopeClassGetter = (args: {
109-
filename: string;
108+
name: string | undefined;
109+
filename: string | undefined;
110110
hash: string;
111111
}) => string;
112112

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
export default {
22
compileOptions: {
3-
scopeClass({ hash }) {
4-
return `sv-${hash}`;
5-
}
3+
filename: 'src/components/FooSwitcher.svelte',
4+
scopeClass({ hash, name, filename }) {
5+
const minFilename = filename
6+
.split('/')
7+
.map(i => i.charAt(0).toLowerCase())
8+
.join('');
9+
return `sv-${name}-${minFilename}-${hash}`;
10+
},
611
},
712
};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
div.sv-bzh57p{color:red}
1+
div.sv-FooSwitcher-scf-bzh57p{color:red}

0 commit comments

Comments
 (0)