Skip to content

Commit

Permalink
Add support for intercepting different file extensions, other than .h…
Browse files Browse the repository at this point in the history
…tml, in ssr.

Proposal for sveltejs#939
  • Loading branch information
esarbanis committed Nov 22, 2017
1 parent 60b883b commit c54b6d0
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 10 deletions.
29 changes: 21 additions & 8 deletions src/server-side-rendering/register.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,25 @@ function capitalise(name) {
return name[0].toUpperCase() + name.slice(1);
}

require.extensions['.html'] = function(module, filename) {
const { code } = compile(fs.readFileSync(filename, 'utf-8'), {
filename,
name: capitalise(path.basename(filename).replace(/\.html$/, '')),
generate: 'ssr'
});
export default function register(extensions) {
_deregister('.html');
extensions.forEach(_register);
}

function _deregister(extension) {
delete require.extensions[extension];
}

function _register(extension) {
require.extensions[extension] = function(module, filename) {
const {code} = compile(fs.readFileSync(filename, 'utf-8'), {
filename,
name: capitalise(path.basename(filename).replace(new RegExp(`${extension}$`), '')),
generate: 'ssr'
});

return module._compile(code, filename);
};
}

return module._compile(code, filename);
};
_register('.html');
12 changes: 10 additions & 2 deletions test/server-side-rendering/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ describe("ssr", () => {
before(() => {
require(process.env.COVERAGE
? "../../src/server-side-rendering/register.js"
: "../../ssr/register");
: "../../ssr/register")(['.svelte', '.html']);

return setupHtmlEqual();
});
Expand All @@ -43,7 +43,15 @@ describe("ssr", () => {
(solo ? it.only : it)(dir, () => {
dir = path.resolve("test/server-side-rendering/samples", dir);
try {
const component = require(`${dir}/main.html`);
let component;

const mainHtmlFile = `${dir}/main.html`;
const mainSvelteFile = `${dir}/main.svelte`;
if (fs.existsSync(mainHtmlFile)) {
component = require(mainHtmlFile);
} else if(fs.existsSync(mainSvelteFile)) {
component = require(mainSvelteFile);
}

const expectedHtml = tryToReadFile(`${dir}/_expected.html`);
const expectedCss = tryToReadFile(`${dir}/_expected.css`) || "";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>i am a widget</p>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div><p>i am a widget</p></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<div>
<Widget/>
</div>

<script>
import Widget from './Widget.svelte';
export default {
components: { Widget }
};
</script>

0 comments on commit c54b6d0

Please sign in to comment.