UNPKG

1.33 kBJavaScriptView Raw
1const fs = require('fs');
2const path = require('path');
3const { compile } = require('./compiler.js');
4
5const extensions = ['.svelte', '.html'];
6let compileOptions = {};
7
8function capitalise(name) {
9 return name[0].toUpperCase() + name.slice(1);
10}
11
12function register(options = {}) {
13 if (options.extensions) {
14 extensions.forEach(deregisterExtension);
15 options.extensions.forEach(registerExtension);
16 }
17
18 compileOptions = Object.assign({}, options);
19 delete compileOptions.extensions;
20}
21
22function deregisterExtension(extension) {
23 delete require.extensions[extension];
24}
25
26function registerExtension(extension) {
27 require.extensions[extension] = function(module, filename) {
28 const name = path.parse(filename).name
29 .replace(/^\d/, '_$&')
30 .replace(/[^a-zA-Z0-9_$]/g, '');
31
32 const options = Object.assign({}, compileOptions, {
33 filename,
34 name: capitalise(name),
35 generate: 'ssr',
36 format: 'cjs'
37 });
38
39 const { js, warnings } = compile(fs.readFileSync(filename, 'utf-8'), options);
40
41 if (options.dev) {
42 warnings.forEach(warning => {
43 console.warn(`\nSvelte Warning in ${warning.filename}:`);
44 console.warn(warning.message);
45 console.warn(warning.frame);
46 })
47 }
48
49 return module._compile(js.code, filename);
50 };
51}
52
53registerExtension('.svelte');
54registerExtension('.html');
55
56module.exports = register;