-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
54 lines (42 loc) · 1.37 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
'use strict';
const parse = require('path').parse;
const format = require('path').format;
const extname = require('path').extname;
const compile = require('svelte').compile;
const toArray = v => Array.isArray(v) ? v : [v];
module.exports = function (fly, utils) {
fly.plugin('svelte', {every: false}, function * (files, opts) {
opts = opts || {};
if (opts.entry) {
files = toArray(opts.entry).map(parse);
}
const mapType = opts.sourceMap || false;
let data, filename, result, out = [];
for (let file of files) {
filename = format(file);
data = file.data || (yield utils.read(filename));
result = compile(data.toString(), Object.assign({}, opts, { filename }));
// write result to file data
file.data = new Buffer(result.code);
// ensure `file.base` is always a JS output
file.base = file.base.replace(extname(file.base), '.js');
// handle sourcemaps
if (mapType === 'inline') {
file.data += new Buffer(`\n//# sourceMappingURL=${result.map.toUrl()}`);
} else if (mapType === 'external') {
const mapFile = file.base + '.map';
file.data += new Buffer(`\n//# sourceMappingURL=${mapFile}`);
// push an external sourcemap to output
out.push({
base: mapFile,
data: result.map.toString(),
dir: file.dir
});
}
// keep source
out.push(file);
}
// force replace files
this._.files = out;
});
}