const fs = require('fs'); const path = require('path'); const { compile } = require('./compiler.js'); const extensions = ['.svelte', '.html']; let compileOptions = {}; function capitalise(name) { return name[0].toUpperCase() + name.slice(1); } function register(options = {}) { if (options.extensions) { extensions.forEach(deregisterExtension); options.extensions.forEach(registerExtension); } compileOptions = Object.assign({}, options); delete compileOptions.extensions; } function deregisterExtension(extension) { delete require.extensions[extension]; } function registerExtension(extension) { require.extensions[extension] = function(module, filename) { const name = path.parse(filename).name .replace(/^\d/, '_$&') .replace(/[^a-zA-Z0-9_$]/g, ''); const options = Object.assign({}, compileOptions, { filename, name: capitalise(name), generate: 'ssr', format: 'cjs' }); const { js, warnings } = compile(fs.readFileSync(filename, 'utf-8'), options); if (options.dev) { warnings.forEach(warning => { console.warn(`\nSvelte Warning in ${warning.filename}:`); console.warn(warning.message); console.warn(warning.frame); }) } return module._compile(js.code, filename); }; } registerExtension('.svelte'); registerExtension('.html'); module.exports = register;