Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c54b6d0

Browse files
committedNov 22, 2017
Add support for intercepting different file extensions, other than .html, in ssr.
Proposal for sveltejs#939
1 parent 60b883b commit c54b6d0

File tree

5 files changed

+44
-10
lines changed

5 files changed

+44
-10
lines changed
 

‎src/server-side-rendering/register.js

+21-8
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,25 @@ function capitalise(name) {
66
return name[0].toUpperCase() + name.slice(1);
77
}
88

9-
require.extensions['.html'] = function(module, filename) {
10-
const { code } = compile(fs.readFileSync(filename, 'utf-8'), {
11-
filename,
12-
name: capitalise(path.basename(filename).replace(/\.html$/, '')),
13-
generate: 'ssr'
14-
});
9+
export default function register(extensions) {
10+
_deregister('.html');
11+
extensions.forEach(_register);
12+
}
13+
14+
function _deregister(extension) {
15+
delete require.extensions[extension];
16+
}
17+
18+
function _register(extension) {
19+
require.extensions[extension] = function(module, filename) {
20+
const {code} = compile(fs.readFileSync(filename, 'utf-8'), {
21+
filename,
22+
name: capitalise(path.basename(filename).replace(new RegExp(`${extension}$`), '')),
23+
generate: 'ssr'
24+
});
25+
26+
return module._compile(code, filename);
27+
};
28+
}
1529

16-
return module._compile(code, filename);
17-
};
30+
_register('.html');

‎test/server-side-rendering/index.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ describe("ssr", () => {
2323
before(() => {
2424
require(process.env.COVERAGE
2525
? "../../src/server-side-rendering/register.js"
26-
: "../../ssr/register");
26+
: "../../ssr/register")(['.svelte', '.html']);
2727

2828
return setupHtmlEqual();
2929
});
@@ -43,7 +43,15 @@ describe("ssr", () => {
4343
(solo ? it.only : it)(dir, () => {
4444
dir = path.resolve("test/server-side-rendering/samples", dir);
4545
try {
46-
const component = require(`${dir}/main.html`);
46+
let component;
47+
48+
const mainHtmlFile = `${dir}/main.html`;
49+
const mainSvelteFile = `${dir}/main.svelte`;
50+
if (fs.existsSync(mainHtmlFile)) {
51+
component = require(mainHtmlFile);
52+
} else if(fs.existsSync(mainSvelteFile)) {
53+
component = require(mainSvelteFile);
54+
}
4755

4856
const expectedHtml = tryToReadFile(`${dir}/_expected.html`);
4957
const expectedCss = tryToReadFile(`${dir}/_expected.css`) || "";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<p>i am a widget</p>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<div><p>i am a widget</p></div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<div>
2+
<Widget/>
3+
</div>
4+
5+
<script>
6+
import Widget from './Widget.svelte';
7+
8+
export default {
9+
components: { Widget }
10+
};
11+
</script>

0 commit comments

Comments
 (0)
Please sign in to comment.