Skip to content

Commit d5ce81f

Browse files
committed
Add support for intercepting different file extensions, other than .html, in ssr.
Proposal for sveltejs#939
1 parent 440a81a commit d5ce81f

File tree

5 files changed

+50
-10
lines changed

5 files changed

+50
-10
lines changed

src/server-side-rendering/register.js

+25-8
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,29 @@ 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(options) {
10+
const { extensions } = options;
11+
if (extensions) {
12+
_deregister('.html');
13+
extensions.forEach(_register);
14+
}
15+
}
16+
17+
function _deregister(extension) {
18+
delete require.extensions[extension];
19+
}
20+
21+
function _register(extension) {
22+
require.extensions[extension] = function(module, filename) {
23+
const {code} = compile(fs.readFileSync(filename, 'utf-8'), {
24+
filename,
25+
name: capitalise(path.basename(filename)
26+
.replace(new RegExp(`${extension.replace('.', '\\.')}$`), '')),
27+
generate: 'ssr',
28+
});
29+
30+
return module._compile(code, filename);
31+
};
32+
}
1533

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

test/server-side-rendering/index.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ function tryToReadFile(file) {
2121

2222
describe("ssr", () => {
2323
before(() => {
24-
require("../../ssr/register");
24+
require("../../ssr/register")({
25+
extensions: ['.svelte', '.html']
26+
});
2527

2628
return setupHtmlEqual();
2729
});
@@ -41,7 +43,15 @@ describe("ssr", () => {
4143
(solo ? it.only : it)(dir, () => {
4244
dir = path.resolve("test/server-side-rendering/samples", dir);
4345
try {
44-
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+
}
4555

4656
const expectedHtml = tryToReadFile(`${dir}/_expected.html`);
4757
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)