Skip to content

Commit c4c3a76

Browse files
authored
Merge pull request sveltejs#107 from sveltejs/fix-filename-bug
handle files with .svelte in the middle of their filename
2 parents 85d25fb + bfa063d commit c4c3a76

File tree

7 files changed

+120
-5
lines changed

7 files changed

+120
-5
lines changed

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ module.exports = function svelte(options = {}) {
271271
});
272272

273273
if ((css || options.emitCss) && compiled.css.code) {
274-
let fname = id.replace(extension, '.css');
274+
let fname = id.replace(new RegExp(`\\${extension}$`), '.css');
275275

276276
if (options.emitCss) {
277277
const source_map_comment = `/*# sourceMappingURL=${compiled.css.map.toUrl()} */`;

test/filename-test/expected/bundle.css

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/filename-test/expected/bundle.css.map

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/filename-test/expected/bundle.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
(function (internal) {
2+
'use strict';
3+
4+
/* test/filename-test/src/foo.svelte.dev/index.svelte generated by Svelte v3.0.0-beta.5 */
5+
6+
function create_fragment(ctx) {
7+
var h1;
8+
9+
return {
10+
c() {
11+
h1 = internal.createElement("h1");
12+
h1.textContent = "Hello world!";
13+
h1.className = "svelte-bt9zrl";
14+
},
15+
16+
m(target, anchor) {
17+
internal.insert(target, h1, anchor);
18+
},
19+
20+
p: internal.noop,
21+
i: internal.noop,
22+
o: internal.noop,
23+
24+
d(detach) {
25+
if (detach) {
26+
internal.detachNode(h1);
27+
}
28+
}
29+
};
30+
}
31+
32+
class Foo extends internal.SvelteComponent {
33+
constructor(options) {
34+
super();
35+
internal.init(this, options, null, create_fragment, internal.safe_not_equal);
36+
}
37+
}
38+
39+
new Foo({
40+
target: document.body
41+
});
42+
43+
}(internal));
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<h1>Hello world!</h1>
2+
3+
<style>
4+
h1 {
5+
color: red;
6+
}
7+
</style>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import App from './index.svelte';
2+
3+
new App({
4+
target: document.body
5+
});

test/test.js

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,14 @@ describe('rollup-plugin-svelte', () => {
7373
css.write('test/sourcemap-test/dist/bundle.css');
7474
}
7575
})
76-
]
76+
],
77+
external: ['svelte/internal']
7778
});
7879

7980
await bundle.write({
8081
format: 'iife',
81-
file: 'test/sourcemap-test/dist/bundle.js'
82+
file: 'test/sourcemap-test/dist/bundle.js',
83+
globals: { 'svelte/internal': 'svelte' }
8284
});
8385

8486
const smc = await new SourceMapConsumer(css.map);
@@ -279,17 +281,60 @@ describe('rollup-plugin-svelte', () => {
279281
css.write('test/deterministic-css/dist/bundle.css');
280282
}
281283
})
282-
]
284+
],
285+
external: ['svelte/internal']
283286
});
284287

285288
await bundle.write({
286289
format: 'iife',
287-
file: 'test/deterministic-css/dist/bundle.js'
290+
file: 'test/deterministic-css/dist/bundle.js',
291+
globals: { 'svelte/internal': 'svelte' }
288292
});
289293

290294
assert.equal(
291295
fs.readFileSync('test/deterministic-css/dist/bundle.css', 'utf-8'),
292296
fs.readFileSync('test/deterministic-css/expected/bundle.css', 'utf-8')
293297
);
294298
});
299+
300+
it('handles filenames that happen to contain .svelte', async () => {
301+
sander.rimrafSync('test/filename-test/dist');
302+
sander.mkdirSync('test/filename-test/dist');
303+
304+
try {
305+
const bundle = await rollup.rollup({
306+
input: 'test/filename-test/src/foo.svelte.dev/main.js',
307+
plugins: [
308+
{
309+
resolveId: async (id) => {
310+
if (/A\.svelte/.test(id)) {
311+
await new Promise(f => setTimeout(f, 50));
312+
}
313+
}
314+
},
315+
plugin({
316+
css: value => {
317+
css = value;
318+
css.write('test/filename-test/dist/bundle.css');
319+
}
320+
})
321+
],
322+
external: ['svelte/internal']
323+
});
324+
325+
await bundle.write({
326+
format: 'iife',
327+
file: 'test/filename-test/dist/bundle.js',
328+
globals: { 'svelte/internal': 'svelte' }
329+
});
330+
} catch (err) {
331+
console.log(err);
332+
throw err;
333+
}
334+
335+
assert.equal(
336+
fs.readFileSync('test/filename-test/dist/bundle.css', 'utf-8'),
337+
fs.readFileSync('test/filename-test/expected/bundle.css', 'utf-8')
338+
);
339+
});
295340
});

0 commit comments

Comments
 (0)