diff --git a/src/compiler/compile/utils/__test__.ts b/src/compiler/compile/utils/__test__.ts index 7777bc6afb..3ade3dca2b 100644 --- a/src/compiler/compile/utils/__test__.ts +++ b/src/compiler/compile/utils/__test__.ts @@ -13,4 +13,10 @@ describe('get_name_from_filename', () => { it('handles Windows filenames', () => { assert.equal(get_name_from_filename('path\\to\\Widget.svelte'), 'Widget'); }); + + it('handles special characters in filenames', () => { + assert.equal(get_name_from_filename('@.svelte'), '_'); + assert.equal(get_name_from_filename('&.svelte'), '_'); + assert.equal(get_name_from_filename('~.svelte'), '_'); + }); }); diff --git a/src/compiler/compile/utils/get_name_from_filename.ts b/src/compiler/compile/utils/get_name_from_filename.ts index b05605b5ee..daa8bbb0a7 100644 --- a/src/compiler/compile/utils/get_name_from_filename.ts +++ b/src/compiler/compile/utils/get_name_from_filename.ts @@ -15,8 +15,8 @@ export default function get_name_from_filename(filename: string) { .replace(/%/g, 'u') .replace(/\.[^.]+$/, '') .replace(/[^a-zA-Z_$0-9]+/g, '_') - .replace(/^_/, '') - .replace(/_$/, '') + .replace(/^_(?=.)/, '') + .replace(/(?<=.)_$/, '') .replace(/^(\d)/, '_$1'); if (!base) {