mirror of https://github.com/sveltejs/svelte
parent
bb83eddfc6
commit
bc5a4ae688
@ -0,0 +1,77 @@
|
|||||||
|
import * as fs from 'fs';
|
||||||
|
import * as path from 'path';
|
||||||
|
import { mkdirp } from './helpers';
|
||||||
|
import * as svelte from 'svelte/compiler';
|
||||||
|
|
||||||
|
type Compile = typeof svelte.compile;
|
||||||
|
type CompileOptions = Parameters<Compile>[1];
|
||||||
|
|
||||||
|
const extensions = ['.svelte', '.html'];
|
||||||
|
let compileOptions = {};
|
||||||
|
let compile;
|
||||||
|
let folderName = 'normal';
|
||||||
|
|
||||||
|
const sveltePath = process.cwd().split('\\').join('/');
|
||||||
|
|
||||||
|
function capitalise(name: string) {
|
||||||
|
return name[0].toUpperCase() + name.slice(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setCompileOptions(_compileOptions: CompileOptions) {
|
||||||
|
compileOptions = _compileOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setCompile(_compile: Compile) {
|
||||||
|
compile = _compile;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setOutputFolderName(_folderName: string) {
|
||||||
|
folderName = _folderName;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function clearRequireCache() {
|
||||||
|
Object.keys(require.cache)
|
||||||
|
.filter(x => x.endsWith('.svelte'))
|
||||||
|
.forEach(file => {
|
||||||
|
delete require.cache[file];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function registerExtension(extension: string) {
|
||||||
|
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,
|
||||||
|
sveltePath,
|
||||||
|
name: capitalise(name),
|
||||||
|
format: 'cjs'
|
||||||
|
});
|
||||||
|
|
||||||
|
const {
|
||||||
|
js: { code }
|
||||||
|
} = compile(fs.readFileSync(filename, 'utf-8'), options);
|
||||||
|
|
||||||
|
if (!process.env.CI) {
|
||||||
|
saveGeneratedOutput(code, filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return module._compile(code, filename);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveGeneratedOutput(code: string, filename: string) {
|
||||||
|
filename = filename.split('\\').join('/');
|
||||||
|
filename = filename.replace(
|
||||||
|
/samples\/([^/]+)\/(.*)\.svelte$/,
|
||||||
|
`samples/$1/_output/${folderName}/$2.js`
|
||||||
|
);
|
||||||
|
|
||||||
|
mkdirp(path.dirname(filename));
|
||||||
|
fs.writeFileSync(filename, code, 'utf8');
|
||||||
|
}
|
||||||
|
|
||||||
|
extensions.forEach(registerExtension);
|
||||||
Loading…
Reference in new issue