mirror of https://github.com/sveltejs/svelte
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.1 KiB
48 lines
1.1 KiB
6 years ago
|
const fs = require('fs');
|
||
|
const path = require('path');
|
||
|
const { compile } = require('./compiler.js');
|
||
8 years ago
|
|
||
7 years ago
|
let compileOptions = {
|
||
|
extensions: ['.html']
|
||
|
};
|
||
7 years ago
|
|
||
7 years ago
|
function capitalise(name) {
|
||
|
return name[0].toUpperCase() + name.slice(1);
|
||
8 years ago
|
}
|
||
|
|
||
6 years ago
|
function register(options) {
|
||
7 years ago
|
if (options.extensions) {
|
||
|
compileOptions.extensions.forEach(deregisterExtension);
|
||
|
options.extensions.forEach(registerExtension);
|
||
7 years ago
|
}
|
||
7 years ago
|
|
||
7 years ago
|
compileOptions = options;
|
||
7 years ago
|
}
|
||
|
|
||
7 years ago
|
function deregisterExtension(extension) {
|
||
7 years ago
|
delete require.extensions[extension];
|
||
|
}
|
||
|
|
||
7 years ago
|
function registerExtension(extension) {
|
||
7 years ago
|
require.extensions[extension] = function(module, filename) {
|
||
7 years ago
|
const name = path.basename(filename)
|
||
|
.slice(0, -path.extname(filename).length)
|
||
|
.replace(/^\d/, '_$&')
|
||
|
.replace(/[^a-zA-Z0-9_$]/g, '');
|
||
|
|
||
7 years ago
|
const options = Object.assign({}, compileOptions, {
|
||
7 years ago
|
filename,
|
||
7 years ago
|
name: capitalise(name),
|
||
6 years ago
|
generate: 'ssr',
|
||
|
format: 'cjs'
|
||
7 years ago
|
});
|
||
|
|
||
7 years ago
|
const { js } = compile(fs.readFileSync(filename, 'utf-8'), options);
|
||
7 years ago
|
|
||
7 years ago
|
return module._compile(js.code, filename);
|
||
7 years ago
|
};
|
||
|
}
|
||
8 years ago
|
|
||
6 years ago
|
registerExtension('.html');
|
||
|
|
||
|
module.exports = register;
|